Knowledge Distillation(知识蒸馏,DistillBERT,Theseus,KR)

Do Deep Nets Really Need to be Deep?
虽然近年来的趋势如BigGAN,BERT等,动辄上亿参数,几乎就是数据驱动+算力的“暴力”结果。但同时,更加轻量级的升级版模型如ALBERT也能以更少的参数和架构持续刷榜,元学习(meta learning)和零样本学习(Zero-shot learning),还有只需要个位数层数就能取得优异效果的GCN等,都似乎证明了“大道至简”。

深度模型的压缩方法一般有:

  • 参数修剪和共享(parameter pruning and sharing)
  • 量化。如把float32变成16,甚至二值化等等。
  • 低秩因子分解(low-rank factorization)
  • 转移/紧凑卷积滤波器(transferred/compact convolutional filters)
  • 知识蒸馏(knowledge distillation)

Knowledge Distillation
正如“蒸馏”这一主观形象,知识蒸馏的目的就是为了“提纯”。将神经网络轻量化,网络压缩化,以更少的参数得到尽可能相似的网络效果。轻量化的结果可以降低能耗,完成多任务平行等,就可以使一些原先需要在大设备上运行的结构能在小设备上工作,如在手机上,或者嵌入式移动开发板中。那么如何把复杂模型或者多个模型Ensemble(Teacher)学到的知识,迁移到另一个轻量级模型( Student )上,使模型变轻量的同时(方便部署),尽量不损失性能呢?
在这里插入图片描述
Teacher-Student
最早的Knowledge Distillation的思想始于深度学习三巨头之一的Hinton于2014年提出《Distilling the Knowledge in a Neural Network 》,目的是让更浅的层数,更少的参数较少的浅层网络,取得和深层网络相近的效果,以完成网络压缩。具体实现主要是利用学生网络(student network)和教师网络(teacher network),即用一个很大的教师网络给较小的学生进行指导。

如上图一种直观的迁移知识的方式是,将教师网络(big)生成的类别概率向量作为训练学生网络(small)的soft targets(即通过softmax输出而不是one-hot这种真实的hard targets)。这样做,可以让学生网络捕捉到由真实的标签(one-hot)提供的信息,但也包括由教师网络学习更为丰富的数据信息,另一方面soft targets相比于hard targets意义也更多。
T是教师网络,S是学生网络,有:
P T τ = s o f t m a x ( a T τ ) P_T^{\tau}=softmax(\frac{a_T}{^{\tau}}) PTτ=softmax(τaT) P S τ = s o f t m a x ( a S τ ) P_S^{\tau}=softmax(\frac{a_S}{^{\tau}}) PSτ=softmax(τaS)
τ > 1 \tau > 1 τ>1以减轻教师网络输出所产生的信号,以指导学生更多的信息,这就相当于在迁移学习的过程中添加了扰动,从而使得学生网络在借鉴学习的时候更有效、泛化能力更强,这其实就是一种抑制过拟合的策略(取值在1-20)。
学生网络优化的损失函数为:
L K D = H ( y t r u e , P s ) + λ H ( P T τ , P S τ ) L_{KD}=H(y_{true},P_s)+\lambda H(P_T^{\tau},P_S^{\tau}) LKD=H(ytrue,Ps)+λH(PTτ,PSτ)
这里H代表交叉熵, λ \lambda λ用来平衡两个交叉熵。第一项就是一个网络的输出和标签之间传统的交叉熵,而第二项则强制学生网络从教师网络的‘软’输出中学习,尽可能的接近教师。输出作为知识。

为什么软标签能提升信息量?
one-hot的[0.1,0,0,0,0.9]和soft的[0,0,0,0,1]显然信息量是不同的。所以它的优势

  • 弥补了简单分类中监督信号不足(信息熵比较少)的问题,增加了信息量
  • 提供了训练数据中类别之间的关系(数据增强)
  • 增强泛化能力

在这里插入图片描述
青出于蓝而胜于蓝,训练一个更深的student
student虽然深,但不宽,参数仍然小。但是直接训练一个比教师机还深的网络往往会很困难,2015年的《FITNETS:Hints for Thin Deep Nets》通过在中间层加入loss的方法,通过学习teacher中间层feature map来transfer中间层表达的知识,文章中把这个方法叫做Hint-based Training。这样做,学生网络不仅仅拟合教师网络的soft-target,而且会拟合隐藏层的输出(教师抽取的特征)。学习网络中的特征。
具体训练方法如上图,是选取teacher的中间层作为guidance,对student的中间层进行监督学习。由于两者的维度不一样,所以需要一个额外的线性矩阵或卷积层去进行维度变换,达到维度一致,然后使用L2 Loss进行监督。

