0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

知识蒸馏是一种模型压缩常见方法

WpOh_rgznai100 来源:lq 2019-07-27 07:08 次阅读

导读:知识蒸馏是一种模型压缩常见方法,模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识”蒸馏出来,传递给参数量小、学习能力弱的网络。本文对17、18年知识蒸馏的最新进展进行简评,作者把内容分成2到3部分,以下是第一部分。

蒸馏可以提供student在one-shot label上学不到的soft label信息,这些里面包含了类别间信息,以及student小网络学不到而teacher网络可以学到的特征表示‘知识’,所以一般可以提高student网络的精度。

开山之作:Hinton发表在NIPS2014文章:[1503.02531] Distilling the Knowledge in a Neural Network(https://arxiv.org/abs/1503.02531)

一. Attention Transfer

Attention Transfer , 传递teacher网络的attention信息给student网络。首先,CNN的attention一般分为两种,spatial-attention,channel-attention。本文利用的是spatial-attention.所谓spatial-attention即一种热力图,用来解码出输入图像空间区域对输出贡献大小。文章提出了两种可利用的spatial-attention,基于响应图的和基于梯度图的。

Activation-based

基于响应图(特征图),取出CNN某层输出特征图张量A,尺寸:(C, H, W).定义一个映射F:

将3D张量flat成2D.这个映射的形式有三种供选择:

1. 特征图张量各通道绝对值相加:

2. 特征图张量各通道绝对值p次幂相加:

3. 取特征图张量各通道绝对值p次幂最大值:

对以上这些映射对应的特征图统计量可视化,可以发现,attention map不仅与输入图像中预测物体有low-level上的关联,而且与预测准确度也有关系。不同映射可视化效果也有所差异。

attention transfer的目的是将teacher网络某层的这种spatial attention map传递给student网络,让student网络相应层的spatial attention map可以模仿teacher,从而达到知识蒸馏目的。teacher-student框架设计如下:

AT loss是teacher和student对应的attention map取L2 LOSS.文章也指出,p次幂取2为佳,所得attention map也要先归一化。总loss:

Gradient-based

求出loss对输入x的梯度,如果输入某像素出梯度很大,表明损失函数对该点敏感度高,Paying more attention。teacher-student loss 写成;

反传过程:

训练过程:先计算teacher,student梯度attention map和两者MSE,以及student的前传loss,然后再反向传播。文章还提出了一种加强flip不变性的方法,即对一个输入图片,求出损失对其梯度的attention map之后(即flip图片所得梯度attention map),优化两者MSE,减少损失:

二. FSP matrix

和之前知识蒸馏的文章不同之处在于之前文章往往是把teacher的某层的输出作为student的mimic目标,这篇文章将teacger网络层与层之间的关系作为student网络mimic的目标。这篇文章介绍的这种知识蒸馏的方法类似风格迁移的gram矩阵。

文章提出的描述层与层之间关系的方法FSP matrix,是某层特征图与另外一层特征图之间的偏心协方差矩阵(即没有减去均值的协方差矩阵)。如F1层特征图配置(H,W,M)M为通道数。F2层特征图配置(H,W,N)。得到一个M * N的矩阵G。G(i,j)为F1第i通道与F2第j通道的elemet-wise乘积之和:

文章中FSP矩阵的损失函数是L2loss,把网络层数分成n个block,每个block计算一个FSP,要求teacher与student的对应FSP具有相同spatial size.teacher-student结构如图:

损失函数如下:

我的对文章的感想是,文章有意思的地方在于“授之以鱼不如授之以渔”。韩国人写的文章,多少有些东方师道哲学影响。

三. DarkRank: Accelerating Deep Metric Learning via Cross Sample Similarities

这篇文章提出了一种适合度量学习(如检索,Re-id,人脸识别,图像聚类)的知识蒸馏方法。所传递的知识就是度量学习所度量的样本间相似度,用learn to rank来传递知识。所以先说一些Related works。

Learn To Rank

L2R,有监督排序算法,广泛应用于文本信息检索领域。给定一个query,学习一个模型对一组样本根据相似度排序。常用的排序学习分为三种类型:PointWise,PairWise和ListWise。PointWise将L2R看作一种回归问题,对每个样本打分,优化(如L2 loss)各样本分数与query之间的相似度。PairWise将L2R转化为二分类问题,针对一对样本,如果这对样本与query中排序一致则模型输出1,否则输出0。ListWise直接优化整组样本,可以看作对所有候选排序的分类。如 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-2007-40.pdf

(PDF) Listwise approach to learning to rank - Theory and algorithm(https://www.researchgate.net/publication/221345286_Listwise_approach_to_learning_to_rank_-_Theory_and_algorithm)

本文就是基于listwise的方法。该方法根据candidates(排列候选项)与query之间相似度对每个candidate打分,并计算概率。

其中π为一组样本索引的排序。xi为一个样本。S(x) 是模型对样本的打分。然后是熟悉的交叉熵:

也可以使用最大似然函数(MLE)

方法

以上是teacher-student框架。文章的实现teacher为Incepton-BN,student为NIN-BN。使用Imagenet的FC层之前的pretrain model,所得特征图经过GAP(全局平均池化),后接FC层,这里加入large margin softmax loss,之后L2归一化,所得特征向量称为嵌入特征,输入到排序学习模块,然后将teacher样本间相似度知识传递给student。

以上过程:

Pretrain-->GAP-->FC-->Large Margin Softmax Loss-->L2-->Verification Loss & Triplet Loss-->Score-->Cross Sample Similarities Transfer

其中,large margin softmax loss为了是类间距离增大而类内距离减小,度量学习,使得度量空间更好。直接施加在FC层的特征输出。所得特征向量经过L2归一化处理之后,加入verification loss & triplet loss,同样是度量学习目的,获得更好的嵌入特征,从而得到更好的cross sample similarities知识。

Score是一个欧式距离。取batch中一个样本q作为query,其他样本作为candidates,使用欧氏距离作为样本相似度评分函数(文章实验表明α=3,β=3效果最佳):

cross sample similarities transfer:文章在ListNet,ListMLE启发下,提出soft/hard两种传递损失函数:

其中P()按照Learn to Rank中介绍的相关方法计算。这个soft transfer是一个KL散度。

hard transfer是MLE.对比两种transfer发现soft是要考虑所有排序,而hard只需要考虑gt一种,计算效率高,效果也不差,所以使用hard transfer。当然,最直接的cross sample similiritiestransfer方法是把score直接取L2 loss。后文也做了对照。

文章在Re-id上做了KD,direct similarities transfer,Hard/soft transfer的对比实验。

对照发现,仅仅用soft transfer cross sample similarities 知识效果并没有超过KD(T=4),但是结合KD之后提高了精度,说明这种方法传递了KD不包含的知识--cross sample similarities,一种排序,并不包含每个特征量级的大小,而且不要求传递双方特征维度一致。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3171

    浏览量

    48711
  • 梯度
    +关注

    关注

    0

    文章

    30

    浏览量

    10309
  • cnn
    cnn
    +关注

    关注

    3

    文章

    351

    浏览量

    22168

原文标题:从Hinton开山之作开始,谈知识蒸馏的最新进展

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCBA测试的常见方法

    以看出整个工艺流程存在的问题,比如前期工序SMT、DIP等,存在问题,就进行调整,让整个工艺更加完善。PCBA测试常见方法,主要有以下几种: 1.手工测试手工测试就是直接依靠视觉进行测试,通过视觉与比较来
    发表于 11-08 17:19

    求大佬分享一种针对高斯类波形使用Mu-law压缩方法

    本文描述了一种针对高斯类波形使用Mu-law压缩方法——例如CPRI接口中使用的基带IQ数据。Mu-law压缩在音频应用中很常见,实现效率
    发表于 05-24 06:52

    IDC设备资产运营中四“折旧率计算”的常见方法

    原标题:IDC设备资产运营中四“折旧率计算”的常见方法数据中心基础设施设备管理中设备的折旧是固定资产的折旧。该基础设施设备或者IT设备在长期使用后仍可保持其原始物理形态,但由于芯片、电机、磁盘
    发表于 09-01 06:06

    光耦隔离的4常见方法对比

    光耦隔离的4常见方法对比
    发表于 05-31 11:06 13.2w次阅读
    光耦隔离的4<b class='flag-5'>种</b><b class='flag-5'>常见方法</b>对比

    一种新颖的三维模型压缩算法

    针对三维(3D)网格模型的存储与网络传输问题,提出一种新颖的三维模型压缩算法。该算法基于对网格模型的切片处理,主要由以下三个步骤组成:切片顶
    发表于 12-25 16:26 3次下载
    <b class='flag-5'>一种</b>新颖的三维<b class='flag-5'>模型</b><b class='flag-5'>压缩</b>算法

    微软亚洲研究院的研究员们提出了一种模型压缩的新思路

    近日,来自微软亚洲研究院自然语言计算组的研究员们提出了一种与显式地利用蒸馏损失函数来最小化教师模型与学生模型距离的知识
    的头像 发表于 11-24 09:48 1620次阅读

    深度学习:知识蒸馏的全过程

    。  0. 写在前面 有人说过:“神经网络用剩的logits不要扔,沾上鸡蛋液,裹上面包糠...” 这两天对知识蒸馏(Knowledge Distillation)萌生了点兴趣,正好写
    的头像 发表于 01-07 14:36 6058次阅读

    若干蒸馏方法之间的细节以及差异

    以往的知识蒸馏虽然可以有效的压缩模型尺寸,但很难将teacher模型的能力蒸馏
    的头像 发表于 05-12 11:39 1409次阅读

    关于快速知识蒸馏的视觉框架

    知识蒸馏框架包含了个预训练好的 teacher 模型蒸馏过程权重固定),和个待学习的 st
    的头像 发表于 08-31 10:13 871次阅读

    如何度量知识蒸馏中不同数据增强方法的好坏?

    知识蒸馏(knowledge distillation,KD)是一种通用神经网络训练方法,它使用大的teacher模型来 “教” stude
    的头像 发表于 02-25 15:41 869次阅读

    如何将ChatGPT的能力蒸馏到另个大模型

    如何将ChatGPT的能力蒸馏到另个大模型,是当前许多大模型研发的研发范式。当前许多模型都是采用chatgpt来生成微调数据,如self
    的头像 发表于 06-12 15:06 861次阅读
    如何将ChatGPT的能力<b class='flag-5'>蒸馏</b>到另<b class='flag-5'>一</b>个大<b class='flag-5'>模型</b>

    RS-485基础知识:处理空闲总线条件的两常见方法

    在本文中,我将介绍处理空闲总线条件的两常见方法,以便保证总线上的逻辑状态。
    的头像 发表于 07-04 11:30 2658次阅读
    RS-485基础<b class='flag-5'>知识</b>:处理空闲总线条件的两<b class='flag-5'>种</b><b class='flag-5'>常见方法</b>

    MCU批量生产下载程序的几种常见方法

    MCU批量生产下载程序的几种常见方法
    的头像 发表于 10-24 17:22 1533次阅读
    MCU批量生产下载程序的几种<b class='flag-5'>常见方法</b>

    任意模型都能蒸馏!华为诺亚提出异构模型知识蒸馏方法

    相比于仅使用logits的蒸馏方法,同步使用模型中间层特征进行蒸馏方法通常能取得更好的性能。然而在异构
    的头像 发表于 11-01 16:18 951次阅读
    任意<b class='flag-5'>模型</b>都能<b class='flag-5'>蒸馏</b>!华为诺亚提出异构<b class='flag-5'>模型</b>的<b class='flag-5'>知识</b><b class='flag-5'>蒸馏</b><b class='flag-5'>方法</b>

    运行Python程序的几种常见方法

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了个Python程序之后,你需要运行它以检查程序是否按照预期工作。下面是运行Python程序的几种常见方法
    的头像 发表于 11-28 15:32 2428次阅读