前言
蒸馏就是把一个大模型变成一个相对小的模型
一、蒸馏的目的
Distill knowledge from bigger models
从大模型中学习知识
Use the distilled knowledge to guide the learning of smaller models
用学习到的知识指导学习一个更小的模型
Use smaller models to mimic the effect of bigger models
小模型的效果可以逼近大模型的效果
二、蒸馏中的softmax
以分类问题为例。关于分类问题,就会想到softmax(一个向量中的每一个分量先求指数,然后求所有分量指数分和,指数/和得到一个新的分量,组成新的向量,和为1),蒸馏中的softmax也是这样的处理思路,只是加了一个温度指数T,将e的指数再除以T;
那么当T=1时,没有区别
当T=100时,差异变小
当T=+∞时,每个分量的指数形式变成1,那么新的向量x=1/n
三、蒸馏流程
1.step
首先训练大模型(a),softmax(1),得到一个输出(0.97,0.029,0.001);
2.step
然后通过调整蒸馏温度(b),softmax(T),从大模型蒸馏学习,得到输出(0.56,0.24,0.2),可以看到,通过设置蒸馏温度后,模型的输出值逐渐变得相互接近,而这个值反而时利于模型训练的,也就是1中的输出便于判断,2中的输出便于学习。
3.step
- 将2中的输出作为数据进行输入,学得小模型(c)。学习过程中设立两个分支,一个是蒸馏分支softmax(T),一个是大模型分支softmax(1),通过调整系数 𝜆 ,规定是蒸馏的知识学的多,还是大模型的知识学的多。
4.总结:
首先训练大模型;
大模型训练好后改变softmax的温度参数T,用T调整信息的蒸馏程度;
用蒸馏后的输出数据去训练一个小模型,小模型中根据不同的比重学习蒸馏知识和标签知识。