强化学习问题形式化
在 RLHF 中,如何将对话生成形式化为一个马尔可夫决策过程(MDP)?状态、动作、奖励分别是什么?¶
在强化学习的理论框架下,任何序贯决策问题都可以被建模为马尔可夫决策过程。将对话生成形式化为 MDP,是我们能够应用 PPO 等 RL 算法训练语言模型的基石。这个形式化的精妙之处在于,它将一个看似自由创作的文本生成任务,转变为一个逐 token 的、可优化的决策过程。
状态(State):在 RLHF 的语境下,状态 st 被定义为到目前为止已经生成的全部文本序列,包括初始的用户 prompt 和模型已经吐出的所有 token,即 st=(x,y1,y2,…,yt−1)。这与传统强化学习中基于传感器读数的状态定义有本质区别。这里的“状态”是完全可观测的,因为文本本身就是其完整描述。但需要注意的是,对于后续的生成来说,真正起作用的是这个文本序列经过 Transformer 编码后得到的上下文表示,而不仅仅是原始的字符序列。因此,我们实际上是将这个离散的、高维的文本序列视为一个“信息状态”。初始状态 s0 就是用户给出的 prompt。这个状态会随着每一个新 token 的生成而不断向后延伸,直到生成终止符 EOS 或达到预设的最大长度。这种状态定义最核心的优势在于它完全复用了语言模型的因果注意力机制,模型天然就是基于所有历史 token 来预测下一个 token 的,因此状态转移和策略评估可以共用同一个网络。

动作(Action):动作 at 是从预设的词汇表 V 中挑选下一个 token。词汇表的大小通常在 20,000 到 200,000 个 token 之间,这是一个规模极其庞大且离散的动作空间。在时刻 t,语言模型(即策略)会根据当前状态 stst,输出一个覆盖整个词表的概率分布 πθ(at∣st),然后从这个分布中采样一个具体的 token 作为动作 at 执行。这个“执行”在环境中就是直接将该 token 追加到当前文本序列的末尾,从而产生新的状态 st+1。值得注意的是,这个动作不仅决定了当前时刻的输出,也彻底改变了未来的生成语境,因此它是一个具有长期影响的决策。
状态转移(State Transition):状态转移是确定性的。给定当前状态 stst 和选择的动作 at,下一个状态 st+1 是唯一确定的,它就是 st 与 at 的简单拼接。这是一个无噪声、完全可控的环境,与机器人控制或游戏 AI 中充满随机性的物理环境截然不同。这种确定性转移极大地简化了模型的内部学习。
奖励(Reward):RLHF 中的奖励是复杂且高度非线性的。最核心的奖励信号来自我们费心训练的奖励模型(Reward Model, RM)。RM 会在整个生成序列结束时给出一个标量rfinal,它代表了人类对整个回答有用性、无害性和诚实性的综合偏好。这使得 RLHF 的奖励是极端稀疏且延迟的,因为在整个生成过程的中间步骤,token 的选择得不到任何关于最终质量的直接反馈。为了解决这种稀疏性带来的训练困难,我们通常会在每个 token 处增加一个即时但人造的奖励信号——KL 散度惩罚。rt=−β⋅

为什么在语言生成中,“状态”通常定义为已生成的序列,而不是单个隐藏状态?¶
这个问题触及了从循环神经网络(RNN)时代到 Transformer 时代,语言建模对“状态”这一概念认知的深刻演变。
历史视角:隐藏状态作为压缩表征

