10 年来,DNN 的变革给计算机视觉领域带来了重大发展,促成了各种实时任务的繁荣,如图像分类、目标检测、语义分割等。然而强大的网络通常得益于大的网络容量,这通常以大量的计算和存储为代价,是工业应用所不喜欢的。在工业应用中,广泛采用的是轻量的模型。知识蒸馏是减小这种代价的一个有效方法,它可以把重型模型的知识迁移到轻型模型上,从而提高轻型模型的性能。知识蒸馏的概念最初是 Hinton 在论文 “Distilling the knowledge in a neural network” 中提出的,它通过最小化老师网络和学生网络输出 logit 的 KL 散度来完成知识迁移,见下图 (a)。但是自从 Fitnets 以来,有关知识蒸馏的研究大多都转移到了对中间层的深度特征的知识蒸馏,因为基于特征的蒸馏在各种任务上都性能更加优异。然而基于特征的蒸馏有一个缺点:在训练过程中,会引入大量额外的对计算和存储资源的需求。
基于 logit 的蒸馏恰恰能解决这一问题,只是经典 KD 性能一般。从直觉上来说,基于 logit 的知识蒸馏应当能达到和基于特征的知识蒸馏相当的性能,因为 logits 相对于深层特征,表达了更高层次的语义。“Decoupled Knowledge Distillation”论文重构了经典知识蒸馏的表达方式,通过新的表达方式分析了经典的基于 logit 的知识蒸馏性能不理想的原因,并提出了解决问题的方法:解耦知识蒸馏(