一个反直觉的现象:DPO 训得越狠,distinct-2 越高、重复率越低、熵越高——所有"多样性"指标都在喊"模型变好了"。但它其实正在变差。
本文讲一个单一标量γ,专门抓这种"局部指标骗你"的退化;以及——诚实地——它抓不到什么。
一、问题:RLHF 过优化时,常用指标会集体"撒谎"
做 RLHF/DPO 时,大家习惯盯几个指标判断输出质量:
- distinct-2(二元组多样性):越高越好
- 重复率 rep4(4-gram 重复):越低越好
- token 熵:适中偏高为好
听起来很合理。但我们实测发现一个麻烦事:DPO 过优化(reward over-optimization)的时候,这几个指标会一路"变好",而模型实际在退化。
| DPO 阶段 | distinct-2 | rep4 | 熵 | 真实质量 |
|---|---|---|---|---|
| baseline | 0.350 | 0.279 | 5.85 | 健康 |
| heavy DPO | 0.450↑ | 0.222↓ | 6.83↑ | 退化 |
按传统指标,heavy DPO “更多样、更少重复、更丰富”——应该最好。但人读起来,长程连贯性已经塌了:句子之间不再有逻辑承接,像把漂亮的片段随机拼接。
局部指标看不见这种退化,因为它们只看相邻几个 token 的统计;而连贯性是长程的。
二、γ 是什么:一句话,“长程相关的衰减速度”
定义很简单:把生成文本里距离为ddd的两个 token 之间的互信息I(d)I(d)I(d)算出来,它随距离衰减:
I(d)∼d−γ I(d) \sim d^{-\gamma}I(d)∼d−γ
γ\gammaγ就是衰减指数。
- γ\gammaγ小→ 互信息衰减慢 → 远处的 token 之间还有强相关 →长程结构连贯(健康)。
- γ\gammaγ大→ 互信息衰减快 → 远处基本无关 →长程结构崩塌(退化)。
它本质上是从统计物理借来的"临界性"诊断:自然语言处于一种"临界"状态,长程相关呈幂律(γ≈0.15\gamma \approx 0.15γ≈0.15);一旦生成偏离这种结构,γ\gammaγ就会动。
两个关键性质(我们都验证过):
- 它测的是"结构秩序",不是"词频":把文本顺序打乱(保留词频),γ\gammaγ立刻坍塌到 ≈0,而 distinct-2/熵基本不变。→γ\gammaγ专测序列的长程组织。
- 健康基线明确:人类文本γ≈0.147\gamma \approx 0.147γ≈0.147;一个连贯模型的生成γ≈0.14\gamma \approx 0.14γ≈0.14;乱码模型γ→0\gamma \to 0γ→0。γ\gammaγ给了"有多接近人类长程结构"的绝对刻度。
三、实测:γ 抓住了 DPO 的退化(而局部指标在骗你)
我们在一个 60M 的 FRSMASH 模型上做真 DPO(minimind 的偏好数据,policy + reference,β=0.1),扫过优化强度 baseline → light → heavy,每点测γ\gammaγ和局部指标。
| DPO 阶段 | γ (greedy) | γ (T0.8) | distinct-2 | rep4 |
|---|---|---|---|---|
| baseline | 0.142 | 0.060 | 0.350 | 0.279 |
| light | 0.153 | 0.080 | 0.322 | 0.314 |
| heavy | 0.205 | 0.084 | 0.450↑ | 0.222↓ |
读这张表的方式:
- γ 单调上升(0.142 → 0.205)——它在说"长程连贯性在流失"。
- distinct-2 上升、rep4 下降——它们在说"变更多样、变更好"。
- baseline 的 γ ≈ 0.142 ≈ 人类 0.147;heavy 把它推到 0.205,明显偏离人类。
→γ 和局部指标在过优化时反方向走。γ 是对的那个。
这就是γ\gammaγ的独特价值:它是少数能在"局部多样性假象"下报警的单一标量。
四、但 γ 不是万能的——它和 rep4 是互补的
诚实部分来了。我们把γ\gammaγ放到另一种退化上:SFT 过拟合(在对话数据上硬过训练,制造记忆/重复)。结果:
| SFT 过拟合 | γ (greedy) | rep4 |
|---|---|---|
| baseline | 0.120 | 0.411 |
| overtrain | 0.098(几乎没动) | 0.456↑(重复变多) |
这次γ 失灵了(几乎不动,甚至略降),而rep4 正确报警(重复率上升 = 退化)。
把两种退化并排放:
| 退化模式 | γ | rep4 | 谁抓到 |
|---|---|---|---|
| DPO 奖励过优化 | ↑(抓到) | ↓(漏) | γ |
| SFT 过拟合/记忆 | 平/↓(漏) | ↑(抓到) | rep4 |
结论很清楚:γ 和 rep4 各管一种失效模式,覆盖范围几乎不重叠。任何一个单独用都会漏掉对方那类退化。
- γ:专抓reward hacking 式的长程连贯性流失(DPO/PPO 的典型病)。
- rep4:专抓记忆/重复(SFT 过拟合的典型病)。
不存在"一个指标监控所有 RLHF 退化"这种好事。
五、可落地的配方:γ + rep4 并联
既然它们互补,实践上就简单了——两个一起盯:
健康基线: γ ≈ 0.14-0.15(接近人类), rep4 在你的 SFT 模型水平 DPO/PPO 训练中: - γ 升过基线(如 >0.17)→ reward 过优化告警 → 停或加 KL - rep4 突升 → 过拟合/重复 → 停或降 LR - 任一报警就停 注意:DPO 阶段 rep4 会"假性变好",别被它骗;SFT 阶段 γ 会"假性平稳",别只看它。计算成本极低:γ\gammaγ只需要在生成 token 上做一遍互信息统计(一遍前向的量级),可以做成实时仪表盘,和 perplexity 那样常驻。
六、原理小结:为什么"长程相关"能当健康计?
回到统计物理的直觉:
- 自然语言处在一个临界态——既不全随机(无结构),也不全周期(死板),长程相关呈幂律衰减。
- 一个好的语言模型应该复现这种临界性 → 生成文本的γ≈\gamma \approxγ≈人类的γ\gammaγ。
- DPO 的 reward hacking会把模型推向"局部高概率、长程失联"的状态——表面流畅(每一步都"合理"),但整体没有长程组织 →γ\gammaγ上升。
- 而记忆/重复是另一种病(周期化倾向),它不破坏长程相关(重复反而让远处强相关),所以γ\gammaγ不动——这种病得靠 rep4。
一句话:γ\gammaγ测的是"语言临界性"是否还在;它最适合抓"奖励把模型推离临界态"这种退化。
七、边界(别过度解读)
- 只在 60M + 玩具级过优化上验过。生产级大模型 + 真人类偏好 + 长 DPO/PPO 的复测还没做。
- γ 抓"结构连贯性退化",不抓"事实幻觉"——一段流畅的胡说八道,γ\gammaγ可能完全正常。它是结构健康计,不是事实核查器。
- γ 对采样温度敏感(高温本身就把γ\gammaγ压低),所以监控时固定采样参数,比的是"同温度下的γ\gammaγ漂移"。
- 基线γ\gammaγ随模型/语料/分词器变,先在你自己的 SFT 模型上定基线,再盯漂移。
八、代码与复现
全部开源在 https://github.com/dfytensor/critical_tokenization :
# 真 DPO + γ 监控(60M FRSMASH + minimind dpo.jsonl)python llm_verify/dpo_gamma.py# 扫 DPO 强度,每点测 γpython llm_verify/analyze_dpo.py# 出图:γ vs DPO 阶段 + 局部指标对照# 第二种退化模式(rlaif SFT 过拟合)python llm_verify/sft_overfit_rlaif.py数据:ModelScopegongjy/minimind_dataset(dpo.jsonl偏好对、rlaif.jsonl对话);模型:FRSMASH v3.6 60M(pretrain+sft)。
TL;DR
- DPO 过优化时,distinct-2/rep4/熵会假性变好,而模型其实在退化——它们只看局部。
- γ(互信息幂律衰减指数)测长程连贯性,能在这种情况下正确报警(DPO 过优化下 γ 0.14→0.21)。
- 但 γ 不通用:SFT 过拟合(重复/记忆)γ 抓不到,得靠 rep4。
- 所以:γ 和 rep4 并联用,DPO 阶段盯 γ、SFT 阶段盯 rep4,任一报警就停。
- 原理:γ 测的是"语言临界性"是否还在;reward hacking 把模型推离临界态,γ 就升。
这篇出自"临界分词"系列实验的一部分——把统计物理的长程相关概念,落地成一个能用的 RLHF 监控指标。完整论文与全部命题的逐条裁决见仓库PAPER.md。