Transformer 的革命:自注意力与以序列为状态 Transformer 架构的出现彻底改变了这一切。Transformer 的核心是自注意力机制,它不再试图将所有历史信息压缩到一个单一的向量中,而是让每个 token 的生成都能直接“关注”到过去的所有 token。在这种架构下,模型的决策依据是整个已生成序列的原始表征,而非一个提炼后的隐藏向量。因此,将状态定义为显式的文本序列 st=(x,y1,…,yt−1)是更自然、更准确的。
为什么这一定义更优?
-
无损的信息传递:序列本身包含了完整的、未经压缩的历史信息。策略网络可以随时通过注意力机制查询到上文中的任何一个细节,这就解决了 RNN 的信息瓶颈问题。对于像“请总结一下我前面说的第三点”这样的多轮指令,序列状态是唯一可行的选择。
-
计算的高效性与同源性:在 RLHF 中,我们的策略网络(Actor)就是一个因果 Transformer 语言模型。它本身的工作方式就是接收一个 token 序列作为输入,然后预测下一个 token。将状态直接定义为 token 序列,意味着我们不需要额外设计状态编码器,策略网络的前向传播过程天然就是状态表征的更新过程。这实现了 MDP 模型与策略网络的完美统一。
-
与价值函数的适配:我们的价值网络(Critic)通常也是从同一个 SFT 底座初始化的,它的输入同样是这个 token 序列。Critic 通过读取序列的最终隐藏状态(或者某个池化表示)来预测这个状态的价值 V(st)。这种一致性使得整个 Actor-Critic 架构可以高度共享底层特征,降低了训练复杂度,并保证了评估(价值)与决策(策略)在同一个“世界理解”中进行。
结论:将状态定义为已生成序列,是架构演进的自然选择。它利用了 Transformer 的核心优势,避免了信息压缩,实现了策略、价值与环境转移模型的架构统一,是现代 RLHF 得以成功的基石。
语言生成的动作空间是离散且巨大的(整个词表),这对 RL 有什么挑战?¶
语言生成的动作空间是整个词汇表,其规模通常在 20,000 到 200,000 个 token 以上,并且还包含了无数的组合可能性。这个极其庞大、离散的动作空间给强化学习带来了独一无二的严峻挑战。
- 探索的灾难性
在连续动作空间(如机器人控制)中,智能体可以通过在最佳猜测附近添加微小的高斯噪声来进行有意义的局部探索。但在如此巨大的离散空间中,随机的探索(如 ε-贪心)几乎不可能产生有用的行为。想象一下,让一个猴子随机敲击包含 50,000 个键的键盘,它几乎不可能凑出一个有意义的句子。每一个随机 token 都会将生成引向一条完全随机的、毫无用处的路径,导致轨迹过早地陷入无意义的乱码状态。这意味着,通过无模型试错来从头学习语言策略是完全不可行的。这也就是为什么我们必须从一个已经具备强大语言能力的 SFT 模型开始 RLHF,而不是从零开始。
- 策略梯度的巨大方差
在策略梯度方法中,我们通过采样动作并根据其回报来调整该动作的对数概率。当动作空间有 50,000 个选项时,每一步的动作分布可能非常集中(高概率的 token 只有几个),也可能比较平坦。对于大多数概率接近于零的动作,它们几乎永远不会被采样到,因此我们根本无法估计它们的好坏。而即使是对已采样的动作,由于每个动作的回报是整个序列级别的,一个 token 的选择对最终奖励的贡献被无数其他选择所稀释。这导致用于更新策略的梯度估计具有极高的方差,训练过程会非常不稳定,甚至无法收敛。
- 计算效率的瓶颈

