跳到主要内容
一个数分不清“一直偏高”和“突然塌了”

一个数分不清“一直偏高”和“突然塌了”

画唠
画唠

· 阅读约 6 分钟

OPD 那套东西,说到底就是让学生模型自己走一遍,再拿教师给的对数概率去核对它走的每一步。监督信号是一个比值,一个数。

问题就出在这个“一个数”身上。

arXiv:2610.28194 这篇我翻了几遍,作者六个,末位是 Jing Huo,十月二十号挂出来的,到现在半个多月。标题写着 Adaptive Pullback,副标题落在 “Penalty Jumps” 上。它开头那句我看了两遍才反应过来:正的对数比会惩罚那些学生概率高过教师的 token,可单个比值本身,区分不了“持续偏高”和“沿回答突然抬升”。

第一遍读,我觉得这是废话。第二遍,我坐直了 ✨

因为真正想说的是“你现在用的这个信号维度不够”,这可不是废话。

先把图画开

拿一个回答,切成连续的 token 块,每块算一个平均惩罚。横轴块,纵轴惩罚:

惩罚
2.0 |                  ███
    |               ███
1.2 |        ███ ███
    |   ███
0.3 |███
    +--------------------------►
      b1   b2   b3  b4  b5  b6
                  ↑
             跳变在这儿

b2 到 b3 之间是“抬起来但还平”,b3 到 b4 是猛地一窜。你要只看某个 token 的比值,比如 1.8,你根本不知道它是从 1.7 一格一格爬上来的,还是从 0.2 一步蹦上来的。

这就是标量的代价。它告诉你多高,不告诉你多陡。

等等等等,先别急着说“加个差分不就完了”。加差分确实是这篇干的活,逐块比较相邻块的平均惩罚差。但加完差分之后它看到了什么,才是正题。

第二条曲线

在惩罚跳变的地方,教师的置信度同时往下掉。

画在一起:

      ████                     ← 惩罚
    ██
  ██
──┘
        ╲
         ╲╲                    ← 教师置信度
           ╲╲___

一边是学生在这儿被罚得突然变重,一边是教师自己在这儿也没那么笃定。作者给这现象起了个名,penalty-confidence tension。

我觉得这个名字起得比方法名好。它抓住的是:这两个信号单独看都不稀罕,惩罚高太常见,教师置信度低更常见;可它们同时落在同一个边界上,才构成一个事件。

然后是我认为全文最硬的一条对照:那些一开始就高、但不是跳上来的块边界,教师的置信度没有跟着掉。这一条比前面那个观察更要紧,它说明置信度掉的不是“惩罚高”这个状态,是“惩罚突然变高”这个动作。同一个数值,静态和动态,含义完全两回事。

打个比方,这有点像心电图:单看一个电压值没意义,ST 段抬高才有意义,而“抬高”这词本身就是相对的,得有基线。这个比喻挺好用,但它有地方漏风,我得老实标出来:心电是连续信号,你是先有波形再去找特征;这里是先人为把回答切块,然后才找跳变。块切多粗,直接决定你能看见什么。切太细,每块就几个 token,平均惩罚全是噪声;切太粗,一次跳变被抹平进一个大块里,直接消失。所以“跳变”这东西,有一部分是你的切法造出来的,不是纯粹从数据里长出来的。

然后是那个 Pullback

检测到跳变了,怎么办。

作者的解法朴素得让我愣了一下:拿前一块当参照,算一个缩放因子,把后一块里所有监督系数统一乘上同一个数,让后一块的加权平均惩罚回到前一块的原始均值水平。

  b3(参照)        b4(跳变块)
  均值 0.7    ──►   均值 2.1
                     × α ,α = 0.7 / 2.1
                 ──► 均值 0.7

一块,一个因子,统一乘。没有逐 token 精修,没有第二套网络,没有学一个权重预测器。

我第一反应是:这也太糙了。

第二反应是:等等,它没有旋钮!

这句是夸。α 直接由参照块算出来,方法里不引入额外的强度常数。意思是这玩意儿没有“调一调”的余地,它要么对要么错,你没法在验证集上把它调到刚好。一个所有人都在调蒸馏温度、调 KL 方向、调损失权重的领域里,冒出来一个没有超参的修正项,反而更像话。

而且方向很讲究。它不是“惩罚得更狠”,是“把这一块的惩罚拉回上一块的水平”。这俩差别大了:前者是加大力度,后者是保持一致性。我倾向认为后者才对——长链推理里,一个突然变重的惩罚会把这一小段的梯度整个放大,而它周围的上下文明明是对的,你等于在正确的前缀上插了一刀。

这段是我的判断,不是论文的结论。论文只报了数学推理和代码生成两类任务上的提升。我这么写,是因为我想不出别的解释。

我没画明白的几个地方

最没底的是缓慢漂移。相邻块比较抓的是“跳”。那要是惩罚从 b2 开始一路慢慢往上爬,每块只涨一点,一路爬到 b6 翻了三倍——逐块差分看过去,每一步都不算跳。这种它管不管?我不知道作者试没试过。我心里觉得这是个真窟窿,因为真实训练里漂移比跳变更常见。

再一个是参照块本身干不干净。α 是拿前一块当基准的,如果前一块本来就已经在崩了,只是崩得平缓没跳,那你拉回去的目标本身就是个坏目标。整个方法建立在一个假设上:跳变的前一块是好的。这在“错误是局部爆发”的场景下成立,在“从开头就在错”的场景下不成立。

还有切块这件事,我最想吐槽。块大小是个隐含超参。方法内部确实没有强度常数,可你怎么切,本身就在决定你能检测到什么。这个超参藏在预处理里,比写在公式里的更难被审。

收

这篇值得看的不是 AP-OPD 那个名字,是它示范的一件事:当你手里的监督信号是个标量,而你所有调参都在这个标量上做,你可能一直在把不同性质的东西平均掉。

“这个 token 学生一直偏高”和“这个 token 学生突然塌了”,在你的 loss 里长得一模一样。

画开之后就不一样了。

照例留个自检:你现在能不能用自己的话讲明白,为什么“惩罚跳变”这个信号,是单个 log-ratio 给不了的?讲不清楚的话,多半是“标量丢形态”那一步没扣上;那步卡住,后面 pullback 那套你看着就只是一个技巧,不会觉得是个必然。

下期想画开哪个,你说了算。我手上还压着一个没搞明白的:为什么教师置信度在长回答的后半段普遍往下掉。这个我到现在也没画明白,先放这儿,哪天扣上了再补。

画唠
画唠

把被讲玄的概念用图 + 比喻 + 动手实验拆到咔哒扣明白,错的也保留。

查看主页 →