FITNETS:|FITNETS: Hints For Thin Deep Nets论文初读
目录
摘要
引言
方法
KD的回顾
提出基于Hint的训练方式(应该就是CL)
与CL训练的关系
实验结果(挑选的有意思的)
实验分析
结论
摘要 不仅仅用到了输出,还用到了中间层作为监督信息
让学生网络变得更深的同时,让它变的更快
引言
- 之前蒸馏的做法:
另一篇论文是将老师模型的输出的软标签作为监督信息,来得到一个相同深度的网络
- 深层次网络有好处的证据:
sota都是深层的(19,22层)
- Curriculum Learning strategies有好处的原因:
加速收敛,在一个非凸问题上找到更好的局部最小值
- 本文的目的:
方法 KD的回顾
- 损失函数
文章图片
文章图片
文章图片
H表示交叉熵损失函数,小写的弯曲T表示一个soften因子
- 损失函数的分析
第二部分是为了引入除了概率最高的类别以外的其他类别的相对相似性的更多信息
在T非常小的情况下,梯度会接近于pi-qi,所以当多个类别的qi接近于0时,最终输出的相似性信息是没有体现在梯度中的,所以网络会忽略掉这些信息;当T非常大的情况下,梯度会接近li-zi,这时的梯度是logits之间的差,就算最终的概率值都很小的情况下,由于logits的值并不小,而且logits之间也是有明显区别的,所以也会将概率接近于0的类别的相似性信息考虑到
提出基于Hint的训练方式(应该就是CL)
- 损失函数
文章图片
其中:
uh代表teacher网络中的第一层到hint层的函数映射,Whint表示其中的参数;
vg代表student网络中的第一层到hidden层的函数映射,Wguided表示其中的参数;
r代表hidden层的一个额外的映射关系,Wr是其中的参数,这是为了使得hidden层与hint层的神经元大小一致
- Fitnet的分阶段训练
文章图片
用很小的随机值初始化Wr
通过HT损失训练Wguided(Figure 1(b))
通过KD损失训练Ws(Figure 1 (c))
与CL训练的关系
退化在KD损失中的lamda参数,使得在第二阶段训练的时候先着重训练简单样本,然后再降低简单样本的权重,这与CL的训练方式一样,只不过省掉了针对任务手动设计的先验信息。
实验结果(挑选的有意思的)
- 对比试验-关于用desired output代替hint的实验
分阶段训练,第一阶段用KD代替HT,第二阶段不变,结果失败;
联合训练,第一阶段不变(HT),第二阶段用交叉熵;结果失败;
联合训练,第一阶段不变(HT),第二阶段用KD,结果失败;
前两个实验说明了HT损失的重要性,不能被KD或者交叉熵代替的原因可能是KD或者交叉熵中的输出代表的是预测目标的类别信息,而要得到这个信息,需要网络得到一个较深语义的信息,这种特征需要比较深的层数才能提取到,而在网络的中间是提取不到的;
后两个实验说明了分段训练的重要性,原因,不知道,待补充。。。
不重要,待补充。。。。。
实验分析
文章图片
- 实验结果
在相同的计算量的情况下,更深的网络具有更好的性能
- 重要的分析
- 关于正则化的感悟
KD在损失中加入了teacher的经验,包含了除最大概率类别外的其他类别的分布信息,帮助网络学习较好的泛化规则
HT在KD的基础上,加入了hint损失,干预了网络对浅层单元的自我学习,帮助student网络学习好的特征
结论 用hint作为监督信息训练中间层要好于target
【FITNETS:|FITNETS: Hints For Thin Deep Nets论文初读】深层网络的性能能达到甚至超过10倍参数于它的浅层网络的性能
推荐阅读
- whlie循环和for循环的应用
- ffmpeg源码分析01(结构体)
- 【WORKFOR】最真的自己
- R|R for data Science(六)(readr 进行数据导入)
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- Swift7|Swift7 - 循环、函数
- 65|65 - Tips for File Handling
- 40
- 360|360 将停止 StartCom 数字证书业务;微软的 Visual Studio Tools for AI 现已提供使用