- 组合动作空间的隐式放大
语言生成的挑战远不止于单 token 的选择。一个回复是由几十甚至上千个 token 组成的序列,其可能的组合数量是指数级的。RLHF 的优化目标本质上是找到一个最优的生成策略,这个策略能够在这个组合爆炸的序列空间中,准确地将概率质量集中在那些既流畅、又有用、又安全、且无害的高质量回复上。任何微小的策略偏移,在经过数十步自回归生成后,都可能被指数级放大,导致最终的回复面目全非。这就解释了为什么我们需要强大的 KL 惩罚来将策略牢牢地“拴在”参考模型附近,防止它在广阔而危险的组合空间中迷失方向。
在 RLHF 中,折扣因子 γ 通常设为多少?为什么语言任务中常用 γ=1.0?¶
在 RLHF 的标准实践中,折扣因子 γ 通常被设置为 1.0。这与许多机器人控制或游戏 AI 任务(γ 通常在 0.95 到 0.99 之间)形成鲜明对比。这一选择根植于语言生成任务的本质和对齐目标的特殊性。
为什么 γ=1.0 是合理的?
-
最终评价的全局性:RLHF 的核心优化目标是生成一个完整的、高质量的回复。奖励模型评估的是整个序列的综合质量,而不是某个中间时刻的表现。我们在乎的是这个“成品”最终被用户认定为“好”还是“不好”,至于这个“好”是前几个 token 还是后几个 token 贡献的,在最终评价层面并不重要。如果设置 γ<1,那么序列开头部分的 token 对最终回报的贡献就会被指数级地打折扣,这会鼓励模型成为一个“结局决定一切”的投机者,而忽略了构建一个扎实、连贯的开头部分。这显然不符合人类的对话期望。
-
信用分配的公平性:在一条优秀的回复中,开头的概括性陈述、中间的详细论证、结尾的总结与升华,每一个部分都对最终的高质量做出了不可或缺的贡献。一个完整的、高质量的回复是由所有 token 共同完成的。使用 γ=1.0 意味着我们平等地看待每个 token 对最终成功的贡献,在反向传播优势时,会将最终的奖励同等地归功于序列中的每一步决策。这鼓励模型去学习能够带来长期高质量结果的、一致的生成策略,而不是短视的、只服务于临近几步的策略。
-
与语言模型训练目标的一致性:语言模型的自回归预训练目标(最大似然估计)是优化整个序列的对数似然,每个 token 的损失权重是相等的(即 γ=1.0 的隐式形式)。为了在对齐的同时最大限度地保留预训练所学的语言能力,并避免引入不必要的训练偏差,保持与预训练目标相似的 token 重要性评估模式是很有益的。
为什么在传统 RL 中 γ<1?
在机器人或游戏中,γ<1 是为了让智能体尽快达到目标,因为每一步都有时间成本或能量消耗。同时,这些任务的奖励往往是即时的或短程的,且环境本身存在随机性,远期的奖励可能因为环境的不可预测性而变得不可靠。γ<1 可以起到降低方差、关注近期确定收益的作用。RLHF 的环境是确定性的,且没有“时间成本”的概念,生成一个词和生成一百个词,其“动作成本”是一样的(我们更关心最终产出)。
特例:KL 惩罚充当了“局部折扣” 尽管 γ=1.0 用于最终奖励,但 KL 惩罚作为一个即时的负奖励被加到每个 token 上,它实际上在每一步都施加了一个微小的“局部成本”。这个成本迫使策略在每一步都要谨慎偏离参考模型,从而在微观层面引入了一种类似于“折扣”的约束,防止策略为了远期的最终高奖励而在短期内做出过于疯狂的试探。所以,我们可以将 RLHF 的奖励设计理解为:一个全局的、不打折的质量目标(RM 奖励),辅以每个时间步的、惩罚偏离的即时成本(KL 惩罚)。
轨迹的累计回报是如何计算的?是序列结束后的单个奖励,还是每个 token 的即时奖励?¶
RLHF 中的累计回报计算是一个精巧的设计,它既不是纯粹的序列级稀疏奖励,也不是完全密集的即时奖励,而是两者的混合。理解其计算方式,是理解 PPO 在 RLHF 中如何运作的关键。
回报的构成公式: 对于一条由 prompt x 和生成的 token 序列 y1,y2,…,yT 组成的轨迹 τ,我们为每个时间步 t 构造如下即时奖励 rt:

