原文链接:Illustrating Reinforcement Learning from Human Feedback (RLHF)
LLM偏好对齐的目标:使其对齐人类偏好
LLM Training: RLHF and Its Alternatives RLHF is an integral part of the modern LLM training pipeline due to its ability to incorporate human preferences into the optimization landscape, which can improve the model’s helpfulness and safety.
通俗理解
1. 核心痛点:单靠打分,模型会“走火入魔” 如果把“奖励模型(RM)打分”作为唯一的优化目标,LLM会像一个极度渴望表扬的孩子,不计代价去讨好打分器。它会发现一些“高分捷径”——比如堆砌礼貌用语、重复安全套话,甚至利用打分器的漏洞生成看似合理但事实错误的回答。
2. 代价是什么?—— 灾难性遗忘 在这个“唯分是图”的过程中,模型会逐渐牺牲它原本最宝贵的财富:预训练阶段习得的事实知识、逻辑推理能力和语言多样性。最终,我们得到一个“很有礼貌但变笨了”的模型,这叫灾难性遗忘(Catastrophic Forgetting)。
3. 解决思路:给它系上“安全带” 我们需要一个办法,让模型在学习人类偏好的同时,死死拽住它,不让它跑偏太远。这个“拽住”的力量,就是我们要设计的约束(Constraint)。
4. 具体方案:度量“偏离度”作为约束 最直观的做法是:拿“调整后的模型”跟“最初的模型”比一比。
- 如果两者输出结果的差异很大,说明模型为了讨好打分器已经“面目全非”,偏离太远。
- 如果差异控制在一定范围内,说明模型在保持原有能力的基础上,学到了新偏好。
我们把这种差异称为偏离度(Diversity),并用数学上的KL散度(KL Penalty)来精确计算这个偏离程度。
5. 最终均衡:让两个目标“拔河” 于是,模型的优化目标变成了一个“拔河比赛”:
- 一边是奖励分数(Score)—— 拉着模型去讨好人类偏好;
- 另一边是偏离度(Diversity)—— 拽着模型不要忘本。
模型每次更新时,同时考虑这两个信号,既追求高分,又控制偏离。这样,它就能在“学新东西”和“守住老本”之间找到最佳平衡点,实现两个目标的和谐统一。
具体理解
1. 奖励模型(Reward Model, RM)的构建 首先,基于大规模人类偏好对比数据,训练一个奖励模型。该模型不负责生成文本,仅作为一个偏好打分器,能够对任意输入-回复对(Prompt-Response)输出一个标量分数,用于量化该回复符合人类偏好的程度。
2. 基于强化学习的偏好对齐训练过程 在LLM的强化学习对齐阶段(如RLHF),核心训练循环如下:
- 采样生成:将提示词(Prompt, x)输入当前待训练的LLM(作为策略模型Actor),模型生成对应的回复(Response, y)。
- 奖励评估:将生成的回复送入已冻结的奖励模型(RM),RM输出一个总体奖励分数(Score),用于指导LLM的优化方向。
3. 引入“偏离度约束”以平衡知识保留与偏好学习 在纯奖励最大化驱动下,LLM容易陷入奖励黑客(Reward Hacking)困境,为讨好打分器而产生模式坍塌,并导致灾难性遗忘(Catastrophic Forgetting)——即丢失预训练阶段习得的事实知识与推理能力。
为解决此问题,需显式引入约束项以度量模型更新前后的“行为偏差”:
- 我们定义偏离度(Diversity)为当前策略模型与初始SFT模型(即未进行RL调优前的参考模型)之间输出概率分布的差异。
- 该差异通过KL散度(Kullback-Leibler Divergence, D_KL) 进行精确量化。KL散度越大,表明模型在调优过程中偏离原始知识分布越严重。
4. 最终的联合优化目标(实现双目标均衡) 最终的优化目标函数并非简单地将Score和Diversity并列考虑,而是通过奖励塑形(Reward Shaping)将二者融合为一个复合奖励信号:
最终奖励(Final Reward) = 奖励模型原始得分(RM Score) − β × KL散度(偏离度)
其中,β(贝塔) 是一个超参数,用于动态调节约束强度:
- β 较大时,模型更倾向于保守更新,保留原有知识;
- β 较小时,模型更激进地迎合奖励模型。
在实际训练中,LLM看到的奖励值已经被此公式“暗箱加工”为单一数值。它仅需无脑最大化该复合奖励,便在不知不觉中实现了偏好对齐(高分)与知识保留(低KL)的自动权衡,从而在数学层面达到两个目标的均衡。
整个流程回顾
1. 第一阶段:预训练(Pretraining)
- 在大规模语料上训练,得到一个能流畅说人话的基础模型(Base Model)。
- 这个模型很博学,但它只会“接龙”,不会“对话”(它不知道什么叫“有用”或“无害”)。
2. 第二阶段:监督微调(Supervised Fine-Tuning,即 SFT)
- 用大量“人类高质量问答”的数据,对基础模型进行微调。
- 微调结束后,我们得到一个 SFT模型。这个模型就是RLHF中提到的“初始模型”。
- 此时,这个模型已经会很好地回答问题了,只是回答的风格、安全性、偏好性还不够完美。
3. 第三阶段:RLHF(基于人类反馈的强化学习)——也就是你原文描述的阶段
- 此时,我们有一个正在训练的RL策略模型(Policy),这个模型初始权重就是复制自上面的SFT模型。
- 训练开始后,RL策略模型会不断更新权重。
- 为了防止这个RL模型为了讨好“偏好模型”而胡说八道,系统每走一步,都会把“当前RL模型的输出概率”和“最初复制来的SFT模型(即初始模型)的输出概率”进行对比(计算KL散度)。
reward model 反馈
Core to starting the RLHF process is having a model that responds well to diverse instructions.
如何理解 These LMs for reward modeling can be both another fine-tuned LM or a LM trained from scratch on the preference data. For example, Anthropic has used a specialized method of fine-tuning to initialize these models after pretraining (preference model pretraining, PMP) because they found it to be more sample efficient than fine-tuning, but no one base model is considered the clear best choice for reward models.
这句话是在讨论奖励模型(Reward Model,RM)的训练来源,它揭示了当前大语言模型(LLM)对齐技术(如RLHF)中的一个现实选择。为了让你透彻理解,我把这句话拆解为三层含义:
1. 字面意思(技术路径的选择) 这句话指出,用作奖励模型的语言模型(LM)有两种出身:
- 路径A(微调):在一个已有的、表现不错的通用大模型基础上,用偏好数据(人类对不同回答的排名)进行微调。
- 路径B(从头训练):完全不用现成的通用模型,而是直接用偏好数据从零开始训练一个专门的奖励模型。
2. 核心案例(Anthropic的PMP) 为了说明路径B的可行性,作者举了Anthropic(Claude的母公司)的例子。
- PMP(Preference Model Pretraining,偏好模型预训练):这是一种专门的训练技巧。Anthropic发现,在预训练阶段就让模型提前接触偏好数据,比在预训练结束后再去“补课”(微调),样本效率更高。
- 通俗理解:就像学外语,从小在双语环境中长大(PMP)的人,比成年后再报速成班(微调)的人,学得更快、更省力。
3. 核心观点(没有“唯一最优解”) 这是最重要的一句:“没有哪个基座模型被认为是奖励模型的明确最佳选择。”
- 现实困境:学术界和工业界目前并未就“哪个模型最适合当裁判”达成共识。
- 原因:奖励模型的核心能力是判断好坏,而不是生成内容。一个模型生成能力强(如ChatGPT),不代表它评判别人时公允;反之,一个小模型可能生成很差,但打分很准。
- 结论:具体选哪个基座,取决于你的算力预算、偏好数据的数量和质量,以及你的任务场景(是需要绝对分数还是相对排名)。
为什么奖励模型参数量小于生成模型?
第一层:现象(Artifact)—— 奖励模型不一定比生成模型大
这段话指出一个有趣的事实:在成功的RLHF(基于人类反馈的强化学习)系统中,奖励模型的参数量往往远小于生成模型,或者两者大小不一,并没有固定比例。
- OpenAI(InstructGPT/ChatGPT):生成模型是1750亿参数,但奖励模型只有60亿参数。(相差近30倍!)
- Anthropic(Claude):比较灵活,生成模型和奖励模型都在100亿到520亿之间浮动。
- DeepMind(Chinchilla):比较保守,生成模型和奖励模型都是700亿参数,保持一样大。
核心矛盾点:既然奖励模型要“评判”生成模型写的东西,为什么裁判(6B)可以比选手(175B)小那么多?按照常理,裁判不应该比选手更懂行吗?
第二层:直觉(Intuition)—— 评判比创作“简单”
作者给出的直觉是:奖励模型需要有足够的“理解能力”来读懂文本,但不需要具备“生成能力”来创造文本。
把这句话翻译成物理学或认知科学的概念:
- 生成文本(创作):需要模型具备世界知识、逻辑推理、长期规划和语言流畅度。这是一个从无到有的过程,极度消耗参数量(所以需要175B)。
- 评判文本(理解):只需要模型具备语义理解、常识判断和比较排序的能力。这是一个从有到优的筛选过程。只要模型能“读懂”内容,就能给出相对准确的打分,不需要它亲自下场写。
解释: Training a language model with reinforcement learning was, for a long time, something that people would have thought as impossible both for engineering and algorithmic reasons. What multiple organizations seem to have gotten to work is fine-tuning some or all of the parameters of a copy of the initial LM with a policy-gradient RL algorithm, Proximal Policy Optimization (PPO). Some parameters of the LM are frozen because fine-tuning an entire 10B or 100B+ parameter model is prohibitively expensive (for more, see Low-Rank Adaptation (LoRA) for LMs or the Sparrow LM from DeepMind) – depending on the scale of the model and infrastructure being used. The exact dynamics of how many parameters to freeze, or not, is considered an open research problem. PPO has been around for a relatively long time – there are tons of guides on how it works. The relative maturity of this method made it a favorable choice for scaling up to the new application of distributed training for RLHF. It turns out that many of the core RL advancements to do RLHF have been figuring out how to update such a large model with a familiar algorithm (more on that later).
这段文字是RLHF(基于人类反馈的强化学习)技术科普中最硬核的一段,它解释了“大语言模型是怎么用强化学习训练的”。
为了让你彻底看懂,我把这段话拆解为四个递进的层次:历史背景 → 核心解法 → 工程妥协 → 现状总结。
第一层:历史背景(为什么说“不可能”)
“Training a language model with reinforcement learning was, for a long time, impossible…”
- 工程原因:强化学习(RL)需要模型不断“试错”生成文本,并实时计算奖励。大模型(100B+参数)一次前向传播就要几秒钟,试错几千次,算力成本天文数字。
- 算法原因:语言模型生成文本是离散动作(选哪个词),而传统RL擅长处理连续动作(如操控机器人关节)。离散动作无法轻易求导,导致梯度更新极其不稳定。
通俗理解:就好比你想用“训练警犬”的方法(强化学习)去“训练一个数学家”(大语言模型)——方法不对路,且数学家太贵了,经不起反复折腾。
第二层:核心解法(怎么让“不可能”变“可能”)
“…fine-tuning … with a policy-gradient RL algorithm, Proximal Policy Optimization (PPO).”
- 算法选择——PPO:PPO是OpenAI 2017年提出的强化学习算法。它的最大优点是更新稳定。它通过“裁剪”更新幅度(Clipped Surrogate Objective),防止模型在一次更新后“跑偏”太远,从而崩坏。
- 策略梯度:这是PPO背后的数学框架。它绕开了“离散动作求导”的障碍,直接通过奖励的大小来调整模型输出词语的概率。回答得好,就增大这个回答的概率;回答得差,就降低概率。
通俗理解:传统RL是在黑箱里瞎试,PPO像是给模型加了个“安全带”,允许它调整行为,但不允许它一次性翻车。
第三层:工程妥协(算力不够,怎么省钱?)
“Some parameters of the LM are frozen because fine-tuning an entire 10B or 100B+ parameter model is prohibitively expensive…”
这是最具工业实战意义的部分。
- 冻结参数(Freeze):在RL微调时,不更新全部参数,只更新一部分。
- 为什么? 更新一个千亿模型的所有参数,显存和计算开销巨大。
- 替代方案(LoRA / Sparrow):文中提到的LoRA(低秩适配)是目前最主流的方法。它不直接改大模型的原参数,而是在旁边挂一个小型“外挂插件”(适配器),只训练这个插件,最后把插件效果加回原模型。
通俗理解:大模型是一本厚重的《百科全书》,直接重印(全量微调)太贵了。LoRA相当于在书页上贴便利贴(外挂参数),只修改便利贴上的内容,书本身不动。
第四层:现状与开放问题(还没有标准答案)
“The exact dynamics of how many parameters to freeze, or not, is considered an open research problem.”
- 没有标准配方:到底冻结多少层?用什么学习率?LoRA的秩(Rank)设多大?每家公司的做法都不同,且没有定论。
- 为什么PPO胜出? 因为PPO算法相对成熟(2017年提出),社区有大量调参经验,这使得把它“搬运”到超大模型分布式训练上时,工程风险较小。
一句话总结全文
“以前没人敢用RL训大模型,但现在大家发现用PPO算法,配合LoRA这种省钱技巧(冻结大部分参数),就能勉强跑起来。至于怎么省最合理,目前没人知道,全靠试。”
如果你想继续深入,我可以为你解释:
- PPO的“裁剪”(Clipping)到底是怎么防止模型崩坏的?(数学直觉)
- LoRA的“秩”(Rank)是什么意思?为什么秩=8最常用?
- DeepMind的Sparrow模型在冻结参数上做了哪些特别设计?
你对哪一个最感兴趣?我可以继续为你拆解。
解释 Proximal Policy Optimization (PPO)
为了让你彻底理解 Proximal Policy Optimization (PPO,近端策略优化),我们不用复杂的数学公式,而是用直觉+场景推演的方式层层拆解。
PPO目前是RLHF(训练ChatGPT类模型)的事实标准算法。要理解它,我们需要先理解它要解决什么问题,以及它是怎么巧妙解决的。
第一步:理解“策略”(Policy)
在强化学习中,“策略” 就是模型的大脑——它决定了模型在给定输入(Prompt)时,输出每个词的概率。
- 训练前:策略可能随机乱说。
- 训练后:策略学会了说“好话”以获得高分。
PPO的目标就是更新这个策略,让模型生成的回答获得的奖励(Reward)越来越高。
第二步:传统方法(Vanilla Policy Gradient)的致命伤
最朴素的策略梯度方法是这样更新模型的:
“如果刚才那句回答得了高分,就把那句话里每个词的出现概率调高一点;如果得了低分,就把概率调低一点。”
问题出在“步长”(Learning Rate)上:
- 步长太大:模型一次更新太猛,参数剧烈抖动,直接忘掉了之前学会的通用知识(语言崩塌,输出乱码)。这叫“毁灭性遗忘”。
- 步长太小:训练一万年也学不会,极度耗费算力。
传统方法的痛点:你没法确定多大的步长是安全的。在超大模型上试错,成本极高。
第三步:PPO的核心魔法 —— “安全带”与“信任域”
PPO的发明者(OpenAI)想出了一个绝妙的妥协方案:我不限制你的步长,但我限制你“改变的程度”。
这就是 “近端”(Proximal) 一词的由来。
具体操作(Clipped Surrogate Objective,裁剪代理目标):
- 计算“变化比率”: PPO会计算新策略和旧策略在同一个动作上的概率比值。 比如:旧模型输出“苹果”的概率是 10%,新模型变成了 20%,比值就是 2.0。
- 强行“裁剪”(Clip): PPO设定了一个安全范围,通常是 [0.8, 1.2](即变化幅度不超过20%)。
- 如果比值超过 1.2(变得太好了),PPO会把多余的增益砍掉,不让它继续增大。
- 如果比值低于 0.8(变得太差了),PPO会把损失砍掉,不让它继续减小。
第四步:这样做的精妙之处
- 如果奖励是正的(好回答):模型想让这个词出现概率翻倍,但PPO拦住它:“只能提高20%,不许贪心。”
- 如果奖励是负的(坏回答):模型想把这个词彻底抹掉,但PPO拦住它:“只能降低20%,不许摆烂。”
结果:模型每次只敢在旧策略的“附近”走一小步(所以叫近端策略)。虽然单次进步小,但绝对安全,不会摔下悬崖。多走几步,累积起来就爬上了山顶。
第五步:用生活类比帮你彻底记住
想象你在驾驶一辆没有方向助力的重型卡车(大模型),要在一条狭窄的山路上(策略空间)行驶:
- 传统方法:你猛打方向盘(大步长)。结果要么转向不足冲下山崖(崩坏),要么转向过度撞上岩壁(乱码)。
- PPO方法:给方向盘装了一个“限位器”(Clipping)。无论你怎么用力打方向,方向盘每次最多只能转动 20度。 虽然转弯慢,但车永远在路面上,稳健地向前推进。
为什么PPO在RLHF中如此成功?
- 稳定性极强:对大模型这种“昂贵易碎品”特别友好,不会因为一次错误的奖励信号就毁掉整个模型。
- 实现简单:相比之前的TRPO(置信域策略优化),PPO不需要复杂的数学二阶导数计算,代码写起来更简单,分布式训练更容易。
- 样本效率高:它允许我们用同一批数据(生成的回答)对模型进行多次小幅更新,而不用担心翻车。
一句话终极总结
PPO = “我知道我想往左转,但我每次只允许自己转1度。虽然慢,但我永远不翻车。”
Let’s first formulate this fine-tuning task as a RL problem. First, the policy is a language model that takes in a prompt and returns a sequence of text (or just probability distributions over text). The action space of this policy is all the tokens corresponding to the vocabulary of the language model (often on the order of 50k tokens) and the observation space is the distribution of possible input token sequences, which is also quite large given previous uses of RL (the dimension is approximately the size of vocabulary ^ length of the input token sequence). The reward function is a combination of the preference model and a constraint on policy shift.
这段话是RLHF(基于人类反馈的强化学习)中最核心的数学建模部分——它把“训练大语言模型”这个任务,严格翻译成了强化学习(RL)的标准术语(策略、动作空间、观测空间、奖励函数)。
为了让你透彻理解,我们一句一句拆解,并用最直观的比喻把那些晦涩的数学概念讲清楚。
第一句:把微调任务看作RL问题
“Let’s first formulate this fine-tuning task as a RL problem.”
- 意思:我们不把微调当作普通的“填词训练”(监督学习),而是把它看作一个智能体(Agent)在环境中试错的过程。
- 核心转变:监督学习是“老师拿着答案教你写”,RL是“你自己瞎写,写得好我给你糖吃,写得差我打你手板”。
第二句:定义“策略”(Policy)
“First, the policy is a language model that takes in a prompt and returns a sequence of text…”
- 策略(Policy):在RL中,策略就是智能体的“大脑”。在这里,它就是那个大语言模型本身。
- 输入输出:输入是一个提示词(Prompt),输出是一段文本(或每个词的概率分布)。
通俗理解:策略就是“答题的学生”。老师(系统)给出一道作文题(Prompt),学生(模型)写出一篇作文(Text)。
第三句:定义“动作空间”(Action Space)
“The action space of this policy is all the tokens corresponding to the vocabulary of the language model (often on the order of 50k tokens)…”
- 动作(Action):在每一个生成步骤,模型要做的事情就是从字典里选一个词。
- 动作空间:就是字典的大小。比如GPT的字典通常有5万个词(50k tokens)。
通俗理解:学生每写一个字,都是在5万个汉字/单词里选一个。这5万个选择就是他的“动作空间”。
第四句:定义“观测空间”(Observation Space)
“…and the observation space is the distribution of possible input token sequences, which is also quite large given previous uses of RL (the dimension is approximately the size of vocabulary ^ length of the input token sequence).”
这是最难理解的一句,我重点拆解:
- 观测(Observation):模型在决定下一个词时,能看到什么?它看到的是之前已经生成的所有词(即当前的上下文)。
- 观测空间有多大:理论上,输入序列的长度是
L,每个位置有V(5万)种可能,那么观测空间就是 V 的 L 次方。哪怕L=10,这也是个天文数字(5万^10)。通俗理解:学生写作文时,每次下笔前都会看一眼“已经写了什么”。 但“已经写了什么”的组合方式是无限的(可能是“今天我…”,也可能是“昨天我…”),这种无穷无尽的上文组合,就是观测空间。 对比传统RL:以前的RL(如玩游戏)观测空间是屏幕像素(有限的),而语言模型的观测空间是指数级爆炸的,这让它比以前的任务难得多。
第五句:定义“奖励函数”(Reward Function)
“The reward function is a combination of the preference model and a constraint on policy shift.”
这是RLHF设计的精髓——奖励不是只看“好不好”,还要看“变没变”。
- 第一部分:偏好模型(Preference Model) 这是人类训练出来的“打分员”。它负责评判模型生成的回答:“这段文字人类喜欢吗?” 喜欢就给高分,不喜欢就给低分。
- 第二部分:策略偏移约束(Constraint on Policy Shift) 这是一个“惩罚项”。如果模型为了拿高分,把参数改得面目全非,彻底忘了自己原本会说什么(语言崩塌),这个惩罚项就会扣分。
通俗理解: 奖励 = (老师给的作文分数) - (你模仿别人写作风格的“违和感”惩罚)。 如果你为了得高分,突然开始用完全不认识的生僻字乱写,虽然第一部分的分数可能不低,但第二部分会狠狠扣你分,因为你“偏离了正常的说话方式”。
完整流程图解
text
┌──────────────────────────────────────────────────────────────┐ │ 强化学习(RL)建模 │ ├──────────────────────────────────────────────────────────────┤ │ 策略(Policy) = 大语言模型(学生) │ │ 动作空间(Action) = 字典里的5万个词(每步选1个) │ │ 观测空间(Obs.) = 无限多的上文组合(V ^ L) │ │ 奖励函数(Reward) = 人类偏好分 - 策略偏移惩罚 │ └──────────────────────────────────────────────────────────────┘
为什么要把简单的事搞得这么复杂?
把语言建模成RL问题,是为了解决“生成式任务没有标准答案”的困境。
- 在翻译任务中,有标准答案(参考译文),可以直接用监督学习。
- 但在写诗、讲故事、回答开放式问题时,没有一个唯一的正确答案。 这时候只能用RL:让模型自由探索生成内容,然后靠“人类偏好”这个模糊的奖励信号,慢慢引导模型学会说“人话”。
一句话终极总结
“在RLHF里,大模型就是个在无限词库里选词造句的学生,它每写一个字都要看前面写了啥(观测),从5万个词里挑一个(动作),写完一整句后,老师给一个综合分(奖励)——这个分数既要看内容好不好(偏好),还要看你有没有发疯乱写(偏移惩罚)。”
如果你想继续深入,我可以解释:
- 为什么要加“策略偏移惩罚”?不加会怎样?(KL散度的作用)
- 这种建模和AlphaGo下围棋的RL建模有何异同?
你选一个方向,我继续讲解。
这种种建模和AlphaGo下围棋的RL建模有何异同?
这个问题问得非常专业,直击了深度强化学习(Deep RL)两大巅峰应用(游戏博弈 vs. 大语言模型)的本质差异。
为了让你一目了然,我们先从数学定义上对比,再用生活化的场景帮你刻进脑子里。
一、核心异同总览(先看结论)
对比维度 AlphaGo(下围棋) ChatGPT / RLHF(写文章) 动作空间(Action Space) 极小且离散(19×19=361个落子点) 极大且离散(约50,000个词汇) 观测空间(Observation) 完全可见(棋盘361个交叉点的黑白状态) 部分可见且无限(历史对话上下文,长度可变) 环境交互(Environment) 确定性环境(落子即定局,无随机性) 随机环境(人类偏好或奖励模型有噪声) 奖励信号(Reward) 稀疏且延迟(只有棋局结束才知输赢) 稠密且即时(每个Token或每句话都有分数) 核心训练方式 自对弈(Self-play)+ 蒙特卡洛树搜索(MCTS) 人类反馈(Human Feedback)+ PPO 目标本质 打败对手(赢) 取悦人类(对齐)
二、深度拆解:为什么会有这些差异?
1. 动作空间:5万选1 vs. 361选1
- AlphaGo:每步只需在361个交叉点里选一个。这是非常“稀疏”的选择。
- 语言模型:每步要在5万个词汇里选一个。而且生成一段话(如100个词),相当于连续做100次“5万选1”,组合爆炸(50000^100)。
比喻:AlphaGo像是在国际象棋盘上落子;语言模型像是在26个英文字母里写出一部《莎士比亚全集》。后者选择的多维度和连续性要复杂得多。
2. 观测空间:固定棋盘 vs. 无限上下文
- AlphaGo:观测是固定的19×19网格,棋子非黑即白。状态空间虽大(3^361种棋局),但维度固定。
- 语言模型:观测是变长的历史序列(Prompt + 已生成的词)。输入长度可以从1个词到几千个词不等,维度不固定。
比喻:AlphaGo每次看一张固定的照片;语言模型每次在看一部永远在加长的小说。
3. 奖励信号:输赢定生死 vs. 步步有反馈
这是最关键的区别:
- AlphaGo(稀疏奖励):下完一整盘棋(几百步)后,才知道“赢了+1”或“输了-1”。中间每一步的好坏全靠算法(如价值网络)去猜,训练极难。
- 语言模型(稠密奖励):奖励模型(RM)可以给生成的一句话甚至每个词打分。模型写完一段话,立刻就知道“这句人类喜欢+0.8,那句不喜欢-0.2”。反馈非常密集。
比喻:AlphaGo像高考——考完试出分才知道生死;语言模型像玩游戏——每打一个怪就立刻冒金币或掉血。
4. 训练策略:树搜索暴力推演 vs. 概率分布微调
- AlphaGo(规划+搜索):它不用一次性决定最终下法。它会在脑海里模拟未来几十步的各种可能(蒙特卡洛树搜索),选胜率最高的那步。它靠“深思熟虑”。
- 语言模型(一次性生成):大模型生成文本是自回归的——根据前文,直接采样下一个词。它不会在脑海里预演未来50步要说的话(那样算力会爆炸)。它靠“本能反应”(策略分布)。
三、它们在RL数学框架上的“同”在哪里?
尽管差异巨大,它们在RL数学建模上共享同一个骨架:
- 都是马尔可夫决策过程(MDP):当前状态下的决策,只依赖于当前观测(语言模型依赖当前已生成的Token,围棋依赖当前棋盘)。
- 都用策略梯度(Policy Gradient):它们都不需要(或很难)计算价值函数的绝对精确值,而是直接调整策略(Policy)的概率分布,让“好动作”出现概率变大。
- 都需要解决“信用分配”(Credit Assignment):围棋要判断“是哪一步妙手导致了最后的胜利”;语言模型要判断“是哪几个词汇让人类给出了好评”。
四、一句话总结
AlphaGo是在“有限的棋盘上,通过模拟未来的输赢”来选棋子(规划型RL);而ChatGPT是在“无限的词汇库里,基于过去的上下文”来选下一个词(反应型RL)。前者难在搜索空间大(落子组合),后者难在动作空间大(词汇量)且偏好模糊(人类主观)。
1. 核心公式(最终结果)
先看文末的公式,这是最终给强化学习更新用的奖励值: 最终奖励 = 偏好模型的打分 — KL散度惩罚项
r=rθ−λrKLr=rθ*−*λrKL
这里的减号意味着:如果模型偏离太多,就要扣分。
2. 两项的具体含义
- rθ*r**θ*(偏好模型打分):追求“好”
- 系统给模型一个提示词(Prompt,比如“写一段产品介绍”),当前微调中的模型生成了一段文本(y)。
- 把“提示词+生成文本”一起喂给偏好模型(Preference Model)。这个偏好模型是预先训练好的,它知道人类喜欢什么风格、什么内容。
- 它返回一个数值(标量),分数越高,代表这段文本越“像人类喜欢的回答”。这是让模型变“有用”的动力。
- rKL*r*K*L*(KL散度惩罚项):防止“飘”
- 同时,系统会对比当前RL模型和初始模型(SFT模型)在生成每个词时的概率分布。
- KL散度衡量的是这两个分布之间的差异。差异越大,说明当前模型为了讨好偏好模型,把词的概率改得越离谱。
- 将这个差异乘以一个系数 λλ,就得到了惩罚值。
3. 为什么要加这个惩罚?(关键)
原文提到,如果不加这个惩罚(即 r=rθr=r**θ),强化学习会钻空子:
- 投机取巧(Reward Hacking):AI 可能会生成一些语法混乱、毫无逻辑的“乱码”或“咒语”,因为偏好模型可能没见过这种怪东西,或者碰巧给这类怪异的词序列打了高分。
- 结果就是模型学会用人类看不懂的垃圾文本骗取高分,而失去了原本作为语言模型“说人话”的能力。
加上 KL 惩罚后,模型每走一步都要付出“偏离初始模型”的代价。如果为了高分而大幅改变用词习惯,扣掉的分数会抵消甚至超过获得的分数。这就迫使模型在“讨好人类”和“保持语言流畅性”之间寻找平衡点。
4. 技术细节:如何计算?
原文提到,实际计算 KL 散度时,并不是算整个句子的概率,而是逐词(per-token)比较两个模型(当前策略 vs 初始模型)在生成该词时的概率分布。并且,为了效率,实际代码中通常用蒙特卡洛采样来近似这个值(即文中提到的“通过从两个分布中采样来近似”)。
一句话总结
这个奖励函数 = 目标(回答要讨喜)— 代价(不能偏离母语模型太远),目的是让 ChatGPT 这类模型既聪明又不说胡话。
怎么理解 Technical detail note: The above diagram makes it look like both models generate different responses for the same prompt, but what really happens is that the RL policy generates text, and that text is fed into the initial model to produce its relative probabilities for the KL penalty. This initial model is untouched by gradient updates during training.
这段话特别关键,它戳中了很多人在看RLHF流程图时最容易产生的视觉误解。
我用一句话帮你破局:不是两个模型各说各的话,而是一个模型说话,另一个模型(锚点)只是默默给这句话的“正常程度”打分。
为了让你彻底看懂,我把这段话拆成两个层面:
1. 纠正你的“视觉误解”(图中 vs 实际)
- 图中看起来像什么:很多教材画RLHF流程图时,会把“当前策略模型”和“初始模型(SFT)”并排画,箭头指向同一个Prompt,看起来像是两个模型都在同时生成回答。
- 实际在代码里发生什么:只有“当前策略模型”在干活(生成文本)。等到文本生成完毕,系统才把这段已经写好的文本,拿去喂给“初始模型(SFT)”,让SFT模型只看不说(只计算概率,不生成新词)。
2. 到底是怎么算KL惩罚的?(核心细节)
原文说“把文本喂给初始模型以产生相对概率”,这对应到代码中的实际操作是:
- 策略模型生成文本:给定Prompt(x),当前策略模型自回归地生成完整的回答(y)。此时,策略模型在生成每个词时,都会产生一个概率分布(比如预测下一个词有80%概率是“我”,10%是“你”…)。
- 冻结的SFT模型计算概率:系统把这串刚生成的文本(x+y)直接塞进冻结的、一动不动的SFT模型里。SFT模型不做任何采样或生成,它只是一个计算器——它算出:“如果是我(SFT模型)来写这句话,我在每个词位置上的概率分布是什么样的?”
- 逐词做减法:把“策略模型的概率分布”与“SFT模型的概率分布”逐词相减(算KL散度),差异越大,惩罚越重。
3. 为什么要这么设计?(精妙之处)
- 如果让SFT也生成一句新的话:两句话不一样,那就变成了“比较两段不同文本的好坏”,这是偏好模型该干的事,逻辑就全乱套了。
- 实际的精妙逻辑是:“话(y)是策略模型说的,但我要评估‘如果按SFT这个老实人的说话习惯,说出同样的话(y),会有多违和?’”
打个形象的比方:
策略模型是个爱拍马屁的员工,写了一封肉麻的邮件(y)。老板(KL惩罚)没有让老实人(SFT模型)也重新写一封对比,而是把肉麻邮件拿给老实人看,问他:“如果是你,你会用多大的概率写出这句肉麻话?” 如果老实人表示“我绝对写不出这种词”,老板就重罚拍马屁的员工。
总结这段话的潜台词
作者特意写这个 “Technical detail note”,是在提醒你:
别被流程图骗了。KL散度的计算不需要生成两次文本,它只是基于“同一段已生成的文本”,对两个模型(一个正在动、一个冻住了)的概率输出进行事后对比。 这样可以省去一半的推理开销,而且逻辑上更严谨。
现在再看这段话,是不是觉得每个词都严丝合缝了?如果还想知道“概率分布”具体是用哪个输出层(logits)来算的,我可以继续深入给你讲。😊
所以具体是怎么算出来的
问得非常到位!前面我们聊了“算什么”(算两个模型对同一句话的概率差异),现在我来手把手拆解具体是怎么算出来的,把数学符号变成你能在脑子里跑通的步骤。
假设我们有一个提示词 x=x=“今天天气”,策略模型生成了一句回答 y=y=“真好,适合出去玩”。
第一步:让策略模型生成文本,并记录每一步的概率分布
策略模型(正在被训练的那个)在生成这句话时,是一个词一个词(Token)往外蹦的。我们记录它在生成每个词的那一瞬间,它认为下一个词该是什么的概率分布。
位置 输入(已生成的) 策略模型给出的概率分布(举例) 第1步 “今天天气” P(真)=70%, P(确)=20%, P(太)=10% … 第2步 “今天天气 真” P(好)=60%, P(不)=30%, P(太)=10% … 第3步 “今天天气 真好” P(,)=50%, P(啊)=40%, P(吧)=10% … 第4步 “今天天气 真好,” P(适)=70%, P(去)=20%, P(出)=10% … … … … 关键点:这里记录的是完整的概率分布(所有词的百分比),而不是最终选中的那个词。
第二步:把同一段文本喂给初始模型(SFT锚点),计算它的概率分布
注意: 初始模型(SFT)没有生成这句话,它只是把这句已经写好的 yy 拿过来,按顺序过一遍,计算如果换作它自己,在当前语境下会给出什么概率分布。
位置 输入(已生成的) 初始模型(SFT)给出的概率分布(举例) 第1步 “今天天气” P(真)=90%, P(确)=5%, P(太)=3% … 第2步 “今天天气 真” P(好)=85%, P(不)=10%, P(太)=3% … 第3步 “今天天气 真好” P(,)=80%, P(啊)=15%, P(吧)=3% … 第4步 “今天天气 真好,” P(适)=90%, P(去)=5%, P(出)=3% …
第三步:逐词计算 KL 散度,然后求平均
现在,对于同一个位置(同一个词),我们有了两个概率分布(策略 vs SFT)。KL 散度衡量的是:“用 SFT 的分布来看,策略模型的分布有多离谱?”
套用公式(这里直接用离散形式的 KL 散度):
DKL(P策略∥PSFT)=∑词表里每个词P策略(词)×logP策略(词)PSFT(词)DKL(P策略∥PSFT)=词表里每个词∑P策略(词)×logPSFT(词)P策略(词)
我们拿第1步的数据代入演算一下(假设词表只有这三个词):
- 词“真”:0.7×log(0.7/0.9)=0.7×log(0.777)≈0.7×(−0.252)=−0.1760.7×log(0.7/0.9)=0.7×log(0.777)≈0.7×(−0.252)=−0.176
- 词“确”:0.2×log(0.2/0.05)=0.2×log(4)≈0.2×1.386=0.2770.2×log(0.2/0.05)=0.2×log(4)≈0.2×1.386=0.277
- 词“太”:0.1×log(0.1/0.03)=0.1×log(3.33)≈0.1×1.204=0.1200.1×log(0.1/0.03)=0.1×log(3.33)≈0.1×1.204=0.120
第1步的 KL 散度 = -0.176 + 0.277 + 0.120 ≈ 0.221
第四步:整句话的 KL 惩罚是多少?
重复上面的计算,把第2步、第3步、第4步… 的所有 KL 散度都算出来(比如第2步算出来是 0.15,第3步是 0.18,第4步是 0.10…)。
最终的 rKL*r*K*L* = 所有位置 KL 散度的平均值(或者求和,取决于具体代码实现,但平均值更常见)。
假如这句话有 10 个词,平均 KL 散度算出来是 0.18。
第五步:代入最终的奖励公式
假设偏好模型(Preference Model)对这句话的评分 rθ=2.5r**θ=2.5(满分5分),KL惩罚系数 λ=0.5λ=0.5。
最终奖励 r=rθ−λ×rKL=2.5−0.5×0.18=2.5−0.09=2.41*r*=*r*θ*−*λ*×*r*K**L*=2.5−0.5×0.18=2.5−0.09=2.41
这句“真好,适合出去玩”最终的奖励分是 2.41,比原始评分 2.5 稍微低了一点点,因为它在用词习惯上和初始 SFT 模型有微小偏离。
怎么理解 Optionally, RLHF can continue from this point by iteratively updating the reward model and the policy together. 在现实环境中 模型能力提升的同时用户的偏好也在提升
As the RL policy updates, users can continue ranking these outputs versus the model’s earlier versions. Most papers have yet to discuss implementing this operation, as the deployment mode needed to collect this type of data only works for dialogue agents with access to an engaged user base. Anthropic discusses this option as Iterated Online RLHF (see the original paper), where iterations of the policy are included in the ELO ranking system across models. This introduces complex dynamics of the policy and reward model evolving, which represents a complex and open research question.
这段话描述的是RLHF(基于人类反馈的强化学习)中一个更高级、更前沿的玩法,它打破了我们在前面对话中建立的一个隐含假设。
我们之前的对话,默认了一个静态流程:
先训练好一个偏好模型(Reward Model),然后用这个固定不变的偏好模型去训练策略模型(Policy),训练完就结束了。
而你发的这段文字,直接把静态升级到了动态。我帮你拆解成三个层次来理解:
1. 什么是“迭代式RLHF”?(基础概念)
- 常规做法:人类标注员一次性标注几万条数据,训练出一个偏好模型。之后,这个模型就永远不变了,不管策略模型怎么变,裁判(偏好模型)只有一个。
- 迭代式做法(Iterated RLHF):策略模型每更新一个版本,就把新版本生成的内容拿给人类看,让人类重新给“新旧版本”的回答排序(比如“新版回答比旧版好”)。然后用这些新数据,重新训练或微调偏好模型。接着,再用这个更新过的偏好模型,去训练下一版策略模型。
2. 为什么要这么做?(现实痛点)
原文提到一个关键限制:“只有拥有活跃用户群的对话系统才能做到”。
- 因为常规的偏好模型,会遇到分布偏移(Distribution Shift)问题。比如,第一版策略模型很笨,生成短句;随着训练变强,它开始生成复杂长句。此时,当初那个只在“短句”上学过评分的偏好模型,可能已经看不懂“长句”的好坏了,打分开始不准。
- 迭代式RLHF的解决思路是:让模型在真实的对话场景(如ChatGPT官网)中上线,收集用户对新旧版本回答的隐式或显式反馈,用这些新鲜的真实数据不断“刷新”裁判(偏好模型),让裁判和选手一起进步。
3. 为什么说是“复杂且开放的研究问题”?(难点所在)
原文引用Anthropic的论文,提到ELO排名系统(就是国际象棋用的那个积分系统):
- 当迭代进行时,你手里有策略模型的V1、V2、V3…版本,还有偏好模型的R1、R2、R3…版本。
- 复杂动力学:假设V2版本为了讨好R1裁判,学会了某种“话术”。但当你更新R2裁判后,R2可能对这套话术极其反感,认为V2比V1还差。这就变成了“矛与盾的相互追逐”。策略模型可能会在原地转圈,甚至出现“偏好震荡”(今天学到的讨好技巧,明天被新裁判判为无效)。
启发:
求助、回复自带反馈,
回复带有更多的信息(求助没能表达出来的)!!!
直接用偏好对齐,或者预测,能很好的学习求助语义表达