更会做一件事,不代表其他方面没变

一个模型微调(fine-tuning)后更会遵守格式,却更容易拒绝本来无害的问题;也可能代码成功率提高了,其他任务基本没变。两者都得实际测,不能先假设对齐一定让模型“变笨”或一定没有代价。对齐训练带来的这类能力退化,常被叫作对齐税(alignment tax)。

Alignment tax 通常指为了改善某些目标而出现的性能退化。多样性(diversity)下降是可能的一项,不是这个词的全部定义。

这一篇先看有哪些变化,再把最容易误读的“熵下降”算清楚。如果你在排查一次训练,可以直接看固定什么、比较什么。

除了总分,还可以看这些变化

输出多样性下降。 同一个提示采样多次,回答可能更相似。需要区分措辞相似、语义相似和有效解法减少,不能只数不同的字。

熵下降。 策略可能越来越集中。对于正 advantage 的低概率动作,固定 ratio 上界对应的绝对概率增量很小,这可能限制它从单个样本获得的激励;但 clipping 不是实际概率的硬约束,也不是熵下降的唯一原因。PPO、GRPO 与 DPO和 Clipping 与梯度会继续讨论不同裁剪方式。

回答变得套路化。 如果标注反复偏爱某种措辞或格式,模型可能更常使用它。需要检查这是否挤掉了更直接、有用的回答,而不是仅凭风格变化判断退化。

过度拒绝。 如果数据和奖励(reward)没有分清危险请求与表面相似的无害请求,模型可能一起拒绝。把这类无害问题单独测试,比把所有拒答都算好或都算坏更有用。

熵下降,先别急着叫它“坍塌”

一道题只有 A、B 两种答案,模型原来各给 0.5,后来给 A 0.9、B 0.1。它确实更确定了,但这是不是坏事,还得知道 A 是什么。如果 A 正确,这是学会了;如果 A 只是评分器喜欢的错误答案,才需要担心。

固定上下文 h,下一 token 的熵是:

$$ \begin{aligned} H(\pi\mid h) &=-\sum_v p_v\log p_v,\\ p_v&=\pi(v\mid h). \end{aligned} $$

这里对整个词表(vocabulary)求和,log 用自然对数,单位是 nat。两种等概率选择的熵是 $\log2\approx0.693$;变成 $(0.9,0.1)$ 后约为 0.325。熵告诉你分布有多集中,不告诉你集中了什么。

训练里说“熵坍塌”,通常不只是在说这个数变小,而是在担心有用的探索过早消失,继续采样也很难找到新的有效解法。需要把熵曲线、独立质量和多次尝试的覆盖一起看。

日志里的数 实际在量什么 容易误读的地方
完整词表熵 固定前缀下,下一 token 的分布 不等于整条推理的语义多样性
采样 token 的负 log probability 这一条样本的 surprisal 单个样本不是熵;在匹配的分布下取期望才是
平均 token 熵 一批前缀上局部分布的平均 要说明按 token 还是按回答平均,以及 mask
不同答案 / 解法的数量 当前预算下观察到的结果变化 换措辞不一定换解法;错误答案也能很多样

例如 $(0.9,0.1)$ 下,采到 A 的 surprisal 约 0.105,采到 B 约 2.303,两者都不是 0.325。若从经过 top-p 截断的分布 q 采样,却记录原模型 p 的负 log probability,平均值是两者的交叉熵(cross-entropy),不是 p 自身的熵。

还有一个很容易漏掉的细节:2-token 回答平均熵为 1,8-token 回答平均熵为 0.1。按回答等权平均得到 0.55,按 token 平均只有 0.28。模型变得更爱写长答案时,这两条曲线可能给出不同印象。Padding 不算,有效的 EOS 是否计入也要固定。

低熵不等于 reward hacking

下面是 4 个刻意简化的策略。每个只在两种输出之间选择,输出本身是否完成任务已知,不是靠训练评分器猜的:

输出选择 概率 熵(nat) 真正完成任务的概率
正确 A / 正确 B 0.9 / 0.1 0.325 1
正确 A / 正确 B 0.5 / 0.5 0.693 1
漏洞 A / 漏洞 B 0.9 / 0.1 0.325 0
漏洞 A / 漏洞 B 0.5 / 0.5 0.693 0

