知识蒸馏的简要概述
知识蒸馏是一种在繁琐的模型中提炼知识并将其压缩为单个模型的方法,以便可以将其部署到实际应用中。AI的教父Geoffrey Hinton和他在Google的两个同事Oriol Vinyals和Jeff Dean于2015年引入了知识蒸馏。
知识蒸馏是指将笨拙的模型(教师)的学习行为转移到较小的模型(学生),其中,教师产生的输出被用作训练学生的“软目标”。通过应用此方法,作者发现他们在MNIST数据集上取得了令人惊讶的结果,并表明通过将模型集成中的知识提取到单个模型中可以获得显着的改进。
知识蒸馏用于图像分类
Hinton和他的两位合著者在论文中首先介绍了他们对图像分类任务的知识蒸馏:在神经网络中提炼知识。
如本文所述,知识蒸馏的最简单形式是在具有软目标分布的传递集上训练蒸馏模型。到目前为止,我们应该知道有两个目标用于训练学生模型。一个是正确的标签(硬目标),另一个是从教师网络生成的软标签(软目标)。
因此,目标函数是两个不同目标函数的加权平均值。 第一个目标函数是学生预测和软目标之间的交叉熵损失,第二个目标函数是学生输出和正确标签之间的交叉熵损失。 作者还提到,最好的结果通常是通过在第二目标函数上使用较低的权重来获得的。
实验结果如下所示
知识蒸馏用于目标检测
Guobin Chen和他的合著者在NeurIPS 2017中发表了他们的知识蒸馏与提示学习相结合的对象检测研究,该论文通过知识蒸馏学习有效的对象检测模型。
在他们的方法中,他们还使用提示,该提示是从教师的中间层获得的特征图,用于指导学生尽可能地了解教师的行为。 此外,为了实现最佳的蒸馏知识,必须有一个适应层,该适应层将在后面讨论。 Faster-RCNN是本文实验中使用的目标检测网络。他们的学习方案如下图所示:
目标函数如下:
其中RCN和RPN分别代表回归分类网络和区域提议网络;N和M分别是RCN和RPN的批量大小;L_RCN,L_RPN和L_Hint分别是RCN,RPN和提示的损失;λ(通常为1)和γ(通常设置为0.5)是用于控制最终损耗的超参数。
Hint learning
Adriana Romero在《FitNets: Hints for Thin Deep Nets》一文中证明,通过利用教师网络的中间表示作为提示来帮助学生进行训练,可以提高学生网络的性能。从这个意义上讲,提示特征Z(从教师的中间层获得的特征图)和引导特征V(学生的中间层的特征图)之间的损失是使用L1或L2距离计算的。
下图显示了从在WAYMO数据集上训练的预训练YOLOv4模型中提取的特征图,这是我的与知识蒸馏进行目标检测有关的项目之一。 在这些示例中,输入图像的大小调整为800x800。
知识蒸馏和提示学习
Hint learning的使用要求提示功能和引导功能应具有相同的形状(高度x宽度x通道)。同样,提示特征和引导特征将永远不会在相似的特征空间中,因此,使用自适应层(通常是1x1卷积层)来帮助改善知识从教师到学生的转移。
下图描述了我在目标检测项目中正在研究的学习方案,其中,我正在使用一个具有三个检测级别的小型网络,从预先训练的YOLOv4中提取知识。
Guobin Chen在将知识蒸馏与Hint learning相结合进行目标检测时显示出优异的结果。
Conclusion
在这篇文章中,我简要介绍了知识蒸馏和Hint learning。知识蒸馏被认为是一种将繁琐的模型集成知识转换成较小的蒸馏模型的有效方法。Hint learning和知识蒸馏的结合是提高神经网络性能的一种非常强大的方案。
原文链接:
https://leantran.medium.com/a-gentle-introduction-to-knowledge-distillation-6ba069656420
本文来源于公众号CV技术指南的论文分享系列,更多内容请扫描文末二维码关注公众号。
最近把公众号(CV技术指南)所有的技术总结打包成了一个pdf,在公众号中回复关键字“技术总结”可获取。