在这里插入图片描述
授人以鱼不如授人以渔
CVPR2017,《A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning》,寻找网络层之间的关系。
不再利用soft targets或者利用中间特征做hint,而是直接学习每层的特征。如上图在一些组合层间做L2 loss,其中G是低层和高层特征图的channel两两做内积最后得到的矩阵。

在这里插入图片描述
teacher网络是固定的,teacher也需要与时共进
上图出自CVPR2018的《Deep Mutual Learning》,作者认为以往的teacher网络都是固定的,只用来输出soft-target,难以学习student网络中反馈的信息,所以提出深度互学习,用多个学生网络同时训练,通过真值和多个网络的输出结果“相互借鉴,共同进步”(不以模型压缩为主要目的,更多为了提升模型表现)
L 1 = L C 1 + D K L ( p 2 ∣ ∣ p 1 ) L_1=L_{C_1}+D_{KL}(p_2||p_1) L1=LC1+DKL(p2p1) L 2 = L C 2 + D K L ( p 1 ∣ ∣ p 2 ) L2=L_{C_2}+D_{KL}(p_1||p_2) L2=LC2+DKL(p1p2)
思路比较简单, L C 1 L_{C_1} LC1是经典的交叉熵, D K L D_{KL} DKL是KL散度。

似乎GAN也很合适
《KDGAN: Knowledge Distillation with Generative Adversarial Networks》
用对抗生成的方式模拟蒸馏的过程:生成器(学生网络,参数少、简单)负责基于输入X输出X的标签Y,判别器(教师网络,参数多、复杂)判断标签来自于学生网络还是真实的数据


那么知识蒸馏目前在学术前沿有些其他的什么应用呢?接下来主要整理其几个比较令人印象深刻的模型

DistillBERT
nlp自从bert路线刷榜之后,提点路线从追求更高算力多任务外,也有轻量化的需求,而轻量化的要求往往有一部分要求助于蒸馏,另外其他的模型在博主整理nlp的博文已经整理过了,传送门。这里主要整理DistillBERT和Theseus这两个与蒸馏有关的模型。
在这里插入图片描述
其实DistillBERT的思路很简单,架构如上图,teacher和原bert一致,student是我们想学的,主要的trick有:

  • BERT每2层中去掉一层,这里是作者认为隐藏层维度的变化比层数的变化对计算性能的影响较小,所以只改变了层数,并尝试把计算层数减小到原来的一半(所以以后的工作基本上都会有对层数的缩减,包括等一下的Theseus)。
  • 去掉了token type embedding和pooler。每一层加了初始化,每一层的初始化为teacher model的参数。
  • 三个损失函数:
  • L C E {L_{CE}} LCE损失函数。其为Teacher model的soft label的损失函数
  • L M L M L_{MLM} LMLM损失函数。其为hard label的损失函数,即代表的是bert 的masked language model的损失函数
  • L C O S L_{COS} LCOS损失函数。计算teacher hidden state和student hidden state的余弦相似度

L o s s = 5.0 ∗ L c e + 2.0 ∗ L m l m + 1.0 ∗ L c o s Loss= 5.0*L_{ce}+2.0* L_{mlm}+1.0* L_{cos} Loss=5.0Lce+2.0Lmlm+1.0Lcos

BERT-of-Theseus: Compressing BERT by Progressive Module Replacing
来自EMNLP 2020,基于模块替换的模型压缩方法。它的核心思想是:循序渐进地用更少参数的模块替换BERT中的各个原始模块。其中原始模块被称为predecessor,替换的压缩模块为successor,其实就是teacher和student。不过值得注意的是,这个模型是直接面向BERT在fine-turning阶段,与预训练阶段无关,具体的压缩细节如下:
在这里插入图片描述

  • 每2层 Transformer 作为一个 predecessor,为其指定1层的Transformer作为 successor,以期望最后将BERT压缩为6个successor,如上图左边。
  • 伯努利采样一个随机变量r,独立的由每个prd来指引训练每个scc,其中随机变量相当于引入了额外的噪声,可以作为训练 successor 中的正则化操作(类似Dropout),更新方式如下。值得注意的是,这里的每个scc都是独立训练的。
    y i + 1 = r i + 1 ∗ s c c i ( y i ) + ( 1 − r i + 1 ) ∗ p r d i ( y i ) y_{i+1}=r_{i+1}*scc_i(y_i)+(1-r_{i+1})*prd_i(y_i) yi+1=ri+1scci(yi)+(1ri+1)prdi(yi)
  • 然后将所有 successor 进行联合训练,即所谓的替换后的微调阶段。这是因为上述的模块替换训练阶段,各个 successor 模块都是孤立地训练,所以需要将所有 successor 模块整合到一起进行微调。
  • warm-up技巧。即学习率逐渐变化,在初始阶段,让较多的predecessor参与训练,能够提升整个模型的质量,得到更小的loss,这能够平滑整个训练过程平滑而不会过于震荡;而在训练后期,由于模型整体学习都比较好了,模型可以逐渐摆脱对 predecessor 的依赖,并让更多的successor参与后续的训练,进而使整个模型能够平稳过度到 successor 微调阶段。

