赞
踩
知识蒸馏 (Knowledge Distillation KD) 是模型压缩(轻量化)的一种有效的解决方案,这种方法可以使轻量级的学生模型获得繁琐的教师模型中的知识。知识蒸馏使用一种教师—学生(Teacher-Student)训练结构,通常是已训练好的教师模型提供知识,学生模型通过蒸馏训练来获取教师的知识,能够以轻微的性能损失为代价将复杂教师模型的知识迁移到简单的学生模型中。在蒸馏的过程中,小模型学习到了大模型的泛化能力,保留了接近于大模型的性能。
知识蒸馏的方法,一般是先训练一个性能较好的教师模型(大模型),然后使用这个大模型的输出作为软标签,用数据的真实标签作为硬标签,两者联合起来去训练学生模型(小模型)。通过这种方法,可以把模型压缩到一个非常小的规模,而训练得到的小模型能够具有与复杂模型近似的性能效果,但是复杂度和计算量却要小很多。
最早知识蒸馏算法主要针对分类问题,分类问题的共同点是模型最后会有一个softmax层,其输出值对应了相应类别的概率值。一个很直白且高效的迁移泛化能力的方法就是:使用“软标签”。软标签是指输入数据通过教师模型所得到的softmax层的输出。软标签相比硬标签(Ground Truth),有着更高的熵,更小的梯度变化,因此学生模型相比教师模型可以使用更少的数据和更大的学习率(意味着收敛很快,这部分多出来的训练时间不是问题)。
softmax层的输出,除了正例之外,负标签也带有大量的信息,比如某些负标签对应的概率远远大于其他负标签。而在传统的训练过程(hard target)中,所有负标签都被统一对待。也就是说,KD的训练方式使得每个样本给Net-S带来的信息量大于传统的训练方式。
硬标签hard targets:输入数据所对应的label 例:[0,0,1,0]
软标签soft targets:输入数据通过大模型所得到的softmax层的输出 例:[0.01,0.02,0.98,0.17]
soft target有着更高的熵,更小的梯度变化,因此student相比teacher可以使用更少的数据和更大的学习率(意味着收敛很快,这部分多出来的训练时间不是问题)
1)训练大模型:先用hard target,也就是正常的label训练大模型;
2)计算“软目标”:利用训练好的大模型来计算“软目标”。也就是大模型“软化后”再经过softmax的output;
3)训练小模型,在小模型的基础上再加一个额外的软目标的损失函数,通过参数调节两个损失函数的比重,蒸馏损失如下图所示:
4)将训练好的小模型进行预测。
1、Distilling the Knowled
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。