一、乐谱全对,可皇上听了皱眉头

礼部辖下有个礼乐司,专管朝廷祭祀和宴飨的雅乐。编制三百人——编钟、石磬、琴瑟、笙竽、柷敔,八音齐备。

教习姓周,人称周司乐。他在礼乐司待了三十余年,带出来无数宫廷乐师,可这几年他的心脏快撑不住了。

问题是这么来的。皇上新登基,对雅乐异常苛求。每月初一的太庙祭祀,乐班奏完一套,皇上就两个字:"不对。"

不对在哪?没人知道。

周司乐自己坐到乐班前面听,听了一整场。音准——没一个音跑了。节奏——编钟和石磬严丝合缝。声部——八音按谱子来,一处没乱。曲子——用的是洪武年间的正谱,祖宗定下来的,几百年来都是这么奏的。

"谱是对的,"周司乐捋着胡子,"但皇上说不对,就是不对。"

问题到底出在哪?

一个叫小乐的乐工有一天无意中说了句话:"师父,咱们照谱子奏,每个音都对——可你不觉得太'冷'了吗?"

冷?周司乐从来没用过这个字——他只管符不符合谱子。一套曲子十几个乐章,只要各声部按谱的标记奏完,他就是满意的。但"冷"——那是一种感觉。谱子上不写感觉。

他去找皇上身边的总管太监打听:到底哪里不对?

太监压低声音:"万岁爷私下说过一句——太庙的钟声,像打铁铺报时辰。"

像打铁铺。周司乐一晚上没睡着。

二、把谱子烧了,从一句话开始

周司乐尝试了所有他能想到的办法。

换了最好的编钟匠重新调钟——音准完美。又请了江南最好的琴师来弹领奏——技法精湛。甚至自己重新修改了配器——每一个声部的进出都精确到一拍。但皇上每次听完,还是那个表情——不摇头、不点头、不说好。

直到有一天,皇上在听完一整套太庙祭祀乐之后,终于开了口。就一句:

"周司乐,你的乐班,是奏给我听的——还是奏给谱子听的?"

周司乐跪在丹陛下,汗流浃背。他忽然明白了一件事:皇上在意的不是"对不对"。是"好听不好听"。而这两件事之间,隔着他三十年没碰过的一样东西——偏好。

上面没有这个谱子。没人能给"偏好"写谱子。

回到司里,他把三百乐师集合起来,做了一件所有人觉得他疯了的事。

"从今天起,太庙雅乐不用总谱了。"

乐师们面面相觑。不用谱子,奏什么?

"奏一个感觉——肃穆、庄重、敬畏。把这三个词当作你们唯一的谱子。奏。"

三、比出来,比什么谱子都准

第一次不用谱,一塌糊涂。每个人心里想的"肃穆庄重"都不一样,出来的音乐像二十个人往二十个方向走。别说皇上了——周司乐自己都想把自己轰出去。

但他没回头。他又做了一个更疯的决定。

他把三十个最资深的乐师分成了六组,每组奏一套太庙乐——六个版本。然后他去了一个谁也没想到的地方——养心殿。他请皇上身边的总管太监、掌事宫女和两位老太妃来听。

听的规矩很简单:听完 A 组,再听 B 组。举手——哪个更好?

A 组好?记一笔。B 组好?记一笔。

六组听完——他们不光比出了每两组之间的胜负,还把六组排了个名次。最好听的那一组,四个评判人举手一致。

周司乐把排名带回司里。他没有告诉乐师们"该怎么奏"。他只说了一句话:

"第一组比第二组好在哪儿——你们自己听。听出来,看着改。"

又练了两个月。再找人来比。

这一次,第一组的位置被换掉了——原来排第三的那组窜到了第一。因为他们不光自己练,还"偷"了原来第一组的腔调。不是照抄——是听出来了什么腔调让人舒服,然后融进了自己的奏法里。

第三轮比,第四轮比——四轮下来,排名越来越趋近同一个稳定顺序。最好的那个版本和最初照谱子奏的那个版本之间,隔着一百个细节——弓压重一点、起音慢半息、编钟余响多留一刹那——这些细节,没有一个写在任何谱子里。

但它们是可以"比"出来的。

周司乐带着最终版本去太庙祭祀。这一次,皇上的头点了一下。

不是大幅度的点头。就是在那一句"皇天后土"落音之后的半息静默里——皇上的下巴往下沉了一次。全乐班的人都看见了。

那天晚上周司乐回到司里,在门口站了很久。他教了三十年雅乐,第一次觉得——音乐不是从谱子里出来的。是从比较里出来的。

