\[q_i=\frac{\exp \left(z_i / T\right)}{\sum_j \exp \left(z_j / T\right)}\]
这里$T$是超参数,文中说是‘温度',经过该参数之后的softmax会更加平滑,分布更加均匀而大小关系不变。T参数在设置为1的时候就是平常的softmax函数。
在知识转换阶段,设置复杂网络与简易网络相同的T参数。在此之后再重新将T设置为1
Hinton等人做了三组实验,其中两组都验证了知识蒸馏方法的有效性。在MNIST数据集上的实验表明,即便有部分类别的样本缺失,小模型也可以表现得很不错,只需要修改相应的偏置项,就可以与原模型表现相当。
在语音任务的实验也表明,蒸馏得到的模型比从头训练的模型捕捉了更多数据集中的有效信息,表现仅比集成模型低了0.3个百分点。总体来说知识蒸馏是一个简单而有效的模型压缩/训练方法。这大体上是因为原模型的softmax提供了比onehot标签更多的监督信号
【KD的训练过程和传统的训练过程的对比】
传统training过程(hard targets): 对ground truth求极大似然
KD的training过程(soft targets): 用large model的class probabilities作为soft targets
【训练过程为什么有效?】
softmax层的输出,除了正例之外,负标签也带有大量的信息,比如某些负标签对应的概率远远大于其他负标签。而在传统的训练过程(hard target)中,所有负标签都被统一对待。也就是说,KD的训练方式使得每个样本给KD模型带来的信息量大于传统的训练方式。