什么是知识蒸馏?
把一个大的模型(定义为教师模型)萃取,蒸馏,把它浓缩到小的模型(定义为学生模型)。 即:大的神经网络把他的知识教给了小的神经网络。
为什么要知识蒸馏?
因为大的模型很臃肿,而真正落地的终端算力有限,比如手表,安防终端。 所以要把大模型变成小模型,把小模型部署到终端上。
轻量化神经网络都可以怎么做?
分为下面四个方向,知识蒸馏是其中一个方向。
学生网络接收到的标签?
一种是教师网络的输出, 一种是真实的标签。
什么是硬标签
硬标签是指在分类问题中使用的传统标签形式,通常是独热编码(one-hot encoding)的形式,其中每个样本只有一个类别被标记为1,其余为0。例如,在一个有10个类别的分类问题中,硬标签会以[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]的形式表示样本的类别。
硬标签是一种离散的、不可微分的表示方式,模型只能根据最终的预测结果与硬标签之间的差异进行损失计算和参数更新。
什么是软标签
软标签是相对于硬标签而言的另一种标签形式,它包含了关于每个类别的概率分布信息,使得每个类别都有一个介于0和1之间的概率值。软标签的概率分布可以提供更丰富、更连续的信息,能够传达更多的知识。
软标签是一种连续的、可微分的表示方式,允许模型在训练过程中根据概率分布的信息进行更细致的调整和学习。
hard targets的预测结果不科学,因为马和驴比马和汽车相似的多。所以驴和汽车都是0,没有表现出这个信息,所以要用soft targets
用教师网络预测出的soft target作为学生网络的标签。
蒸馏温度
softmax有放大差异的功能。
如果值高那么一点点,经过softmax的放大就会变得很高。
如果想让soft target更加平缓,高的降低,低的升高。
这时就要对soft target使用蒸馏温度。 让soft target更soft。
实现方法是在softmax的分母处加个T
让曲线更加平滑 高低值差距更小
为什么要加入蒸馏温度T让softmax的结果更平滑?
抑制过拟合: 高蒸馏温度下的软目标概率分布更平滑,相比硬目标更容忍学生模型的小误差。这有助于防止学生模型在训练过程中对教师模型的一些噪声或细微差异过度拟合,提高了模型的泛化能力。
降低标签噪声的影响: 在训练数据中存在标签噪声或不确定性时,平滑的软目标可以减少这些噪声的影响。学生模型更倾向于关注教师模型输出的分布,而不是过于依赖单一的硬目标。
提高模型鲁棒性: 平滑的软目标有助于提高模型的鲁棒性,使其对输入数据的小变化更加稳定。
知识蒸馏训练过程
如你所见
老师模型传给学生模型软标签用于学习
学生模型在学习之后返回软标签预测
并通过损失函数评价二者之间差距
学生网络可能是还没有训练的网络,也可能是训练一半的半成品网络。
学生也要保证不使用蒸馏温度时的结果与真实结果相接近。所以也有下面的传统硬标签损失
学生网络蒸馏温度为1(即不使用蒸馏网络)时的预测结果和真实的标签做loss.
使用软标签进行训练防止过拟合
第一个是使用传统方法
第二个使用大量硬标签训练 过拟合
第三个使用软标签训练 正常
参考文献:
神经网络学习记录——知识蒸馏、软标签、硬标签_知识蒸馏软标签-CSDN博客
全网最细图解知识蒸馏(涉及知识点:知识蒸馏实现代码,知识蒸馏训练过程,推理过程,蒸馏温度,蒸馏损失函数)-CSDN博客
零样本识别
论文里面说:以手写体数字数据集为例,假如在训练学生网络时把标签为3的类别全部去掉,
但是教师网络学过3。当使用知识蒸馏将教师网络学到的东西迁移到学生网络时,学生网络虽然没有见过3,但是却能识别3,即达到了零样本的效果
迁移学习和知识蒸馏的区别
迁移学习是把一个模型学习的领域泛化到另一个领域,比如把猫狗这些动物域迁移到医疗域。
知识蒸馏是把一个模型的知识迁移到另一个模型上。