为什么这是混合奖励?
-
序列级稀疏奖励(RM 评分):它只在最后一个 token 出现,是终极目标。这保证了优化的方向是全局最优的。
-
Token 级密集成本(KL 惩罚):它出现在每一个 token,构成了一个“路径积分”。这保证了优化的过程是平稳、安全的,防止策略为了那一点最终奖励而在中间步骤严重偏离人类语言,导致文本崩溃。
因此,累计回报是一个既考虑了“最终结果”,也考虑了“过程成本”的综合指标。它不是简单地将最终奖励粗暴地分配给所有 token,而是通过一个具有明确物理含义(偏离成本)的密集信号,为 Critic 和 Actor 提供了丰富的、可学习的中途反馈。
在 RLHF 中,通常不会采用 TD 学习来估计回报,而是直接使用完整序列的奖励,为什么?¶
首先需要澄清一个常见的误区:RLHF 中的 PPO 实际上是结合了 TD 学习的思想的,它并非完全不用 TD 学习。但是,它使用 TD 学习的方式与标准的在线 RL 有根本不同。这里的核心差别在于 “on-policy 的完整轨迹” 与 “在线增量学习” 的区别。
为什么我们可以“离线地”看到完整序列?
RLHF 的 PPO 阶段是on-policy的,但它在一个批次内的训练流程是这样的:
-
用当前的 Actor 策略采样生成一个完整批次的所有对话轨迹。
-
等待所有轨迹全部生成完毕,此时我们拥有了每个轨迹的完整的、真实的 token 序列和最终奖励模型评分。
-
在这些完整的轨迹上计算回报 Gt,然后进行多轮(通常是2-4个epoch)的 PPO 更新。
-
更新完后,丢弃这批次数据,用更新后的策略重新采样。
在这个流程中,我们在步骤 2 已经拿到了每个状态的“真实”最终结果(即序列的完整回报)。既然我们已经知道了真实结局,为何还要像在线学习那样,用一个不完整的、带有猜测成分的 TD(0) 目标来估计呢?直接使用完整的、无偏的蒙特卡洛(MC)回报 Gt 作为 Critic 的回归目标,不是更准确吗?
GAE:TD 学习的优雅介入 然而,直接用 MC 回报有一个致命缺陷:方差极大。在 RLHF 中,动作空间巨大,不同采样路径的最终结果可能天差地别。如果我们直接用高方差的 MC 回报去训练 Critic,Critic 的估计会剧烈震荡,进而导致以其为基础计算的优势函数 At=Gt−V(st) 充满噪声,最终使 Actor 的更新不稳定。
因此,现代 PPO 实现几乎都采用广义优势估计(GAE),而 GAE 本质上就是 TD(λ)。GAE 通过指数加权的方式,将不同步长的 TD 误差组合在一起,在偏差和方差之间取得了平衡。它既利用了真实环境(这里是 RM)给出的即时奖励信号,也利用了 Critic 网络对后续状态的估计来“截断”过长的未来,从而平滑方差。所以,我们不是不用 TD 学习,而是用 GAE 这种基于完整轨迹的、离线的 TD(λ) 算法,而不是那种收到一个 transition 就更新一次模型的在线 TD(0)。
总结:RLHF 不采用纯粹的在线 TD 学习,是因为我们可以高效地批量生成完整轨迹,这允许我们使用低偏差的 MC 回报。但同时,为了抑制 MC 回报带来的高方差,我们采用 GAE 进行偏差-方差折中,从而让训练过程更加稳定。
如何将奖励模型的序列级评分转化为每个 token 的奖励信号?¶
这是 RLHF 实践中最关键的设计决策之一。奖励模型提供的只是一个对最终“成品”的整体评价,但强化学习要求我们对生成过程中的每一个“动作”都有一个奖励信号。因此,我们必须设计一个分配方案,将这一个单一的序列级评分,合理地“拆分”或“传递”给序列中的每一个 token。
最主流的转化方案:终局奖励 + 过程惩罚
在 RLHF 的 PPO 实现中,我们几乎从不将 rfinal 平均或按某种启发式规则分配到每个 token 上。原因很简单:我们不知道哪个 token 好,哪个不好,强行分配会引入巨大的偏差。一个高明的笑话,笑点可能只在最后一个词,前面的铺垫单独看平淡无奇。如果我们把奖励平均分配,就会错误地惩罚那些功不可没的铺垫词。
因此,主流的做法是:让最终奖励保持其稀疏性,只在轨迹终点出现,而通过价值函数(Critic)来学习如何将终点的价值“传播”回前面的状态。具体来说:
- 即时奖励的设计:

- 价值函数的桥梁作用:

- 信用分配的实现:

