跳到主要内容
教师越大,学生越不动:一份 OPD 学习信号消失的读论文笔记

教师越大,学生越不动:一份 OPD 学习信号消失的读论文笔记

abanana
abanana

· 阅读约 5 分钟

上个月月底跑一个小规模蒸馏实验,loss 前三十几步掉得挺像样,然后就贴着一条水平线走。我先怀疑 lr 调度写错了,翻出来看没事;又怀疑 dataloader 卡住,加日志看也正常;最后开始怀疑显存不够,悄悄降了 batch。折腾到半夜把训练日志一条条摊开,才发现参数几乎没动过——问题不是学得慢,是根本没在学。

那篇论文 10 月 8 号挂上 arXiv,编号 2610.11247,主分类 cs.LG,交叉挂了 cs.CL,五十页,配套代码也放出来了,作者是 Lei Zhao、Qichao Zhao、Bowen Zuo、Qishi Zhan 四个人。我一开始纯粹是被标题拽进去的:《Why On-Policy Distillation Sometimes Fails: Vanishing Learning Signals》。看完的判断很直接:OPD 的失败不是参数没调好,是动力系统本身把学习信号掐掉了,lr 再怎么扫也救不回来。这篇笔记就记这一件事。

先说那个让我坐直了的对照数字。 代码生成和数学推理两类任务,跑 200 次更新,用大规模教师做 OPD 的平均最终 loss 只降了 25.1%。同一套设置,教师换成 self-RL 教师——就是拿初始学生继续做强化学习训出来的那个——平均最终 loss 降了 96.2%。

这个对照真正扎人的地方在于,self-RL 教师的绝对能力大概率打不过那个大教师,可它带得动学生。也就是说,「教师更强,学生就更好」这条我们从前做 SFT 时养成的直觉,在 OPD 里直接失效了。我原来也一直这么以为,觉得教师只要够强,剩下都是工程问题,多跑几步总能对齐;这个数字基本把这个想法否掉了。

学生到底动没动,是我最想记下来的一步。 作者量了两样东西:参数的相对变化幅度,还有蒸馏前后表征的相似度。在出现平台期的那些 run 里,参数的相对变化只有 0.025% 到 0.098%,各层线性 CKA 全部大于 0.98。这两个数字摆在一起,意思很直白:模型基本没挪窝,只是输出看着还像那么回事。

我照这个思路,在自己的 checkpoint 上量了一遍,代码很短:

# 相对参数变化:两次 checkpoint 的同名参数逐层比
num = sum((a - b).pow(2).sum() for a, b in zip(after, before)).sqrt()
den = sum(b.pow(2).sum() for b in before).sqrt()
print((num / den).item())   # 我这边 6e-4 量级,落在论文那个区间里

再顺手量 CKA:

def linear_cka(X, Y):
    X = X - X.mean(0, keepdim=True)
    Y = Y - Y.mean(0, keepdim=True)
    return (X.T @ Y).norm() ** 2 / ((X.T @ X).norm() * (Y.T @ Y).norm())

每一层抽一批固定输入,取隐状态配对来算,再取平均。数值大过 0.98 意味着什么,不用我多解释。

原理那部分,我只读懂了一半。 作者把 OPD 建模成小学习率极限下的理想化连续时间动力系统,五十页里推导占了不少,我是跳着看的,没完全跟完,这里就不装了。但里面有一条我记住了:在正则性条件下,如果教师和初始学生在共享参数化下足够接近,学生是可以局部恢复学习的。这句话不花哨,但它把 self-RL 教师为什么行解释通了——它本来就是从学生自己身上长出来的,天然「近」。

另外,基于训练日志的诊断显示,平台期总是伴随一个基于梯度的学习信号代理指标提前衰减,而且是在 loss 还高的时候就衰减了。作者自己明确写了,这些测量并没有证明梯度减弱的成因。这一点我很欣赏,愿意把「我量到了什么」和「我知道为什么」分开写的人不多。他们给的解释是一个还待检验的假设:表征适应受限可能促成了学习信号崩溃。假设就是假设,别当结论用。

这里我要收回一句前面说得太满的话。 我一开始想写「教师越大越没用」,写到这儿觉得不对。论文讲的是机制,不是规模本身;表征动不了导致信号崩,这条因果链还没被证实。所以别拿这篇去当「别用大教师」的论据,那不是它的意思。💡 小技巧是把它当成一个诊断清单用:出现平台期,先量参数和表征,再去动超参。

能直接拿去用的东西,我整理成四条:

  1. 训练日志里除了 loss,固定加一路参数相对变化和逐层 CKA,两个加起来几十行代码,比事后翻 checkpoint 省事得多。
  2. 出现平台期先看这两个数,别急着怀疑 lr 和 dataloader——我那天晚上就是这么白熬的,顺序反了。
  3. 选教师的时候,除了看能力,也看一眼它跟初始学生的距离;有条件就自己 RL 一个 self-RL 教师当对照基线,这个基线比多看几个榜单有用。
  4. 平台期确认之后,先别加大更新次数,200 次更新只降 25.1% 这个数字说明堆步数解决不了问题。

划重点:第一,OPD 的 loss 平台期不是收敛,是学习信号提前没了,参数几乎没动;第二,教师够不够「近」比够不够「强」更值得先看一眼,96.2% 那个对照就是证据;第三,量参数相对变化和 CKA 是最便宜的两个诊断手段,值得常驻在训练脚本里。论文的代码是公开的,你可以拿手上那组跑不动的师生对复现一下这两个数,看看是不是也停在 0.0x% 那个量级;如果量出来的值跟论文对不上,先弄清楚差别出在哪,不用急着换教师。这条记下来了,下次再遇到平掉的曲线,我应该不会再从头怀疑 lr 了。

abanana
abanana

把自己踩过的坑整理成一篇能复现的笔记,写给三个月前的自己看。

查看主页 →