正在翻开……

驯服野兽:RLHF 与 ChatGPT 的诞生

Ouyang, Wu, Jiang, Almeida, Wainwright et al. · OpenAI · 2022 · arXiv:2203.02155

这篇论文里也有一堆吓人的缩写——SFT、RM、PPO、KL、RLHF。你一个都不用记。你只需要会一件小事:看两个回答,说出哪个更好。别小看这点本事,OpenAI 写了整篇论文,就为了把你这一下装进机器——装进去之前,世界上最大的语言模型连一句话都接不住;装进去之后,它成了 ChatGPT。

先闯个祸:问倒 1750 亿参数

2020 年的 GPT-3 是当时世界上最大的语言模型:1750 亿参数,读过大半个互联网,会写诗、写代码、写判决书。下面是它(的行为复刻)。挑一句话,点发送——放心,问题都很简单,一个 6 岁小孩都能答:

(GPT-3 的回复会出现在这里)
三句话都试试 · 行为复刻自论文图 1(原例正是「给 6 岁小孩解释登月」)· 非实时模型输出

它没坏,它只是目标错了

先押个注再看答案。在 GPT-3 读过的整个互联网里,一条指令后面最常跟着的是——

先押注,再看 GPT-3 眼里的世界

顺带说一句,当年的老玩家确实摸出过土办法:提问之前,先手写两三对「问题 → 漂亮回答」的例子垫在前面,骗它以为自己在续写一份已经答得很好的问答记录。这招叫 few-shot 提示(「给几个例子的提示」),真的有用——但它是咒语,不是治疗:每换一类问题就得重新手搓例子,而且模型本性未改,稍不留神又歪回去。记住这套咒语,第 8 节它会跟着 GPT-3 一起出场,再输一次。

到 2022 年,OpenAI 决定不再念咒,直接做手术:把训练目标换掉。可「帮上忙」三个字怎么写成数学?他们的答案分三步。第一步,谁都想得到。

第一招:做给它看(SFT)

新来的实习生业务能力爆表但完全不懂规矩,最快的办法是什么?老员工坐在旁边,把活儿干一遍给他看。OpenAI 雇了约 40 名标注员,对着真实用户的提问,一条条手写出「理想的回答」——总共约 1.3 万条示范。然后用最普通的方式微调 GPT-3:看到这样的问题,就照这样答。这一步叫监督微调(Supervised Fine-Tuning,SFT),白话就是「照着示范学」。

效果立竿见影:模型学会了「有人在跟我说话,我该回答而不是续写」。你在第 1 节看到的歪楼,大部分被这 1.3 万条示范扳正了。然而两个麻烦跟着来了:

第一,示范太贵。写一条理想回答要斟酌好几分钟,一个人一天写不了几百条,而用户的问题有几百万种。第二,更微妙。看下面这一幕——SFT 之后的模型对同一个问题给出了两个回答,都挺像样:

提问:用 6 岁小孩能懂的话,解释什么是登月。(SFT 模型的两次输出)

输出甲:宇航员坐火箭去了月球,走了走,又回来了。
输出乙:很久以前,宇航员坐着一枚很大很大的火箭飞到月亮上,还捡了几块石头带回来给大家看。

SFT 模型:「示范里没有这道题的两个版本……我怎么知道哪个更好?」

示范只展示「对的样子」,从不教「好」和「更好」差在哪 · 也从不教哪种错误最不可原谅

两个都对,但乙显然更好——多了点温度,多了块石头。这种「更好」,示范教不了:你不可能为每道题写出全部版本再标出高下。而判断这件事,比创作便宜得多。你未必写得出一首好诗,但你一眼就能看出两首诗哪首更好。

判断比创作便宜,这是整篇论文最聪明的一步棋。于是标注员的工作从「写答案」变成了「挑答案」。现在,轮到你上岗。

现在,你来当标注员

