当前位置:网站首页>【论文阅读】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
边栏推荐
- .NET静态代码织入——肉夹馍(Rougamo) 发布1.1.0
- 离线部署通过tiup 配置好topology.yaml文件指定PD TV TIDBserver 是不是会自动在其他机器创建好对应得模块?
- PyQt5(一) PyQt5安装及配置,从文件夹读取图片并显示,模拟生成素描图像
- JSP页面中page指令contentPage/pageEncoding具有什么功能呢?
- 类和对象【下】
- Redis分布式锁
- Button to control the running water light (timer)
- 【开源项目】X-TRACK源码分析
- @RequestParam使用
- Biotinyl Cystamine | CAS: 128915-82-2 | biotin cysteamine
猜你喜欢
unity pdg 设置隐藏不需要的节点以及实现自动勾选自动加载项
HCIP9_BGP增加实验
Business Intelligence Platform BI Business Intelligence Analysis Platform How to Choose the Right Business Intelligence Platform BI
如何开启mysql慢查询日志?
USACO美国信息学奥赛竞赛12月份开赛,中国学生备赛指南
[OC学习笔记]ARC与引用计数
Biotin hydrazide HCl|CAS:66640-86-6|生物素-酰肼盐酸盐
mysql 中 in 的用法
cas:139504-50-0 美登素DM1|Mertansine|
MySQL ODBC驱动简介
随机推荐
uniapp 禁止默认返回事件
Application and case analysis of CASA model and CENTURY model
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
redis高阶使用之Redisson分布式锁源码解析
Redis分布式锁
C语言_指针
MySQL ODBC驱动简介
PyCharm使用教程(详细版 - 图文结合)
Stop mental exhaustion Daily sharing
PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
小说里的编程 【连载之二十四】元宇宙里月亮弯弯
Wang Xuegang - compiled shipment line file
(Note)阿克西斯ACASIS DT-3608双盘位硬盘阵列盒RAID设置
Spark 系统性学习笔记系列
如何建立私域流量?私域流量对企业有什么好处?
mysqldump --set-gtid-purged=OFF
小康股份更名赛力斯,如何走出一条高端产品的“丝绸之路”?
Redis分布式锁入门
pnpm:简介
postman使用方法