两种蒸馏形式:模型蒸馏 (模型压缩,模型不同,特征相同)
优势特征蒸馏(大模型使用全量特征,适用于模型相同,特征不同)
俩种训练方式:
pre-train是预先训练teacher网络,然后再训练student网络;
co-train则是通过上述介绍的损失对teacher网络和student网络进行联合训练,co-train方式往往训练速度更快,但所需的GPU资源也会更多。
- teacher - 原始模型或模型ensemble
- student - 新模型
- transfer set - 用来迁移teacher知识、训练student的数据集合
- soft target - teacher输出的预测结果(一般是softmax之后的概率)
- hard target - 样本原本的标签
- born-again network - 蒸馏的一种,指student和teacher的结构和尺寸完全一样
- teacher annealing - 防止student的表现被teacher限制,在蒸馏时逐渐减少soft targets的权重
- temperature - 蒸馏目标函数中的超参数
蒸馏时的softmax
比之前的softmax多了一个参数T(temperature),T越大产生的概率分布越平滑
两种蒸馏的目标函数:
1:只使用soft targets:在蒸馏时teacher使用新的softmax产生soft targets;student使用新的softmax在transfer set上学习,和teacher使用相同的T
2:student的目标函数是hard target和soft target目标函数的加权平均,使用hard target时T=1,soft target时T和teacher的一样。
T越大越能学到teacher模型的泛化信息。
T可以尝试1~20之间
在蒸馏时,我们要让student模型学习到teacher模型的概率输出,如果还保持之前的概率分布,那么会让大部分的概率信息无法被学习。因此,通常在对Logits进行概率化之前,要先对Logits除以一个temperature,让不同类别的概率差异稍微变小一点(如果老师模型输出的概率差距过大,则学生模型学不到啥,所以需要温度参数调节使得老师模型的概率输出平滑一些)
传统训练方式:认为每个样本的负标签都一样,统一对待,而蒸馏方式使得每个样本给Student模型带来的信息量(分布概率越平缓,熵值越大)大于传统模型
温度参数的大小:决定学生模型训练过程中对负标签的关注程度,T越大,概率分布越平滑,熵越大,对负标签关注越大。
蒸馏过程中,先让T变大,测试阶段回复为1
由于Lsoft贡献的梯度是Lhard的1/T2,所以Lsoft的权重要乘以T2
p是学生输出概率,q是老师输出概率,y是样本标签
蒸馏这个概念之所以work,核心思想是因为好模型的目标不是拟合训练数据,而是学习如何泛化到新的数据。()