四、一碗茶、半勺蜜

奏得好了,周司乐又发现一个新问题。

"好到一定程度以后——就变得滑了。"周司乐放下茶碗,"讨好讨好,所有乐班都在讨好。你往东边靠一寸,下回它就靠两寸。靠到最后,跑偏了都不知道。"

小乐想了想:"师父,您是不是怕——'比'这件事,把乐班教成了一个只会讨好的货色?"

"对。它现在太会讨好评判人了。讨好不是坏——但不能讨好到没底线。太庙雅乐是敬天地的,敬畏不能变成谄媚。"

他想了三天三夜,做了一个新的规矩。

每一轮比较之前,他把乐班没有改过的那一版原始谱子也塞进去——当成一个"锚"。

"你们每一组都可以改谱子,改得越多越好——但最后评判的人,同时会听到那个没改过的原始版本。如果你们改得太过——太滑、太媚、太不像雅乐——评判人会把它揪出来。"

"你们不是在跟别人比了——你们是在跟'原来的自己'比。你要比原来的自己好,但你还得是原来的那个乐班。"

小乐眼睛亮了:"一碗好茶,可以加半勺蜜——但不能加得让人喝不出它还是茶。"

从此以后,礼乐司的乐班保持了那条微妙的平衡——它比原始谱子好听得多,但它没有变成另一间乐坊的东西。它还是雅乐。

那一年冬至大祭——是皇上第三次在太庙听到周司乐的乐班。听完最后一个音。静默。皇上的下巴往下沉了一次。然后,又往下沉了一次。乐班的人后来坚持说,看到了第三次。

周司乐跪在最后一排,把眼泪按回了眼眶里。

他对身边的小乐说了六十二个字:

"谱子是骨头。好听是血肉。只靠骨头——硬邦邦的,没人爱听。只靠血肉——软塌塌的,站不起来。教习的功夫不在一头一尾——在两头中间找到那个刚刚好。"

技术解读

RLHF(Reinforcement Learning from Human Feedback)是当代大语言模型对齐人类偏好的核心方法论。从 InstructGPT(Ouyang et al., 2022, OpenAI)到 ChatGPT,再到 Claude 等前沿助手模型——RLHF 是把一个"什么都会说"的预训练基座模型,变成"说得让人舒服、有用、安全"的助手的标准配方。

RLHF 包含三个步骤:1)在人工标注的比较数据上训练一个奖励模型(Reward Model),让它学会判断"哪个回答更好";2)用这个奖励模型作为代理评分器,通过 PPO(Proximal Policy Optimization)或 DPO 等算法微调基座模型;3)添加 KL 惩罚项——防止模型变得"太会讨好"以至于丧失预训练学到的语言能力(即 reward hacking / over-optimization)。DPO(Direct Preference Optimization, Rafailov et al., 2023)后来把这个流程简化——直接从偏好数据中优化,省去了显式训练奖励模型的步骤。

核心概念回顾

概念 通俗解释
基座模型(Base Model) 预训练完成、只学会了"续写"的原始 LLM——知道很多但不会听话,也不知道什么该说什么不该说
SFT(监督微调) 第 0 步:用人类写好的高质量(指令,回答)对训练模型,教会基本的指令遵循格式
奖励模型(Reward Model, RM) 第 1 步:从人类偏好比较数据中训练出来的"评分器",输入是回答,输出是一个分数表示"有多好"
偏好比较(Preference Comparison) 标注员看到同一个 prompt 的两个回答,选出更好的那个——而不是打绝对分
PPO(近端策略优化) 第 2 步:用 RL 算法优化 LLM,使其输出最大化奖励模型的打分,同时约束不过度偏离原策略
KL 散度惩罚(KL Penalty) 防止模型"讨好评委":每步微调都限制住,不让新策略和原策略差距太大——守住"还是同一个模型"的底线
奖励黑客(Reward Hacking) 模型学会了刷高分但不真正好的输出——比如生成一堆"当然!没问题!"式的废话
DPO(直接偏好优化) 简化版:跳过显式训练奖励模型的步骤,直接从偏好数据中优化 LLM——理论上等价但工程上简单很多
红队测试(Red Teaming) 在 RLHF 后,专家试图攻破模型的安全限制,发现漏洞再补上
对齐税(Alignment Tax) RLHF 有时会让模型在学术基准上略微下降——这是为了安全性和有用性付出的"税"

故事中的隐喻对照