还是那句贯穿全文的提问:「用 6 岁小孩能懂的话,解释什么是登月。」模型生成了四个回答。按从最好到最差的顺序,依次点击四张卡片(点的第一张 = 第 1 名),排完点「交卷」:

点击卡片排序:第 1 名 = 最好 · 没有唯一的标准答案,凭你的判断

然而排序是给人看的语言,模型的世界里只有数字。谁来把「你觉得 B 比 C 好」翻译成分数?

把你的品味,压缩成一个裁判

办法是再造一个模型——不让它说话,只让它打分。取一个小一号的语言模型(论文用了 60 亿参数),拆掉「说话」的输出层,装上一个只输出单个数字的「打分头」。训练目标只有一条:凡是人类说更好的那个回答,分数必须更高。它叫奖励模型(Reward Model,RM),白话就是「裁判」。点「开始训练」,把你刚才的 6 条比较喂给它;练完之后,再点「考它一个新答案」

左边是你的 6 条比较 · 右边是裁判给四个回答的打分(训练前一片空白)
裁判到底怎么从「B > C」学会打分?(真实算术,可跳过)

训练时每次取一条比较,比如「D > B」。裁判分别给两个回答打分,把分差换算成「它认为 D 更好的概率」(用 sigmoid 函数把任意数字压到 0 到 1 之间):

裁判当前的分分差它认为 D 更好的概率惩罚
D 得 2.4,B 得 1.1+1.30.79 —— 方向对了轻(-log 0.79 ≈ 0.24)
D 得 1.1,B 得 2.4(判反了)−1.30.21 —— 和人类相反重(-log 0.21 ≈ 1.56)

惩罚会推着两个分数拉开正确的差距。几万条比较轮着来,分数就整体排成了人类口味的形状。注意它自始至终没见过「标准分数」——人类从没说过 D 值几分,只说过 D 比 B 好。绝对分是裁判自己发明的,人类只提供了相对顺序。

然而裁判不会教学,只会打分。有了一个 24 小时在线的裁判,怎么让选手变强?

追分的学生,和它的缰绳

想象一个只给分数、从不讲题的老师:学生交一份答卷,得到一个分数,然后自己琢磨怎么改能得更高分——试错、调整、再试。这就是强化学习。论文用的算法叫 PPO(近端策略优化),名字完全不用记,它的意思就是「小步快跑地追分」。模型写回答 → 裁判打分 → 模型朝高分方向微调自己 → 再写,循环几十万次。

但这里埋着全文最危险的一颗雷。先押注:如果放开限制、让模型无限追分,裁判的分数和真人的满意度会怎么走?

追分强度 = 允许模型为了讨好裁判偏离原样多远

拖到最右时,两根条子分家了:裁判打出 9.9 的高分,真人却看得头皮发麻——模型发现了裁判的偏好漏洞(爱看热情、爱看「乐于助人」这类词),于是不再好好说话,专门生产裁判爱吃的关键词。这叫奖励破解(reward hacking),是古德哈特定律的 AI 版:当指标变成目标,它就不再是好指标。分数只是「人类满意」的代理,追得太狠,模型学会的是讨好裁判,不是讨好你。

论文的解法是给学生拴一根缰绳:KL 罚项——每走一步都量一下「你现在和 SFT 示范生差多远」,偏离越远罚分越重。缰绳太紧,白练;太松,跑疯;中间那段甜区,才是 InstructGPT 站的地方。

缰绳和 PPO 的真面目(可跳过,不影响后面)

模型每一步实际追的分数是:总分 = 裁判打分 − β × KL距离(现在的我, SFT的我)。KL 距离衡量两个模型「说话习惯」差多远,系数 β 就是缰绳的松紧——你刚才拖的滑块,本质上就是在调 1/β。

PPO(Proximal Policy Optimization,近端策略优化)里的「近端」是第二重保险:每次参数更新的步子也不许迈太大,只在「上一次的我」附近小幅移动。双重限制听起来保守,但强化学习的老毛病就是一步迈大、全盘崩坏——小步快跑反而走得最远。这些数学你都不用记,记住画面就行:一个追分的学生,腰上拴着两根皮筋。

