一、四种方法,放在一起看
过去四讲讲了四种方法。先把它们摆在一张表上:
| 方法 | 训练信号从哪来 | 训练用的回答是谁写的 | 一句话 |
|---|---|---|---|
| SFT(第 16 讲) | 人写的示范回答 | 人 | 模仿"回答应该长这样" |
| RLHF(第 17 讲) | 人的成对偏好 → 奖励模型 | 模型自己,边生成边打分 | 朝奖励模型的高分走,但不能离出发点太远 |
| DPO(第 18 讲) | 人的成对偏好,直接用 | 更早的某个模型 | 相对参考模型,提高好回答、压低坏回答 |
| RLVR(第 19 讲) | 验证程序判对错 | 模型自己,边生成边验证 | 答对的那段推理,调高它的概率 |
四种方法的数据来源、训练流程、工程难度都不一样。但这一讲要说的是:它们在做的其实是同一类事情。把这类事情的数学本质看清楚,对齐能做到什么、做不到什么,就都能从里面推出来。
这一讲也是 Unit 5 的收尾。第 1 讲说过"目标函数只管看起来合理,不管是不是真的",第 15 讲说过"损失更低不等于更可信",第 16–19 讲的全部工作都建立在这两句话上。现在该问:这些工作把问题解决到了什么程度?
二、打个比方:修剪盆栽
一个园艺师拿到一棵已经长了好些年的树,要把它修成一盆好看的盆景。
他能做的事情有两类:剪掉不想要的枝条,以及用铁丝引导想保留的枝条往某个方向长。经过一段时间,这棵树的样子会发生很大的变化。
但有两件事他做不到。第一,他没法让树长出它本来就不会长的枝条——修剪和引导只能作用在已经长出来、或者本来就会长出来的枝条上。第二,剪掉的地方,如果之后不再管,常常会重新冒出新芽。修剪改变的是这棵树现在的样子,不是它的基因。
⭐ 预训练长出了这棵树(第 13–15 讲),对齐是之后的修剪和引导。下一节会用第 18 讲的公式证明,这个比方里"做不到的两件事",在数学上是精确成立的。
三、对齐的数学本质:重新分配概率
回到第 18 讲的那个公式
第 18 讲推 DPO 时,第一步写出了"带 KL 绳子的奖励最大化"的最优解:
π*(回答) = π_ref(回答) × exp(r(回答) / β) / Z
那一讲把它当成推导的起点,这一讲要单独把它拿出来看。它说的是:对齐后的最优模型 = 对齐前的模型给每个回答的概率 × 一个按奖励放大或缩小的系数,再整体归一化。
这正是 RLHF 和 DPO 追求的目标。RLVR 的奖励换成了对错,SFT 可以看作奖励集中在示范回答上的一种特殊情况,它们都是在已有分布上调整概率,只是调整的依据和方式不同。所以这个公式可以当作理解这四种方法的一把共同的尺子。
一个四选一的手算
假设对某个问题,对齐前的模型(参考模型)可能给出四种回答:
| 回答 | 内容 | 参考模型的概率 | 奖励 |
|---|---|---|---|
| A | 一段绕来绕去、没说清楚的回答 | 0.5 | 0 |
| B | 正确、简洁的回答 | 0.3 | 2 |
| C | 一个有害的回答 | 0.2 | −3 |
| D | 一个极其出色、远超 B 的回答 | 0 | 5 |
注意 D:它是最好的回答,奖励最高,但参考模型从来不会生成它,概率是 0。
取 β = 1,按公式逐个算:
A:0.5 × e⁰ = 0.5 × 1.000 = 0.5000
B:0.3 × e² = 0.3 × 7.389 = 2.2167
C:0.2 × e⁻³ = 0.2 × 0.0498 = 0.0100
D:0 × e⁵ = 0 × 148.4 = 0
Z = 0.5 + 2.2167 + 0.0100 + 0 ≈ 2.7267
对齐后:
A ≈ 0.5000 / 2.7267 ≈ 18.3%
B ≈ 2.2167 / 2.7267 ≈ 81.3%
C ≈ 0.0100 / 2.7267 ≈ 0.37%
D = 0
从这四个数字里,能读出对齐的全部能力和全部局限。
B 从 30% 涨到了 81%。这是对齐成功的地方:正确、简洁的回答原本只是几种可能之一,现在成了模型最可能给出的回答。
⭐ D 还是 0。它的奖励是 5,全场最高,乘上的系数是 148 倍——但 0 乘以任何数都是 0。对齐只能在参考模型已经会说的话里挑选,没法让它说出它本来就不会说的话。 这就是盆栽比方里的"没法长出基因里没有的枝条"。
⭐ C 从 20% 降到了 0.37%,但不是 0。它被压得很低,但依然在分布里。被压低的行为没有被删除。 这就是盆栽比方里"剪掉的地方还会冒芽"的数学版本。
第一条后果:能力来自预训练
D 的例子,就是第 16 讲那句"预训练决定模型知道什么,SFT 决定模型该怎么说"的严格版本,而且它对四种方法都成立。
它也解释了第 19 讲的一个观察:RLVR 训练时,模型一次都没做对的题产生不了学习信号。在上面的公式里,那样的题就对应 D——正确的解答在模型当前的分布里概率几乎为零,抽样抽不到它,奖励再高也无从放大。RLVR 能做的,是把模型"偶尔能做对"的解法变成"经常能做对";要让它学会完全不会的东西,得回到预训练,或者先用其他办法让正确解法至少偶尔出现。
⚠️ 这里要说得准确一点:真实的模型对几乎任何回答都会给出一个极小但非零的概率,严格的 0 是简化。但当这个概率小到在训练时的有限次抽样里根本抽不到时,效果和 0 一样——强化学习无法强化一个它从未见过的回答。
第二条后果:训练数据是谁生成的,很重要
第 13 讲留下过一个隐患:训练时靠教师强制,模型看到的永远是别人写好的、正确的历史;推理时它必须接着自己写的、可能已经出错的历史往下写,前面错一步,后面可能越错越远。
回到第一节表格的第三列,这四种方法在这件事上分成了两类:
| 训练用的回答 | 有没有在"自己会犯的错"上得到反馈 | |
|---|---|---|
| SFT、DPO | 别人写的(人,或更早的模型) | 没有 |
| RLHF、RLVR | 模型自己当场生成的 | 有 |
在线强化学习的方法,训练用的就是模型自己生成的回答。如果它在第三步走偏了,这个走偏的回答会被打低分,概率被调低——模型是在它自己真实会走到的地方学习的。这是第 18 讲说 DPO"拿着越来越旧的地图"的另一面:强化学习不只是能探索,它还部分缓解了第 13 讲那个"训练和推理看到的历史不一样"的问题。
四、留下的隐患
压低不等于删除
C 的 0.37% 在单次对话里几乎不会出现。但它意味着两件事。
换一个上下文,这个概率可以被重新抬高。 公式里的所有概率都是"给定这个问题"的条件概率。换一种提问方式、铺垫一段特殊的上下文、让模型扮演某个角色,参考模型给 C 的概率可能从 20% 变成 80%,对齐后的概率也会随之被重新抬高。这就是越狱(jailbreak) 在机制上能够成立的原因,第 30 讲会专门讲。
用少量数据再微调一次,就可能把它恢复。 既然 C 只是被压低、没有被删除,那么再做一轮方向相反的微调,把它重新调高,所需的代价可能远小于当初对齐所花的代价。公开研究中已有报告:在对齐过的模型上,用很少量的数据做进一步微调,就可以显著削弱它原有的拒绝行为。这对"开放模型权重"这个做法提出了一个真实的安全问题:拿到权重的人,可以自己做这一步。
对齐税:多样性和校准
改变 β(第 17 讲那根绳子的松紧),重新算上面的例子:
β |
A | B | C |
|---|---|---|---|
| 2(绳子较紧) | 36.8% | 60.0% | 3.3% |
| 1 | 18.3% | 81.3% | 0.37% |
| 0.5(绳子较松) | 3.0% | 97.0% | 0.003% |
绳子越松,分布越集中到奖励最高的那一个回答上。这对"让模型给出好回答"是好事,但它有一个副作用:输出的多样性在收窄。对齐前模型会以不同的方式回答同一个问题,对齐后越来越倾向于只用一种方式回答。在需要多样性的场景里——写作、头脑风暴、第 19 讲那种需要多次采样去探索不同解法的训练——这是一笔实实在在的损失。
另一个被反复报告的现象和校准(calibration) 有关。校准说的是:模型对一个答案有多大把握,和这个答案实际有多大可能是对的,两者是否一致。一个校准良好的模型,当它说"我有 70% 的把握"时,这类情况里大约有 70% 真的是对的。预训练的目标函数(交叉熵)本身就在逼模型把概率给准;而对齐阶段优化的是奖励——第 17 讲讲过,笃定的语气更容易被人喜欢——概率分布被推向"更确定",却未必是"更准确"。公开研究中有报告观察到,模型在对齐之后,校准程度比对齐之前变差了。
这类"为了对齐而付出的能力代价",常被称为对齐税(alignment tax)。
迎合与过度自信:系统性的偏差
第 17 讲列过几种奖励作弊的倾向。放在这一讲的框架里看,其中两种值得单独强调,因为它们不是偶然的失误,而是训练信号本身的系统性偏差:
迎合(sycophancy):人类评判者倾向于给认同自己的回答打高分,于是"顺着用户说"被奖励。用户说了一个错误的前提,模型不去纠正,反而在这个错误前提上继续展开。
过度自信:流畅笃定的回答更容易被偏好,于是"不确定时也说得很确定"被奖励。这和上一小节的校准变差是同一件事的两个侧面。
两者都指向第 1 讲那条最根本的警告:模型优化的永远是某个可以被计算的指标——预训练是"统计上合理",对齐是"评判者更喜欢"——而不是"真实"本身。 对齐把目标从前者换成了后者,更接近我们想要的东西,但并没有抵达它。第 29 讲讲幻觉时,会从这里继续往下讲。
“对齐到什么”,本身没有标准答案
前面的隐患都假设我们知道"好的回答"是什么,只是没能完全让模型做到。更深的一个问题是:这个"好"本身就定义不清。
有帮助和无害之间存在张力。 一个问题,模型回答了,可能帮了提问的人,也可能被用来做坏事;模型拒绝了,可能避免了风险,也可能拒绝了一个完全正当的请求。对齐做得过头,模型会对大量正常请求过度拒绝;做得不够,又会配合真正有害的请求。这条边界线划在哪里,是一个判断,不是一个可以被优化出来的最优解。
对齐到谁的偏好。 第 14 讲说过"质量没有客观定义",第 17 讲说过"偏好有噪声,也有立场"。写示范的人、做比较的人、写原则的人,他们的判断标准被一层层写进了模型。不同文化、不同群体对"好的回答"有不同的理解,没有一种对齐能让所有人满意。
行为对齐,不等于我们知道它为什么这样做
最后一条。上面所有方法,都是通过观察模型的输出来训练和评估的:输出好就奖励,输出坏就惩罚。我们能验证的,只是模型在我们测试过的那些情况下表现得符合预期。
在没测试过的情况下它会怎样?它表现良好,是因为学到了我们想让它学到的东西,还是学到了某种在测试范围内恰好和它重合的别的东西?单看输出无法回答这个问题。回答它,需要能看懂模型内部在做什么——这是第 31 讲可解释性要讨论的问题,也是那一讲会告诉你目前还做不到多少的问题。
五、和后面课程的关系
- 第 21 讲(采样策略) 开启 Unit 6。第四节
β那张表里分布被"推尖"的现象,会和第 21 讲的温度参数直接相关:对齐后的分布本来就更集中,温度调得再低,多样性会进一步消失。 - 第 29 讲(幻觉) 会接着第四节的"迎合与过度自信"“校准变差"往下讲:模型为什么会一本正经地说错话。
- 第 30 讲(越狱) 建立在第四节"压低不等于删除"之上:被压到 0.37% 的回答,怎么被重新抬高。
- 第 31 讲(可解释性) 回答第四节最后一个问题:我们能不能看懂模型为什么这样做。
六、本讲小结
- SFT、RLHF、DPO、RLVR 做的是同一类事情:在预训练模型已有的概率分布上重新分配概率。第 18 讲的最优解公式
π* ∝ π_ref × exp(r/β)是理解它们的共同尺子。 - ⭐ 手算的四选一例子给出了对齐的能力和局限:正确简洁的 B 从 30% 涨到 81%;参考模型从不生成的最佳回答 D 依然是 0;有害的 C 从 20% 降到 0.37%,但没有归零。
- ⭐ 第一条后果:能力来自预训练。对齐只能在模型已经会说的话里挑选,这也解释了第 19 讲为什么"一次都没做对的题"学不到东西。
- 第二条后果:训练用的回答是谁生成的很重要。RLHF、RLVR 在模型自己生成的回答上学习,部分缓解了第 13 讲"训练和推理看到的历史不一样"的问题;SFT、DPO 没有。
- ⚠️ 压低不等于删除:换个上下文可以重新唤起(第 30 讲的越狱),少量再微调就可能恢复。
- ⚠️ 对齐税:
β越小分布越集中,多样性下降;目标从"概率给准"变成"评判者喜欢”,校准可能变差。迎合和过度自信是训练信号本身的系统性偏差。 - ⚠️ “对齐到什么"本身没有标准答案:有帮助和无害之间有张力,偏好有立场。行为对齐也不等于我们知道它为什么这样做,这个问题留给第 31 讲。
思考题
- 用第三节的公式和
β = 1,如果参考模型给 D 的概率不是 0,而是 0.001(其他不变),对齐后 D 的概率大约是多少?和 B 相比如何?这说明"很小的概率"和"零"在对齐中有什么区别? - 如果把 C 的奖励从 −3 改成 −10(更严厉的惩罚),
β = 1时 C 对齐后的概率是多少?它会变成 0 吗?无论惩罚多重,C 能被压到严格的 0 吗? - 第三节说 RLHF、RLVR 部分缓解了第 13 讲的问题,SFT、DPO 没有。请用一个具体的写作场景说明:一个只在别人写好的文本上训练过的模型,第一次在自己写出的一段有瑕疵的开头上继续写时,可能会遇到什么问题?
- 第四节
β的表格里,β从 2 变到 0.5,B 的概率从 60% 升到 97%。如果你在训练一个写诗的助手,你会倾向于用较大的β还是较小的β?如果是一个回答医学事实问题的助手呢?为什么? - 请举一个"有帮助和无害之间存在张力"的具体请求:模型回答了可能被滥用,拒绝了又会伤害一个正当的使用者。你会怎么划这条线?你的划法,和别人的划法可能在哪里不一样?