policy model、reference model、reward model、value model

在强化学习(尤其是基于人类反馈的强化学习,RLHF)领域,policy model(策略模型)reference model(参考模型)reward model(奖励模型)value model(价值模型) 是四个核心组件,各自承担不同角色并协同实现策略优化。以下是对它们的详细描述:

一、Policy Model(策略模型)

定义

策略模型是强化学习中直接输出决策或动作的核心模型,其目标是学习一个“策略”(Policy),即给定环境状态(或输入)时,生成最优动作(或输出)的概率分布。

在语言模型场景中,策略模型通常是一个大语言模型(LLM),输入为文本prompt(如用户提问),输出为符合人类偏好的响应(如回答),其策略表现为“生成特定文本序列的概率分布”。

核心功能
  • 决策生成:在给定状态(如输入文本、游戏场景)下,输出动作(如文本响应、游戏操作)的概率分布,引导智能体的行为。
  • 优化目标:通过强化学习(如PPO)或直接偏好优化(如DPO),使策略模型生成的动作(或输出)获得更高的累积奖励(或更符合人类偏好)。
训练过程

策略模型的训练通常分为阶段:

  1. 初始策略(Initial Policy):通过监督微调(SFT)训练,使用高质量示范数据(如人工标注的对话)让模型初步学习“合理输出”(但未必对齐人类偏好)。
  2. 优化策略(Optimized Policy):基于奖励信号(如奖励模型打分、人类偏好数据),通过PPO、DPO等算法进一步优化,使输出更符合目标(如更安全、更有用)。
示例
  • 在对话系统中,策略模型是最终与用户交互的模型,负责生成回答;
  • 在游戏AI中,策略模型决定角色的移动、攻击等操作。

二、Reference Model(参考模型)

定义

参考模型是一个固定的基准模型,用于衡量策略模型的更新幅度或相对性能,避免策略模型过度偏离合理范围(如输出无意义内容)。

它通常是策略模型的“初始版本”(如SFT模型),或一个性能稳定的预训练模型,在训练过程中参数保持不变。

核心功能
  • 约束策略更新:通过计算策略模型与参考模型的差异(如KL散度),限制策略模型的更新幅度,防止其生成与“合理基准”偏离过大的输出(如语言模型生成语法错误的句子)。
  • 计算相对优势:在DPO、GRPO等算法中,参考模型用于计算“相对概率比”(如log⁡Ppolicy(y∣x)Pref(y∣x)\log \frac{P_{\text{policy}}(y|x)}{P_{\text{ref}}(y|x)}logPref(yx)Ppolicy(yx)),避免直接优化绝对概率导致的不稳定。
常见设置
  • 参考模型通常是策略模型的SFT版本(未经过强化学习优化的初始模型);
  • 在部分场景中,也可使用通用预训练模型(如GPT-2、Llama)作为参考,确保策略模型的输出符合语言规律。
示例
  • 在DPO中,参考模型用于定义“优势分数”,确保策略模型的优化方向是“比参考模型更符合人类偏好”,而非无限制地提高某类输出的概率;
  • 在PPO中,参考模型(或旧策略)用于计算重要性采样比率,限制新策略与旧策略的差异。

三、Reward Model(奖励模型)

定义

奖励模型是一个评分模型,用于将策略模型生成的输出(或动作)映射为一个标量“奖励值”(Reward),量化该输出的“好坏程度”,是连接人类反馈与策略优化的桥梁。

核心功能
  • 量化人类偏好:将人类对输出的主观偏好(如“哪个回答更好”)转化为可计算的数值奖励,使策略模型能通过奖励信号学习人类偏好。
  • 指导策略优化:在PPO等强化学习算法中,奖励模型的输出作为策略模型的优化目标——策略模型通过最大化累积奖励来提升性能。
训练过程

奖励模型的训练依赖人类偏好数据,通常是三元组(x,y1,y2)(x, y_1, y_2)(x,y1,y2),其中xxx是输入,y1y_1y1y2y_2y2是两个候选输出,且人类标注y1y_1y1优于y2y_2y2

  • 训练目标:学习一个函数r=RM(x,y)r = RM(x, y)r=RM(x,y),使RM(x,y1)>RM(x,y2)RM(x, y_1) > RM(x, y_2)RM(x,y1)>RM(x,y2)(即偏好的输出获得更高奖励)。
  • 实现方式:通常用神经网络(如LLM的分类头),通过对比损失(如交叉熵)训练,使模型学会区分“优/劣”输出。
局限性
  • 奖励模型可能过拟合训练数据,对分布外的输出(未在偏好数据中出现的场景)打分不准确;
  • 难以建模复杂偏好(如多目标权衡:既要求回答准确又要求简洁),可能导致“奖励黑客”(策略模型利用奖励模型漏洞获取高分但不符合实际需求)。
示例
  • 在对话系统中,奖励模型对生成的回答打分(如“相关性0.8,安全性0.9”),综合得分为奖励值;
  • 在游戏AI中,奖励模型可基于“得分、生存时间”等指标输出奖励,指导策略模型优化操作。

四、Value Model(价值模型)

定义

价值模型(又称Critic,评论家)是用于**估计“状态或状态-动作对的长期价值”**的模型,即预测从当前状态(或执行某动作后)能获得的累积奖励总和,辅助策略模型优化。

核心功能
  • 估计优势函数:价值模型的输出是策略优化的关键——通过计算“动作价值”与“状态价值”的差值(即优势函数A(s,a)=Q(s,a)−V(s)A(s,a) = Q(s,a) - V(s)A(s,a)=Q(s,a)V(s)),判断动作aaa在状态sss下的“相对好坏”(是否优于平均水平)。
  • 减少策略更新方差:在策略梯度方法中,直接用奖励计算梯度的方差较大,而价值模型的估计能平滑梯度,提高训练稳定性。
类型与区别