替代方案与权衡:
-
完全均匀分配:将 rfinal/T 作为每个 token 的奖励。这是一种极其天真且有害的做法,会导致前面提到的对铺垫词的错误惩罚。
-
学习一个 token 级奖励模型:理论上最优,但标注成本极高,目前难以实现。
-
基于启发式的重加权:例如,根据注意力权重或某些可解释性信号,将 rfinal更多地分配给模型“关注”的那些 token。这还不成熟。
因此,“保持奖励稀疏,让价值函数来解决信用分配”是当前 RLHF 实践中的标准范式。而 KL 惩罚作为密集信号,则保证了信用分配的底层逻辑是建立在“正常语言”的基础上,而不是完全的黑盒。
如果奖励只在序列末尾给出,这种极端稀疏奖励会给训练带来什么困难?为什么 PPO 仍能工作?¶
在 RLHF 中,奖励模型只在序列结束才给出最终评分的设定,构成了一个典型的极端稀疏奖励问题。这与 Montezuma's Revenge 等游戏中的困境异曲同工,但 PPO 之所以能在此成功,源于语言生成任务的特殊性和一系列精巧的机制设计。
极端稀疏奖励带来的核心困难
-
信用分配的极度模糊:一条由上百个 token 组成的回复,其最终得分是高是低,可能只是由其中某几个关键 token(如一个错误的事实、一个不当的措辞)决定的,而其余绝大多数 token 都是无害的背景噪声。在只有最终一个分数的情况下,模型完全不知道究竟是哪个 token 让自己得了高分,又是哪个 token 让自己满盘皆输。这就是 RL 中的“水平噪声”问题,会导致策略梯度的方差极大。
-
梯度信号微弱与延迟:想象一下,在经过 200 步的生成后,才得到一个奖励。这个奖励的梯度需要通过 200 步的反向传播才能影响到开头的几个 token。在这个过程中,梯度会随着传播路径的延长而衰减,并且很容易被其他 token 更新带来的噪声所淹没,导致早期的 token 几乎学不到任何东西。
-
Critic 训练的冷启动困境:在训练初期,Critic 网络 V(st) 完全是随机的,它无法对后续状态做出有意义的预测。没有准确的 V(st),优势函数 AtAt 就只是一堆零均值的噪声,Actor 的更新方向将是完全随机的。这会导致初始探索效率极低。
PPO 如何在这些困难下工作?
-
SFT 初始化的“热启动”:这是最关键的一点!RLHF 的 Actor 和 Critic 都是从 SFT 模型初始化的。SFT 模型本身已经是一个相当优秀的语言生成器,它输出的文本已经是流畅、基本合理的。这意味着 RLHF 的初始策略已经位于一个非常优的局部最优点附近,我们不需要从零开始探索。我们的任务不是在那片广阔的无意义乱码荒漠中寻找绿洲,而是在已有的好回复的“高原”上进行精细的局部改进。这极大缓解了探索的难度。
-
KL 惩罚作为密集的引导信号:虽然最终评分稀疏,但每一步的 KL 惩罚是即时且密集的。这个惩罚就像一条安全带,它给每一次偏离正常语言的尝试都施加了一个即时成本。在训练初期,当 RM 的信号还很弱时,KL 惩罚是模型最主要的优化信号,它能有效地将策略“锚定”在 SFT 模型的分布附近,防止其为了虚无缥缈的远期高奖励而胡乱探索,陷入语言崩溃。
-
PPO 的 on-policy 机制与 GAE:PPO 是 on-policy 算法,它用最新策略生成完整的轨迹,并在这些完整轨迹上利用 GAE 进行多轮更新。GAE 通过结合不同长度的 TD 误差,能够以较低的方差将轨迹末尾的奖励信号有效地“传导”回序列的前端。相比于 REINFORCE 那种使用完整回报的纯 MC 方法,GAE 的方差大大降低了,使得早期 token 也能获得比较稳定的梯度更新。此外,PPO 的裁剪机制也防止了单次过大的策略更新破坏 SFT 的良好初始基底。
因此,RLHF 的成功在于它精巧地利用了 SFT 提供的良好先验,将 RL 的探索问题从“大海捞针”转变为了“在已修建好的高速公路上进行局部导航”,同时用 KL 惩罚和 GAE 保证了导航过程的平稳和高效。