当前位置:网站首页>【论文阅读】Distilling the Knowledge in a Neural Network
【论文阅读】Distilling the Knowledge in a Neural Network
2022-08-02 08:07:00 【weixin_45592399】
论文原地址:http://arxiv.org/abs/1503.02531
这篇文章是Hinton在2015发表的文章,是知识蒸馏(knowledge distillation)的开山之作。
知识蒸馏是一种教师-学生模型(Teacher-Student Model),其核心思想是,将复杂模型(教师模型)中的知识转移到一个简单模型(学生模型)中,使学生模型拥有能够媲美教师模型准确率的能力。
1介绍
背景
机器学习的实际应用中分为两步,模型训练和部署。
在机器学习中,我们倾向于使用非常相似的模型进行训练(train)和部署(depolyment),尽管这两个阶段显然有不同的需求:
在训练过程中,我们需要使用复杂的模型,大量的计算资源,以便从非常大、高度冗余的数据集中提取出信息。在实验中,效果最好的模型往往规模很大,甚至由多个模型集成得到。而大模型不方便部署到服务中去(受限于推理速度,资源设备)
暗知识
soft target和hard target
这里有
soft target的输出信息量要大于hard target的信息量。
例如这里的手写数字2,它的标签就是2,也就是说这个数字是2的概率为1,是其他数字的概率为0,我们把这种标签就称作hard targets。(后面也称真实标签,标记,ground truth)
但是对于soft target,此时2的概率最高,3的概率次之,其他相同,则我们可以知道错认为3会比错认为其他有更大的可能。这可能是因为3与2之间有跟多的相似之处
值得注意的是 对于Mnist数据集中总是产生具有信心的正确结果,很多非正确数字的概率都是非常小的。例如,对于正确的2来说,被分类为3的概率为 1 0 − 6 10^{-6} 10−6 ,被分类为7的概率为 1 0 − 9 10^{-9} 10−9 。在这种情况下soft target的帮助就很小,所以Caruana在其文章中使用log函数解决这一问题。本文利用蒸馏解决这个问题(蒸馏会使得target变得更加平滑)
蒸馏温度T
原softmax公式:
q i = e x p ( z i ) ∑ j e x p ( z j ) q_{i}=\frac {exp({z_i})}{\sum_jexp(z_j)} qi=∑jexp(zj)exp(zi)
加入温度系数T后的公式:
q i = e x p ( z i / T ) ∑ j e x p ( z j / T ) q_{i}=\frac {exp({z_i}/{T})}{\sum_jexp(z_j/T)} qi=∑jexp(zj/T)exp(zi/T)
在加入T之后的softmax的概率分布更加平滑,作为soft target时简易(student)网络能学到更多东西。
步骤
1.教师模型的训练,这一步通过带有标签的数据集对复杂模型进行训练。最终我们得到了一个已经训练好的教师网络。
2.通过教师模型对学生模型的训练,这里我们就引入了超参数T改进后的Softmax函数
3.学生模型单独做预测
具体来说,
①在将大模型生成的logits送入输出层softmax之前,除以一个比较大的值T=
t,得到更加平滑的概率分布作为soft target(软目标、软标签)。这个概率分布在0~1之间,取值分布缓和
tip:T数值越大,分布越缓和;而T数值减小,容易放大错误分类的概率,
引入不必要的噪声。针对较困难的分类或检测任务,T通常取1,
确保教师网络中正确预测的贡献。
②学生模型会有两个softmax函数,一个T=t,一个T=1。
学生模型经过T=t的softmax函数后会产生soft prediction,此时soft target和soft prediction计算交叉熵损失,这个损失称为蒸馏损失(distillation loss)。通过其来减小soft target和soft prediction之间的差别。
学生模型经过T=1的softmax函数后产生的hard prediction与硬目标hard target
计算交叉熵损失,这个损失称为学生损失(student loss),这个就是传统的损失计算。 这里的硬目标则是样本的真实标注,可以用One-hot矢量表示。
总损失Total loss设计为软目标与硬目标所对应的交叉熵的加权平均,公式如下
L o s s = λ L s + ( 1 − λ ) L h Loss=λL_{s}+(1−λ)L_{h} Loss=λLs+(1−λ)Lh
其中, L s L_{s} Ls表示蒸馏损失, L h L_{h} Lh表示蒸馏损失, λ表示系数,
软目标交叉熵的加权系数越大,表明迁移诱导越依赖教师网络的贡献,通常初始Ls权重更高,之后慢慢减小这对训练初期阶段是很有必要的,有助于让学生网络更轻松的鉴别简单样本,但训练后期需要适当减小软目标的比重,让真实标注帮助鉴别困难样本。
作用:
蒸馏损失:保证小模型和大模型的结果一致性
学生损失:保证小模型的结果与实际类别标签一致性
参考
Distilling the Knowledge in a Neural Network[论文阅读笔记]
如何理解soft target这一做法?
【知识蒸馏】Distilling the Knowledge in a Neural Network
【论文阅读】Distilling the Knowledge in a Neural Network
边栏推荐
猜你喜欢
Biotin-EDA|CAS:111790-37-5| Ethylenediamine biotin
Biotin - LC - Hydrazide | CAS: 109276-34-8 | Biotin - LC - Hydrazide
C语言基础_结构体
EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
CASA模型、CENTURY模型应用与案例分析
C语言_指针
Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案
52.【bool类型输入任何非0数值不为1的版本原因】
小康股份更名赛力斯,如何走出一条高端产品的“丝绸之路”?
Shell becomes canonical and variable
随机推荐
AttributeError: module ‘clr‘ has no attribute ‘AddReference‘
[ansible] playbook explains the execution steps in combination with the project
unity pdg 设置隐藏不需要的节点以及实现自动勾选自动加载项
[OC学习笔记]Block三种类型
Shell变成规范与变量
Axial Turbine Privacy Policy
2022-7-31 12点 程序爱生活 恒指底背离中,有1-2周反弹希望
高仿【华为消费者业务官网】和精彩动画剖析:练习在低代码平台中嵌入JS代码
Biotin-LC-Hydrazide|CAS:109276-34-8|生物素-LC-酰肼
C语言_条件编译
Ansible 学习总结(11)—— task 并行执行之 forks 与 serial 参数详解
JSP页面中page指令有哪些属性及方法可使用呢?
小说里的编程 【连载之二十一】元宇宙里月亮弯弯
ip地址那点事(二)
Flink 程序剖析
Elasticserch 自定义字段,用户会频繁的创建和删除字段,怎么设计mapping?
pnpm的安装与使用
软件测试技术之解析图灵测试离我们还有多远
血气方刚的年轻小伙竟去做家政小哥,是怎样成功逆袭转行的
@RequestBody使用