文章目录
- 写在前面
- 一、五分钟速成:RLHF 是怎么工作的
- 二、RLCD 考据:一个缩写,两种全称,三年撞名
- 三、罚分的手感:亲手算一遍
- 四、真跑 LAYA 的奖励函数:三合一账单
- 五、奖励怎么变成梯度:GRPO 式策略,一句话版
- 六、RLHF vs RLCD 总对照表
- 自测十题
- 本文总结
- 写在最后
- 附:术语速查表(第 6 版,累加 9 条)
- 下篇预告
写在前面
第 5 篇结尾留了两个失望:noul 换两个标签词,概率从 0.935 崩到 0.000;77 个选项挤爆预算,模型不知所措。当时说,这两个失望都不是模型的错——是我们没看清它是怎么被训练成现在这个样子的。这一篇补上这块拼图。
家当零新增——还是pip install laya那套(第 5 篇装过的直接用),今天的实验只需要它自带的源码和一个能跑 numpy 的 Python。
先立军规。这一条是被一个四个字母的缩写逼出来的:
军规六:缩写和术语,引官方原文,不引转述。转述会变形——差一个介词,意思就漂了。今天第二节就是一个现成案例:一个缩写、两种全称、三年撞名,网上 90% 的文章都在以讹传讹。
一、五分钟速成:RLHF 是怎么工作的
要看清 RLCD 换掉了什么,得先知道 RLHF 原来是什么。五步流水线,每步一句话:
- 收集示范:雇人写出高质量问答,给模型当范文;
- 监督微调(SFT):拿范文训练——模型学会"话怎么说得像人";
- 训练奖励模型(RM):给同一个问题的两个回答,让人标注哪个更好——学出一个"替人类打分"的模型;
- 强化学习(PPO):让生成模型冲着 RM 的高分去优化——打分器当裁判,策略当球员;
- 循环往复:模型越答越像"人类喜欢的样子"。
注意第 3 步埋下的种子:裁判学的是"人类更喜欢哪个",不是"哪个更对"。Jev 的创始人 Diogo Almeida 在 OpenAI 干了约四年,做的就是 RLHF / InstructGPT / ChatGPT / GPT-4。他离职后说过一句话,被各家报道反复引用:
“We’ve been optimizing for humans, and we’re super human at pleasing humans.”
(我们一直在为"人类"优化,而我们已经超级擅长取悦人类。)
这就是"讨好"的病根——不是模型学坏了,是目标函数就写在那。讨好的具体症状你可能也见过:满口"绝对正确",其实心里没底。翻译成概率语言:报 0.99 的置信度,真实正确率只有 0.7。RLHF 的裁判根本不管这个——它只管这句话人类听着爽不爽。
决策模型不能这么练。它的产品就是概率本身,概率就是它的成品、它的口碑、它的一切。
二、RLCD 考据:一个缩写,两种全称,三年撞名
现在,主角登场。第 1 篇我们记过:Jev 的训练方法官方叫RLCD。当时立了 flag,说全称的考据"容易搞混"——现在兑现。
第一层,官方原文是哪个?我把 TypeSafe 官网首页拉下来查了原文,两处都写着:
Reinforcement Learning for Calibrated Decisions
注意:是for,不是 from。但你去搜,会看到大量文章——包括一些写得相当认真的技术博客——写成 “Reinforcement LearningfromCalibrated Decisions”。为什么讹变得这么普遍?因为 RLHF 全家的命名习惯是 from:RLHF(Reinforcement LearningfromHuman Feedback)、RLAIF(fromAI Feedback)、RLVF(fromVerifiable Feedback)。顺口,就像念惯了"星期一"的人容易把"星期日"也念快了。军规六就是从这来的:引官方原文,别引转述——转述连介词都保不住,何况数字。
第二层,这个缩写不是新的。2023 年就有一篇 arXiv 论文(编号 arXiv:2307.12950,Yang 等)用了同一个缩写,全称是 “Reinforcement Learning from Contrast Distillation”——干的是大模型对齐,和 TypeSafe 半点关系没有。所以你拿 “RLCD” 去搜文献,会撞出一篇对齐论文,别认错亲戚。这也解释了为什么官方页面要用全称+括号缩写的谨慎写法。
第三层,它到底换了什么?名字拆开就是答案:
- Reinforcement Learning:训练范式还是强化学习的壳——有策略、有奖励、有更新;
- Calibrated:优化目标换了——不再对"人类喜欢"优化,对校准优化:你说 87%,就得有 87% 的频率真的是;
- Decisions:作用对象换了——不是生成文本,是出决策的概率分布。
一句话:RLHF 练的是"把话说得让人爱听",RLCD 练的是"把概率说得跟真的一样"。
三、罚分的手感:亲手算一遍
"概率跟真的一样"怎么度量?靠评分规则(scoring rule)——一个专门给"报概率"打分的函数。它判卷的对象不是答案对错,是你嘴里的把握跟事实差多远。
最直观的两个,拿垃圾邮件判断算一遍(真值:这封是垃圾邮件):
Brier 罚分 log 罚分 嘴硬模型 报0.99 0.0001 0.0101 诚实模型 报0.60 0.1600 0.5108 怂模型 报0.50 0.2500 0.6931(Brier = (q−真值)²;log 罚分 = −ln(q)。两句代码就能复现:(0.99-1)**2和-np.log(0.99)。)
单看这张表,嘴硬模型明明是冠军——报 0.99 罚分最轻。但把真值换一下,同样的 0.99,这封不是垃圾邮件:
Brier = (0.99−0)² = 0.9801 log = −ln(0.01) = 4.6052罚到肉痛。log 罚分尤其狠:赌对赏 0.01,赌错罚 4.6——460 倍的落差。这就是"罚不敢说真话的模型"的确切含义:不是罚保守,是罚嘴硬——敢报 0.99,就得接受一旦错了往死里罚。
那"说真话"到底是不是最优策略?数值验证(真实频率 p=0.6 的事件,扫一遍报什么 q 期望罚分最低):
期望Brier最低点: q=0.6 ← 恰好等于真实频率 期望log最高点: q=0.6 ← 两个规则结论一致 诚实报0.6的期望Brier: 0.2400 嘴硬报0.99的期望Brier: 0.3921 ← 期望上就先输一截两条曲线的最优点都精确钉在 0.6——你的真实把握。这不是巧合,是一族叫**严格正则评分规则(strictly proper scoring rules)**的数学性质:在它的赌局里,唯一的最优策略就是如实报出你的真实概率。想多赚分?没有邪门歪道,只能把概率弄准。RLCD 的"CD"(Calibrated Decisions),就是拿这族规则当裁判。
四、真跑 LAYA 的奖励函数:三合一账单
评分规则是理论,LAYA 落地用的是什么?答案就在它开源的laya/common.py里,函数名proper_reward——RLCD 的"C"的那半段,就是这一百行代码。核心结构(源码原样,注释是我加的):
defproper_reward(q,target,qtype,mask,w_sph=0.5,w_rps=1.0):"""Strictly proper scoring rule reward: log score + spherical score + ranked probability score."""log_score=(target*logq).sum(-1)# ① 对数分:第三节那个 log 罚分sph=(target*q).sum(-1)/q.norm(-1)# ② 球形分:另一个正则规则r=log_score+w_sph*sphifqtype=="score":# ③ RPS:只对有序题生效rps=((cdf_q-cdf_t)**2).sum(-1)/(k-1)r=r-w_rps*rpsreturnr三合一账单:log 分(主力)+ 0.5×球形分(保险)+ 只在 score 题上扣的 RPS。前两个你已经在第三节手算过了;RPS(Ranked Probability Score,有序概率分)是新面孔,它管一件很细的事:等级错得近,罚得轻;错得远,罚得重。
直接调真函数验证(from laya.common import proper_reward,四组对照):
score题·预测偏邻等级 q=[0.2, 0.6, 0.2](真值:等级2) log=-1.6094 0.5*sph=0.1508 RPS=0.3400 → reward = -1.7987 score题·预测偏远等级 q=[0.6, 0.2, 0.2](真值:等级2) log=-1.6094 0.5*sph=0.1508 RPS=0.5000 → reward = -1.9587 choice题·预测偏邻位 q=[0.2, 0.6, 0.2](真值:选项2) log=-1.6094 0.5*sph=0.1508 → reward = -1.4587 choice题·预测偏远位 q=[0.6, 0.2, 0.2](真值:选项2) log=-1.6094 0.5*sph=0.1508 → reward = -1.4587三处读数,一处比一处有意思:
- 上两组(score 题):log 分完全相同(-1.6094,因为错的地方给的概率一样),RPS 却分了远近——邻 0.34、远 0.50,远的额外多扣 0.16;
- 下两组(choice 题):同样是"偏邻位"和"偏远位",奖励一模一样——choice 的选项没有顺序,偏到哪都一样错,不分远近;
- 对照组(预测正确 q=[0.1, 0.1, 0.8]):reward = +0.2442,正的——对就有赏。
(表里的数字都是程序打印原值。你拿计算器逐项相加发现差 0.0001——不是账错了,是每个分项打印时各自舍入了 4 位;真值相加的打印结果就是表里的 reward。实测才作数,连舍入都要说清。)
现在回头看第 5 篇那个 score 返回 1.7722 的"期望值机制",拼图的另一半合上了:训练的时候,RPS 就在教它"等级错得近比错得远好"——推断的时候,它把概率质量摊在相邻等级上,期望值自然落在 1.77 而不是硬跳到 2。训练目标和输出格式,是同一枚硬币的两面。
五、奖励怎么变成梯度:GRPO 式策略,一句话版
公式不推(军规:概念即可)。整个 RL 部分干的事:
- 模型对一道题报出概率分布(前向);
proper_reward对着答案算罚分/赏分(对账);- 策略梯度把"多报真话能多拿分"推回模型参数(更新)。
GRPO 式的说法来自这里:不像 PPO 专门训一个独立的裁判网络,而是同一批问题的"组内相对表现"互为基准——省掉一个裁判,账单减半。LAYA 的训练 notebook 里还有个td_lambda_targets函数处理多轮对话轨迹的信用分配,那是另一个层面的工程细节,第 9 篇微调实战时再细看。
训练成本也顺便对个账(官方口径):Kaggle 免费双 T4、4 个 epoch、约 3 万道问题、4~5 小时跑完整个 RLCD 流程。对比大模型 RLHF 动辄几百张卡的阵仗,这就是"只判断不生成"在训练侧的红利——第 9 篇带你真跑一遍。
六、RLHF vs RLCD 总对照表
| 维度 | RLHF | RLCD |
|---|---|---|
| 优化目标 | 人类评分员喜欢 | 概率对真实结果负责 |
| 裁判 | 奖励模型(学人类偏好) | 严格正则评分规则(数学性质) |
| 裁判会不会错 | 会——偏好本身有偏 | 不会——"说真话"是唯一最优解 |
| 练出什么 | 流畅、讨喜、可能过度自信 | 校准——报 87% 就 87% 是 |
| 作用对象 | 生成的文本 | 决策的概率分布 |
| 病根/药方 | “Pleasing humans”(Almeida 语) | 罚嘴硬:赌对薄赏,赌错重罚 |
一个诚实的提醒收尾:RLCD 不是万灵药。它校准的是概率的诚实度,不是判断力本身——模型看不懂的问题,它照样诚实地报一个 0.5(第 5 篇的 77 选项翻车里你已经见过这种"诚实的茫然")。药只治嘴硬,不治眼瞎。眼瞎怎么治?选项设计(第 5 篇)+ 微调(第 9 篇),没有捷径。
自测十题
先别翻答案。这一篇手算过的数字,都是你自己的了。
点开对答案- RLHF 五步流水线是哪五步?—— 收集示范 → SFT 监督微调 → 训练奖励模型(RM)→ PPO 强化学习 → 循环往复。(本篇一)
- Almeida 说 RLHF 的病根是哪句话?—— “We’ve been optimizing for humans, and we’re super human at pleasing humans”(为人类优化,超级擅长取悦人类)。(本篇一)
- RLCD 官方全称是哪个介词?——for(Reinforcement Learning for Calibrated Decisions,TypeSafe 官网原文两处)——不是 from,虽然网上大量文章写 from。(本篇二)
- 为什么 from 的讹变这么普遍?—— RLHF 全家命名都是 from(RLHF/RLAIF/RLVF),顺口。(本篇二)
- 拿 RLCD 去搜文献会撞到什么?—— 2023 年 arXiv:2307.12950,Reinforcement Learning from Contrast Distillation,大模型对齐方向的论文,与 TypeSafe 无关。(本篇二)
- 嘴硬模型报 0.99,赌对和赌错的 log 罚分各是多少?—— 对:0.0101;错:4.6052(−ln 0.01)——460 倍落差。(本篇三)
- "严格正则评分规则"的数学性质是哪句?—— 唯一的最优策略就是如实报出真实概率(诚实最优,无邪道)。(本篇三)
- proper_reward 三合一账单是哪三项?—— log score + 0.5×spherical score + (仅 score 题扣)RPS。(本篇四)
- RPS 为什么只在 score 题上生效?—— 等级有顺序:错得近罚得轻、错得远罚得重;choice 选项无序,偏哪都一样。(本篇四)
- RLCD 校准的是什么、不校准什么?—— 校准概率的诚实度(报 87% 就 87% 是);不校准判断力本身——看不懂的问题照样诚实地报 0.5。(本篇六)
本文总结
- RLHF 五步:示范→SFT→奖励模型→PPO→循环;裁判学的是"人类喜欢",病根是讨好(Almeida 亲口);
- RLCD 考据:官方 for(官网原文两处)、from 是讹变(RLHF 全家命名惯性)、2023 年已有同名缩写论文(arXiv:2307.12950)——军规六:缩写引官方原文,不引转述;
- 罚分手感:报 0.99 赌对赏 0.0001、赌错罚 0.9801(Brier)/4.6052(log)——罚的不是保守是嘴硬;期望罚分最低点精确钉在真实频率 0.6——严格正则规则下诚实是唯一最优策略;
- proper_reward 三合一:log(主力)+ 0.5×spherical(保险)+ RPS(仅 score 题,按远近罚)——全部真跑验算通过;
- RPS 与 D5 合龙:训练时教"等级错得近比错得远好",推断时 score 返回期望值 1.7722 而非硬跳——同一枚硬币的两面;
- 训练账单:Kaggle 双 T4、4 epoch、3 万问题、4~5 小时(官方口径,第 9 篇实证)。
写在最后
到这一篇,"33 毫秒"的三个秘密全部拆完:架构上为什么快(D3/D4)、接口上怎么问(D5)、训练上凭什么信(D6)。下一站是全系列的技术制高点:概率校准。你的模型已经会"诚实报概率"了——但出厂的它还差最后一道工序:温度缩放。为什么第 5 篇那次运行会弹出温度钳制的警告?confidence 和 answer_confidence 两套置信度该信哪个?说 87% 就 87% 是——怎么度量、怎么修?下一篇全部回答,还带你自己动手把一个歪掉的分布掰直。
附:术语速查表(第 6 版,累加 9 条)
| 术语 | 一句话解释 | 详解在哪篇 |
|---|---|---|
| RLHF | 从人类反馈强化学习:裁判学"人类喜欢",练出讨好 | 本篇 |
| SFT | 监督微调:拿人写的范文教模型"话怎么说" | 本篇 |
| 奖励模型(RM) | 替人类给回答排座次的打分器 | 本篇 |
| RLCD | Reinforcement LearningforCalibrated Decisions,官方拼写 for 非 from | 本篇 |
| proper scoring rule | 严格正则评分规则:说真话是唯一最优策略 | 本篇 |
| Brier score | (q−真值)²:罚分平方级,嘴硬错一次罚 0.98 | 本篇 |
| log score | −ln(q):赌对薄赏赌错重罚,460 倍落差 | 本篇 |
| RPS | 有序概率分:只在 score 题生效,错得远罚得重 | 本篇 |
| GRPO 式策略 | 组内相对表现互为基准,省掉独立裁判 | 本篇;9 |
(第 1~5 版共 51 条见前五篇,此处不重复。)
下篇预告
概率校准——ECE 与温度缩放
第 5 篇那次运行弹出的温度钳制警告、两套置信度 confidence 和 answer_confidence 的差别、LAYA 出厂 ECE 从 0.466 到 0.081 的来龙去脉——全系列技术制高点,自己动手把歪掉的分布掰直。模型嘴里的 87%,怎么变成真的 87%。
下一篇见。
读完有收获的话,点赞、收藏、关注三连走起——十篇连载,跟得住,学得完。