假设有缺陷的评分器给这 4 种输出都打满分,训练奖励就区分不了这 4 行。高熵策略也能换着花样利用漏洞;低熵策略也可以稳定答对。因此,提高熵不是修复错误奖励的替代品。验证器怎么检查,见可验证奖励。

什么情况下会偏向少数答案?

先看一个刻意简化的目标:同一个问题只允许回答 A 或 B,固定奖励分别是 1 和 0.8。若没有其他约束,期望奖励是 $p\times1+(1-p)\times0.8$,提高 A 的概率总能提高这个数。

这说明不带正则的期望奖励最大化,可能偏向少数高奖励答案;并不能说明实际 RLHF 必然坍缩。加入 KL 或熵项后,目标已经变了。例如在有限答案集合、固定 reward、$\beta>0$ 且 Reference 支持相应答案的条件下:

$$\max_\pi\ \mathbb E_\pi[r]-\beta D_{\mathrm{KL}}(\pi\|\pi_{\rm ref})$$

对应最优分布为:

$$\pi^*(y)\propto\pi_{\rm ref}(y)e^{r(y)/\beta}.$$

结果依赖奖励差、Reference 和 $\beta$,未必是单点分布。SFT 也可能因为数据单一而丢失多样性。所以最终要比较训练数据、目标和解码设置,而不是仅凭算法名字下结论。

再算一步:同样提高正确答案概率,熵也可能先升后降

设正确答案 A 的概率为 $p=\sigma(\theta)$,奖励为 1,B 的奖励为 0。期望奖励 J=p,因此梯度上升时 $d\theta/dt=p(1-p)$。二元熵的导数是:

$$\frac{dH}{dp}=\log\frac{1-p}{p}.$$

所以小步更新时:

$$ \begin{gathered} \frac{dH}{dt} =\frac{dH}{dp}\frac{dp}{d\theta}\frac{d\theta}{dt}\\ =[p(1-p)]^2\log\frac{1-p}{p}. \end{gathered} $$

p=0.2 时,提高正确答案概率会让分布靠近均匀,熵上升;p=0.8 时,同样的学习方向让分布更集中,熵下降。两种情况的正确率都在提高。这是一个独立二元参数的教学推导,不能直接套成共享参数 LLM 的完整训练定律。

论文里的熵曲线,能推广到哪里?

The Entropy Mechanism of RL(2025,v1)§2–4研究了数学、代码任务中的早期熵下降和性能平台,并提出 Clip-Cov / KL-Cov。论文也明确讨论了不同模型、数据条件下可能出现不同曲线;不能把实验中的步数或拟合关系当作所有训练的定律。

KL-Cov 在该版本的式 (14) 中约束的是 rollout old policy 与当前 policy,不是固定 SFT Reference;也不是把选中 token 的 log-prob 差取绝对值就等于 KL。实现前要核对分布、方向、采样和有效位置,不能只照着名称拼 loss。KL 估计笔记继续讲这部分。

固定什么、比较什么?

先留一组固定题目和前缀,比较不同 checkpoint 在相同前缀下的完整词表熵;再让它们各自生成,比较实际质量和探索。前者尽量隔离分布本身的变化,后者包含模型走向不同上下文的影响。两者不能混成一条曲线后解释。

观察到的现象 先做的对照 可能的下一步
熵下降,成功率提高 固定预算下,多种有效解法是否仍能找到 不必为了熵低而改算法
熵和有效解法覆盖一起下降 固定题目、采样配置、长度;按难度切片(slice) 查重复数据、过强更新、采样和截断
训练奖励升,独立质量降 用未参与筛选的检查重新评估样本 修奖励或数据;单加 entropy bonus 不够
只有生成日志里的熵变了 在同一组前缀重算,核对 temperature / top-p / mask 排除统计口径和采样变化
某个干预使熵升高 检查等预算成功率、成本和失败类型 熵升高本身不是干预成功

小规模消融(ablation)可以分别调整学习率 / 每批更新次数、数据配比、KL 或 entropy 系数、clipping 上界。一次改一个因素,记下验证质量和生成成本。更高 temperature 只改变采样,不等于修好了参数;更强 KL 可能保住旧行为,也可能妨碍学新行为;entropy bonus 也可能鼓励无用随机性。采用哪个,得由任务结果决定。

教学脚本复算本页的熵、两种平均和二元更新。没有跑真实 LLM 训练,也不把这些数当作 DAPO 或 KL-Cov 的复现结果。

