深度学习进阶(七)Data-efficient Image Transformer
DeiT 的两种蒸馏方式#
DeiT 出自 ViT 的同年论文: Training data-efficient image transformers & distillation through attention.
它并不是简单地套用标准蒸馏,而是针对 Transformer 的结构,设计了两种蒸馏策略:
1.1 硬蒸馏 Hard Distillation#
这种方式非常直接: 把 Teacher 的预测类别,当作额外的监督信号。
也就是说,Student 同时学习两个标签:数据的真实标签 和 Teacher 给出的预测标签 。
其损失函数可以写为:
要提前强调的是,这里的公式只是通用形式,实际上在 DeiT 中使用的不是同一个 ,下一部分就会展开。
回到这里,其实对比我们在上一篇展开的蒸馏过程,这种方法看起来有些没必要:
只是多加一个标签,预测正确没有更多信息,预测错误反而影响拟合,为什么要这么做?
要理解来说,其实还是和 Teacher 本身的蒸馏意义相关:而在于通过 Teacher 的预测结果,引导 Student 在优化过程中靠近一个“更合理的决策边界”,从而提升训练稳定性。
比如真实标签是“狼”,但 Teacher 预测结果是“狐狸”,这样就可以让模型在“语义接近类别”之间间接引导模型学习更合理的决策边界。
不过,对比现代的蒸馏方法,这种方法已经很少单独使用了,我们知道就好。
1.2 软蒸馏 Soft Distillation#
第二种方式就是我们前面介绍的标准蒸馏:让 Student 去拟合 Teacher 的概率分布。
其损失函数为:
显然,相比硬蒸馏,这种方式包含更多信息,在现代使用中也更主流。
不过,在 Transformer 之前,蒸馏技术就已经出现,如果只是在 ViT 中加入蒸馏技术,本质上只是 A+B 的工作罢了。
DeiT 的关键创新点在于:
把“蒸馏过程”也做成了 Transformer 结构的一部分。
我们下面来详细展开这部分逻辑:
2. DeiT 的核心改进#
2.1 输入处理#
DeiT 实现蒸馏逻辑的具体做法是:
在输入序列中,再额外引入一个 distillation token。
我们来理顺一遍,首先,是原始图像切分出的 patch token :
在此基础上,我们为了整合全局信息用于 CV 任务,又加入了 [CLS] token :
而现在,在 DeiT 的设计中,我们再加入一个 Distillation token,即蒸馏 token :
这个 就专门用于学习 Teacher 的信息。
2.2 传播逻辑#
知道又加了一个 distillation token 后,和 [CLS] token 一样的问题是:
我们如何实现 distillation token 专门学习 Teacher 信息的语义?
答案的关键词是:双输出结构。
我们从原本的 ViT 来展开改进过程:
更多推荐


所有评论(0)