价值模型分为两类:

  1. 状态价值模型(V(s)V(s)V(s):估计在状态sss下,遵循当前策略能获得的期望累积奖励(不依赖具体动作)。
  2. 动作价值模型(Q(s,a)Q(s,a)Q(s,a),又称Q函数):估计在状态sss下执行动作aaa后,遵循当前策略能获得的期望累积奖励(依赖具体动作)。
训练过程

价值模型通过时序差分(TD)学习蒙特卡洛(MC)方法训练:

  • 核心思想:通过“预测值”与“实际观测值”的误差(如TD误差δ=r+γV(s′)−V(s)\delta = r + \gamma V(s') - V(s)δ=r+γV(s)V(s))更新模型参数,使预测的价值更接近实际累积奖励。
与Reward Model的区别
  • 奖励模型(RM):评估单步输出的即时好坏(如“这个回答是否相关”),输出“单步奖励”;
  • 价值模型(Value Model):评估长期累积价值(如“从当前状态开始,未来能获得多少总奖励”),输出“长期期望”。
示例
  • 在PPO中,价值模型(Critic)估计状态价值V(s)V(s)V(s),与实际奖励结合计算优势函数A(s,a)A(s,a)A(s,a),用于策略更新;
  • 在Q-Learning中,Q函数(动作价值模型)直接指导策略选择:选择Q(s,a)Q(s,a)Q(s,a)最大的动作aaa

总结与关系

这四个模型在强化学习中形成协同:

  • 策略模型是“执行者”,生成动作;
  • 参考模型是“基准线”,约束策略更新;
  • 奖励模型是“打分员”,将人类偏好转化为奖励;
  • 价值模型是“分析师”,估计长期价值以辅助策略优化。

在不同算法中,它们的存在与否不同:

  • PPO需要策略模型、价值模型、奖励模型(或环境奖励);
  • DPO仅需要策略模型和参考模型(无需奖励模型和价值模型);
  • GRPO通过组内评估替代价值模型,保留策略模型和参考模型。

理解这些模型的角色,是掌握强化学习尤其是RLHF技术的核心。

PPO

PPO(Proximal Policy Optimization,近邻策略优化)是强化学习中应用最广泛的算法之一,由OpenAI于2017年提出。它属于策略梯度方法的改进,核心优势是通过限制策略更新的幅度来平衡训练稳定性和样本效率,同时实现简单、易于调参。

一、PPO的核心动机

传统策略梯度方法(如REINFORCE)的训练稳定性差:当策略参数更新幅度过大时,新策略与旧策略差异过大,导致基于旧策略收集的样本对新策略失效,进而引发训练波动甚至发散。

PPO的解决方案是:通过数学约束限制新策略与旧策略的差异,确保策略“缓慢且稳定”地更新,同时通过多次复用样本提高效率。

二、策略梯度方法回顾

策略梯度的核心是通过优化策略参数θ\thetaθ最大化累积奖励的期望,目标函数为:
J(θ)=Eτ∼πθ[∑t=0Tγtrt]J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T \gamma^t r_t \right]J(θ)=Eτπθ[t=0Tγtrt]
其中τ=(s0,a0,r0,...,sT,aT)\tau = (s_0,a_0,r_0,...,s_T,a_T)τ=(s0,a0,r0,...,sT,aT)是轨迹,πθ(a∣s)\pi_\theta(a|s)πθ(as)是策略(给定状态sss选择动作aaa的概率分布),γ\gammaγ是折扣因子。

策略梯度的更新公式为:
∇θJ(θ)≈∑t=0TE[At(st,at)∇θlog⁡πθ(at∣st)]\nabla_\theta J(\theta) \approx \sum_{t=0}^T \mathbb{E} \left[ A_t(s_t,a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right]θJ(θ)t=0TE[At(st,at)θlogπθ(atst)]
其中At(st,at)A_t(s_t,a_t)At(st,at)优势函数,表示动作ata_tat在状态sts_tst下的“相对价值”(At=Q(st,at)−V(st)A_t = Q(s_t,a_t) - V(s_t)At=Q(st,at)V(st)QQQ为动作价值,VVV为状态价值)。

三、PPO的核心:限制策略更新幅度

PPO的关键是将策略更新限制在“信任域”(Trust Region)内,即新策略πθ\pi_\thetaπθ与旧策略πθold\pi_{\theta_{\text{old}}}πθold(用于收集样本的策略)的差异不能太大。

1. 比率函数(Ratio Function)

衡量新旧策略差异的核心指标是比率函数
rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}rt(θ)=πθold(atst)πθ(atst)
rt(θ)r_t(\theta)rt(θ)越接近1,新旧策略越相似;偏离1越远,差异越大。

具体实现:两种变体

PPO有两种主流实现方式,核心都是通过约束新/旧策略的差异来稳定更新,其中PPO-Clip因实现简单、效果稳定而更常用。

1. PPO-Penalty(惩罚式)

通过在目标函数中加入“惩罚项”(衡量新/旧策略差异的KL散度),强制策略更新不偏离旧策略太远。
目标函数形式为:
J(θ)=E[πθ(a∣s)πθold(a∣s)⋅A(s,a)]−β⋅KL(πθ(⋅∣s),πθold(⋅∣s)) J(\theta) = \mathbb{E}\left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} \cdot A(s,a) \right] - \beta \cdot \text{KL}(\pi_\theta(\cdot|s), \pi_{\theta_{\text{old}}}(\cdot|s)) J(θ)=E[πθold(as)πθ(as)A(s,a)]βKL(πθ(s),πθold(s))
其中:

  • πθ\pi_\thetaπθ 是新策略(待优化的参数为θ\thetaθ),πθold\pi_{\theta_{\text{old}}}πθold 是旧策略(参数固定,用于收集数据);
  • πθ(a∣s)πθold(a∣s)\frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}πθold(as)πθ(as) 是“重要性采样比率”(衡量新/旧策略对同一动作aaa的概率差异);
  • A(s,a)A(s,a)A(s,a) 是优势函数(衡量动作aaa在状态sss下的“好坏”,即该动作的奖励减去平均奖励);
  • KL(⋅)\text{KL}(\cdot)KL() 是KL散度(衡量两个概率分布的差异),β\betaβ 是惩罚系数(通过自适应调整控制KL散度的大小)。

通过惩罚项,当新策略与旧策略差异过大(KL散度过高)时,目标函数会被抑制,从而限制更新幅度。

2. PPO-Clip(剪辑式,更常用)

PPO-Clip放弃了复杂的KL惩罚,转而通过“剪辑”(clipping)重要性采样比率,直接限制新策略与旧策略的差异。
目标函数形式为:
JClip(θ)=E[min⁡(πθ(a∣s)πθold(a∣s)⋅A(s,a), clip(πθ(a∣s)πθold(a∣s),1−ϵ,1+ϵ)⋅A(s,a))] J_{\text{Clip}}(\theta) = \mathbb{E}\left[ \min\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} \cdot A(s,a), \ \text{clip}\left( \frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}, 1-\epsilon, 1+\epsilon \right) \cdot A(s,a) \right) \right] JClip(θ)=E[min(πθold(as)πθ(as)A(s,a), clip(πθold(as)πθ(as),1ϵ,1+ϵ)A(s,a))]
其中:

  • ϵ\epsilonϵ 是超参数(通常取0.1或0.2),用于限制比率的范围;
  • clip(x,1−ϵ,1+ϵ)\text{clip}(x, 1-\epsilon, 1+\epsilon)clip(x,1ϵ,1+ϵ) 表示将xxx限制在[1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon][1ϵ,1+ϵ]区间内(超出则截断)。

剪辑的直观意义

  • 当优势A(s,a)>0A(s,a) > 0A(s,a)>0(动作aaa是“好的”):希望新策略提高aaa的概率(比率增大),但通过剪辑限制比率不超过1+ϵ1+\epsilon1+ϵ(避免新策略过度偏爱aaa,导致策略剧变);
  • 当优势A(s,a)<0A(s,a) < 0A(s,a)<0(动作aaa是“坏的”):希望新策略降低aaa的概率(比率减小),但通过剪辑限制比率不低于1−ϵ1-\epsilon1ϵ(避免新策略过度规避aaa,导致策略剧变)。

通过这种“取最小值”的操作,目标函数只会在策略更新幅度合理时被优化,从而强制新策略与旧策略保持“近端”关系。

2. PPO的目标函数

PPO通过优化以下目标函数实现策略更新,同时限制rt(θ)r_t(\theta)rt(θ)的范围:

LCLIP(θ)=E[min⁡(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]L_{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min \left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]LCLIP(θ)=E[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]

其中:

  • ϵ\epsilonϵ是超参数(通常取0.1或0.2),用于限制rt(θ)r_t(\theta)rt(θ)的范围(1−ϵ≤rt(θ)≤1+ϵ1-\epsilon \leq r_t(\theta) \leq 1+\epsilon1ϵrt(θ)1+ϵ);
  • clip(x,a,b)\text{clip}(x, a, b)clip(x,a,b)表示将xxx裁剪到[a,b][a,b][a,b]范围内(若x<ax < ax<a则取aaa,若x>bx > bx>b则取bbb)。
3. 目标函数的直观理解(图示说明)

下图展示了LCLIP(θ)L_{\text{CLIP}}(\theta)LCLIP(θ)rt(θ)r_t(\theta)rt(θ)的关系(横轴为rt(θ)r_t(\theta)rt(θ),纵轴为目标函数值):

  • 当优势At>0A_t > 0At>0(动作ata_tat是“好动作”):
    目标是最大化rt(θ)r_t(\theta)rt(θ)(让新策略更可能选择ata_tat),但限制rt(θ)≤1+ϵr_t(\theta) \leq 1+\epsilonrt(θ)1+ϵ(避免新策略过度偏好ata_tat)。
  • 当优势At<0A_t < 0At<0(动作ata_tat是“坏动作”):
    目标是最小化rt(θ)r_t(\theta)rt(θ)(让新策略更少选择ata_tat),但限制rt(θ)≥1−ϵr_t(\theta) \geq 1-\epsilonrt(θ)1ϵ(避免新策略过度排斥ata_tat)。

通过这种“裁剪”,策略更新被限制在安全范围内,避免因幅度过大导致不稳定。

          (A_t > 0时的目标函数)          (A_t < 0时的目标函数)
             ^                                  ^
             |                                  |
(1+ε)A_t  ---+               (1-ε)A_t  ---+     |
             |                            |     |
             |          r_t(θ)            |     |
             +----+----+----+----+        +----+----+----+----+
                  1-ε   1    1+ε               1-ε   1    1+ε
                         r_t(θ)

四、PPO的完整训练流程

PPO的训练是一个“收集样本→优化策略→迭代更新”的循环,具体步骤如下:

步骤1:收集样本(基于旧策略)
  • 用当前策略πθold\pi_{\theta_{\text{old}}}πθold与环境交互,收集轨迹数据D={(st,at,rt,st+1)}\mathcal{D} = \{ (s_t, a_t, r_t, s_{t+1}) \}D={(st,at,rt,st+1)}
  • 记录每个动作的对数概率log⁡πθold(at∣st)\log \pi_{\theta_{\text{old}}}(a_t|s_t)logπθold(atst)(用于后续计算rt(θ)r_t(\theta)rt(θ))。
步骤2:计算优势函数AtA_tAt和目标回报GtG_tGt
  • 目标回报GtG_tGt:衡量从状态sts_tst开始的累积折扣奖励,即Gt=∑k=0T−tγkrt+kG_t = \sum_{k=0}^{T-t} \gamma^k r_{t+k}Gt=k=0Ttγkrt+k
  • 优势函数AtA_tAt:常用GAE(广义优势估计) 计算,平衡偏差与方差:
    At=δt+γλδt+1+(γλ)2δt+2+...+(γλ)T−t−1δT−1A_t = \delta_t + \gamma \lambda \delta_{t+1} + (\gamma \lambda)^2 \delta_{t+2} + ... + (\gamma \lambda)^{T-t-1} \delta_{T-1}At=δt+γλδt+1+(γλ)2δt+2+...+(γλ)Tt1δT1
    其中δt=rt+γV(st+1)−V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)δt=rt+γV(st+1)V(st)(时序差分误差),V(s)V(s)V(s)是状态价值函数,λ∈[0,1]\lambda \in [0,1]λ[0,1]是GAE参数(通常取0.95)。
步骤3:多次优化策略(复用样本提高效率)
  • 将样本D\mathcal{D}D随机打乱,分成多个mini-batch;
  • 对每个mini-batch,用梯度上升优化目标函数LCLIP(θ)L_{\text{CLIP}}(\theta)LCLIP(θ),迭代KKK次(KKK为超参数,如3-10次);
  • 每次更新时,用当前θ\thetaθ计算rt(θ)=πθ(at∣st)/πθold(at∣st)r_t(\theta) = \pi_\theta(a_t|s_t)/\pi_{\theta_{\text{old}}}(a_t|s_t)rt(θ)=πθ(atst)/πθold(atst),代入LCLIP(θ)L_{\text{CLIP}}(\theta)LCLIP(θ)并求导更新θ\thetaθ
步骤4:更新价值函数V(s)V(s)V(s)

价值函数V(s)V(s)V(s)用于估计状态价值,辅助计算优势AtA_tAt。其优化目标是最小化预测值与目标回报的均方误差:
LV(ϕ)=E[(Vϕ(st)−Gt)2]L_V(\phi) = \mathbb{E} \left[ (V_\phi(s_t) - G_t)^2 \right]LV(ϕ)=E[(Vϕ(st)Gt)2]
其中ϕ\phiϕ是价值网络的参数(可与策略网络共享参数,也可独立)。

步骤5:迭代

将更新后的策略πθ\pi_\thetaπθ作为新的“旧策略”πθold\pi_{\theta_{\text{old}}}πθold,重复步骤1-4,直到策略收敛。

五、PPO的优势

  1. 稳定性高:通过裁剪限制策略更新幅度,避免训练波动;
  2. 样本效率高:同一批样本可复用KKK次优化,减少与环境的交互次数;
  3. 实现简单:无需像TRPO(信任域策略优化)那样计算复杂的自然梯度,仅用随机梯度下降即可;
  4. 泛用性强:适用于离散动作(如Atari游戏)和连续动作(如机器人控制)。

总结

PPO通过“限制策略更新幅度+复用样本”的设计,在稳定性和效率之间取得了优异平衡,成为强化学习落地的首选算法之一。其核心逻辑可概括为:用旧策略收集数据,通过裁剪目标函数限制新策略与旧策略的差异,多次优化后更新策略,循环迭代直至收敛

PPO算法示例

PPO(Proximal Policy Optimization,近邻策略优化)是一种高效的强化学习算法,核心思想是通过限制策略更新的幅度(“近邻”)来保证训练稳定性,同时兼顾数据效率。以下用“训练智能体玩CartPole(平衡杆)”为例,详细说明PPO的完整步骤(以更常用的PPO-Clip版本为例)。

背景:CartPole环境

CartPole是经典的强化学习环境:小车上立一根杆子,智能体需要左右推动小车(两个动作:左推/右推),目标是让杆子保持平衡不倒下。每多保持1步,智能体获得1点奖励;杆子倒下或小车偏离轨道时, episode(一轮游戏)结束。

PPO核心步骤

PPO属于“actor-critic”框架,包含两个核心网络:

  • Actor(策略网络):输入当前状态(如小车位置、速度、杆子角度、角速度),输出每个动作的概率(如“左推”的概率0.6,“右推”的概率0.4)。
  • Critic(价值网络):输入当前状态,输出该状态的“价值”(即从该状态开始,智能体预期能获得的总奖励)。