发现退化后,先找它来自哪里

有的实验观察到任务泛化改善,同时输出多样性下降;这不等于每次训练都必须拿后者换前者。InstructGPT也展示了通过修改训练过程减轻部分基准退化的做法。

对自己的任务,更有用的问题是:这项退化是否稳定出现?影响谁?换数据配比、正则强度或解码方法后,还存在吗?这些对照可以帮助区分暂时的实现问题和更难避免的目标冲突。

一次答对,和多试几次能答对

同一题独立采样,单次成功概率是 $p$ 时,至少一次成功的概率是 $1-(1-p)^k$。固定这道题和采样分布(sampling distribution),$p$ 提高,这个数也会提高。

所以,如果数据集平均 pass@1 上升、平均 pass@k 却下降,不能直接断言“分布塌成了一个点”。模型可能把收益集中在容易题上,也可能改变了难题覆盖;实际估计还受采样方式和样本量影响。RL 到底只是在“锐化”已有解法,还是学到了新解法,这场 pass@k 之争的证据和反方见前沿草稿测试时计算:怎么比较、怎么读数字。

想知道什么 怎么检查
哪些任务改善或退化 相同题目与预算下做配对比较,按难度和类型切片
多次尝试是否还有帮助 同时看 pass@1、pass@k 和每题成功率分布
回答是否只是换了措辞 区分词汇变化、语义变化与真正不同的有效解法
是否过度拒绝 单独测明确无害的问题,人工复核拒绝原因
表现差异是否由采样造成 固定 temperature、长度限制和候选(candidate)预算,再做敏感性分析

这些指标各自回答一个问题。需要多个尝试的应用,尤其要把有效解法的覆盖和每次尝试的成本一起看。

一个实践上的建议

在训练开始之前,先在这一步的起点模型(基座或上一阶段的 checkpoint)上把上面这些量测一遍,存成一条基线(baseline)。

评估退化需要一个有意义的对照,通常是这一步训练之前的 checkpoint,也可以是受控的消融版本。提前保留它和评估配置,比发现输出千篇一律后再设法重建基线省事得多。

这与冻结评估配置是同一件事:先保留稳定的测量基线,才谈得上改进。

评估对齐效果时检查什么

  1. 我报的是 pass@1 还是 pass@k?每道题的变化是否被平均值藏住了?
  2. 我有基座模型的多样性基线吗?还是只有对齐后的数字?
  3. 熵按什么分布、前缀和分母计算?它下降时,实际质量也变差了吗?
  4. 回答是否变长?多出来的 token 带来了有效推理,还是重复表达?
  5. 我有没有一个"明确无害"的对照集专门测过度拒绝?
  6. 我的 KL 系数是根据什么定的——是量出来的,还是抄来的?

继续阅读

快速学习:Alignment Tax 不是一个总分

复习时,先把“更确定”与“更正确”分开

先记住:熵描述分布,不评价答案。要判断退化,得有对照、有独立质量检查,也要看哪些任务受影响。

面试回答

我会在固定预算下比较训练前后版本,分别看成功率、有效解法覆盖和无害请求的拒答率。熵下降只是诊断线索;只有与实际损失一起出现,才有理由把它当成需要解决的问题。

是能力丢了,还是默认不这么回答了?

可以在受控的 system prompt 和解码设置下比较。如果换一种提示就恢复了表现,不能马上称为遗忘;多种设置都失败,才更值得排查参数干扰和数据覆盖。几次尝试都没恢复,也不能严格证明能力已经不存在。

参考论文

本页术语 10
微调 fine-tuning
在预训练权重上继续训练以适配具体任务
多样性 diversity
结果之间在主题、来源或其他指定维度上有多大差异
奖励 reward
RL 里指导策略更新的标量信号
词表 vocabulary
模型能输出的所有 token 的集合
交叉熵 cross-entropy
分类任务的标准损失,−log 正确类的概率
切片 slice
按内容或用户属性划分的子群体,用来检查平均值掩盖了什么
消融 ablation
去掉一个组件再测一次,用来判断它到底有没有贡献
采样分布 sampling distribution
训练候选被抽中的概率分布,它决定模型经常看到哪类边界
候选 candidate
召回阶段捞出来、等待精排挑选的内容
基线 baseline
用来比较新方法的参考方法或配置