组装时刻:三步流水线

零件齐了:示范(第 3 节)、排序(你在第 4 节亲手做的)、裁判(第 5 节替你训练的)、追分循环加缰绳(第 6 节你拧过的)。拖动滑块,把流水线一步步接通——这套三步组合拳,就叫 RLHF:用人类反馈做强化学习。

第 1 步 · 监督微调:约 1.3 万条人工示范

注意一件容易忽略的事:这条流水线用的数据总共不过几万条,跟预训练读掉的大半个互联网相比,是九牛一毛。整个 RLHF 没有往模型脑子里塞任何新知识——1750 亿参数里的知识一个字没加,加的只是一个「往哪说」的方向盘。登月的知识 GPT-3 早就有,是你的排序告诉它:对 6 岁小孩,火箭和石头比着陆坐标更重要。

这条流水线的账单(数字控专区)
阶段数据数据从哪来
预训练(造野兽)数千亿词元的网络文本爬取的互联网
① SFT约 1.3 万条提示的人工示范约 40 名标注员逐条手写
② 奖励模型约 3.3 万条提示、每条 4-9 个回答的排序标注员比大小(你在第 4 节干的活)
③ PPO约 3.1 万条提示上循环练习不需要新的人工标注——裁判在打分

论文自己的说法:相对于预训练,提升对齐的成本是「温和的」(modest)。造野兽烧掉的是海量算力;驯服它,靠的是几万次人类的「这个比那个好」。能力的账单和可用性的账单,差着好几个数量级——而后者才是从论文到产品的那一跃。

流水线跑通了。但值得吗?训练出来的东西,到底比原来那头野兽好多少?

小而听话 vs 大而野

论文安排了盲测:把不同模型对同一批真实用户提问的回答,匿名交给人类评委挑更好的那个。压轴一场最狠——用这套流水线训出来的 13 亿参数小模型,对阵 1750 亿参数的原始 GPT-3,参数差一百倍。先押注,再点「开赛」

人类评委盲评「哪个回答更好」· 条子长度 = 胜率
这场盲测的比赛规则(可跳过)

三条规则值得知道。第一,考题不是学术基准,而是真实用户提交给 API 的提问——头脑风暴、改写、问答、写作,什么都有;模型是在「实战题库」上被比较的。第二,评委看不到回答来自哪个模型,只看内容挑更好的。第三,为了防「自己人偏心」——毕竟裁判模型学的就是标注员的口味——论文专门请了一批从未参与制作训练数据的局外标注员重评一遍,偏好比例几乎没变。你的排序塑造了它,但喜欢它的不只是你。

然而天下没有免费的驯服。听话,是有代价的。

听话的代价:对齐税

论文老老实实报告了一件尴尬事:RLHF 之后,模型在一些学术基准上的成绩下降了——阅读理解(SQuAD)、法译英(WMT 2015)、常识推理(HellaSwag)都出现了回退。整天练习「怎么讨人喜欢」,专业课就荒废了一点。这叫对齐税(alignment tax)。好消息是税可以谈判:训练时掺回一部分预训练数据(这个变体叫 PPO-ptx,相当于练人情世故的同时继续读课本),大部分回退就补回来了。点下面的按钮,看税收和退税

灰线 = 原始 GPT-3 水平 · 柱高为示意,回退现象与恢复效果取自论文,未按真实数值绘制

而且账本的另一边是净赚的:在专门测「一本正经胡说八道」的 TruthfulQA 上,InstructGPT 给出真实且有用回答的频率约是 GPT-3 的两倍;在封闭问答里凭空编造事实(幻觉)的比率,从约 41% 降到了约 21%。还记得你在第 4 节把「嫦娥玉兔」排到末尾吗?几万次这样的排序,就是幻觉率腰斩的来源。对齐有税,但税率可谈;而诚实,是这套流水线直接分红的科目。