步骤1:初始化网络
  • 随机初始化Actor和Critic的参数(如神经网络的权重和偏置)。
    • Actor初始时对动作的选择接近随机(如左推/右推概率各约0.5)。
    • Critic初始时对状态价值的估计也不准确(如任意状态都估计为0)。
步骤2:与环境交互,收集轨迹数据

目标:用当前的Actor策略与环境交互,收集一批“经验数据”,用于后续更新网络。

具体操作:

  • 让智能体用当前Actor策略玩多轮CartPole(例如玩10轮,每轮直到杆子倒下),记录每一步的“轨迹信息”:

    • sts_tst:第t步的状态(如小车在位置0.1m,速度0.2m/s,杆子角度0.05rad,角速度-0.1rad/s)。
    • ata_tat:第t步选择的动作(如“左推”)。
    • rtr_trt:第t步获得的奖励(此处每步奖励为1)。
    • πθold(at∣st)\pi_{\theta_{\text{old}}}(a_t|s_t)πθold(atst):当前Actor(旧策略,参数为θold\theta_{\text{old}}θold)在状态sts_tst下选择动作ata_tat的概率(如“左推”的概率0.6)。
  • 收集的数据格式为:{(s0,a0,r0,πθold(a0∣s0)),(s1,a1,r1,πθold(a1∣s1)),...}\{(s_0,a_0,r_0,\pi_{\theta_{\text{old}}}(a_0|s_0)), (s_1,a_1,r_1,\pi_{\theta_{\text{old}}}(a_1|s_1)), ...\}{(s0,a0,r0,πθold(a0s0)),(s1,a1,r1,πθold(a1s1)),...}

关键:保存旧策略的动作概率πθold\pi_{\theta_{\text{old}}}πθold,后续用于限制新策略的更新幅度。

步骤3:计算“回报”和“优势函数”

收集完轨迹数据后,需要计算两个关键指标,用于指导Actor和Critic的更新:

3.1 计算“折扣回报”GtG_tGt

“回报”是从第t步开始,智能体实际能获得的总奖励(需考虑未来奖励的折扣)。

  • 公式:Gt=rt+γrt+1+γ2rt+2+...+γTrTG_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + ... + \gamma^T r_TGt=rt+γrt+1+γ2rt+2+...+γTrT,其中γ\gammaγ是折扣因子(通常取0.99),表示“未来奖励的重要性低于当前奖励”。
  • 例:若某轮游戏持续了3步,奖励依次为r0=1,r1=1,r2=1r_0=1, r_1=1, r_2=1r0=1,r1=1,r2=1,则:
    G2=r2=1G_2 = r_2 = 1G2=r2=1(最后一步,没有未来奖励);
    G1=r1+γG2=1+0.99×1≈1.99G_1 = r_1 + \gamma G_2 = 1 + 0.99×1 ≈ 1.99G1=r1+γG2=1+0.99×11.99
    G0=r0+γG1=1+0.99×1.99≈2.97G_0 = r_0 + \gamma G_1 = 1 + 0.99×1.99 ≈ 2.97G0=r0+γG1=1+0.99×1.992.97
3.2 计算“优势函数”AtA_tAt

“优势”表示“选择动作ata_tat的实际好坏程度”,即“实际回报GtG_tGt”与“Critic预测的状态价值V(st)V(s_t)V(st)”的差值:

  • 公式:At=Gt−Vϕ(st)A_t = G_t - V_{\phi}(s_t)At=GtVϕ(st),其中Vϕ(st)V_{\phi}(s_t)Vϕ(st)是当前Critic(参数为ϕ\phiϕ)对状态sts_tst的价值估计。

  • 含义:若At>0A_t > 0At>0,说明动作ata_tat的实际回报高于预期(“这个动作比想象中好”),应鼓励Actor增加该动作的概率;若At<0A_t < 0At<0,则应减少该动作的概率。

  • 优化(可选):为了让优势更平滑,通常用GAE(广义优势估计) 计算AtA_tAt,通过引入参数λ\lambdaλ(如0.95)融合多步优势,减少估计噪声。

步骤4:更新Critic(价值网络)

Critic的目标是“更准确地预测状态价值”,即让Vϕ(st)V_{\phi}(s_t)Vϕ(st)尽可能接近实际回报GtG_tGt

具体操作:

  • 用收集的所有(st,Gt)(s_t, G_t)(st,Gt)数据,最小化Critic的损失函数:
    Losscritic=1N∑t=1N(Vϕ(st)−Gt)2\text{Loss}_{\text{critic}} = \frac{1}{N} \sum_{t=1}^N (V_{\phi}(s_t) - G_t)^2Losscritic=N1t=1N(Vϕ(st)Gt)2(均方误差,MSE)。
  • 通过梯度下降更新Critic的参数ϕ\phiϕ(例如用Adam优化器),使Vϕ(st)V_{\phi}(s_t)Vϕ(st)逐渐接近真实的GtG_tGt
步骤5:更新Actor(策略网络)

Actor的目标是“提高好动作的概率,降低差动作的概率”,但需限制更新幅度(核心!)。

具体操作:

5.1 计算“策略比率”rtr_trt

新策略(待更新的Actor,参数为θ\thetaθ)与旧策略(θold\theta_{\text{old}}θold)在相同状态sts_tst下选择相同动作ata_tat的概率比值:
rt=πθ(at∣st)πθold(at∣st)r_t = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}rt=πθold(atst)πθ(atst)

  • 例:旧策略在sts_tst下选择“左推”的概率是0.6,新策略在相同状态下选择“左推”的概率是0.7,则rt=0.7/0.6≈1.17r_t = 0.7 / 0.6 ≈ 1.17rt=0.7/0.61.17
5.2 构建“Clip目标函数”

为了限制策略更新幅度(避免新策略与旧策略差异过大导致不稳定),PPO-Clip定义目标函数为:
Lossactor=−1N∑t=1Nmin⁡(rt⋅At,clip(rt,1−ϵ,1+ϵ)⋅At)\text{Loss}_{\text{actor}} = - \frac{1}{N} \sum_{t=1}^N \min\left( r_t \cdot A_t, \text{clip}(r_t, 1-\epsilon, 1+\epsilon) \cdot A_t \right)Lossactor=N1t=1Nmin(rtAt,clip(rt,1ϵ,1+ϵ)At)

  • 其中ϵ\epsilonϵ是超参数(通常取0.2),clip(rt,1−ϵ,1+ϵ)\text{clip}(r_t, 1-\epsilon, 1+\epsilon)clip(rt,1ϵ,1+ϵ)表示将rtr_trt限制在[0.8,1.2][0.8, 1.2][0.8,1.2]范围内。
  • 含义:
    • At>0A_t > 0At>0(动作好):希望rtr_trt尽可能大(新策略更可能选这个动作),但不能超过1+ϵ1+\epsilon1+ϵ(避免更新太激进)。
    • At<0A_t < 0At<0(动作差):希望rtr_trt尽可能小(新策略更少选这个动作),但不能小于1−ϵ1-\epsilon1ϵ(避免更新太激进)。
5.3 多轮mini-batch更新

为了充分利用数据并稳定训练,PPO会将收集的轨迹数据分成多个mini-batch(如1000条数据分成10个mini-batch),并对每个mini-batch重复更新Actor多次(如3-10次)。

  • 每次更新时,用当前mini-batch的rtr_trtAtA_tAt计算Lossactor\text{Loss}_{\text{actor}}Lossactor,通过梯度上升(因为损失函数带负号)更新Actor的参数θ\thetaθ
