精华内容
下载资源
问答
  • Pytorch实现的各种知识蒸馏方法 Knowledge-Distillation-Zoo Pytorch 实现各种知识蒸馏 (KD) 方法。 本知识库是一个简单的参考资料,主要侧重于基础知识蒸馏/转移方法。 因此没有考虑许多技巧和变化,例如逐步训练...
  • 知识蒸馏 知识蒸馏(a.k.a Teacher-Student Model)旨在利用一个小模型(Student)去学习一个大模型(Teacher)中的知识, 期望小模型尽量保持大模型的性能,来减小模型部署阶段的参数量,加速模型推理速度,降低计算...
  • 知识蒸馏涵盖了主要技术,在压缩、扩展中的使用,以及许多未预料到的用例(例如攻击、NAT、传输),欢迎感兴趣的研究者下载学习。
  • 近年来,深度神经网络在工业和学术界取得了巨大的成功,特别是在视觉识别和神经语言处理方面的应用。深度学习的巨大成功,主要归功于其巨大的可扩展性,既有大规模的数据样本,也有数十亿的模型参数。
  • 对比表示蒸馏(CRD),以及最新知识蒸馏方法的基准RepDistiller此回购协议:(1)涵盖以下ICLR 2020论文的实施:“对比表示蒸馏”(CRD)。 纸,项目页。 (2)在PyTorch中对12种最先进的知识提炼方法进行了基准测试...
  • yolov3 yolov4 channel and layer pruning, Knowledge Distillation 层剪枝,通道剪枝,知识蒸馏 yolov3-channel-and-layer-pruning 本项目以ultralytics/yolov3为基础实现,根据论文Learning Efficient ...
  • 知识蒸馏工具包 该工具包使您可以使用知识提炼来压缩机器学习模型。要使用此工具包,您需要提供一个教师模型,一个学生模型,用于训练和验证的数据加载器以及一个推理管道。该工具包基于和 ,因此,教师模型和学生...
  • 这篇论文主要介绍了知识蒸馏和student-teacher学习模型。首先,我们对于KD是什么,它是如何工作的提供了一个解释和描述。然后,我们对近些年知识蒸馏方法的研究进展和典型用于视觉任务的S-T学习框架进行了一个全面的...
  • 知识蒸馏在文本方向上的应用 模型相关等内容在有具体介绍。 目录 更新日志 2020.08.28 整理代码结构,抛弃借鉴的Bert模型,增加xlnet模型,预训练xlnet模型效果较差,可以在模型基础上再进行预训练,因此添加了模型...
  • 使用Tensorflow实现的知识蒸馏方法
  • 知识蒸馏

    2020-05-06 10:57:17
    知识蒸馏(Knowledge Distillation, KD),按照字面意思,就是将某个经过训练网络的知识,蒸馏到另一个网络上去。换句话说,存在一个已经训练好的,具备知识的成熟教师网络(Teacher),用它来指导学生网络(Student...

    原文链接:https://www.yuque.com/yahei/hey-yahei/knowledge_distillation

    知识蒸馏(Knowledge Distillation, KD),按照字面意思,就是将某个经过训练网络的知识,蒸馏到另一个网络上去。换句话说,存在一个已经训练好的,具备知识的成熟教师网络(Teacher),用它来指导学生网络(Student)的学习过程。对学生网络而言则是一个模仿过程,模仿什么和如何模仿是知识蒸馏的两个核心问题。这个过程通常是通过复用教师网络权重,或者度量最终输出/隐含特征之间的差异作为辅助损失来实现的。

    简单来说,知识蒸馏包含以下三个优势:

    1. **加快训练

      **直观上理解,教师网络把学习方法教给了学生,使得学生网络能更快地收敛;

    2. **提高性能

      **教师网络通常采用更加冗余复杂、表现更好的网络,因此可以指导学生网络得到一个恰当的输出分布或是隐含特征的分布。
      直观上理解,教师网络把自己的经验作为先验知识传授给了学生,使得学生网络能够继承先辈经验,从而有更好的表现(比如选择题的“三短一长选最长”);

    3. **迁移学习

      **对于相似任务,教师网络提取的特征(尤其是浅层特征)可能有很好的指导意义,用大数据集训练过的教师网络来指导学生网络在小数据集上训练是有很大帮助的。
      直观上理解,就像是物理老师在教学生解数学题,尽管不是专门的数学老师,但由于物理中频繁使用到数学工具,因此经验丰富的物理老师依旧拥有较高的数学水平,可能就有资格教育学生解答数学问题。

    知识蒸馏的初步思想最早于《Model compression (2006)》一文提出,直到《Do Deep Nets Really Need to be Deep? (NIPS2014)》才有比较成熟的知识蒸馏思路提出,次年Hinton大神终于在《Distilling the Knowledge in a Neural Network (2015)》给这类技术冠上了“知识蒸馏”这样一个名字并一直沿用至今。

    早期知识蒸馏只是在模仿标签也即模型最终输出的一个分布,后来引入了隐含特征的模仿,如今两者通常是结合使用的。分类任务上标签容易模仿,但目标检测、语义分割等更高级的任务在模仿的时候就不得不多动点心思,目前通常是用教师网络来生成一些指导意义的“伪标签”,然后和真实标签分别与预测结果计算损失,然后加权求和作为总体损失来实现。作为模型压缩的一种形式,知识蒸馏也常常跟其他模型压缩手段如裁剪、量化进行“联动”,最简单的一种形式即是将压缩前、压缩后的网络分别视作教师网络、学生网络来开展恢复训练。

    参考:

    模仿标签

    模仿标签可以分为两种,一种是学生纯粹的模仿老师,我称之为“单纯的模仿”;另一种是学生在模仿老师的同时,还在自己思考如何更好的解题,我称之为“有思考的模仿”。
    用书法打个比方,前者就只是单纯的临摹,模仿名家的字体,后者则是在临摹的同时摸索出一套适合自己的书法,最终甚至自成一派。

    单纯的模仿

    Do Deep Nets Really Need to be Deep? (NIPS2014)》设计了一种Mimic Learning(请记住mimic这个词,它一直被后续的知识蒸馏论文所沿用),它在不使用真实标签的情况下,用教师网络的最终输出来直接指导学生网络的学习。此时loss即为
    l o s s = D i s t a n c e ( y T , y S ) loss = Distance(y_T, y_S) loss=Distance(yT,yS)
    其中,
    y T , y S y_T,y_S yT,yS分别是教师网络和学生网络的输出;
    D i s t a n c e ( ⋅ ) Distance(\cdot) Distance()可以是任意的距离函数,比如L1、L2、KL等;
    论文在实验中指出L2应该是最好的距离函数,从后续的论文中我们也可以看到,大多数情况下都默认地使用了L2这个距离函数进行度量。

    这篇论文也通过实验证明了“浅网络的知识容量并不比深网络小”这样一个核心论点,作者训练了一个较深的网络作为教师网络,然后又设计了一个较浅但参数规模与教师网络相近的学生网络,用教师网络的输出作为训练用的标签指导学生网络训练(注意这里没有使用真实标签),训练出来的学生网络并不亚于教师网络的表现。

    有思考的模仿

    完全模仿教师网络的输出并不那么合理,Hinton大神在《Distilling the Knowledge in a Neural Network (2015)》中提出同时利用真实标签和教师网络输出的软标签进行训练的一种训练形式,并从此给这一类方法冠上了“知识蒸馏”的名字。这种方式简单有效,一直被广泛使用,常见的深度学习框架中的softmax函数也能看到相应的参数设置,因此使用起来非常方便。

    具体来说,
    L t o t a l = ( 1 − λ ) L h a r d + λ L s o f t = ( 1 − λ ) L c e ( y S , y G ) + λ L c e ( y S , y T ) = ( 1 − λ ) L c e ( s o f t m a x ( z S ) , y G ) + λ L c e ( s o f t m a x ( z S / T ) , s o f t m a x ( z T / T ) ) \begin{aligned} L_{total} &= (1-\lambda)L_{hard} &&+ \lambda L_{soft} \\ &= (1-\lambda)L_{ce}(y_S, y_G) &&+ \lambda L_{ce}(y_S, y_T) \\ &= (1-\lambda)L_{ce}(softmax(z_S), y_G) &&+ \lambda L_{ce}(softmax(z_S/T), softmax(z_T/T)) \end{aligned} Ltotal=(1λ)Lhard=(1λ)Lce(yS,yG)=(1λ)Lce(softmax(zS),yG)+λLsoft+λLce(yS,yT)+λLce(softmax(zS/T),softmax(zT/T))
    损失包含硬标签损失和软标签损失两部分,
    硬标签即真实标签,其损失即传统的分类损失;
    软标签则是教师网络的softmax输出标签,这里做softmax之前还对特征值分别除以温度 T T T,它代表了对标签的软化程度,通常取 T = 1 T=1 T=1 T T T越大,标签的概率分布就越软。
    同时引入一个权重 λ \lambda λ来权衡两个标签损失的重要程度, λ \lambda λ越大对老师的信赖程度就越高,通常训练初期可以给一个比较大 λ \lambda λ,而后期逐渐降低,直观点理解就是“师父领进门,修行看个人”啦~
    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjA2NjQxNTMtY2QxN2VkZGUtYzgwOC00NGNmLThiNjUtYmZhYjY5YTMwYTAxLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=336&margin=[object Object]&name=image.png&originHeight=564&originWidth=1249&size=313661&status=done&style=none&width=743)
    (KD计算示意,图源GJCfight

    模仿隐含特征

    除了模仿最终结果,模仿一些隐含的中间结果也是有价值的。该思路最早是由FitNets提出,而且称之为“暗示训练(Hint Traing)”,在原先模仿标签的知识蒸馏的基础上又提出模仿隐含特征的知识蒸馏形式,当然两者不是对立了,往往我们都是将两者结合起来设计损失,在模仿隐含特征的同时,也对最终标签进行模仿。因为涉及隐含特征的学习,因此也有机会构造由浅入深、由易到难的学习策略,也即我们常说的课程学习(Curriculum Learning)。

    隐含特征就比标签有意思多了,毕竟它在定义上就非常抽象模糊,有相当大的发挥空间。

    • 最粗暴的做法是让学生网络直接模仿教师网络的中间结果
      这就有点像学生拿着参考答案,他除了看到最终答案之外,还能看到解题的一些中间结果;
    • 优雅点的做法可以在中间特征的基础上构造出更有语义的特征(比如注意力)
      以注意力为例,就像是学生的参考答案上还给一些重要的中间结果加了粗体;
    • 还有的甚至建立跨层的联系,直观点理解就是把解题思路作为隐含特征。
      就像是参考答案上还写着详细的解析,引导学生一步步理解解题的思路

    模仿中间结果

    论文:《FitNets: Hints for Thin Deep Nets (ICLR2015)
    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjQwMzU0NDYtYTQ4ZmU2NzgtZmIzZS00YzVkLThjYTMtYTcxYTBiODJkNmE3LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=248&margin=[object Object]&name=image.png&originHeight=496&originWidth=1752&size=106499&status=done&style=none&width=876)

    暗示训练(Hint Training)指的是建立教师网络和学生网络之间的隐含联系,比如取教师网络、学生网络的某一层输出特征图来建立联系,通过约束迫使学生网络模仿教师网络产生类似的隐含特征。为了配对特征图的尺寸,可以引入一个简单的回归模块,将特征图Resize到教师网络隐含特征图相同的shape上去,方便计算损失(如L2损失)。暗示训练有明显的正则化效果,而且模仿的特征图越深,学生网络的训练自由度就越低,正则化力度就越强。

    论文提出的知识蒸馏分两个阶段,第一阶段为暗示训练,只训练部分网络结构,让学生网络先去模仿如何产生相近的隐含特征;第二阶段则为普通的、对标签的模仿。通常用浅宽的易训练网络来指导深窄的难训练网络学习,但随着BN层的普及,深窄网络其实不像以前那么难训练了,这篇论文更大的价值是为知识蒸馏开创了模仿隐含特征这样一种思路。

    模仿注意力

    论文:《Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer (ICLR2017)
    这里的注意力主要是空间上的注意力,采用两种注意力图(激活注意力图和梯度注意力图),并建立教师网络与学生网络直接注意力图的约束,鼓励学生网络模仿教师网络在提取特征时的注意力分布和对输入的敏感程度(梯度)的分布。

    激活注意力图

    为了得到激活注意力图,需要找到一种聚合函数,使得特征图能沿着通道方向拍扁
    F : R C × H × W → R H × W \mathcal{F}: R^{C \times H \times W} \rightarrow R^{H \times W} F:RC×H×WRH×W
    有三种简单的聚合方案:

    1. 绝对值之和
      $$F_{\mathrm{sum}}(A)=\sum_{i=1}^{C}\left|A_{i}\right| \$$
    2. 绝对值的p次方之和
      $$F_{\mathrm{sum}}{p}(A)=\sum_{i=1}{C}\left|A_{i}\right|^{p}
      \$$
    3. 最大值的p次方之和
      $$F_{\max }^{p}(A)=\max {i=1, C}\left|A{i}\right|^{p} \$$

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjUyMDgyMzAtMGY0MDllN2MtYWQxZS00Nzk5LWEzZTYtODQ4MWJhYmUxNTZjLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=392&margin=[object Object]&name=image.png&originHeight=966&originWidth=1838&size=2265901&status=done&style=none&width=746)
    从上图不同列的激活注意力图可以看出,随着p的 F s u m p F_{\mathrm{sum}}^{p} Fsump将越来越关注注意力更大的区域而抑制注意力不那么强的区域, F max ⁡ F_{\max } Fmax则干脆只关心注意力最强的通道;
    从上图不同行的激活注意力图可以看出,表现更好的网络的激活注意力图更加准确、细致地落在核心目标区域上。

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjU0ODM1MDUtZTA0MDViZGItYjhlZi00NTFkLTgwNGUtMmM2ZWFhNGU2MGI5LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=183&margin=[object Object]&name=image.png&originHeight=366&originWidth=1334&size=936102&status=done&style=none&width=667)
    (不同层级的注意力分布,以 F s u m F_{\mathrm{sum}} Fsum为例)
    再看看不同层级的注意力分布,可以看到浅层更关注细碎的信息,中间层则开始关注一些局部信息(比如眼睛),而到了深层则关注一整块区域的整体信息。

    从上边两图可以看出,激活注意力图这一隐含特征是有指导意义的,因此可以设计出类似如下的模仿注意力的训练框架(注意注意力图的尺寸要保持一致,如果不一致可以考虑一些插值的手段)。
    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjU3MzUzODMtZDFjODY2ZTgtOTk2MS00ZmM1LTg5ZDMtMjQ0YWRmODVhYjdmLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=243&margin=[object Object]&name=image.png&originHeight=486&originWidth=1818&size=75014&status=done&style=none&width=909)

    梯度注意力图

    除了激活注意力图,梯度注意力图也有较强的指导意义,你可以把它看作是针对输入的一张敏感度图。引入梯度注意力图的知识蒸馏训练,需要多做一次反向传播。

    第一次反向传播先采集教师网络、学生网络分别在网络输入 x x x上的梯度信息
    J S = ∂ ∂ x L ( W S , x ) J T = ∂ ∂ x L ( W T , x ) J_{S}=\frac{\partial}{\partial x} \mathcal{L}\left(\mathbf{W}_{\mathbf{S}}, x\right) \\ J_{T}=\frac{\partial}{\partial x} \mathcal{L}\left(\mathbf{W}_{\mathbf{T}}, x\right) JS=xL(WS,x)JT=xL(WT,x)
    然后度量梯度信息上的距离,来作为辅助损失计算到总损失中去
    L A T ( W S , W T , x ) = L ( W S , x ) + β 2 ∥ J S − J T ∥ 2 \mathcal{L}_{A T}\left(\mathbf{W}_{\mathbf{S}}, \mathbf{W}_{\mathbf{T}}, x\right)=\mathcal{L}\left(\mathbf{W}_{\mathbf{S}}, x\right)+\frac{\beta}{2}\left\|J_{S}-J_{T}\right\|_{2} LAT(WS,WT,x)=L(WS,x)+2βJSJT2
    用新的损失进行反向传播并更新参数。

    除此之外,还可以额外引入一个“翻转不变性”的约束,来作为一种正则化策略
    L s y m ( W , x ) = L ( W , x ) + β 2 ∥ ∂ ∂ x L ( W , x ) − flip ⁡ ( ∂ ∂ x L ( W , flip ⁡ ( x ) ) ) ∥ 2 \mathcal{L}_{s y m}(\mathbf{W}, x)=\mathcal{L}(\mathbf{W}, x)+\frac{\beta}{2}\left\|\frac{\partial}{\partial x} \mathcal{L}(\mathbf{W}, x)-\operatorname{flip}\left(\frac{\partial}{\partial x} \mathcal{L}(\mathbf{W}, \operatorname{flip}(x))\right)\right\|_{2} Lsym(W,x)=L(W,x)+2βxL(W,x)flip(xL(W,flip(x)))2
    其中 f l i p ( x ) flip(x) flip(x)是对输入 x x x进行水平翻转/垂直翻转的结果。

    模仿思路

    论文:《A Gift From Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning (CVPR2017)

    除了模仿某个中间位置的隐含特征之外,还可以建立跨层的联系,模仿某一个部分的“解题思路”,取网络的某一部分(若干卷积层堆叠),用其输入和输出融合构造出矩阵作为“解题思路”,然后计算教师网络与学生网络之间“解题思路”的L2损失作为辅助损失

    首先定义第 i i i层到第 j j j层之间的一个“解题思路”FSP(Flow of Solution Process)为
    G i , j ( x ; W ) = ∑ s = 1 h ∑ t = 1 w F s , t , i 1 ( x ; W ) × F s , t , j 2 ( x ; W ) h × w G_{i, j}(x ; W)=\sum_{s=1}^{h} \sum_{t=1}^{w} \frac{F_{s, t, i}^{1}(x ; W) \times F_{s, t, j}^{2}(x ; W)}{h \times w} Gi,j(x;W)=s=1ht=1wh×wFs,t,i1(x;W)×Fs,t,j2(x;W)
    其中,
    F 1 ∈ R h × w × m F^{1} \in \mathbb{R}^{h \times w \times m} F1Rh×w×m是第 i i i层的输出特征图;
    F 2 ∈ R h × w × n F^{2} \in \mathbb{R}^{h \times w \times n} F2Rh×w×n是第 j j j层的输出特征图;
    注意两张特征图的分辨率是一致的,如果不一致可以考虑插值;
    那么可以得到一个FSP矩阵 G ∈ R m × n G \in \mathbb{R}^{m \times n} GRm×n,它就代表了从第 i + 1 i+1 i+1层到第 j j j层之间的一个“解题思路”。

    通过建立学生网络和教师网络之间,隐含的“解题思路”的约束,就可以让学生网络在训练的过程中去模仿教师网络的思路。
    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2Njc1MjE3NDQtZjljMDU3NTEtMDU5Ny00MzhlLTg4NzktZjRjN2E2MGM1NWEyLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=504&margin=[object Object]&name=image.png&originHeight=1008&originWidth=2218&size=242626&status=done&style=none&width=1109)

    权重复用

    论文:《Net2Net: Accelerating Learning via Knowledge Transfer (ICLR2016)

    复用预训练网络的权重是CNN中非常常用的做法,我们经常会用在ImageNet上预训练过的分类网络来作为backbone,然后在VOC、COCO等目标检测或是语义分割的更高级任务上进行进一步的训练。

    但复用权重要求模型结构是一致的,而该论文提出一种部分复用和映射的方法,从而完成浅窄网络往深宽网络的一个权重复用方案;这其实也不算知识蒸馏,因为是往大网络扩展,不大可能用小网络来指导大网络的学习,就跟论文的标题一样,它其实是一种知识的迁移,甚至可以按照实际的业务需求扩大模型容量来做进一步的学习,达成一种终身学习(Lifelong Learning)的训练模式。

    这种权重复用的训练下,可以达到从头训练相同的表现,但训练速度明显加快(图表就不贴啦,感兴趣的话去看原文)

    宽度扩展

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2Njc5NDc5NjAtZjM3ZjJmZWItMmUzMy00M2EyLWIzYTctNTQxYzBjYThiNWUyLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=246&margin=[object Object]&name=image.png&originHeight=688&originWidth=1334&size=114201&status=done&style=none&width=477)
    考虑一个全连接网络,为了给隐含层增加一个神经元,我们可以从已有神经元中随机复制权重(比如图中h[3]就复制了h[2]的权重c和d),然后对复制和被复制的神经元的输出进行简单的缩放(实际是上对下一层神经元权重的一个缩放),来控制下一层神经元的数值尺度。
    用数学语言可以描述为
    g ( j ) = { j j ≤ n  random sample from  { 1 , 2 , ⋯ n } j > n g(j)=\left\{\begin{array}{ll} j & j \leq n \\ \text { random sample from }\{1,2, \cdots n\} & j>n \end{array}\right. g(j)={j random sample from {1,2,n}jnj>n
    U k , j ( i ) = W k , g ( j ) ( i ) , U j , h ( i + 1 ) = 1 ∣ { x ∣ g ( x ) = g ( j ) } ∣ W g ( j ) , h ( i + 1 ) \boldsymbol{U}_{k, j}^{(i)}=\boldsymbol{W}_{k, g(j)}^{(i)}, \quad \boldsymbol{U}_{j, h}^{(i+1)}=\frac{1}{|\{x | g(x)=g(j)\}|} \boldsymbol{W}_{g(j), h}^{(i+1)} Uk,j(i)=Wk,g(j)(i),Uj,h(i+1)={xg(x)=g(j)}1Wg(j),h(i+1)

    推广到卷积网络,则是通过增加卷积层的滤波器来增加宽度,滤波器的权重也是从已有滤波器中随机复制,然后为后继卷积层插入相应的卷积核并做出恰当的缩放操作来控制数值尺度。(有时间的话可以画张图放在这)

    深度扩展

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg2NjgzODc3MjQtNzExYzgyNWYtNGI3ZC00NGE0LWFjMTQtYmRhYzBmZjY4OWJkLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=125&margin=[object Object]&name=image.png&originHeight=250&originWidth=1292&size=109063&status=done&style=none&width=646)
    深度扩展则比较粗暴。
    考虑一个全链接网络,可以加入一层新的全连接层(其宽度必须是上一层保持一致),其权重初始化为单位矩阵,也就是说将上一层各个神经元的输出作为本层对应神经元的输出。
    扩展到卷积网络,则将新增的卷积层卷积核都初始化为中心为1,其他为0的形式即可。

    KD目标检测

    论文:《Distilling Object Detectors With Fine-Grained Feature Imitation (CVPR2019)
    前述的知识蒸馏都是在分类任务上进行研究的,其实多数知识蒸馏的研究都是如此,但也不乏有些面向高级任务(如检测、分割)的论文,考虑到这些任务通常更有实际意义,他们在工程价值上可能会高些。

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg3MzAxMzUwOTEtY2RlNDkxMDktMTIyNC00N2E4LWE3YmMtNzUzYmFhNDU1M2I2LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=368&margin=[object Object]&name=image.png&originHeight=405&originWidth=691&size=72500&status=done&style=none&width=625)
    作者并不是直接模仿目标检测的输出,而是模仿其中的隐含特征,但这个特征非常接近输出,也就是分类/回归分支前的最后一个特征图。同时也模仿FitNets的Hint Training,安排了一个简单的适应层进行Feature Adaptation,目的是为了将学生网络的特征图shape映射到跟教师网络相匹配的shape上,方便后续的距离计算,并且通过实验指出即使shape相同也不建议直接计算距离(效果变差),留下一个适应层进行缓冲会比较好。

    考虑到目标检测中存在大量的负样本,让学生网络学习去模仿负样本的分类似乎不大行,所以我们需要对样本做一下筛选。

    1. 用真实框跟特征图上所有锚框计算IoU,得到一张 W × H × K W \times H \times K W×H×K的IoU图 m m m,其中 W , H , K W,H,K W,H,K分别是特征图的宽、高和每组分配的锚框数量;
    2. 用阈值 F = ψ ∗ m a x ( m ) F=\psi * max(m) F=ψmax(m)去筛选空间上的锚框,得到一张 W × H W \times H W×H掩膜 I I I
      $$I_{ij} = \begin{cases}
      1, & \exists k, m_{ijk} > F \
      0, & \text{otherwise}
      \end{cases} \ 其 中 , 其中, \psi 是 手 工 设 置 的 超 参 , 通 常 取 是手工设置的超参,通常取 \psi=0.5$$。
      这里的思路跟裁剪的sensitivity有点像,因为IoU的变化范围比较大,手工挑选一个合适的常数阈值比较困难,所以通过设置一个对IoU尺度敏感的阈值在调参上会比较方便

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg3MzE3MDM0MzYtMGI0M2EwOWEtN2YzMC00N2FhLThhNWMtNjFjNzE1N2FmZjY4LnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=208&margin=[object Object]&name=image.png&originHeight=415&originWidth=1468&size=1125843&status=done&style=none&width=734)
    (锚框筛选示意)
    上图中,(a)是真实框,(b)©(d)分别是 ψ = 0.2 , 0.5 , 0.8 \psi=0.2,0.5,0.8 ψ=0.2,0.5,0.8的筛选锚框,(e)(f)分别是 F = 0.5 , 0.8 F=0.5,0.8 F=0.5,0.8的筛选锚框。

    记学生网络准备去模仿的特征图为 s s s,教师网络中被模仿的特征图为 t t t,学生网络新增的适应层为 f a d a p ( ⋅ ) f_{adap}(\cdot) fadap(),那么我们可以用L2距离构造出蒸馏的辅助损失
    L i m i t a t i o n = 1 2 N p ∑ i = 1 W ∑ j = 1 H ∑ c = 1 C I i j ( f a d a p ( s ) i j c − t i j c ) 2 L_{i m i t a t i o n}=\frac{1}{2 N_{p}} \sum_{i=1}^{W} \sum_{j=1}^{H} \sum_{c=1}^{C} I_{i j}\left(f_{\mathrm{adap}}(s)_{i j c}-t_{i j c}\right)^{2} Limitation=2Np1i=1Wj=1Hc=1CIij(fadap(s)ijctijc)2
    其中, N p = ∑ i = 1 W ∑ j = 1 H I i j N_{p}=\sum_{i=1}^{W} \sum_{j=1}^{H} I_{i j} Np=i=1Wj=1HIij,也即学生网络中“响应”的锚框组数。
    与主损失加权得到总的一个损失
    L = L g t + λ L i m i t a t i o n L=L_{g t}+\lambda L_{i m i t a t i o n} L=Lgt+λLimitation

    ![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvNTA0MzI4LzE1ODg3MzE4MzYzMDctODExZWRiMGUtMzk4My00MTI0LWI2OTQtMWFmY2Q2YmVjOGJlLnBuZw?x-oss-process=image/format,png#align=left&display=inline&height=409&margin=[object Object]&name=image.png&originHeight=820&originWidth=1496&size=283418&status=done&style=none&width=746)
    (实验结果,其中res101h代表在res101的基础上网络宽度减半,*-I表示运用了本文提出的方法)

    展开全文
  • 它包括来自NLP和CV领域的各种蒸馏技术,并提供了易于使用的蒸馏框架,使用户可以快速试验最新的蒸馏方法,以压缩模型的代价相对较小。性能,提高推理速度并减少内存使用量。 通过或检查我们的论文。 新闻 2020年11...
  • 真棒知识蒸馏:真棒知识蒸馏。分类整理的知识蒸馏论文(2014-2020)
  • 该代码主要针对我们的ACL 2020论文:该代码主要用于基于进行大量修改,该框架用于通过知识蒸馏来训练统一的多语言模型。 在此仓库中,我们包含以下属性: 任务 单语 多种语言 微调 知识蒸馏 笔记 序列标记 :check_...
  • 蒸馏器动物园 安装 设置新的conda环境: conda create -n distiller python=3.7 安装pytorch 安装mmdetection-distiller git clone https://github.com/pppppM/mmdetection-distiller.git cd mmdetection-...
  • 基于知识蒸馏的人类启发式多智能体导航 这是代码库,用于支持论文《使用知识蒸馏的人类启发式多代理导航》 。 摘要-尽管在多智能体导航领域取得了重大进步,但智能体仍然缺乏人类在多智能体环境中展现出的先进性和...
  • 通过在线知识蒸馏提炼出强大的学生模型() 。 我们为在线知识提炼提出的FFSD的框架。 首先,学生1和学生2以协作的方式相互学习。 然后,通过将学生1的注意力转移到学生2上,我们可以增强学生之间的多样性。 最后,...
  • 模型压缩一-知识蒸馏

    千次阅读 2020-10-11 20:35:28
    一、知识蒸馏简介 知识蒸馏是模型压缩方法中的一个大类,是一种基于“教师-学生网络(teacher-student-network)思想”的训练方法, 其主要思想是拟合教师模型(teacher-model)的泛化性等(如输出概率、中间层特征...

    一、知识蒸馏简介

            知识蒸馏是模型压缩方法中的一个大类,是一种基于“教师-学生网络(teacher-student-network)思想”的训练方法, 其主要思想是拟合教师模型(teacher-model)的泛化性等(如输出概率、中间层特征、激活边界等),而不是一个简简单单的0-1类别标签。

           这一技术的理论来自于2015年Hinton发表的一篇论文: Distilling the Knowledge in a Neural Network。知识蒸馏,英文名为Knowledge Distillation, 简称KD,顾名思义,就是将已经训练好的模型包含的知识(“Knowledge”),蒸馏(“Distill”)提取到另一个模型里面去(通常是简单的模型、学生模型)。

            知识蒸馏也可以看成是迁移学习的特例,工业界应用得比较广泛的是将BERT模型蒸馏到较少层的transformer, 或者LSTM、CNN等普通模型。BERT模型由于其强大的特征抽取能力,在很多NLP任务上能够达到soft-state-art的效果。 尽管如此,BERT还是有着超参数量大、占用空间大、占用计算资源大、推理时间长等缺点,即便是大公司等也不能随心所欲地使用。 因此,一个简单的想法便是通过BERT等获取一个简单、但性能更好地轻量级算法模型,知识蒸馏无疑是一种有效的方法。 巨大的BERT在很多业务场景下的线上inference都存在很大的性能瓶颈,于是就有了知识蒸馏的用武之地。

            常见的使用方式是离线fintune BERT模型,训练一个离线指标明显优于小模型的模型, 然后用fintue好的BERT模型作为指导蒸馏一个小的模型,也可以看做是一个muti-task的训练任务。 最后上线用小模型即可,从而获得性能和效果双赢的局面。

     

     

    二、知识蒸馏开山之作

            知识蒸馏的开山之作是Hinton于2015年提出的论文: Distilling the Knowledge in a Neural Network,旨在把一个大模型或者多个模型ensemble学到的知识迁移到另一个轻量级单模型上,方便部署。简单的说就是用新的小模型去学习大模型的预测结果,改变一下目标函数。

            为什么蒸馏可以work?好模型的目标不是拟合训练数据,而是学习如何泛化到新的数据。所以蒸馏的目标是让student学习到teacher的泛化能力,理论上得到的结果会比单纯拟合训练数据的student要好。另外,对于分类任务,如果soft targets的熵比hard targets高,那显然student会学习到更多的信息。

            其soft targets学习(重点是温度)的主要公式(即softmax前除以一个整数T【一般在1-100间】)是:

                               

                              

                              

            注意:      

                    1. 很简单的方法,即预测标签概率 除以 T,真实标签概率 除以 T,最终loss结果需要 乘以 T的平方。

                    2. 自己实验中,更适用于半监督学习,以及均衡的、简单的分类问题等。

     

    三、知识蒸馏思维导图

            模型蒸馏的开山之作,其基本思路是让student-model学习teacher-model的输出概率分布,其主要是对输出目标的学习(如分类类别的概率分布)。

           之后,陆续出现从teacher-model的中间层学习其特征feature的论文,主要是图像吧,这样可以学习到更加丰富的信息。

           接着,出现了从teachea-model的激活边界进行学习的论文。

           再然后,出现了student-model自学的论文,主要还是对数据集的操作,batch-size内数据的综合,数据增强等。

           最后一个,是利用对抗神经网络的经验,将student模型看成生成模型,teachea-model看成判断模型......

           借用别人的一张思维导图说明:

     

    四、BERT模型蒸馏到简单网络、Tranformers

            BERT蒸馏一般有两种方式,一种是BERT蒸馏到较少网络层的transformers,另外一种是BERT蒸馏到TextCNN、TextRNN等简单网络。

            这里我们介绍一篇BERT蒸馏到BILSTM的论文:

                    Distilling Task-Specific Knowledge from BERT into Simple Neural Networks

                    论文的关键点在于:

                           1. 适用于少量标注、大批量无标签的数据集,也就是冷启动问题;

                           2. 同知识蒸馏的开山之作,该论文还是两阶段蒸馏;

                           3. 损失函数使用的是常规loss + 均方误差loss;

                           4. 使用[MASK]、N-GRAM等数据增强技术等。

              再介绍一篇BERT蒸馏到少层的Transformer的论文:

                     TINYBERT: DISTILLING BERT FOR NATURAL LANGUAGE UNDERSTANDING

                     论文的关键点在于:

                             1、还是两阶段模型蒸馏,teacher-model到student-model层数有一个映射;

                             2、基于注意力的蒸馏和基于隐状态的蒸馏、基于Embedding的蒸馏;

                             3、MSE-loss损失函数,3个loss相加

                自己实验效果:

                        1. 某任务二分类(有提升):

                                最终 (21 epoch) : mean-P    R       F

                                原始text-cnn    0.961     0.960   0.96

                                蒸馏text-cnn    0.97      0.97    0.97

                                原始Bert-base   0.98      0.98    0.98

                          2. 某任务11分类(长尾问题,效果不好)

                               最终 (21 epoch) :mean-P    R       F

                               原始text-cnn   0.901     0.872    0.879

                               蒸馏text-cnn   0.713     0.766    0.738

                          3. 某任务90分类(长尾问题,效果不好)

                               最终(21 epoch) mean-P    R       F

                               原始text-cnn   0.819     0.8      0.809

                               蒸馏text-cnn   0.696     0.593    0.64  (样本最多的类别不能拟合)

                               原生Bert-base 0.85      0.842    0.846

                         总结:BERT蒸馏到Text-CNN,Bi-LSTM等简单模型,并不适合完全有监督分类的任务,

                                    最好还是BERT蒸馏到较少层数的transforerm比较好。

     

    五、TextBrewer

    5.1 概述:

            TextBrewer科大讯飞开源的一个基于PyTorch的、为实现NLP中的**知识蒸馏**任务而设计的工具包,融合并改进了NLP和CV中的多种知识蒸馏技术,提供便捷快速的知识蒸馏框架,用于以较低的性能损失压缩神经网络模型的大小,提升模型的推理速度,减少内存占用。

    5.2 主要特点:

    **TextBrewer** 为NLP中的知识蒸馏任务设计,融合了多种知识蒸馏技术,提供方便快捷的知识蒸馏框架,主要特点有:

    * 模型无关:适用于多种模型结构(主要面向**Transfomer**结构)

    * 方便灵活:可自由组合多种蒸馏方法;可方便增加自定义损失等模块

    * 非侵入式:无需对教师与学生模型本身结构进行修改

    * 支持典型的NLP任务:文本分类、阅读理解、序列标注等

    5.3 支持的知识蒸馏技术:

    * 软标签与硬标签混合训练

    * 动态损失权重调整与蒸馏温度调整

    * 多种蒸馏损失函数: hidden states MSE, attention-based loss, neuron selectivity transfer

    * 任意构建中间层特征匹配方案

    * 多教师知识蒸馏

     

    5.4 自己实验:

    某任务90分类数据集,ERNIE【一次推理0.1s】蒸馏到3层transofrmers【一次推理0.02s】

    Ernie转Transformer(T3) 蒸馏实验(teacher-epochs-21, student-epochs-48)

    lr    batch_size     loss     T    dropout  Mean-P    R       F

    ernie:

    5e-5    16         bce     1      0.1    0.856    0.871   0.863

    蒸馏:

    5e-5    16        0.9-kl    1     0.1     0.818    0.818    0.818  (3 - layer)

    原生transformers-3:

    5e-5    16         bce     1      0.1    0.741    0.768    0.754   (3 - layer)

    原始text-cnn  

    1e-3     16         bce                      0.819     0.8      0.809

     

    总结:TextBrewer还可以,BERT蒸馏到较少层数的transforerm对于简单的全监督分类还是有一定效果的。

     

     

    希望对你有所帮助!

     

     

     

     

     

     

     

     

    展开全文
  • 万字综述 | 一文读懂知识蒸馏

    千次阅读 多人点赞 2020-12-20 11:35:49
    知识蒸馏综述摘要知识蒸馏简介知识Response-Based KnowledgeFeature-Based KnowledgeRelation-Based Knowledge蒸馏离线蒸馏(Offline Distillation)在线蒸馏(Online Distillation)自我蒸馏(Self-Distillation)...

    本文梳理了用于简单分类任务的各种知识蒸馏(KD)策略,并实现了一系列经典的知识蒸馏技术。

    • 知识蒸馏论文综述: Knowledge Distillation: A Survey
    • 知识蒸馏论文分类: https://github.com/FLHonker/Awesome-Knowledge-Distillation

    摘要

    近年来,深度神经网络在工业界和学术界都取得了成功,尤其是在计算机视觉任务方面。深度学习的巨大成功主要归因于其可扩展性以编码大规模数据并操纵数十亿个模型参数。但是,将这些繁琐的深度模型部署在资源有限的设备(例如,移动电话和嵌入式设备)上是一个挑战,这不仅是因为计算复杂性高,而且还有庞大的存储需求。为此,已经开发了多种模型压缩和加速技术。作为模型压缩和加速的代表类型,知识蒸馏有效地从大型教师模型中学习小型学生模型。它已迅速受到业界的关注。本文从知识类别,训练框架,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面的调查。此外,简要概述了知识蒸馏中的挑战,并讨论和转发了对未来研究的评论。
    综述的研究切入点

    知识蒸馏简介

    知识蒸馏,已经受到业界越来越多的关注。 大型深度模型在实践中往往会获得良好的性能,因为当考虑新数据时,过度参数化会提高泛化性能。 在知识蒸馏中,小模型(学生模型)通常是由一个大模型(教师模型)监督,算法的关键问题是如何从老师模型转换的知识传授给学生模型。 一个知识蒸馏系统由三个主要部分组成:知识,蒸馏算法,和师生架构

    知识蒸馏框架

    用于模型压缩的知识蒸馏类似于人类学习的方式。受此启发,最近的知识蒸馏方法已扩展到师生学习,相互学习,辅助教学,终身学习和自学。知识蒸馏的大多数扩展都集中在压缩深度神经网络上。由此产生的轻量级学生网络可以轻松部署在视觉识别,语音识别和自然语言处理(NLP)等应用程序中。此外,知识蒸馏中的知识从一种模型到另一种模型的转移可以扩展到其他任务,例如对抗攻击,数据增强,数据隐私和安全性。通过知识蒸馏的动机进行模型压缩,知识转移的思想已被进一步用于压缩训练数据,即数据集蒸馏,这将知识从大型数据集转移到小型数据集以减轻深度模型的训练负担

    早期知识蒸馏框架通常包含一个或多个大型的预训练教师模型和小型的学生模型。教师模型通常比学生模型大得多。主要思想是在教师模型的指导下训练高效的学生模型以获得相当的准确性。来自教师模型的监督信号(通常称为教师模型学到的“知识”)可以帮助学生模型模仿教师模型的行为。
    Hard targets vs. Soft targets

    在典型的图像分类任务中,logit(例如深层神经网络中最后一层的输出)被用作教师模型中知识的载体,而训练数据样本未明确提供该模型。例如,猫的图像被错误地归类为狗的可能性非常低,但是这种错误的可能性仍然比将猫误认为汽车的可能性高很多倍。另一个示例是,手写数字2的图像与数字3相比,与数字7更相似。这种由教师模型学习的知识也称为暗知识(“dark knowledge”)

    早期的知识蒸馏中转移 dark knowledge 的方法如下。 给定对数向量 z z z 作为深度模型的最后一个全连接层的输出,则 z i z_i zi 是第 i 类的对数,则输入属于第 i 类的概率 p i p_i pi 可以为 由softmax 函数估算:
    p i = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) p_{i}=\frac{\exp \left(z_{i}\right)}{\sum_{j} \exp \left(z_{j}\right)} pi=jexp(zj)exp(zi)

    因此,通过教师模型获得的软目标的预测包含暗知识,并且可以用作监督者,以将知识从教师模型转移到学生模型。 同样,one-hot 标签也称为硬目标。关于软目标和硬目标的直观示例如图3所示。此外,引入温度因子T来控制每个软目标的重要性

    p i = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) p_{i}=\frac{\exp \left(z_{i} / T\right)}{\sum_{j} \exp \left(z_{j} / T\right)} pi=jexp(zj/T)exp(zi/T)

    较高的温度会在各个类别上产生较弱的概率分布。 具体来说,当 T → ∞ T \rightarrow \infty T 时,所有类别都具有相同的概率。 当 T → 0 T \rightarrow 0 T0 时,软目标变为 one-hot 标记,即硬目标。教师模型提供的软目标(distillation loss)和ground-truth label提供的硬目标(student loss)对于提高学生模型的绩效都非常重要。

    定义蒸馏损失以匹配教师模型和学生模型之间的 logits ,即:
    L D ( p ( z t , T ) , p ( z s , T ) ) = ∑ i − p i ( z t i , T ) log ⁡ ( p i ( z s i , T ) ) L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)=\sum_{i}-p_{i}\left(z_{t i}, T\right) \log \left(p_{i}\left(z_{s i}, T\right)\right) LD(p(zt,T),p(zs,T))=ipi(zti,T)log(pi(zsi,T))

    其中 z t z_t zt z s z_s zs 分别是教师和学生模型的logits。 教师模型的logits通过交叉熵梯度与学生模型的 logits 匹配, 然后可以将相对于 logit z s i z_{si} zsi 的梯度评估为:

    ∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = p i ( z s i , T ) − p i ( z t i , T ) T = 1 T ( exp ⁡ ( z s i / T ) ∑ j exp ⁡ ( z s j / T ) − exp ⁡ ( z t i / T ) ∑ j exp ⁡ ( z t j / T ) ) \begin{array}{l} \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}}=\frac{p_{i}\left(z_{s i}, T\right)-p_{i}\left(z_{t i}, T\right)}{T} \\ =\frac{1}{T}\left(\frac{\exp \left(z_{s i} / T\right)}{\sum_{j} \exp \left(z_{s j} / T\right)}-\frac{\exp \left(z_{t i} / T\right)}{\sum_{j} \exp \left(z_{t j} / T\right)}\right) \end{array} zsiLD(p(zt,T),p(zs,T))=Tpi(zsi,T)pi(zti,T)=T1(jexp(zsj/T)exp(zsi/T)jexp(ztj/T)exp(zti/T))

    如果温度 T 比 logits 高得多, ∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}} zsiLD(p(zt,T),p(zs,T)) 则可以根据其泰勒级数近似得出:

    ∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = 1 T ( 1 + z s i T N + ∑ j z s j T − 1 + z t i T N + ∑ j z t j T ) . \begin{array}{l} \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}} \\ =\frac{1}{T}\left(\frac{1+\frac{z_{s i}}{T}}{N+\sum_{j} \frac{z_{s j}}{T}}-\frac{1+\frac{z_{t i}}{T}}{N+\sum_{j} \frac{z_{t j}}{T}}\right) . \end{array} zsiLD(p(zt,T),p(zs,T))=T1(N+jTzsj1+TzsiN+jTztj1+Tzti).

    如果进一步假设每个转移训练样本的 logits 为零 (比如, ∑ j z s j = ∑ j z t j = 0 \sum_{j} z_{s j}=\sum_{j} z_{t j}=0 jzsj=jztj=0),则上式可以简化为:

    ∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = 1 N T 2 ( z s i − z t i ) \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}}=\frac{1}{N T^{2}}\left(z_{s i}-z_{t i}\right) zsiLD(p(zt,T),p(zs,T))=NT21(zsizti)

    因此,根据上式,在高温和零均值 logits 的情况下,蒸馏损失等于匹配教师模型和学生模型之间的 logit ,即最小化 ( z s i − z t i ) \left(z_{s i}-z_{t i}\right) (zsizti)。 因此,通过与高温匹配的 logit 进行蒸馏可以传达非常有用的知识信息,这些信息是由教师模型学到的以训练学生模型。

    学生损失(student loss)定义为 ground truth 标签和学生模型的软对数之间的交叉熵:
    L S ( y , p ( z s , T ) ) = L C E ( y , p ( z s , T ) ) L_{S}\left(y, p\left(z_{s}, T\right)\right)=\mathcal{L}_{C E}\left(y, p\left(z_{s}, T\right)\right) LS(y,p(zs,T))=LCE(y,p(zs,T))

    这里, L C E ( y , p ( z s , T ) ) = ∑ i − y i log ⁡ ( p i ( z s i , T ) ) \mathcal{L}_{C E}\left(y, p\left(z_{s}, T\right)\right)=\sum_{i}-y_{i} \log \left(p_{i}\left(z_{s i}, T\right)\right) LCE(y,p(zs,T))=iyilog(pi(zsi,T))代表交叉熵损失,y 是一个 ground truth 向量,其中只有一个元素为1,它表示转移训练样本的 ground truth 标签,其他元素为0。在蒸馏和学生损失中,两者均使用学生模型的相同 logit,但温度不同。 温度在学生损失中为T = 1,在蒸馏损失中为T = t。 最后,传统知识蒸馏的基准模型是蒸馏和学生损失的结合:

    L ( x , W ) = α ∗ L D ( p ( z t , T ) , p ( z s , T ) ) + ( 1 − α ) ∗ L S ( y , p ( z s , T ) ) \begin{aligned} L(x, W)=& \alpha * L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right) \\ &+(1-\alpha) * L_{S}\left(y, p\left(z_{s}, T\right)\right) \end{aligned} L(x,W)=αLD(p(zt,T),p(zs,T))+(1α)LS(y,p(zs,T))

    其中 x x x 是转移集上的训练输入, W W W 是学生模型的参数,并且是调节参数。 为了轻松理解知识蒸馏,下图显示了传统知识蒸馏与教师和学生模型联合的特定体系结构。在下图所示的知识蒸馏中,始终首先对教师模型进行预训练,然后再进行训练。 仅使用来自预训练教师模型的软目标的知识来训练学生模型。 实际上,这就是离线知识提炼与基于响应的知识。

    Student Loss vs. Distillation Loss

    知识

    知识的三种形式

    Response-Based Knowledge

    基于响应的知识通常是指教师模型最后输出层的神经响应。主要思想是直接模仿教师模型的最终预测。基于响应的知识蒸馏简单但有效地进行了模型压缩,已被广泛用于不同的任务和应用中。最流行的基于响应的图像分类知识被称为软目标。基于响应的知识的蒸馏损失可以表示为

    L Res ⁡ D ( p ( z t ) , p ( z s ) ) = L K L ( p ( z s ) , p ( z t ) ) L_{\operatorname{Res} D}\left(p\left(z_{t}\right), p\left(z_{s}\right)\right)=\mathcal{L}_{K L}\left(p\left(z_{s}\right), p\left(z_{t}\right)\right) LResD(p(zt),p(zs))=LKL(p(zs),p(zt))

    其中 L K L \mathcal{L}_{K L} LKL表示Kullback-Leibler(KL)散度损失。典型的基于响应的KD模型如下图所示。基于响应的知识可用于不同类型的模型预测。例如,对象检测任务中的响应可能包含logit以及边界框的偏移量。在语义地标定位任务中,例如人体姿态估计,教师模型的响应可能包括每个地标的热图。最近,基于响应的知识得到了进一步的探索,以解决将地面标签信息作为条件目标的问题。

    Response-Based Knowledge示意图

    基于响应的知识的概念是简单易懂的,尤其是在“黑暗知识(dark knowledge)”的情况下。 从另一个角度看,软目标的有效性类似于标签平滑或正则化器。 但是,基于响应的知识通常依赖于最后一层的输出(例如,软目标),因此无法解决教师模型在监督,这对于使用非常深层神经网络的表示学习非常重要。由于 soft logits 实际上是类概率分布,因此基于响应的知识蒸馏也仅限于监督学习。

    Feature-Based Knowledge

    深度神经网络擅长通过增加抽象来学习多个级别的特征表示。这就是代表性学习。因此,最后一层的输出和中间层的输出,即特征图,都可以用作监督学生模型训练的知识。具体来说,来自中间层的基于特征的知识是基于响应的知识的良好扩展,尤其是对于更薄和更深的网络的训练而言。

    中间表示法首先在 Fitnets 中引入,通过提供 hints,以改善学生模型的训练。主要思想是直接匹配老师和学生的特征激活。受此启发,已经提出了多种其他方法来间接匹配特征从原始特征图中得出了一个“注意图”来表达知识。 Huang和Wang(2017)使用神经元选择性转移对注意力图进行了概括。 Passalis和Tefas(2018)通过匹配特征空间中的概率分布来传递知识。为了更容易地转移教师知识,Kim等人。 (2018年)引入了所谓的“因素”,作为一种更易于理解的中间表示形式。为了缩小师生之间的绩效差距,Jin等人。 (2019)提出了路线约束式提示学习,该方法通过教师提示层的输出来监督学生。最近,Heo等。 (2019c)建议使用隐藏神经元的激活边界进行知识转移。有趣的是,教师模型中间层的参数共享以及基于响应的知识也可以被用作教师知识(Zhou et al。,2018)。

    通常,基于特征的知识转移的蒸馏损失可以用公式表达为:

    L F e a D ( f t ( x ) , f s ( x ) ) = L F ( Φ t ( f t ( x ) ) , Φ s ( f s ( x ) ) ) L_{F e a D}\left(f_{t}(x), f_{s}(x)\right)=\mathcal{L}_{F}\left(\Phi_{t}\left(f_{t}(x)\right), \Phi_{s}\left(f_{s}(x)\right)\right) LFeaD(ft(x),fs(x))=LF(Φt(ft(x)),Φs(fs(x)))

    其中 f t ( x ) , f s f_{t}(x), f_{s} ft(x),fs 分别是教师模型和学生模型的中间层的特征图。转换函数 Φ t ( f t ( x ) ) , Φ s ( f s ( x ) ) \Phi_{t}\left(f_{t}(x)\right), \Phi_{s}\left(f_{s}(x)\right) Φt(ft(x)),Φs(fs(x)) 通常在教师和学生模型的特征图不是同一形状时应用。 L F ( . ) \mathcal{L}_{F}(.) LF(.) 表示用于匹配老师和学生模型的特征图的相似度函数。一个通用的基于特征的KD模型如下图所示。

    Feature-Based Knowledge示意图

    本文还从特征类型,源层和蒸馏损失的角度总结了不同类型的基于特征的知识,如下表所示。

    Feature-Based Knowledge方法汇总

    具体地说, L 2 ( . ) , L 1 ( . ) , L C E ( . ) , L M M D ( . ) \mathcal{L}_{2}(.), \mathcal{L}_{1}(.), \mathcal{L}_{CE}(.), \mathcal{L}_{MMD}(.) L2(.),L1(.),LCE(.),LMMD(.)分别表示l2-范数距离,l1-范数距离,交叉熵损失和最大平均差异损失。尽管基于特征的知识转移为学生模型的学习提供了有利的信息,但是如何有效地从教师模型中选择提示层和从学生模型中选择引导层仍然有待进一步研究。由于 hint 层和 guided 层的大小之间存在显着差异,因此还需要探索如何正确匹配教师和学生的特征表示

    Relation-Based Knowledge

    基于响应的知识和基于特征的知识都使用教师模型中特定层的输出。基于关系的知识进一步探索了不同层或数据样本之间的关系

    为了探索不同特征图之间的关系,Yim等人。 (2017)提出了一种解决方案流程(FSP),该流程由两层之间的Gram矩阵定义。 FSP 矩阵总结了特征图对之间的关​​系。它是使用两层要素之间的内积来计算的。利用特征图之间的相关性作为蒸馏的知识,(Lee et al。,2018)提出了通过奇异值分解的知识蒸馏来提取特征图中的关键信息。为了利用多位教师的知识,Zhang和Peng(2018)分别以每个教师模型的 logits 和特征为节点,形成了两个图。具体来说,在知识转移之前,不同的教师的重要性和关系通过 logits 和表示图进行建模(Zhang and Peng,2018)。 Lee and Song(2019)提出了基于多头图的知识蒸馏。图知识是通过多头注意力网络在任意两个特征图之间的内部数据关系。为了探索成对的提示信息,学生模型还模拟了教师模型的成对的提示层之间的互信息(Passalis等,2020b)。通常,基于特征图的关系的知识的蒸馏损失可以表示为:
    L Rel ⁡ D ( f t , f s ) = L R 1 ( Ψ t ( f ^ t , f ˇ t ) , Ψ s ( f ^ s , f ˇ s ) ) L_{\operatorname{Rel} D}\left(f_{t}, f_{s}\right)=\mathcal{L}_{R^{1}}\left(\Psi_{t}\left(\hat{f}_{t}, \check{f}_{t}\right), \Psi_{s}\left(\hat{f}_{s}, \check{f}_{s}\right)\right) LRelD(ft,fs)=LR1(Ψt(f^t,fˇt),Ψs(f^s,fˇs))

    其中 f t {f}_{t} ft f s {f}_{s} fs 分别是老师和学生模型的特征图。 教师模型选取的成对特征图表达为: f ^ t , f ˇ t \hat{f}_{t}, \check{f}_{t} f^t,fˇt,学生模型选择的成对特征图表达为: f ^ s , f ˇ s \hat{f}_{s}, \check{f}_{s} f^s,fˇs Ψ t ( . ) \Psi_{t}(.) Ψt(.) Ψ s ( . ) \Psi_{s}(.) Ψs(.)是来自教师和学生模型的成对特征图的相似性函数。 L R 1 ( . ) \mathcal{L}_{R^{1}}(.) LR1(.) 表示教师和学生特征图之间的相关函数。

    传统的知识转移方法通常涉及个人知识的提炼。老师的软目标直接提炼给学生。实际上,提炼的知识不仅包含特征信息,还包含数据样本的相互关系。具体来说,刘等。 (2019g)通过实例关系图提出了一种鲁棒而有效的知识提炼方法。实例关系图中传递的知识包含实例特征,实例关系和特征空间转换跨层。 Park等。 (2019)提出了一种关系知识蒸馏,该知识蒸馏了实例关系中的知识。基于流形学习的思想,通过特征嵌入来学习学生网络,这保留了教师网络中间层中样本的特征相似性(Chen等人,2020b)。使用数据的特征表示将数据样本之间的关系建模为概率分布(Passalis和Tefas,2018; Passalis等,2020a)。师生的概率分布与知识转移相匹配。 (Tung and Mori,2019)提出了一种保留相似性的知识提炼方法。尤其是,将教师网络中输入对的相似激活所产生的保持相似性的知识转移到学生网络中,并保持成对相似性。 Peng等。 (2019a)提出了一种基于相关一致性的知识蒸馏方法,其中蒸馏的知识既包含实例级信息,又包含实例之间的相关性。使用关联一致性进行蒸馏,学生网络可以了解实例之间的关联。

    如上所述,基于实例关系的基于关系的知识的蒸馏损失可以表述为:
    L Rel ⁡ D ( F t , F s ) = L R 2 ( ψ t ( t i , t j ) , ψ s ( s i , s j ) ) L_{\operatorname{Rel} D}\left(F_{t}, F_{s}\right)=\mathcal{L}_{R^{2}}\left(\psi_{t}\left(t_{i}, t_{j}\right), \psi_{s}\left(s_{i}, s_{j}\right)\right) LRelD(Ft,Fs)=LR2(ψt(ti,tj),ψs(si,sj))

    其中, ( t i , t j ) ∈ F t \left(t_{i}, t_{j}\right) \in F_{t} (ti,tj)Ft ( s i , s j ) ∈ F s \left(s_{i}, s_{j}\right) \in F_{s} (si,sj)Fs F t F_{t} Ft F s F_{s} Fs分别是老师和学生模型中的要素表示集。 ψ t ( . ) \psi_{t}(.) ψt(.) ψ s ( . ) \psi_{s}(.) ψs(.) ( t i , t j ) \left(t_{i}, t_{j}\right) (ti,tj) ( s i , s j ) \left(s_{i}, s_{j}\right) (si,sj) 的相似度函数。 L R 2 ( . ) \mathcal{L}_{R^{2}}(.) LR2(.) 是教师和学生特征表示之间的相关函数。 典型的基于实例关系的KD模型如下图所示。

    Relation-Based Knowledge示意图

    可以将提取的知识从不同的角度进行分类,例如数据的结构化知识,有关输入功能的特权信息。 下表显示了基于关系的知识的不同网络类别的摘要。

    Relation-Based Knowledge方法汇总

    尽管最近提供了一些类型的基于关系的知识,但是如何根据特征图或数据样本对关系信息进行建模(作为知识)仍然值得进一步研究

    蒸馏

    蒸馏的几种形式

    离线蒸馏(Offline Distillation)

    大多数以前的知识蒸馏方法都可以脱机工作。在常见的知识蒸馏中,知识从预先训练的教师模型转移到学生模型。因此,整个训练过程有两个阶段,即:

    • 大型教师模型是在蒸馏之前首先在一组训练样本上训练的。
    • 教师模型用于提取logit或中间特征形式的知识,然后用于指导蒸馏过程中学生模型的训练。

    离线蒸馏的第一阶段通常不作为知识蒸馏的一部分进行讨论,即,假定教师模型是预先定义的。很少关注教师模型结构及其与学生模型的关系。因此,离线方法主要集中于改进知识转移的不同部分,包括知识的设计以及用于匹配特征或分布匹配的损失函数。离线方法的主要优点在于它们简单易行。例如,教师模型可以包含使用可能位于不同机器上的不同软件包训练的一组模型。可以提取知识并将其存储在缓存中。

    离线蒸馏方法通常采用单向知识转移和两阶段训练程序。然而,不可避免的是,复杂的高容量教师模型具有很长的训练时间,而离线蒸馏中对学生模型的训练通常在教师模型的指导下是有效的。此外,大型教师和小型学生之间的能力差距始终存在,而学生在很大程度上依赖于教师。

    在线蒸馏(Online Distillation)

    尽管离线蒸馏方法简单有效,但离线蒸馏中的一些问题已引起研究界的越来越多的关注。为了克服离线蒸馏的局限性,提出了在线蒸馏以进一步改善学生模型的性能,特别是在没有大容量高性能教师模型的情况下。在在线蒸馏中,教师模型和学生模型同时更新,并且整个知识蒸馏框架是端到端可训练的。

    在最近三年中,已经提出了多种在线知识蒸馏方法。具体来说,在深度相互学习中(Zhang等人,2018b),多个神经网络以协作方式工作。在训练过程中,任何一个网络都可以作为学生模型,其他模型可以作为老师。为了提高泛化能力,通过使用 soft Logits 的集合来扩展深度相互学习(Guo等,2020)。 Chen等。 (2020a)进一步将辅助同伴(auxiliary peers)和小组负责人(group leader)引入深度相互学习中,以形成一套多样化的同伴模型。为了降低计算成本,Zhu和Gong(2018)提出了一种多分支架构,其中每个分支表示一个学生模型,不同分支共享相同的骨干网络。 Kim等人(2019b)没有使用Logits,引入了特征融合模块来构建教师分类器。谢等。 (2019)用便宜的卷积运算代替了卷积层以形成学生模型。 Anil等。 (2018)使用在线蒸馏来训练大规模分布式神经网络,并提出了在线蒸馏的一种变体,称为共蒸馏。并行共蒸馏以相同的架构训练多个模型,并且通过从其他模型转移知识来训练任何一个模型。最近,提出了一种在线对抗知识蒸馏方法,以利用来自类别概率和特征图的知识,同时由鉴别者训练多个网络(Chung等,2020)。

    在线蒸馏是一种具有高效并行计算功能的单阶段端到端训练方案。然而,现有的在线方法(例如,相互学习)通常不能解决在线设置中的高能力教师,这使得在在线设置中进一步探索教师与学生模型之间的关系成为一个有趣的话题。

    自我蒸馏(Self-Distillation)

    在自我蒸馏中,教师和学生模型采用相同的网络。这可以视为在线蒸馏的特殊情况。具体来说,Zhang等。 (2019b)提出了一种新的自蒸馏方法,其中将来自网络较深部分的知识蒸馏为浅层部分。与(Zhang et al。,2019b)中的自蒸馏相似,有人提出了一种自注意蒸馏方法进行车道检测(Hou et al。,2019)。该网络利用其自身层的注意力图作为其较低层的蒸馏目标。快照蒸馏(Yang et al。,2019b)是自我蒸馏的一种特殊变体,其中网络早期(教师)的知识被转移到其后期(学生)以支持在同一时期内的监督训练过程网络。为了进一步减少通过提前退出的推理时间,Phuong和Lampert(2019b)提出了基于蒸馏的训练方案,其中提前退出层尝试在训练过程中模仿后续退出层的输出。

    另外,最近提出了一些有趣的自蒸馏方法。具体来说,袁等。提出了一种基于标签平滑规则化(label smoothing regularization)分析的无教师知识蒸馏方法(Yuan et al。,2020)。 Hahn和Choi提出了一种新颖的自我知识蒸馏方法,其中自我知识由预测概率而不是传统的软概率组成(Hahn和Choi,2019)。这些预测的概率由训练模型的特征表示来定义。它们反映了特征嵌入空间中数据的相似性。 Yun等。提出了分类自知识蒸馏,以匹配同一模型中同一来源内的类内样本和扩充样本之间的训练模型的输出分布(Yun et al。,2020)。此外,采用Lee等人(2019a)提出的自蒸馏进行数据增强,并将增强的自知性蒸馏为模型本身。还采用自我蒸馏中以一对一地优化具有相同架构的深度模型(教师或学生网络)(Furlanello等,2018; Bagherinezhad等,2018)。每个网络都使用教师优化来蒸馏先前网络的知识。

    此外,还可以从人类师生学习的角度直观地了解离线,在线和自我蒸馏中。离线蒸馏是指知识渊博的老师向学生传授知识;在线蒸馏是指老师和学生互相学习;自我蒸馏是指学生自己学习知识。而且,就像人类学习一样,这三种蒸馏由于自身的优势可以结合起来互相补充。

    师生架构

    在知识蒸馏中,师生架构是形成知识转移的通用载体。换句话说,从老师到学生的知识获取和蒸馏的质量也取决于如何设计老师和学生的网络。在人类学习习惯方面,我们希望学生能够找到合适的老师。因此,如何在知识蒸馏中完成知识的提取和提取,如何选择或设计合适的师生结构是非常重要而又困难的问题。最近,在蒸馏过程中,教师和学生的模型设置几乎都预先设置了不变的大小和结构,从而容易造成模型容量差距。但是,几乎不存在如何特别设计教师和学生的体系结构以及为什么由这些模型设置确定其体系结构的方法。在本节中,将讨论下图所示的教师模型和学生模型的结构之间的关系。

    师生架构关系

    知识蒸馏以前曾被设计为压缩深度神经网络的方法之一。深度神经网络的复杂性主要来自两个维度:深度和宽度。通常需要将知识从更深和更广的神经网络转移到更浅和更薄的神经网络。学生网络通常选择为:

    • 教师网络的简化版本,每层中的层数更少且通道更少。
    • 教师网络的量化版本,其中保留了网络的结构。
    • 具有高效基本操作的小型网络。
    • 具有优化的全局网络结构的小型网络。
    • 与教师使用同一网络。

    大型深层神经网络和小型学生神经网络之间的模型能力差距会降低知识转移的速度。为了有效地将知识转移到学生网络,已提出了多种方法来控制模型复杂度的可控降低。具体来说,Mirzadeh等。 (2020)引入了助教来减轻教师模型和学生模型之间的训练差距。(Gao et al。,2020)通过残差学习进一步缩小了差距,即使用辅助结构来学习残差。另一方面,最近的几种方法也集中在最小化学生模型和教师模型的结构差异上。例如,Polino等。 (2018)将网络量化与知识蒸馏相结合,即学生模型很小,是教师模型的量化版本。 Nowak和Corso(2018)提出了一种结构压缩方法,该方法涉及将多层学习的知识转移到单层。 Wang等。 (2018a)逐步执行从教师网络到学生网络的块状知识转移,同时保留接受领域。在在线环境中,教师网络通常是学生网络的集合,其中学生模型彼此共享相似的结构(或相同的结构)。

    最近,深度可分离卷积已被广泛用于为移动或嵌入式设备设计有效的神经网络。受神经架构搜索(或NAS)成功的启发,通过基于有效元操作或块的全局结构搜索,小型神经网络的性能得到了进一步改善。此外,动态搜索知识转移机制的想法也出现在知识蒸馏中,例如,使用强化学习以数据驱动的方式自动删除冗余层,并在给定教师网络条件下搜索最佳学生网络

    以前的大多数工作都着重于设计教师和学生模型的结构或它们之间的知识转移方案。 为了使小型学生模型与大型教师模型很好地匹配,以提高知识蒸馏的绩效,自适应的师生学习体系结构是必要的。 最近,在知识蒸馏中进行神经体系结构搜索(NAS)的想法,即在教师模型的指导下联合搜索学生结构和知识转移,将是未来研究的一个有趣课题。

    蒸馏算法

    对抗蒸馏(Adversarial Distillation)

    对抗蒸馏

    多教师蒸馏(Multi-Teacher Distillation)

    多教师蒸馏

    跨模态蒸馏(Cross-Modal Distillation)

    跨模态蒸馏

    跨模态蒸馏方法汇总

    图蒸馏(Graph-Based Distillation)

    图蒸馏

    注意力蒸馏(Attention-Based Distillation)

    由于注意力可以很好地反映卷积神经网络的神经元激活,因此在知识蒸馏中使用了一些注意力机制来改善学生网络的性能。在这些基于注意力的KD方法中,定义了不同的注意力转移机制,用于从教师网络向学生蒸馏知识网络。注意转移的核心是定义用于特征嵌入神经网络各层的关注图。也就是说,使用关注图功能来传递关于特征嵌入的知识

    无数据蒸馏(Data-Free Distillation)

    无数据蒸馏

    Data-Free Learning of Student Networks

    量化蒸馏(Quantized Distillation)

    网络量化通过将高精度网络(例如32位浮点)转换为低精度网络(例如2位和8位)来降低神经网络的计算复杂度。同时,知识蒸馏的目的是训练小型模型以产生与复杂模型相当的性能。目前已经有多篇文章提出了在量化过程使用教师-学生框架中的一些KD方法。量化蒸馏方法的框架如下图所示。

    量化蒸馏框架

    具体来说,Polino等。 (2018)提出了一种量化蒸馏方法,将知识转移到权重量化的学生网络中。在(Mishra和Marr,2018年)中,提出的量化KD被称为“学徒”。高精度教师网络将知识转移到小型的低精度学生网络。为了确保小型学生网络准确地模仿大型教师网络,首先在特征图上对高精度教师网络进行量化,然后将知识从量化教师转移到量化学生网络(Wei等人,2018年) )。 Kim等。 (2019a)提出了基于量化学生网络的自学,以及基于师生网络与知识转移的共同研究的量化意识知识蒸馏。此外,Shin等。 (2019)使用蒸馏和量化进行了深度神经网络的经验分析,同时考虑了知识蒸馏的超参数,例如教师网络的大小和蒸馏温度。

    终身蒸馏(Lifelong Distillation)

    终身学习,包括持续学习和元学习,旨在以与人类相似的方式进行学习。它积累了以前学到的知识,还将学到的知识转移到未来的学习中。知识蒸馏提供了一种有效的方法来保存和转移所学知识,而不会造成灾难性的遗忘。最近,基于终生学习的KD变体数量不断增加。

    关于元学习: Jang等。 (2019)设计了元转移网络,可以确定在师生架构中转移的内容和地点。 Flennerhag等。 (2019)提出了一个轻量级的框架,称为Leap,用于通过将知识从一种学习过程转移到另一种学习过程来对任务流形进行元学习。 Peng等。 (2019b)设计了一种用于少拍图像识别的新知识转移网络架构。该体系结构同时合并了来自图像和先验知识的视觉信息。刘等。 (2019e)提出了一种用于图像检索的语义感知知识保存方法。从图像模态和语义信息中获得的教师知识将得到保存和转移。

    此外,为了解决终身学习中的灾难性遗忘问题,全局蒸馏(Lee等人,2019b),基于知识蒸馏的终身GAN(Zhai等人,2019),多模型蒸馏(Zhou等人,2020) )和其他基于KD的方法(Li and Hoiem,2017; Shmelkov et al。,2017)已经开发出来,以提取学习到的知识并在新任务上教给学生网络。

    NAS蒸馏(NAS-Based Distillation)

    神经体系结构搜索(NAS)是最流行的自动机器学习(或AutoML)技术之一,旨在自动识别深度神经模型并自适应地学习适当的深度神经结构。在知识蒸馏中,知识转移的成功不仅取决于老师的知识,还取决于学生的架构。但是,大型教师模型和小型学生模型之间可能存在能力差距,从而使学生难以向老师学习。为了解决这个问题,已经有工作采用 NAS 来找到 oracle-based 和 architecture-aware 的合适的学生架构实现知识蒸馏。此外,知识蒸馏被用于提高神经架构搜索的效率,例如,具有蒸馏架构知识的 NAS(AdaNAS)以及教师指导的架构搜索(TGSA)。在TGSA中,指导每个体系结构搜索步骤以模仿教师网络的中间特征表示,通过有效搜索学生的可能结构,老师可以有效地监督特征转移。
    TGSA方法示意图

    性能对比

    知识蒸馏是用于模型压缩的出色技术。通过捕获教师的知识并在教师学习中使用蒸馏策略,它可以提高轻量级学生模型的性能。近来,许多知识蒸馏方法致力于改善性能,尤其是在图像分类任务中。在本节中,为了清楚地证明知识蒸馏的有效性,总结了一些典型的KD方法在两个流行的图像分类数据集上的分类性能。

    这两个数据集是 CIFAR10 和 CIFAR100,分别由分别来自 10 和 100 个类别的 32×32 RGB 图像组成。两者都具有 50000 个训练图像和 10000 个测试图像,并且每个类具有相同数量的训练和测试图像。为了公平比较,KD 方法的实验分类准确度结果(%)直接来自相应的原始论文,如 CIFAR10 的表5和 CIFAR100 的表6所示。当使用不同类型的知识,蒸馏方案和教师/学生模型的结构时,报告了不同方法的性能。具体而言,括号中的准确度是教师和学生模型的分类结果,它们是经过单独训练的。应该注意的是,DML 和 DCM 的成对精度是在线蒸馏后师生的表现。

    CIFAR-10

    CIFAR-10方法性能对比

    CIFAR-100

    CIFAR-100方法性能对比

    从表5和表6的性能比较中,可以得出以下几点结论:

    • 知识蒸馏可以简单地在不同的深度模型上实现,并且可以通过知识蒸馏轻松地实现不同深度模型的模型压缩。
    • 通过协作学习进行在线知识蒸馏可以显着提高深度模型的性能。
    • 自知蒸馏可以很好地改善深度模型的性能。
    • 轻量级深层模型(学生)的性能可以通过大容量教师模型中的知识转移而轻松提高。

    通过不同知识蒸馏方法的性能比较,可以很容易地得出结论,知识蒸馏是一种有效且有效的深度模型压缩技术。

    总结和讨论

    近年来,知识蒸馏及其应用引起了相当大的关注。 本文从知识,蒸馏方案,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面综述。 下面,讨论知识蒸馏的挑战,并对知识蒸馏的未来研究提供一些见识。

    挑战

    对于知识蒸馏,关键是:1)从教师那里提取丰富的知识; 2)从教师那里转移知识以指导学生的训练。因此,本文从以下几个方面讨论知识蒸馏的挑战:知识的均等性,蒸馏的类型,师生体系结构的设计以及知识蒸馏的理论基础

    大多数KD方法利用各种知识的组合,包括基于响应的知识,基于特征的知识和基于关系的知识。因此,重要的是要了解每种知识类型的影响,并知道不同种类的知识如何以互补的方式互相帮助。例如,基于响应的知识具有相似的动机来进行标签平滑和模型正则化; 基于特征的知识通常用于模仿教师的中间过程,而基于关系的知识则用于捕获不同样本之间的关系。为此,在统一和互补的框架中对不同类型的知识进行建模仍然是挑战。例如,来自不同提示层的知识可能对学生模型的训练有不同的影响:1)基于响应的知识来自最后一层; 2)来自较深的提示/指导层的基于特征的知识可能会遭受过度规范化的困扰。

    如何将丰富的知识从老师传授给学生是知识蒸馏的关键一步。通常,现有的蒸馏方法可分为离线蒸馏,在线蒸馏和自蒸馏。离线蒸馏通常用于从复杂的教师模型中转移知识,而教师模型和学生模型在在线蒸馏和自我蒸馏的设置中具有可比性。为了提高知识转移的效率,应进一步研究模型复杂性与现有蒸馏方案或其他新颖蒸馏方案之间的关系

    目前,大多数KD方法都将重点放在新型知识或蒸馏损失函数上,而对师生体系结构的设计研究不足。实际上,除了知识和蒸馏算法之外,教师和学生的结构之间的关系也显着影响知识蒸馏的性能。例如,一方面,最近的一些研究发现,由于教师模型和学生模型之间的模型能力差距,学生模型无法从某些教师模型中学习到很多东西;另一方面,从对神经网络容量的一些早期理论分析来看,浅层网络能够学习与深层神经网络相同的表示。因此,设计有效的学生模型或构建合适的教师模型仍然是知识蒸馏中的难题。

    尽管有大量的知识蒸馏方法和应用,但对知识蒸馏的理解(包括理论解释和实证评估)仍然不够。例如,蒸馏可以被视为一种获得特权信息的学习形式。线性教师模型和学生模型的假设使得能够通过蒸馏来研究学生学习特征的理论解释。此外,Cho和Hariharan(2019)对知识蒸馏的功效进行了一些实证评估和分析。但是,仍然很难获得对知识提升的可概括性的深刻理解,尤其是如何衡量知识的质量或师生架构的质量。

    未来发展方向

    为了提高知识蒸馏的性能,最重要的因素包括:怎样设计师生网络体系结构,从老师网络中学习什么样的知识,以及在何处提炼到学生网络中

    深层神经网络的模型压缩和加速方法通常分为四个不同类别,即模型剪枝和量化,低秩分解,紧凑型卷积滤波器和知识蒸馏。在现有的知识蒸馏方法中,只有很少的相关工作讨论了知识蒸馏与其他压缩方法的结合。例如,量化知识蒸馏可以看作是一种参数修剪方法,它将网络量化整合到师生架构中。因此,为了学习用于在便携式平台上部署的高效轻巧的深度模型,由于大多数压缩技术都需要重新训练/微调过程,因此需要通过知识蒸馏和其他压缩技术进行混合压缩的方法。此外,如何决定使用不同压缩方法的正确顺序将是未来研究的有趣话题

    除了用于深度神经网络加速的模型压缩之外,由于教师架构上知识转移的自然特性,知识蒸馏还可以用于其他问题。最近,知识蒸馏已应用于数据隐私和安全性,深度模型的对抗攻击,跨模态,多个域,灾难性遗忘,加速深度模型的学习,神经结构搜索的效率,自我监督和数据增强。另一个有趣的例子是,知识从小型教师网络向大型学生网络的转移可以加速学生的学习。这与传统的知识蒸馏有很大不同。大型模型从未标记的数据中学习的特征表示也可以通过蒸馏来监督目标模型。为此,将知识蒸馏扩展到其他目的和应用可能是有意义的未来方向。

    知识蒸馏的学习类似于人类的学习。将知识转移推广到经典和传统的机器学习方法是可行的。例如,基于知识蒸馏的思想,传统的两阶段分类适用于单老师单学生问题。此外,知识蒸馏可以灵活地部署到各种学习方案中,例如对抗学习,自动机器学习,终身学习,和强化学习。因此,将来将知识蒸馏与其他学习方案整合起来以应对实际挑战将是有用的。


    更多内容关注微信公众号【AI异构】

    展开全文
  • 知识蒸馏】2021最新知识蒸馏综述和论文总结简介:按照“知识”的定义来分类:按照教师模型来分类:按照“数据”有无来分类: 简介: 按照“知识”的定义来分类: 按照教师模型来分类: 按照...

    简介:

    在这里插入图片描述
    在这里插入图片描述

    按照“知识”的定义来分类:

    展开全文
  • 检测知识蒸馏

    2021-10-23 14:38:13
    除此之外的非机构设计的优化方法有知识蒸馏、模型量化和模型减枝,其中知识蒸馏的方法最为简单有效,已经被广泛应用到分类任务,但检测的知识蒸馏方法却很少,这里介绍一种基于特征响应的检测知识蒸馏方法。...
  • 蒸馏器动物园 安装 设置新的conda环境: conda create -n distiller python=3.7 安装pytorch 1.3+ 安装mmdetection-distiller git clone https://github.com/pppppM/mmsegmentation-distiller.git cd ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,813
精华内容 2,325
关键字:

知识蒸馏