知识蒸馏有哪些实践路径?
收藏
知识蒸馏是先训练一个大模型,然后用大模型指导小模型训练,期望产生一个精度不输大模型且计算量小的模型,今天摸鱼时候刚好看到了这个方面的有关知识,目前有3种主要的蒸馏思路:
1. 基于输出结果的蒸馏,即让学生模型学习教师模型的软标签(分类等任务中)或者概率热度图(分割等任务中)。
2. 基于特征图的蒸馏,即让学生模型学习教师模型中间层的特征图,拟合中间层的一些特征。
3. 基于关系的蒸馏,针对不同的样本(假设个数为N),教师模型会有不同的输出,那么可以基于不同样本的输出,计算一个NxN的相关性矩阵,可以让学生模型去学习教师模型关于不同样本的相关性矩阵。
1
收藏
请登录后评论
第一种蒸馏思路是最常见和好理解的,训练好教师模型之后,对于每一个输入,可以将教师模型的输出作为标签。以前我还想过,能不能产生一些随机生成的输入,然后这些随机输入的标签设为教师模型的输出。这样在训练学生模型的时候能够获得近似无穷的数据。<_<
最近也在蒸馏模型,火候还真不好掌握啊
有时感觉模型在学习一一对应的输出,怀疑能不能泛化。。。
不行就原模型上裁剪然后再蒸馏finetune吧
优秀
蒸馏的火候不好把控,同样的方式,有些模型效果不错,有些直接crash触地。。。