本文主要是介绍Similarity-Preserving Knowledge Distillation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Motivation
下图可以发现,语义相似的输入会产生相似的激活。这个非常好理解,这个C维的特征向量可以代表该输入的信息
因此本文根据该观察提出了一个新的蒸馏loss,即一对输入送到teacher中产生的特征向量很相似,那么送到student中产生的特征向量也应该很相似,反义不相似的话同样在student也应该不相似。
该loss被称为Similarity-preserving,这样student不用去mimic teacher的特征空间,而只用在自己的特征空间保持成对的相似度就好
横坐标:0-1000为1000个类别为0的图片,1000-2000为1000个类别为1的图片,同理以此类推
纵坐标:WideResNet-16-2在CIFAR10test集上最后一个卷积层在channel上平均激活,WHC → C维向量(图中是采样了部分通道)
Method
Qs: (b, chw),Gs: (b, b),然后进行L2 norm
以下为4个batch的可视化,每个batch包含128个样本
可以看到每个batch之间的相似度在student和teacher表现是一致的
Similarity-preserving Loss:
l,l’ 为对应的层,每个block的最后一层
传统的KD
优势:
- 不用mimic teacher的特征空间,当teacher训练的资源已不可获取时,这时只用模仿teacher在目标域样本之间预测的相似度
扩展应用:
和pretrain finetuning联系起来做Transfer learning
- 用已有的模型做pretrain
- 然后finetuning时用CE 和 SP loss
semisupervised
- 有label的地方用CE
- 无label的地方用SP
Experiments
Win:loss,和AT的胜负比
这篇关于Similarity-Preserving Knowledge Distillation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!