强化学习PPO
PPO通过“限制策略更新幅度+复用样本”的设计,在稳定性和效率之间取得了优异平衡,成为强化学习落地的首选算法之一。用旧策略收集数据,通过裁剪目标函数限制新策略与旧策略的差异,多次优化后更新策略,循环迭代直至收敛。┌─────────────┐ 生成文本 ┌─────────────┐│ 当前策略π │ ──────────────────→ │ 轨迹τ ││┌─────────────┐ 计算奖励
policy model、reference model、reward model、value model
在强化学习(尤其是基于人类反馈的强化学习,RLHF)领域,policy model(策略模型)、reference model(参考模型)、reward model(奖励模型) 和value model(价值模型) 是四个核心组件,各自承担不同角色并协同实现策略优化。以下是对它们的详细描述:
一、Policy Model(策略模型)
定义
策略模型是强化学习中直接输出决策或动作的核心模型,其目标是学习一个“策略”(Policy),即给定环境状态(或输入)时,生成最优动作(或输出)的概率分布。
在语言模型场景中,策略模型通常是一个大语言模型(LLM),输入为文本prompt(如用户提问),输出为符合人类偏好的响应(如回答),其策略表现为“生成特定文本序列的概率分布”。
核心功能
- 决策生成:在给定状态(如输入文本、游戏场景)下,输出动作(如文本响应、游戏操作)的概率分布,引导智能体的行为。
- 优化目标:通过强化学习(如PPO)或直接偏好优化(如DPO),使策略模型生成的动作(或输出)获得更高的累积奖励(或更符合人类偏好)。
训练过程
策略模型的训练通常分为阶段:
- 初始策略(Initial Policy):通过监督微调(SFT)训练,使用高质量示范数据(如人工标注的对话)让模型初步学习“合理输出”(但未必对齐人类偏好)。
- 优化策略(Optimized Policy):基于奖励信号(如奖励模型打分、人类偏好数据),通过PPO、DPO等算法进一步优化,使输出更符合目标(如更安全、更有用)。
示例
- 在对话系统中,策略模型是最终与用户交互的模型,负责生成回答;
- 在游戏AI中,策略模型决定角色的移动、攻击等操作。
二、Reference Model(参考模型)
定义
参考模型是一个固定的基准模型,用于衡量策略模型的更新幅度或相对性能,避免策略模型过度偏离合理范围(如输出无意义内容)。
它通常是策略模型的“初始版本”(如SFT模型),或一个性能稳定的预训练模型,在训练过程中参数保持不变。
核心功能
- 约束策略更新:通过计算策略模型与参考模型的差异(如KL散度),限制策略模型的更新幅度,防止其生成与“合理基准”偏离过大的输出(如语言模型生成语法错误的句子)。
- 计算相对优势:在DPO、GRPO等算法中,参考模型用于计算“相对概率比”(如logPpolicy(y∣x)Pref(y∣x)\log \frac{P_{\text{policy}}(y|x)}{P_{\text{ref}}(y|x)}logPref(y∣x)Ppolicy(y∣x)),避免直接优化绝对概率导致的不稳定。
常见设置
- 参考模型通常是策略模型的SFT版本(未经过强化学习优化的初始模型);
- 在部分场景中,也可使用通用预训练模型(如GPT-2、Llama)作为参考,确保策略模型的输出符合语言规律。
示例
- 在DPO中,参考模型用于定义“优势分数”,确保策略模型的优化方向是“比参考模型更符合人类偏好”,而非无限制地提高某类输出的概率;
- 在PPO中,参考模型(或旧策略)用于计算重要性采样比率,限制新策略与旧策略的差异。
三、Reward Model(奖励模型)
定义
奖励模型是一个评分模型,用于将策略模型生成的输出(或动作)映射为一个标量“奖励值”(Reward),量化该输出的“好坏程度”,是连接人类反馈与策略优化的桥梁。
核心功能
- 量化人类偏好:将人类对输出的主观偏好(如“哪个回答更好”)转化为可计算的数值奖励,使策略模型能通过奖励信号学习人类偏好。
- 指导策略优化:在PPO等强化学习算法中,奖励模型的输出作为策略模型的优化目标——策略模型通过最大化累积奖励来提升性能。
训练过程
奖励模型的训练依赖人类偏好数据,通常是三元组(x,y1,y2)(x, y_1, y_2)(x,y1,y2),其中xxx是输入,y1y_1y1和y2y_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下的“相对好坏”(是否优于平均水平)。
- 减少策略更新方差:在策略梯度方法中,直接用奖励计算梯度的方差较大,而价值模型的估计能平滑梯度,提高训练稳定性。
类型与区别
价值模型分为两类:
- 状态价值模型(V(s)V(s)V(s)):估计在状态sss下,遵循当前策略能获得的期望累积奖励(不依赖具体动作)。
- 动作价值模型(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=0∑Tγ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)πθ(a∣s)是策略(给定状态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=0∑TE[At(st,at)∇θlogπθ(at∣st)]
其中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(at∣st)πθ(at∣st)
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(a∣s)πθ(a∣s)⋅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(a∣s)πθ(a∣s) 是“重要性采样比率”(衡量新/旧策略对同一动作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(a∣s)πθ(a∣s)⋅A(s,a), clip(πθold(a∣s)πθ(a∣s),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(at∣st)(用于后续计算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=0T−tγ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+...+(γλ)T−t−1δT−1
其中δ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(θ)=πθ(at∣st)/πθold(at∣st),代入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的优势
- 稳定性高:通过裁剪限制策略更新幅度,避免训练波动;
- 样本效率高:同一批样本可复用KKK次优化,减少与环境的交互次数;
- 实现简单:无需像TRPO(信任域策略优化)那样计算复杂的自然梯度,仅用随机梯度下降即可;
- 泛用性强:适用于离散动作(如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(at∣st):当前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(a0∣s0)),(s1,a1,r1,πθold(a1∣s1)),...}。
关键:保存旧策略的动作概率πθ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×1≈1.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.99≈2.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=Gt−Vϕ(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=N1∑t=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(at∣st)πθ(at∣st)
- 例:旧策略在sts_tst下选择“左推”的概率是0.6,新策略在相同状态下选择“左推”的概率是0.7,则rt=0.7/0.6≈1.17r_t = 0.7 / 0.6 ≈ 1.17rt=0.7/0.6≈1.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=−N1∑t=1Nmin(rt⋅At,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_trt和AtA_tAt计算Lossactor\text{Loss}_{\text{actor}}Lossactor,通过梯度上升(因为损失函数带负号)更新Actor的参数θ\thetaθ。
步骤6:重复迭代,直到收敛
- 完成一次更新后,将新策略(更新后的Actor)作为“旧策略”θold\theta_{\text{old}}θold,重复步骤2-5:用新策略与环境交互收集新数据,计算新的GtG_tGt和AtA_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步) │
└─────────────────────────────────────────────────────────────────┘
图示关键说明
- 循环性:整个流程以“收集数据→计算→更新→迭代”形成闭环,核心是通过不断优化策略网络(Actor)和价值网络(Critic)提升性能。
- 数据流向:
- 环境与旧策略交互产生原始数据(s, a, r);
- 数据经计算模块生成G_t和A_t,分别用于更新Critic和Actor;
- 更新后的新策略成为下一轮的旧策略,继续收集数据。
- 核心约束:Actor更新中,Clip函数(
[1-ε, 1+ε])是PPO的标志性机制,通过限制新旧策略差异保证训练稳定。 - 协同优化: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个关键模型
-
SFT模型(监督微调模型):
用高质量人工标注数据(如对话、问答)对预训练大模型进行微调,得到初始策略模型(记为π₀),作为PPO的起点。 -
奖励模型(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的决策是否带来了更高奖励”。
-
具体计算:
- 对轨迹τ的每个位置t,计算“未来累积奖励”(从t到序列结束的奖励总和,带折扣因子γ,避免远期奖励影响过大)。
- 用一个“价值函数”V(s)(可单独训练,或让策略模型同时输出价值)估计“当前状态s(即到t为止的文本)的期望奖励”。
- 优势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(a∣s)π(a∣s)⋅A(s,a),clip(πold(a∣s)π(a∣s),1−ϵ,1+ϵ)⋅A(s,a))
其中:- π(a∣s)\pi(a|s)π(a∣s):当前策略在状态s下选择动作a(生成某个token)的概率。
- πold(a∣s)\pi_{\text{old}}(a|s)πold(a∣s):“旧策略”(更新前的策略)的概率(固定,用于限制更新幅度)。
- ϵ\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的区别)
-
“环境”的特殊性:
传统RL的环境是物理世界(如游戏),而大模型的“环境”是文本上下文,无明确“状态转移”规则,轨迹是不可逆的文本序列。 -
动作空间:
传统RL的动作是有限离散集合(如游戏的上下左右),而大模型的动作是词汇表中的token(可能有几万甚至几十万种),但PPO的概率比计算仍适用(只需比较token级的概率)。 -
奖励的稀疏性:
传统RL可能每步有奖励,而大模型的奖励通常是“序列级”的(整个文本生成完才给分),因此需要通过折扣累积奖励和价值函数估计来拆分每步优势。 -
KL约束的必要性:
大模型参数规模极大(数十亿到万亿级),若策略更新幅度过大,容易“忘记”SFT阶段的知识,KL约束能有效限制偏移。
图示总结(核心流程)
┌─────────────┐ 生成文本 ┌─────────────┐
│ 当前策略π │ ──────────────────→ │ 轨迹τ │
└─────────────┘ └──────┬──────┘
│
┌─────────────┐ 计算奖励 ┌──────▼──────┐
│ 奖励模型RM │ ←─────────────────→ │ 奖励R │
└──────┬──────┘ └──────┬──────┘
│ │
│ ▼
┌──────▼──────┐ 计算优势 ┌─────────────┐
│ SFT模型π₀ │ ←─────(KL约束)────→ │ 优势A │
└─────────────┘ └──────┬──────┘
│
▼
┌─────────────────────┐
│ PPO裁剪目标更新π │
└─────────────────────┘
通过上述流程,PPO能在保证大模型稳定性的前提下,逐步优化其生成策略,使其输出更符合人类偏好,这也是ChatGPT等模型对齐阶段的核心技术之一。
对比价值模型和奖励模型
我们用“生成关于‘猫’的短文”这个具体场景,分别拆解奖励模型(Reward Model) 和价值模型(Value Model) 的角色、输出和作用,你可以直观对比两者的差异:
场景回顾
任务:大模型需要生成一段关于“猫”的短文。
生成过程:
- 初始状态:
[用户输入:“写一段关于‘猫’的短文”](未生成任何内容)。 - 生成第1个词:
[用户输入→模型:“猫”]。 - 生成第2句话:
[用户输入→模型:“猫是一种可爱的动物”]。 - 最终生成:
[用户输入→模型:“猫是一种可爱的动物,它们喜欢晒太阳,性格温顺。”]。
一、奖励模型(Reward Model):“给最终结果打分的裁判”
奖励模型的核心是对“完整生成结果”的质量做最终评价,类似比赛的“评委”。
1. 输入与输出
- 输入:必须是完整的生成结果(整个短文),即上述第4步的最终状态:
“用户输入→模型:‘猫是一种可爱的动物,它们喜欢晒太阳,性格温顺。’”。 - 输出:一个评分(比如7分),表示“这个短文符合人类偏好的程度”(分数越高,越符合人类对“好短文”的期待,比如内容相关、流畅、有信息量)。
2. 评分依据
奖励模型是用人类偏好数据训练的,比如:
- 人类标注者会对比两段关于猫的短文:
A. “猫很可爱,爱晒太阳。”
B. “猫会飞,吃石头。”
人类会标记“A比B好”,奖励模型通过学习大量这类数据,学会模仿人类的判断——对“内容真实、流畅”的短文打高分,对“离谱、不相关”的短文打低分。
在我们的例子中,奖励模型给最终短文打7分,是因为它判断“这段话符合‘关于猫’的主题,描述真实且流畅”。
3. 特点
- 只看结果,不看过程:它不管中间生成了“猫”还是“狗”,只对最终完整文本打分。
- 固定不变(在RL阶段):一旦训练好,奖励模型的评分标准就固定了,不会随大模型的生成策略变化而调整(相当于“裁判的标准不变”)。
二、价值模型(Value Model):“预测未来得分的分析师”
价值模型的核心是对“生成过程中的中间状态”做未来收益预测,类似比赛中“教练根据当前局势预测最终得分”。
1. 输入与输出
- 输入:生成过程中的中间状态(未完成的文本),即上述第1、2、3步的状态:
- 初始状态(第1步):
“用户输入:‘写一段关于“猫”的短文’” - 生成第1个词后(第2步):
“用户输入→模型:‘猫’” - 生成第2句话后(第3步):
“用户输入→模型:‘猫是一种可爱的动物’”
- 初始状态(第1步):
- 输出:对“从当前状态继续生成,最终能拿到的奖励分的平均值”的预测:
- 初始状态:预测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分);
- 这样层层传递,让每个中间状态的标签更平滑,训练更稳定。
总结:价值模型的“获取路径”
- 数据来源:大模型生成文本的轨迹(中间状态+最终奖励);
- 训练目标:通过MSE损失,让模型预测“从中间状态出发的未来平均奖励”;
- 迭代方式:与大模型的策略同步更新,用TD目标优化稳定性;
- 核心目的:为强化学习提供“中间步骤的价值参考”,帮助模型判断“哪些决策更值得保留”。
简单说,价值模型是在大模型“试错生成”的过程中,通过不断学习“过程与结果的关系”而逐步训练出来的“内部评估师”。
策略模型的训练
在“生成关于‘猫’的短文”场景中,策略模型(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%),即使优势很高;
- 这避免了模型为了追求高奖励“走极端”(比如突然突然只生成“猫”这一个词,导致内容单调)。
总结:策略模型训练的核心逻辑
- 以旧策略为起点:用微调微调的模型生成初始文本;
- 用奖励和价值模型“打分”:通过优势判断每个词的生成是否值得鼓励;
- 小步调整生成概率:对好的词(正优势)多生成,差的词(负优势)少生成,且幅度可控;
- 循环迭代:不断用新策略生成文本、计算反馈、优化概率,直到生成质量稳定在高水准。
这个过程类似“学生写作文”:先凭基础写(SFT)→老师打分(奖励模型)→分析哪些句子写得好(价值模型算优势)→下次重点用这些好句子(策略更新)→反复练习,直到作文稳定得高分。
更多推荐


所有评论(0)