paper:https://arxiv.org/abs/2002.02925
code:https://github.com/JetRunner/BERT-of-Theseus

在这里插入图片描述
Distilling Knowledge via Knowledge Review
补上一篇21的论文,主要讨论的问题是:teacher的信息真的完全被利用了吗?如上图是作者整理的几种典型的DK模式,a是蒸logits,b是蒸单层feture,c是蒸每层feature,其都可以理解为对相同层进行蒸馏,引导student学习teacher相同层的feature。但作者认为,在student在训练初期,就去学习teacher的抽象语义信息太难了,不合理。

所以作者们提出knowledge review,即图d,让student同时学习teacher的多个层次,从而让student训练早期能关注teacher浅层简单知识的学习,并逐渐理解到teacher深层的抽象知识,即温故知新。

具体的做法如下图是逐个模块的优化过程。
在这里插入图片描述

  • a。即按照同时学习多个teacher,其中需要将teacher端的做一下转换,即图中的灰色块。而绿色块是蒸馏的距离函数计算方式。
  • b。直接将每个单层student对应多层teacher,即第一层只对应第一层,第二层对应第一,二层依次推类。然后直接对student每一个stage进行蒸馏。
  • c。改进b中多stage的方法,会对不同层的特征会产生冲突相互干扰,所以加一个对融合之后的特征做多stage的操作,即如图中的红色块表示融合模块。
  • d。在c的基础上加一个残差。

paper:https://arxiv.org/abs/2104.09044

知识蒸馏在推荐系统的应用
实际上它已经在很多领域都有出彩的表现了,这里额外想整理几篇最近的在推荐系统里面的应用。

来自华为的CIKM2020,Ensembled CTR Prediction via Knowledge Distillation。

motivation:现有CTR预估主要走两条路

  • 更为复杂的网络结构来更好的捕捉特征之间的交叉信息以及用户的动态行为信息。
  • 沿用Wide & Deep的思路,即融合。

那么如何保持多模型融合的效果,又能够使得模型更加轻量化呢?求助于多教师蒸馏,模型如下:

在这里插入图片描述
不过这篇论文比较有趣一点的是,用了多教师网络知识蒸馏(共同提升CTR效果)。关于多teacher的融合问题,作者提出了两个方法一是直接做平均,第二是对不同teacher网络进行加权,如上图啦,用gate net进行一个统一的融合,再指导student学习。

在这里插入图片描述
Privileged Features Distillation at Taobao Recommendations
在推荐系统中,为了维护离线训练和在线预估的一致性,往往需要确保一致的特征输入。然而,这种一致性使得一些信号非常强的特征被排除在外。比如,用户在详情页的停留时长这个特征,尽管能极大地提升CVR预估的准确率,然而线上服务时却无法获取这样的后验特征,因为CVR预估需要在用户发生点击之前就被触发。所以作者将这种区分度高、但只能离线获取的特征定义为优势特征(Privileged Features,即所有穿越特征为优势特征)。

主要的思想就是同时训练两个模型:一个学生模型以及一个教师模型。其中学生模型和原始模型完全相同,而教师模型额外利用了优势特征, 其准确率也因此更高。通过将教师模型蒸馏出的知识(Knowledge, 在阿里论文中特指教师模型中最后一层的输出)传递给学生模型,可以辅助其训练并进一步提升准确率。

如下图是传统蒸馏模型和作者提出模型的对比,在左图的传统模型中:教师模型和学生模型处理相同的输入特征,其中教师模型会比学生模型更为复杂,比如教师模型会用更深的网络结构来指导使用浅层网络的学生模型进行学习。而在优势特征中,教师模型和学生模型使用相同网络结构,而处理不同的输入特征。

paper:https://arxiv.org/abs/1907.05171

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值