步骤6:重复迭代,直到收敛
  • 完成一次更新后,将新策略(更新后的Actor)作为“旧策略”θold\theta_{\text{old}}θold,重复步骤2-5:用新策略与环境交互收集新数据,计算新的GtG_tGtAtA_tAt,再次更新Critic和Actor。
  • 随着迭代次数增加,智能体的策略会逐渐优化:Actor会更大概率选择能让杆子保持平衡的动作,Critic对状态价值的估计也会更准确。
  • 当智能体在CartPole环境中能稳定保持杆子平衡(如持续500步以上),则认为训练收敛。

图示

以下是PPO算法步骤的图示说明(以CartPole环境为例,用流程图形式展示核心逻辑与数据流向):

PPO算法整体流程图

┌─────────────────────────────────────────────────────────────────┐
│                        初始化 (步骤1)                            │
│  ┌─────────────┐       ┌─────────────┐                          │
│  │  Actor      │       │  Critic     │                          │
│  │ (策略网络π) │◄──────┤ (价值网络V) │                          │
│  │  初始参数θ  │       │  初始参数φ  │                          │
│  └──────┬──────┘       └──────┬──────┘                          │
│         │                    │                                 │
│         └────────┬───────────┘                                 │
│                  ▼                                             │
│         ┌─────────────┐                                         │
│         │  旧策略π_old │  (复制Actor初始参数,用于收集数据)       │
│         └──────┬──────┘                                         │
└────────────────┼─────────────────────────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────────────────────────┐
│                     收集轨迹数据 (步骤2)                         │
│  ┌─────────────┐       ┌─────────────┐       ┌─────────────┐    │
│  │  环境       │◄──────┤ 旧策略π_old │◄──────┤ 状态s_t     │    │
│  │ (CartPole)  │──────►│ (输出动作)  │──────►│ (小车/杆子) │    │
│  └──────┬──────┘       └──────┬──────┘       └─────────────┘    │
│         │                    │                                  │
│         │  奖励r_t           │  动作a_t                         │
│         ▼                    ▼                                  │
│  ┌─────────────────────────────────────────────────────┐        │
│  │               存储轨迹数据                         │        │
│  │  {(s_t, a_t, r_t, π_old(a_t|s_t))  ... }           │        │
│  └───────────────┬─────────────────────────────────────┘        │
└───────────────────┼─────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────┐
│               计算回报G_t和优势A_t (步骤3)                       │
│  ┌─────────────┐       ┌─────────────┐       ┌─────────────┐    │
│  │  奖励序列   │──────►│ 折扣回报G_t │       │ 优势A_t     │    │
│  │ [r_0, r_1...│       │ (r_t + γG_{t+1}) │◄───┤ G_t - V(s_t)│    │
│  └─────────────┘       └──────┬──────┘       └──────┬──────┘    │
│                               │                    │           │
│                               │                    │           │
│  ┌─────────────┐              │                    │           │
│  │  Critic     │──────────────┘                    │           │
│  │  价值V(s_t) │────────────────────────────────────┘           │
│  └─────────────┘                                                │
│  (可选:用GAE优化A_t,融合多步优势减少噪声)                       │
└───────────────────┬─────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                     更新Critic (步骤4)                           │
│  ┌─────────────┐       ┌─────────────┐       ┌─────────────┐    │
│  │  目标回报G_t│──────►│ 损失函数    │       │  更新Critic │    │
│  │             │       │ MSE(V(s_t), G_t) │───►│ 参数φ       │    │
│  └─────────────┘       └─────────────┘       └─────────────┘    │
└───────────────────┬─────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                     更新Actor (步骤5)                            │
│  1. 计算策略比率:r_t = π_θ(a_t|s_t) / π_old(a_t|s_t)            │
│  ┌─────────────┐       ┌─────────────┐                          │
│  │ 新策略π_θ   │──────►│  r_t        │                          │
│  │ (待更新)    │       │ (新旧策略比)│                          │
│  └─────────────┘       └──────┬──────┘                          │
│                               │                                 │
│  2. Clip限制:r_t ∈ [1-ε, 1+ε] (ε=0.2)                          │
│  ┌─────────────┐       ┌─────────────┐                          │
│  │  Clip(r_t)  │◄──────┤  限制更新幅  │                          │
│  │             │       │  度避免发散  │                          │
│  └──────┬──────┘       └─────────────┘                          │
│         │                                                        │
│  3. Clip目标函数:min(r_t·A_t, Clip(r_t)·A_t)                    │
│  ┌──────▼──────┐       ┌─────────────┐       ┌─────────────┐    │
│  │  目标函数   │◄──────┤ 优势A_t     │       │ 多轮mini-   │    │
│  │ (最大化)    │       │ (指导更新)  │       │ batch更新   │    │
│  └──────┬──────┘       └─────────────┘       └─────────────┘    │
│         │                                                        │
│  4. 梯度上升更新π_θ参数                                          │
│  ┌──────▼──────┐                                                │
│  │ 新策略π_θ   │                                                │
│  │ (参数更新后) │                                                │
│  └─────────────┘                                                │
└───────────────────┬─────────────────────────────────────────────┘
                    │
                    ▼
┌─────────────────────────────────────────────────────────────────┐
│                     迭代循环 (步骤6)                            │
│  ┌─────────────┐       ┌─────────────┐       ┌─────────────┐    │
│  │ 新策略π_θ   │──────►│  成为新的   │──────►│  返回步骤2, │    │
│  │             │       │  旧策略π_old│       │  重复循环   │    │
│  └─────────────┘       └─────────────┘       └─────────────┘    │
│                                                                 │
│  (直到智能体性能收敛,如CartPole保持平衡500步)                   │
└─────────────────────────────────────────────────────────────────┘

图示关键说明

  1. 循环性:整个流程以“收集数据→计算→更新→迭代”形成闭环,核心是通过不断优化策略网络(Actor)和价值网络(Critic)提升性能。
  2. 数据流向
    • 环境与旧策略交互产生原始数据(s, a, r);
    • 数据经计算模块生成G_t和A_t,分别用于更新Critic和Actor;
    • 更新后的新策略成为下一轮的旧策略,继续收集数据。
  3. 核心约束:Actor更新中,Clip函数([1-ε, 1+ε])是PPO的标志性机制,通过限制新旧策略差异保证训练稳定。
  4. 协同优化:Critic负责“评估状态价值”,为Actor提供“优势信号”(A_t);Actor负责“优化动作选择”,两者通过数据闭环协同提升。

通过该流程,智能体逐步学会在CartPole环境中保持杆子平衡,最终达到稳定收敛。

核心总结

PPO的关键在于通过“Clip目标函数”限制策略更新幅度,同时通过多轮mini-batch更新提高数据效率,在稳定性和性能之间取得了很好的平衡。整个过程中,Actor负责“做决策”,Critic负责“评估决策的好坏”,两者协同优化,最终让智能体学会最优策略。

PPO 在大模型下的应用

在大模型(如大型语言模型LLM)的训练中,强化学习(RL)通常用于对齐阶段(即让模型输出更符合人类偏好),而PPO(Proximal Policy Optimization)是目前最主流的算法之一(核心应用于RLHF流程中的“强化学习微调”环节)。

大模型中PPO的核心目标

大模型的“策略”是其生成文本的概率分布(即给定输入,模型输出下一个token的概率)。PPO的目标是通过强化学习,让模型的生成策略在“奖励信号”(通常来自人类偏好或奖励模型)的引导下优化,最终生成更符合人类需求的文本(如更准确、更安全、更有用)。

大模型中PPO的具体步骤(结合RLHF流程)

前置准备:2个关键模型
  1. SFT模型(监督微调模型)
    用高质量人工标注数据(如对话、问答)对预训练大模型进行微调,得到初始策略模型(记为π₀),作为PPO的起点。

  2. 奖励模型(RM)
    用人类对文本的偏好数据(如“两个回答A和B,人类更喜欢A”)训练一个模型,使其能对任意文本输出一个“奖励分”(分数越高,越符合人类偏好)。奖励模型是PPO的“反馈源”。

步骤1:策略生成轨迹(文本序列)
  • 让当前策略模型π(初始为SFT模型π₀)与“环境”交互:
    “环境”在这里是文本生成的上下文(如用户输入“如何煮咖啡”),模型基于输入生成完整文本序列(如“步骤1:磨咖啡豆…步骤3:煮3分钟…”),这个序列称为“轨迹”(τ)。

  • 生成过程中,模型会记录每个token的生成概率(即策略π在每个步骤的动作概率),用于后续计算策略改进。

步骤2:用奖励模型计算轨迹奖励
  • 将生成的轨迹τ输入奖励模型RM,得到一个总奖励分R(如“这个回答清晰,奖励分+5”)。
    (注:有时会对每个token分步计算奖励,或加入额外惩罚项,如对过长/重复文本减分,避免模型生成冗余内容。)

  • 为了稳定训练,通常还会引入“参考模型”(一般是SFT模型π₀),计算当前策略π与参考模型的KL散度(KL(π||π₀)),作为“约束奖励”:
    若当前策略与SFT模型偏离太大(KL散度过高),会减去一部分奖励(防止模型忘记SFT阶段学到的基础能力)。
    最终实际奖励为:总奖励 = RM奖励 - λ×KL散度(λ是控制约束强度的超参数)。

步骤3:计算优势估计(Advantage Estimation)
  • 在传统RL中,“优势”衡量“当前动作比平均水平好多少”。在大模型中,优势用于判断“生成某个token的决策是否带来了更高奖励”。

  • 具体计算:

    1. 对轨迹τ的每个位置t,计算“未来累积奖励”(从t到序列结束的奖励总和,带折扣因子γ,避免远期奖励影响过大)。
    2. 用一个“价值函数”V(s)(可单独训练,或让策略模型同时输出价值)估计“当前状态s(即到t为止的文本)的期望奖励”。
    3. 优势A(t) = 未来累积奖励 - V(s):若A(t)为正,说明这个位置的决策比预期更好,应鼓励;为负则应抑制。
步骤4:PPO核心:用裁剪目标更新策略
  • PPO的核心是“在不破坏策略稳定性的前提下,逐步改进策略”,通过“裁剪目标函数”实现。

  • 目标函数公式(简化版):
    LPPO=min⁡(π(a∣s)πold(a∣s)⋅A(s,a),clip(π(a∣s)πold(a∣s),1−ϵ,1+ϵ)⋅A(s,a))\mathcal{L}_{PPO} = \min\left( \frac{\pi(a|s)}{\pi_{\text{old}}(a|s)} \cdot A(s,a), \text{clip}\left( \frac{\pi(a|s)}{\pi_{\text{old}}(a|s)}, 1-\epsilon, 1+\epsilon \right) \cdot A(s,a) \right)LPPO=min(πold(as)π(as)A(s,a),clip(πold(as)π(as),1ϵ,1+ϵ)A(s,a))
    其中:

    • π(a∣s)\pi(a|s)π(as):当前策略在状态s下选择动作a(生成某个token)的概率。
    • πold(a∣s)\pi_{\text{old}}(a|s)πold(as):“旧策略”(更新前的策略)的概率(固定,用于限制更新幅度)。
    • ϵ\epsilonϵ:裁剪系数(如0.1或0.2),确保策略更新不“跳太远”。
  • 含义:
    当策略改进(π/πold>1+ϵ\pi/\pi_{\text{old}} > 1+\epsilonπ/πold>1+ϵ)时,裁剪到1+ϵ1+\epsilon1+ϵ,避免过度优化;
    当策略变差(π/πold<1−ϵ\pi/\pi_{\text{old}} < 1-\epsilonπ/πold<1ϵ)时,裁剪到1−ϵ1-\epsilon1ϵ,避免过度惩罚。
    最终取两种情况的最小值,保证策略更新“稳健”。

步骤5:附加损失项(提升稳定性)
  • 价值损失:让价值函数V(s)的估计更准确(如MSE损失:(V(s)−实际累积奖励)2(V(s) - 实际累积奖励)^2(V(s)实际累积奖励)2)。
  • 熵正则项:鼓励策略保持一定随机性(避免过早收敛到单一输出),公式为−α⋅H(π)- \alpha \cdot H(\pi)αH(π)(H是策略的熵,α是系数)。
步骤6:迭代优化

重复步骤1-5:

  • 用更新后的策略生成新轨迹,重新计算奖励和优势;
  • 持续迭代,直到策略在奖励模型上的表现不再提升(即生成的文本更符合人类偏好)。

大模型中PPO的关键适配(与传统RL的区别)

  1. “环境”的特殊性
    传统RL的环境是物理世界(如游戏),而大模型的“环境”是文本上下文,无明确“状态转移”规则,轨迹是不可逆的文本序列。

  2. 动作空间
    传统RL的动作是有限离散集合(如游戏的上下左右),而大模型的动作是词汇表中的token(可能有几万甚至几十万种),但PPO的概率比计算仍适用(只需比较token级的概率)。

  3. 奖励的稀疏性
    传统RL可能每步有奖励,而大模型的奖励通常是“序列级”的(整个文本生成完才给分),因此需要通过折扣累积奖励和价值函数估计来拆分每步优势。

  4. KL约束的必要性
    大模型参数规模极大(数十亿到万亿级),若策略更新幅度过大,容易“忘记”SFT阶段的知识,KL约束能有效限制偏移。

图示总结(核心流程)

┌─────────────┐       生成文本       ┌─────────────┐
│  当前策略π  │ ──────────────────→ │   轨迹τ     │
└─────────────┘                     └──────┬──────┘
                                           │
┌─────────────┐       计算奖励        ┌──────▼──────┐
│  奖励模型RM │ ←─────────────────→ │   奖励R     │
└──────┬──────┘                     └──────┬──────┘
       │                                  │
       │                                  ▼
┌──────▼──────┐       计算优势        ┌─────────────┐
│ SFT模型π₀   │ ←─────(KL约束)────→  │   优势A     │
└─────────────┘                     └──────┬──────┘
                                           │
                                           ▼
                               ┌─────────────────────┐
                               │  PPO裁剪目标更新π   │
                               └─────────────────────┘

通过上述流程,PPO能在保证大模型稳定性的前提下,逐步优化其生成策略,使其输出更符合人类偏好,这也是ChatGPT等模型对齐阶段的核心技术之一。

对比价值模型和奖励模型

我们用“生成关于‘猫’的短文”这个具体场景,分别拆解奖励模型(Reward Model)价值模型(Value Model) 的角色、输出和作用,你可以直观对比两者的差异:

场景回顾

任务:大模型需要生成一段关于“猫”的短文。
生成过程:

  1. 初始状态:[用户输入:“写一段关于‘猫’的短文”](未生成任何内容)。
  2. 生成第1个词:[用户输入→模型:“猫”]
  3. 生成第2句话:[用户输入→模型:“猫是一种可爱的动物”]
  4. 最终生成:[用户输入→模型:“猫是一种可爱的动物,它们喜欢晒太阳,性格温顺。”]

一、奖励模型(Reward Model):“给最终结果打分的裁判”

奖励模型的核心是对“完整生成结果”的质量做最终评价,类似比赛的“评委”。

1. 输入与输出
  • 输入:必须是完整的生成结果(整个短文),即上述第4步的最终状态:“用户输入→模型:‘猫是一种可爱的动物,它们喜欢晒太阳,性格温顺。’”
  • 输出:一个评分(比如7分),表示“这个短文符合人类偏好的程度”(分数越高,越符合人类对“好短文”的期待,比如内容相关、流畅、有信息量)。
2. 评分依据

奖励模型是用人类偏好数据训练的,比如:

  • 人类标注者会对比两段关于猫的短文:
    A. “猫很可爱,爱晒太阳。”
    B. “猫会飞,吃石头。”
    人类会标记“A比B好”,奖励模型通过学习大量这类数据,学会模仿人类的判断——对“内容真实、流畅”的短文打高分,对“离谱、不相关”的短文打低分。

在我们的例子中,奖励模型给最终短文打7分,是因为它判断“这段话符合‘关于猫’的主题,描述真实且流畅”。

3. 特点
  • 只看结果,不看过程:它不管中间生成了“猫”还是“狗”,只对最终完整文本打分。
  • 固定不变(在RL阶段):一旦训练好,奖励模型的评分标准就固定了,不会随大模型的生成策略变化而调整(相当于“裁判的标准不变”)。

二、价值模型(Value Model):“预测未来得分的分析师”

价值模型的核心是对“生成过程中的中间状态”做未来收益预测,类似比赛中“教练根据当前局势预测最终得分”。

1. 输入与输出
  • 输入:生成过程中的中间状态(未完成的文本),即上述第1、2、3步的状态:
    • 初始状态(第1步):“用户输入:‘写一段关于“猫”的短文’”
    • 生成第1个词后(第2步):“用户输入→模型:‘猫’”
    • 生成第2句话后(第3步):“用户输入→模型:‘猫是一种可爱的动物’”
  • 输出:对“从当前状态继续生成,最终能拿到的奖励分的平均值”的预测:
    • 初始状态:预测4分(“从这个任务开始写,平均能得4分”)。
    • 生成“猫”后:预测5分(“从‘猫’这个开头继续写,平均能得5分”)。
    • 生成第2句话后:预测6分(“从这句话继续写,平均能得6分”)。
2. 预测依据

价值模型是在大模型的强化学习过程中动态学习的,它的“预测能力”会随着训练提升:

  • 每次生成完整短文后(比如最终得7分),价值模型会回头检查自己之前的预测:
    “我之前预测‘生成第2句话后能得6分’,实际最终得了7分——预测接近,不错”;
    “如果某次预测偏差大(比如预测6分,实际只得3分),就会调整自己的参数,下次预测更准”。
3. 核心作用:计算“优势”

价值模型的预测不是为了打分,而是为了判断“中间步骤的贡献”:

  • 比如,生成“猫”这个词后,价值模型预测5分,而最终实际得7分:
    优势 = 实际得分 - 预测得分 = 7 - 5 = 2分
    这说明“生成‘猫’这个词的决策,比预期更好,带来了2分的超额收益”——大模型会因此更倾向于在类似场景中生成“猫”这样的词。

  • 如果生成某个词后,价值模型预测5分,实际最终只得3分:
    优势 = 3 - 5 = -2分
    说明“这个决策比预期差”,大模型会减少类似词的生成概率。

总结:奖励模型 vs 价值模型(用例子对比)

维度 奖励模型(裁判) 价值模型(分析师)
关注对象 最终完整短文(结果) 生成过程中的中间状态(过程)
输入 第4步的最终文本:“猫是一种可爱的动物……” 第1/2/3步的中间文本:“用户输入”“猫”“猫是一种可爱的动物”
输出 7分(对最终结果的评分) 4分→5分→6分(对未来得分的预测)
用途 告诉模型“最终结果好不好” 告诉模型“中间哪个步骤的决策更重要”
是否随训练变化 固定(裁判标准不变) 动态更新(预测能力越来越准)

简单说:

  • 奖励模型是“考完试后给总分的老师”,只看最终答卷;
  • 价值模型是“考试中每做一道题,就预估‘接下来能拿多少分’的学生自己”,帮助判断“哪道题做得好,该保持;哪道题做得差,该改进”。
    两者配合,才能让大模型在生成过程中不断优化,最终写出更符合人类偏好的内容。

价值模型的训练

获取价值模型的核心逻辑是:让模型学会“从生成过程的中间状态出发,预测最终能获得的平均奖励”,而这个学习过程需要与大模型的强化学习(比如RLHF中的PPO阶段)同步进行,依赖生成轨迹数据动态优化。

具体步骤(结合“生成关于‘猫’的短文”场景):

1. 准备训练数据:收集“中间状态+最终奖励”的轨迹

价值模型的训练数据来自大模型生成文本的完整轨迹,每条轨迹包含:

  • 中间状态:生成过程中所有未完成的文本(如“用户输入→‘猫’”“用户输入→‘猫是一种可爱的动物’”等);
  • 最终奖励:这条轨迹的完整文本被奖励模型打出的分数(如7分)。

例如,假设大模型生成了3条不同的关于“猫”的短文轨迹:

  • 轨迹1:
    中间状态1→“用户输入”;中间状态2→“用户输入→‘猫’”;中间状态3→“用户输入→‘猫是一种可爱的动物’”;最终文本→“猫是一种可爱的动物,它们喜欢晒太阳,性格温顺。”;奖励→7分。
  • 轨迹2:
    中间状态1→“用户输入”;中间状态2→“用户输入→‘猫咪’”;中间状态3→“用户输入→‘猫咪爱吃鱼’”;最终文本→“猫咪爱吃鱼,也喜欢玩毛线球。”;奖励→6分。
  • 轨迹3:
    中间状态1→“用户输入”;中间状态2→“用户输入→‘狗’”;中间状态3→“用户输入→‘狗是猫的朋友’”;最终文本→“狗是猫的朋友,它们一起玩耍。”;奖励→3分(跑题)。

这些轨迹会被整理成价值模型的训练样本:每个中间状态对应一个“未来奖励标签”(即该轨迹的最终奖励)。

2. 定义训练目标:让价值模型“预测更准”

价值模型的输入是“中间状态”(文本),输出是“对未来奖励的预测值”(比如对“用户输入→‘猫’”预测5分)。训练的目标是最小化“预测值”与“实际最终奖励”的差距

具体用均方误差(MSE)损失函数优化:

损失 = (预测值 - 实际最终奖励)²  

例如:

  • 对于轨迹1的中间状态2(“用户输入→‘猫’”),若价值模型预测5分,实际最终奖励是7分,损失就是(5-7)²=4;
  • 模型会调整参数,让下次对这个状态的预测更接近7分(比如调整后预测6分,损失降为1)。
3. 迭代更新:随强化学习动态优化

价值模型不是“一次性训练好”的,而是与大模型的策略(生成文本的模型)同步迭代的:

  • 第1轮:用初始策略生成轨迹,训练价值模型V1;
  • 第2轮:用优化后的策略(基于V1的反馈)生成新轨迹(质量可能更好),用新轨迹训练V2(比V1更准);
  • 第3轮:再用V2优化策略,生成更优轨迹,训练V3……

原因是:大模型的生成策略会随训练变化(比如更倾向于生成“猫”而非“狗”),导致轨迹分布改变。如果价值模型不更新,会一直用旧轨迹的数据预测新轨迹,导致预测失效(比如旧轨迹里“狗”出现多,新轨迹里“猫”出现多,旧模型对“猫”的预测会不准)。

4. 关键技巧:用“时序差分(TD)目标”提升稳定性

直接用“最终奖励”作为标签训练,可能因轨迹过长导致预测波动大。实际中常用TD目标替代:

TD目标 = 当前步骤的即时奖励 + 下一个状态的价值预测  

(在文本生成中,“即时奖励”可简化为0,因为奖励只在最终给出,所以TD目标≈下一个状态的价值预测)

例如,轨迹1中:

  • 中间状态3(“猫是一种可爱的动物”)的TD目标≈最终奖励7分;
  • 中间状态2(“猫”)的TD目标≈中间状态3的价值预测(假设预测6分);
  • 这样层层传递,让每个中间状态的标签更平滑,训练更稳定。

总结:价值模型的“获取路径”

  1. 数据来源:大模型生成文本的轨迹(中间状态+最终奖励);
  2. 训练目标:通过MSE损失,让模型预测“从中间状态出发的未来平均奖励”;
  3. 迭代方式:与大模型的策略同步更新,用TD目标优化稳定性;
  4. 核心目的:为强化学习提供“中间步骤的价值参考”,帮助模型判断“哪些决策更值得保留”。

简单说,价值模型是在大模型“试错生成”的过程中,通过不断学习“过程与结果的关系”而逐步训练出来的“内部评估师”。

策略模型的训练

在“生成关于‘猫’的短文”场景中,策略模型(Policy Model) 就是实际生成文本的大模型(比如微调后的GPT类模型),其核心任务是通过强化学习(PPO)优化生成策略,让生成的内容更可能获得奖励模型的高分(即更符合人类偏好)。以下结合具体例子,拆解其训练过程:

策略模型的初始状态

训练前,策略模型已经过监督微调(SFT):用人类写的“关于猫的短文”示例数据(如“猫是温顺的宠物,喜欢玩耍……”)微调过,能生成基本符合主题的文本,但可能存在缺陷(比如偶尔跑题、表述生硬)。

我们称这个初始模型为旧策略(π_old),它的生成行为是“ baseline ”(基准线)。

训练步骤(PPO核心流程)

步骤1:用旧策略收集轨迹数据

让旧策略π_old生成若干条关于“猫”的短文,记录完整轨迹(中间状态、动作、最终奖励)。
例如生成3条轨迹(简化版):

  • 轨迹A
    动作序列→“猫”→“是”→“一种”→“可爱”→“的”→“动物”……(完整文本);
    奖励模型打分→7分(优质)。
  • 轨迹B
    动作序列→“猫咪”→“爱吃”→“鱼”→“,”→“也”→“爱”→“玩”……;
    奖励模型打分→6分(良好)。
  • 轨迹C
    动作序列→“狗”→“是”→“猫”→“的”→“朋友”……(跑题);
    奖励模型打分→3分(劣质)。
步骤2:计算每个动作的“优势”(依赖价值模型)

用价值模型对每条轨迹的中间状态做预测,再结合最终奖励,计算每个生成动作(token)的“优势”(即“这个动作比预期好多少”)。

以轨迹A为例:

  • 生成“猫”这个token时,中间状态是“用户输入→‘猫’”
    价值模型预测该状态的未来奖励为5分,最终实际奖励是7分→优势=7-5=2分(正优势,说明这个动作比预期好)。
  • 生成“狗”的轨迹C中,中间状态“用户输入→‘狗’”
    价值模型预测4分,实际最终奖励3分→优势=3-4=-1分(负优势,说明这个动作比预期差)。
步骤3:用PPO目标函数更新策略模型

策略模型的核心是调整每个token的生成概率:对正优势的动作(如“猫”)提高生成概率,对负优势的动作(如“狗”)降低概率。

PPO通过“裁剪目标函数”实现这一点,确保更新幅度不过大(避免模型突然“失控”),公式简化理解为:

新策略概率 = 旧策略概率 × max(优势 × 合理幅度, 优势 × 安全幅度)  
  • 对正优势动作(如“猫”)
    旧策略生成“猫”的概率假设为30%,优势=2分(正)→新策略会提高这个概率(比如升到40%),但被限制在“合理幅度”内(比如不超过旧概率的1.2倍,避免突然升到80%导致不稳定)。
  • 对负优势动作(如“狗”)
    旧策略生成“狗”的概率假设为20%,优势=-1分(负)→新策略会降低这个概率(比如降到10%),同样被限制幅度(比如不低于旧概率的0.8倍)。
步骤4:迭代优化(核心!)

重复步骤1-3,用更新后的策略模型(新策略π_new)替代旧策略,进入下一轮训练:

  • 第2轮:新策略生成的轨迹中,“猫”出现的概率更高,跑题的“狗”更少,平均奖励可能从初始的5分提升到6分;
  • 第3轮:基于新轨迹再次计算优势,进一步优化策略,奖励可能提升到6.5分;
  • 持续迭代,直到策略模型生成的短文稳定在高奖励(如7-8分),且不再大幅波动。

关键机制:约束更新幅度(PPO的“Proximal”含义)

为什么叫“近端策略优化”?因为它严格限制新策略与旧策略的差异:

  • 比如,旧策略生成“猫”的概率不能比旧策略高太多(如不超过20%),即使优势很高;
  • 这避免了模型为了追求高奖励“走极端”(比如突然突然只生成“猫”这一个词,导致内容单调)。

总结:策略模型训练的核心逻辑

  1. 以旧策略为起点:用微调微调的模型生成初始文本;
  2. 用奖励和价值模型“打分”:通过优势判断每个词的生成是否值得鼓励;
  3. 小步调整生成概率:对好的词(正优势)多生成,差的词(负优势)少生成,且幅度可控;
  4. 循环迭代:不断用新策略生成文本、计算反馈、优化概率,直到生成质量稳定在高水准。

这个过程类似“学生写作文”:先凭基础写(SFT)→老师打分(奖励模型)→分析哪些句子写得好(价值模型算优势)→下次重点用这些好句子(策略更新)→反复练习,直到作文稳定得高分。

更多推荐