Student Helping Teacher: Teacher Evolution via Self-Knowledge Distillation论文解读
前言
好久没在博客上发文了, 今天刚好是在假期的最后一天, 打算分享一篇关于自蒸馏的论文。
题目:Student Assisting Teacher: Development of the Teacher through Self-Knowledge Distillation
地址:https://arxiv.org/abs/2110.00329
github:https://github.com/zhengli427/TESKD/
主要思路
在蒸馏方法的发展历程中, 大部分研究主要依赖于teacher指导student的方式, 或者采用学生之间的相互监督机制. 然而, BYOT论文中的创新之处在于, 作者将学生模块分解为若干个独立的部分, 每一部分分别通过全连接层进行学习, 并基于交叉熵损失函数进行优化. 这一设计本质上等同于希望每一部分都能够掌握更加稳定和可靠的特征表示(值得注意的是, 在这种设置下形成的浅层特征通常无法达到较高的分类精度)。
在TESKD框架中, 作者采用了BYOT与FPN架构, 这种设计使得模型训练呈现出一种自蒸馏的特点. 不同层级的特征会相互融合并相互监督, 融合后的特征随后经过avgpool层以及全连接层, 最终仍具备分类能力. 这一过程进一步增强了特征的鲁棒性, 并带来了更加卓越的分类性能.
结构框图
该框架围绕着一个核心网络展开设计,在此过程中将核心网络划分为四个功能模块(T1至T4)。这些设计在主流架构如ResNet中均能轻松实现(通过不同Res stage输出特征图即可)。针对提取得到的特征向量,则采用右侧模块进行特征融合。具体而言,在左侧分支中,T_{b-1}模块接上1x1卷积层完成维度映射;而右侧分支则依次经历了两个阶段:首先是对S_b模块先经过2x2上采样后再接1x1卷积层完成通道维度转换(实际上包含了conv+bn+relu的操作),随后再对两支输出进行加法操作与通道合并;最后再通过一次全局平均池化操作生成最终预测结果。整个架构遵循FPN类似的层级关系
将处理完成后的结果S1至S3与avgpool模块(输出特征用于计算特征损失)以及全连接层(输出的对数几率被用来计算交叉熵损失和知识蒸馏损失)进行组合。整个架构安排合理。

最终loss也是包含这几个部分:CELoss、KDLoss、FeatureLoss。
在整个训练过程中,在这个阶段中我们实际使用的仅是teacher model这一基础模型。其中其他模型S1至S3仅作为辅助工具被使用,并且在训练过程中没有进行过预训练任务。这一过程也可以被视为一种特殊的自知识蒸馏方法的应用场景。这种思路本身非常具有创新性和吸引力。
实验
相较于其它方法而言,在cifar100上的优势更为突出一些,并且相较于以往的蒸馏技术而言表现更为出色。

此外,在对比分析的基础上展示了该方法与BYOT的相似性之外,在具体实现过程中两者均具备较高的一致性

有效的蒸馏方法必须能够在ImageNet等复杂场景中表现出色。通过实证研究和实验验证表明,在CIFAR-100数据集上的进步相对较小。实际上,在深度学习模型中应用正则化方法是一种常见的策略。值得注意的是,在面对海量数据时(比如在ImageNet这样的大规模数据库上),模型的能力往往也会受到限制。

作者还进行了若干个消融实验,并进一步考察各模块的作用权重变化情况。经过分析比较后发现,在提升整体性能方面蒸馏loss起到了最为关键的作用。对比实验结果表明,在提升整体性能方面蒸馏loss起到了最为关键的作用。相比之下,在MFM模块内部各组件的设计也带来了额外的性能优化效果。

结论
一种创新性的自蒸馏方法,在现有研究中已经不谋而合地倾向于采用特征融合与知识蒸馏相结合的方式展开探索。我们有理由相信,在这一领域仍有许多值得我们深入挖掘其潜在优势的方向。值得注意的是,在实际应用中是否需要舍弃一个精度更高的教师模型呢?从整体精度角度来看这一选择仍存在商榷的空间,并且这一问题值得我们共同探讨和解决。