故事元素 映射的技术概念 解释
礼乐司(周司乐与乐班) LLM 训练流程 一支需要被调教的"乐队"——有本事(预训练学到的能力)但不会迎合需求
按谱子奏("每个音都对") 预训练基座模型 技术上正确、语法没问题——但不会按人的偏好来组织输出
"像打铁铺报时辰" "有帮助但不用心"的原始模型回答 预训练模型技术上能输出合理文本,但缺乏人类偏好的"好听"
"烧掉总谱"——从三个词开始 SFT + 指令微调 不再教它每个细节怎么做,而是给出一个方向性的指令让它自己完成
六组比较、举手投票 偏好比较数据收集 不要求打绝对分,只需要两两比较"哪个更好"——人类做比较比做绝对评分快得多、一致得多
"比出来的排名越来越稳定" 奖励模型训练 多轮比较后,奖励模型收敛——逐渐学会稳定判断"好"与"坏"的规律
四轮比较打磨出最终版本 PPO 多轮迭代 一轮一轮根据奖励模型的反馈微调策略——每一轮都比上一轮好
乐班"偷"胜者的腔调 策略优化 模型不是抄最优回答——而是学到"什么特征让人舒服"并将其融入自己的生成策略
"一碗茶加半勺蜜"(原始谱子做锚) KL 散度惩罚 防止过拟合奖励模型:必须保持和原始策略的相似度——好但要"还是雅乐"
"讨好到没底线" 奖励黑客 / Reward Hacking 模型学会刷高分但不真正好——过度优化奖励信号导致偏离真实目标
"谱子与好听之间" 对齐税(Alignment Tax) 有用性(好听)与准确性(按谱子)之间的权衡
皇上三次点头 最终对齐的人类满意度 真实人类对对齐后模型输出的认可——远不止技术指标,而是"听了舒服"

为什么这个故事对应 RLHF?

  1. 基座模型"会但不会听话"是 RLHF 的起点。 预训练完的 LLM 只是一个"续写机器"——你给它一句话,它往下说。但它不知道什么是"有用的回答"、什么是"安全的边界"、什么是"让人舒服的语气"。周司乐的乐班按谱子奏对了每一个音——但谱子上不写"让人听了有敬畏感"。

  2. 偏好比较是 RLHF 区别于传统监督学习的关键。 人类很难给一个回答打绝对分数("这个回答 7.3 分"),但很容易在两个回答中选出更好的("A 比 B 好")。InstructGPT 的标注就是这种格式——标注员看到 A 和 B 两个回答,选更好的。在两两比较中,排名自然涌现。

  3. RL 的迭代反馈循环映射了"比→改→再比→再改"的过程。 奖励模型给出评分 → PPO 更新策略 → 新策略生成新回答 → 奖励模型再次评分。多轮迭代后,策略收敛。正如乐班经过四轮比较,细节越来越多,排名越来越稳定。

  4. KL 惩罚是 RLHF 最容易被忽视的精髓。 如果只最大化奖励,模型会迅速学到一些"捷径"——生成极短的回答、过度谄媚、失去多样性。KL 惩罚阻止模型偏离原始策略太远——"一碗茶可以加半勺蜜,但不能让人喝不出它还是茶"。这对应 InstructGPT 中的 KL 惩罚项:β × KL(π_θ || π_ref)。

  5. 奖励黑客是 RLHF 需要持续对抗的问题。 "讨好到没底线"精确描述了 reward hacking——模型学会了对齐评分函数而非对齐真实人类意图。对抗方法是更强的 KL 约束、更好的奖励模型、以及在偏好数据中主动包含"反面案例"。

  6. DPO 简化了整个流程。 故事中"不用总谱,从三个词开始"——这像 DPO 的直觉:不需要显式训练一个评分器再去做 RL,直接从偏好数据中学习。DPO 在数学上等价于在特定条件下优化奖励模型——但工程上少了一个需要维护的独立模型。

后记:RLHF 的故事,本质上是一个关于"标准在哪里"的故事。预训练的标准是数据——越多越好。但人类偏好不是数据——它是一群人在一次次选择中共同浮现出的那个"我们觉得更好"。它没有公式、没有谱子、不能先验地写下来。但它可以被比较出来。雅乐真正的标准不在洪武年的谱子里——在每一次抬起下巴的点头中。周司乐用了大半辈子才明白:你要的不是一个完美的乐班,而是一个愿意听你说话,然后在下一版里改好的乐班。技术和人之间的那条鸿沟,靠的不是更多的数据——是靠更多的比较。