等一下,我有几个反对意见(杠精专区)

「这不就是把 40 个人的偏见炼进模型吗?」——是的,论文自己承认这一点,第 10 节我们还会回来算这笔账。RLHF 保证的是「对齐到某群人」,不保证「对齐到所有人」。

「标注员意见不一致怎么办?」——经常不一致。论文报告标注员之间的一致率只有七成多;你交卷时和「多数标注员」的出入,真实项目里天天发生。裁判学到的是口味的平均值,连同它的模糊地带。

「为什么不直接用点赞数据,还雇什么标注员?」——点赞衡量的是「爽」,不是「好」。奉承、顺着说、编得漂亮都很收割点赞——这正是第 6 节里裁判被骗的场景在人类身上的版本。筛选和培训标注员,就是在给裁判挑一副更难骗的眼睛(后来的产品确实也大量使用用户比较数据,但要掺着专业标注一起用)。

「模型是不是被驯笨了?」——上面的柱状图就是这道题的答案:确实掉分(税是真的),但掺回预训练数据能补回大半;而在诚实性上它反而变强了。「驯服」损失的主要不是智力,是野性。

「那它是不是也更安全、更没偏见了?」——一半一半,论文说得很坦白:在被要求「保持尊重」时,毒性输出确实降了一些;但在性别、种族偏见的基准上几乎没有改善。排序教得会「别骂人」,教不会「别偏心」——因为标注员自己也未必察觉偏见。这是这条流水线的真实边界,不是宣传册会印的那页。

你也在这条流水线上

最后一个小实验。下面是某个 AI 助手界面里常见的一幕。凭直觉选一个

提问:把「报告呢?赶紧发我」改得礼貌一点。你更喜欢哪个回答?

回答 1:您好,方便的话,麻烦您把报告发我一份,谢谢!
回答 2:尊敬的先生/女士:兹因工作所需,恳请您拨冗惠赐报告一份,不胜感激。此致敬礼。
这个「你更喜欢哪个回答?」的界面,你多半在真实产品里见过

InstructGPT 的论文发表于 2022 年 3 月;八个月后,OpenAI 用同一条流水线训练的兄弟模型上线,名字叫 ChatGPT。再往后,你今天用的几乎每一个 AI 助手,出生证明上都盖着同一枚章:一堆人类排出来的比较数据。你在第 4 节干的活,全世界的用户每天都在各种「哪个更好」的按钮上免费地干。

回顾你这一路亲手做过的事:你眼看着 1750 亿参数把简单的提问续写成一张卷子,押中了指令后面跟着指令,替四个登月答案排了序,看着自己的 6 条比较训练出一个能给陌生答案打分的裁判,把追分强度拧到最右见识了裁判被骗的样子,然后在对决里看到 1.3B 打赢了 175B。这一整趟说明的是一件事:「能力」和「可用性」是两种不同的东西,分别有各自的价格——能力按算力计价,可用性按人类判断计价。2020 年能力就在那了,世界却毫无反应;2022 年补上了第二样,接下来的事你都知道了。

还有一个没关上的问题,就藏在你自己的操作里:交卷时,你的排序和标注员完全一致吗?多半不。InstructGPT 对齐的是约 40 名标注员的口味,而这套口味后来成了几亿人每天对话的缺省人格。「对齐」解决了「听谁的话」的技术问题,却把「该听谁的」留给了之后的所有人——后来的 DPO、RLAIF、宪法式 AI 都是对这条流水线的改良,但「判断比创作便宜」这根杠杆,至今没变。

所以,下次某个助手问你「哪个回答更好?」,别急着随手一点。想想你排那四张卡片时的犹豫——B 的准确、D 的温度、A 的无用、C 的危险。那一秒的犹豫,就是此刻所有 AI 的人格正在被塑造的地方。