蒸馏这件事表面上看是让学生网络去模仿教师网络的输出天经地义。但如果你真的跑过几轮实验、盯着损失曲线和精度表格反复对比就会发现一个很别扭的现象学生网络在训练集上对教师输出的拟合越来越好测试精度却不一定跟着涨有时候甚至比不用蒸馏还差一截。NIPS 2023 那篇On student-teacher deviations in distillation: does it pay to disobey?讨论的正是这个别扭现象——学生和教师之间出现的系统性偏离以及这种不听话到底值不值。这篇论文阅读笔记面向已经上手做过知识蒸馏、想搞清楚为什么学生学歪了反而更好的从业者和研究者我会把论文的核心论点、背后的机制拆解、以及我自己复现时的操作细节和踩坑经验都摊开讲尽量让你读完能直接对照自己的训练脚本做检查。1. 先搞清楚这篇论文到底在问什么1.1 一个反直觉的实验现象知识蒸馏的常规流程很直白教师网络在某个数据集上训练好输出软标签学生网络同时拟合真实标签和教师的软标签温度参数 T 控制软标签的平滑程度。按经典解释软标签携带了暗知识——比如教师认为某张猫的图片有 0.1 的概率是狗这个信息比 one-hot 标签更有指导性。但论文关注的不是蒸馏有没有用而是一个更细的问题学生最终学到的函数和教师到底偏离了多少这种偏离是好事还是坏事。作者做了一个很干净的对照实验在同一数据集上分别训练教师、独立训练学生不用蒸馏、蒸馏学生然后比较它们在训练集上的预测一致性。结果发现蒸馏学生在训练集上对教师的拟合程度远高于独立学生这符合预期但把同样的比较搬到测试集上蒸馏学生和教师的预测一致性反而可能下降甚至低于独立学生。换句话说学生在训练集上乖乖听话在测试集上却自作主张而且这种自作主张有时候带来更高的精度。这个现象就是标题里 student-teacher deviations 的来源。我第一次读到这个结论时的反应是这不就是过拟合吗但论文的分析比过拟合三个字要细得多它把偏离拆成了可度量的成分并且指出偏离的方向是有结构的不是随机噪声。1.2 为什么这个问题值得单独拿出来研究很多人做蒸馏是把它当成一个即插即用的精度提升技巧调一调温度、调一调损失权重涨点就收工。但如果你要在一个新任务、新数据分布上决定要不要蒸馏、蒸馏强度多大光靠试错成本很高。论文的价值在于给出了一套分析框架把学生-教师的偏离分解为拟合教师的部分和拟合真实标签的部分并讨论两者在不同数据区域比如训练分布内 vs 分布外的相对贡献。这里有个关键概念需要先铺垫教师并不是完美的。教师在自己的训练集上也会有错误这些错误会通过软标签传递给学生。当学生过度拟合教师的软标签时它同时继承了教师的正确知识和错误模式。论文的核心论点之一就是学生在某些情况下 disobey教师即偏离教师输出实际上是在规避教师传递下来的错误这是一种隐式的正则化。提示读这篇论文时不要带着蒸馏一定有用或蒸馏一定有害的预设立场它的结论是条件性的——偏离是否有益取决于教师质量、数据分布和蒸馏强度的组合。1.3 论文的实验设置概览论文用的是标准的蒸馏实验框架教师和学生都是常见的卷积网络或 ResNet 变体数据集覆盖了图像分类的常见基准。温度 T 和损失权重 α 是主要调节变量。评估指标除了常规的测试精度还包括学生-教师在训练集和测试集上的一致率、以及偏离的方向性分析。我复现时用的是自己的一套小规模图像分类流程教师用较宽的骨干、学生用较窄的骨干这样蒸馏的收益和偏离现象都比较明显便于观察。需要说明的是论文里的一些理论分析建立在简化的线性模型或高斯数据假设上这些假设在真实网络上不完全成立但结论的定性方向在实验中是能对上的。读理论部分时建议先抓住定性结论再回头看推导细节否则容易被符号淹没。2. 偏离的两种成分拟合教师与拟合真值2.1 把偏离拆开看论文分析偏离时用了一个很实用的视角学生的预测可以看作两部分作用的叠加一部分来自对教师软标签的拟合另一部分来自对真实标签的拟合。蒸馏损失通常是这两项的加权和权重由 α 控制。当 α 较大时学生更倾向于拟合教师当 α 较小时学生更倾向于拟合真值。这个拆分的意义在于它解释了为什么训练集上拟合教师好、测试集上偏离教师可以同时成立。训练集上教师软标签是确定可得的学生当然能拟合得很好但测试集上教师的输出本身带有误差学生如果完全复制教师的误差模式测试表现就会受限。而学生在训练过程中同时受到真值标签的约束这个约束会让它在教师可能出错的地方保留一定的独立性从而在测试集上表现出偏离。我在自己的复现里做过一个对照固定教师和学生结构只改 α从 0.1 扫到 0.9。结果很清晰——α 越大训练集上学生-教师一致率越高但测试集一致率在 α 超过某个值后开始回落同时测试精度也出现同样的先升后降趋势。这个拐点的位置和教师质量强相关教师越强拐点越靠右也就是可以承受更大的蒸馏强度。2.2 教师误差如何被继承论文里有一个我觉得最值得记住的结论学生从教师那里继承的不只是知识还有偏差。教师在某些类别、某些样本上的系统性错误会以软标签的形式稳定地传递给学生。如果学生对这些软标签拟合过强就会把这些错误固化下来。举个具体的例子。假设教师对某个容易混淆的类别对比如两种外观相近的动物存在稳定的偏向总是把 A 类判成 B 类的概率给得偏高。学生如果 α 很大就会学到这个偏向在测试时对 A 类的召回率下降。而如果 α 适中真值标签的约束会部分抵消这个偏向学生在这些样本上反而可能比教师判得更准。这就是disobey带来收益的一个具体机制。这里有个实操上的注意点判断教师是否存在系统性偏差不能只看总体精度。我的做法是按类别统计教师的混淆矩阵找出教师自身错误率明显高于平均的类别然后单独看蒸馏学生在这些类别上的表现。如果蒸馏学生在这些类别上比教师还差说明蒸馏强度过大、偏差被继承了如果比教师好说明真值约束起了作用。这个诊断方法比只看总体精度有用得多。2.3 温度参数在偏离中的角色温度 T 的作用常被简单理解为软化标签、暴露暗知识但从偏离的角度看T 还影响学生拟合教师的难易程度。T 越大软标签越平滑类别间的相对关系信息越突出但绝对置信度信息被压缩T 越小软标签越接近硬标签教师的高置信预测被强化。论文的实验显示T 和 α 存在交互作用。在 α 较大时适当提高 T 可以缓解学生过度拟合教师高置信错误的问题因为平滑后的软标签削弱了单个错误预测的权重。但如果 T 过大软标签趋于均匀教师的信息量下降蒸馏退化为一种弱正则收益也随之消失。我实测下来T 在 2 到 5 之间是比较稳的区间具体取值要看教师输出的置信度分布。一个简单的检查方法统计教师 softmax 输出的最大概率分布如果大部分样本的最大概率都在 0.9 以上说明教师过于自信可以适当提高 T如果分布比较平T 就不宜太大。参数组合训练集一致率测试集一致率测试精度趋势α 小、T 小低低接近独立训练α 大、T 小很高可能回落先升后降α 大、T 适中高较稳较优α 大、T 过大中低收益消失这张表是我根据复现结果整理的定性趋势不是论文原文数据但方向和论文结论一致。用它来快速判断自己的参数组合处在哪个区间比较方便。3. 理论部分怎么读才不迷路3.1 简化模型给出的定性结论论文的理论分析用了简化的设定比如线性回归或两层网络配高斯数据目的是把偏离的来源在可控环境下算清楚。这些推导的细节对大多数从业者来说不必逐行跟但有几个定性结论值得记住。第一在教师存在噪声的情况下最优的蒸馏强度不是越大越好存在一个内部最优值。这个结论和实验里的先升后降完全对应。第二偏离的方向和数据的协方差结构有关教师误差在数据分布的主方向上和次要方向上的传递效果不同。第三当学生容量小于教师时学生无法完全复制教师这种容量差异本身就会导致偏离而且这种偏离不一定是坏事。我读这部分时的经验是先看每个定理的假设条件和结论陈述跳过证明细节然后回到实验部分对照看哪个结论被哪个实验支持。这样读一遍大概两三个小时能抓住骨架比从头啃证明效率高得多。3.2 理论和实验之间的缝隙必须提醒一点论文的理论假设和真实实验之间有缝隙。简化模型里的教师噪声是独立同分布的但真实教师的误差是有结构的、和样本相关的。所以理论给出的最优蒸馏强度只能作为定性参考不能直接拿来当超参数。我在复现时就吃过这个亏——按理论推导的某个比例设了 α结果在真实数据上明显偏大测试精度不如手动扫参找到的值。正确的用法是用理论理解为什么存在最优值和偏离为什么可能有收益然后用小规模扫参在目标任务上确定具体数值。扫参时建议固定随机种子、固定教师权重只变 α 和 T这样对比才干净。3.3 一个容易误解的点偏离不等于变差读这篇论文最容易产生的误解是既然偏离可能有益那是不是应该主动鼓励学生偏离教师不是。论文说的是偏离在某些条件下自然发生且有益而不是说可以人为制造偏离来提升性能。人为加大偏离比如故意降低 α 到很小会退化为普通训练失去蒸馏的意义而过度拟合教师又会继承误差。收益来自两者之间的平衡这个平衡是被损失函数的结构自然诱导出来的不是靠额外手段硬凑的。我在早期实验里试过加一个反蒸馏的正则项想让学生在教师高置信错误的地方主动偏离结果很不稳定不同种子之间方差很大。后来放弃了这个思路回到标准的损失加权靠调 α 和 T 来找平衡点稳定得多。4. 复现时的操作细节与踩坑记录4.1 环境与实验框架的搭建我的复现环境是一套常规的深度学习训练流程教师和学生用同一套数据管道区别只在网络宽度和蒸馏损失。关键是把教师权重冻结确保教师输出在整个学生训练过程中不变否则偏离分析就没有基准了。具体步骤上我先把教师训练到收敛并保存权重然后写一个只做前向的教师包装输出 softmax 概率带温度。学生训练时每个 batch 同时算两项损失对真值的交叉熵、对教师软标签的 KL 散度按 α 加权。这里有个细节容易错KL 散度的方向。论文用的是学生拟合教师即 KL(教师 || 学生) 还是 KL(学生 || 教师) 会影响梯度行为我按论文设定实现并在小数据上验证了损失下降曲线正常。注意温度缩放要在 softmax 之前做且学生和教师的温度必须一致否则软标签的尺度对不上KL 散度会算出无意义的值。这个错误我在第一次实现时就犯了损失曲线看起来在降但一致率指标完全不对。4.2 一致率指标的正确计算方式论文里的一致率指标看起来简单实现时却有几个坑。第一一致率的定义是学生和教师在测试样本上的 argmax 预测是否相同不是比较概率分布。第二要区分训练集一致率和测试集一致率前者用训练样本算后者用留出样本算不能混。第三如果数据集类别不均衡最好按类别分层统计一致率否则总体一致率会被多数类主导。我第一版代码把一致率算在了概率分布的 L2 距离上结果和论文的趋势对不上排查了半天才发现是指标定义错了。改成 argmax 一致率后趋势立刻和论文对上了。这个教训是复现论文时指标定义要逐字对照原文不要凭直觉实现。4.3 扫参过程中的实际观察扫参是我花时间最多的部分。固定教师和学生结构后我做了 α 从 0.1 到 0.9、T 从 1 到 8 的网格。观察到的几个现象值得记录。第一α 的影响比 T 更显著。α 从 0.3 提到 0.7测试精度的变化幅度明显大于 T 在 2 到 5 之间的变化。所以调参优先级应该是先定 α 的量级再细调 T。第二不同随机种子下最优 α 的位置有波动但先升后降的形状是稳定的。这意味着不要追求精确到小数点后两位的最优值找一个稳定的区间更重要。第三教师质量对结果影响极大。我换了一个训练轮数不足、精度偏低的教师做对照蒸馏的收益几乎消失甚至出现负收益。这印证了论文的观点偏离是否有益前提是教师本身足够好否则学生继承的误差会盖过收益。教师状态最优 α 区间蒸馏收益充分训练、高精度0.5 到 0.7明显正收益训练不足、中等精度0.3 到 0.5收益很小欠训练、低精度接近 0可能负收益这张表是我复现时的经验总结具体数值会随任务变化但趋势可以参考。4.4 一个隐蔽的坑数据增强的一致性蒸馏实验里教师和学生的输入必须经过完全相同的预处理和数据增强。我遇到过一次问题学生的数据管道里多加了一种随机裁剪导致同一张图教师看到的是完整图、学生看到的是裁剪图软标签和输入对不上蒸馏效果大打折扣。这个错误很隐蔽因为损失曲线看起来正常只是精度上不去。排查方法是固定一个 batch把教师和学生的输入张量打印出来对比确认逐元素相同。如果用了随机增强要确保增强的随机种子在教师前向和学生前向之间是同步的或者干脆在蒸馏阶段关闭随机增强只用确定性的预处理。我后来选择了后者牺牲一点增强多样性换取实验的可复现性。5. 这套分析框架能怎么用到实际项目里5.1 判断该不该蒸馏的快速检查在实际项目里拿到一个新任务我会先做一个低成本判断教师在这个任务上的精度是否明显高于学生独立训练能达到的水平。如果差距很小蒸馏的收益上限就有限不值得投入调参成本。如果差距明显再进一步看教师的误差结构——按类别统计混淆矩阵如果教师的错误集中在少数类别且模式稳定就要警惕这些错误被继承蒸馏强度不宜过大。这个检查流程不需要完整跑蒸馏只需要训练教师和独立学生各一次成本可控。我一般用这个流程先筛掉不值得蒸馏的场景避免在收益有限的任務上浪费时间。5.2 蒸馏强度与部署约束的权衡实际部署时学生模型往往有明确的容量和延迟约束这会影响蒸馏策略。学生容量越小越难完全复制教师偏离天然就大。这时候 α 不宜设得过高因为学生根本没有容量去拟合教师的全部输出强行提高 α 只会让优化更困难。我的经验是学生容量相对教师越小α 应该适当降低同时 T 可以适当提高用更平滑的软标签来传递类别间的关系信息而不是逼学生去拟合教师的绝对置信度。这个组合在小模型蒸馏里比较稳。5.3 偏离分析作为诊断工具即使不做蒸馏论文里的偏离分析思路也可以当诊断工具用。比如你有一个线上模型和一个离线重训模型可以比较两者在验证集上的预测一致率和分歧样本的分布分歧集中的区域往往就是模型不稳定的区域。这个思路和论文分析学生-教师偏离是同一套逻辑只是对象换成了两个模型。我在一个项目里用这个方法定位过问题重训模型和线上模型在某个类别上的分歧率异常高进一步查发现是该类别的训练样本在两次训练之间被重新标注过标注标准不一致。如果没有这个分歧分析这个问题很难被发现。6. 几个常见疑问的集中回答6.1 偏离越大是不是越好不是。偏离和收益的关系是倒 U 型的太小说明蒸馏没起作用太大说明学生过度拟合了教师的误差或者干脆退化为独立训练。要找的是中间那个平衡点而不是一味追求偏离。6.2 论文结论对小数据集成立吗小数据集上教师更容易过拟合误差结构更不稳定偏离的收益也更不确定。我在小规模数据上复现时蒸馏的收益波动明显大于大数据集最优 α 也更难稳定找到。建议在小数据集上做蒸馏时多跑几个种子看方差不要只看单次结果。6.3 这套分析对非分类任务适用吗论文的实验集中在图像分类但偏离分析的逻辑——区分拟合教师和拟合真值两种成分——对回归、检测等任务在概念上是通用的。不过具体指标要换比如检测任务上可以用框的 IoU 一致性代替 argmax 一致率。这部分论文没有展开属于合理外推用的时候要自己验证。6.4 复现时精度对不上论文怎么办先检查三件事指标定义是否和论文一致、教师权重是否冻结、数据预处理是否教师学生完全相同。这三项是我踩过坑的地方也是最常见的对不上的原因。如果三项都没问题再看教师质量是否达到论文设定教师不够强时偏离现象会不明显看起来就像复现失败。我自己在这个课题上折腾了几轮最大的体会是蒸馏的调参不是玄学偏离现象背后有清晰的结构只要把教师误差、蒸馏强度、学生容量这三个变量分开看很多看似随机的精度波动都能解释。论文给的分析框架不一定能直接告诉你最优超参数但它能告诉你往哪个方向调、以及为什么那个方向是对的这比盲目扫参省的时间多得多。
阅读完成 · 觉得有帮助?