织梦网站列表微信软文是什么意思
本文代码参见:https://github.com/zysNLP/quickllm/tree/main/learnings/llm_related-main;感谢star。本文内容非常生动形象、但也非常长非常详细,请参照代码逐行耐心查看
配套《AIGC大模型理论与工业落地实战》;持续更新中
1. PPO算法简介
近端策略优化(Proximal Policy Optimization, PPO)是OpenAI于2017年提出的一种强化学习算法,属于策略梯度(Policy Gradient)方法。PPO通过限制策略更新的幅度来保证训练的稳定性,是目前RLHF(Reinforcement Learning from Human Feedback)中最常用的算法之一。
2. 核心概念:4+2理解法
2.1 四个模型
2.1.1 策略模型(Actor Model)
- 作用:待优化的主模型,负责生成文本
- 参数更新:✅ 参与训练,通过策略损失进行优化
- 代码位置:
actor_model = AutoModelForCausalLM.from_pretrained(...)
2.1.2 价值模型(Critic Model)
- 作用:评估当前状态的期望回报,预测每个token的价值
- 参数更新:✅ 参与训练,通过价值损失进行优化
- 代码位置:
critic_model = Critic(actor_model.base_model)
2.1.3 奖励模型(Reward Model)
- 作用:评估生成文本的质量,提供奖励信号
- 参数更新:❌ 不参与训练,权重固定
- 代码位置:
reward_model = AutoModelForSequenceClassification.from_pretrained(...)
注意事项:不建议使用API形式的reward model,原因如下:
- API请求耗时较长(单次请求约1-5秒),严重影响训练效率
- API响应可能不稳定,容易出现解析失败的情况
- 相比本地reward模型,API形式的性能差异显著
- 建议使用本地reward模型进行PPO训练,以获得更好的训练效果和效率
2.1.4 参考模型(Reference Model)
- 作用:防止策略模型偏离原始模型太远,提供KL散度约束
- 参数更新:❌ 不参与训练,权重固定
- 代码位置:
ref_model = AutoModelForCausalLM.from_pretrained(...)
3. 数学推导过程
3.1 基础概念
3.1.1 策略与轨迹
在RLHF中:
- 策略:我们要优化的大模型
- 轨迹:一次完整的文本生成过程
- 状态:当前的文本前缀
- 动作:生成下一个token
轨迹定义:
τ = ( s 0 , a 0 , s 1 , a 1 , … , s T − 1 , a T − 1 ) \tau = (s_0, a_0, s_1, a_1, \ldots, s_{T-1}, a_{T-1}) τ=(s0,a0,s1,a1,…,sT−1,aT−1)
3.1.2 优化目标
基于策略的强化学习的优化目标:
arg max π θ J ( π θ ) = arg max π θ E τ ∼ π θ [ R ( τ ) ] \arg\max_{\pi_{\theta}} J(\pi_{\theta}) = \arg\max_{\pi_{\theta}}\mathbb{E}_{\tau \sim \pi_{\theta}} [R(\tau)] argπθmaxJ(πθ)=argπθmaxEτ∼πθ[R(τ)]
3.2 策略梯度推导
3.2.1 基本策略梯度
通过数学推导,我们可以得到策略梯度的基本形式:
∇ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T − 1 Ψ t ∇ log π θ ( a t ∣ s t ) ] \nabla J(\pi_{\theta}) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T-1} \Psi_{t} \nabla \log \pi_{\theta}(a_{t} | s_{t}) \right] ∇J(πθ)=Eτ∼πθ[t=0∑T−1Ψt∇logπθ(at∣st)]
其中 Ψ t \Psi_t Ψt可以有多种选择:
- 轨迹的累积奖励
- 轨迹的折扣奖励
- 引入基线的奖励
- 动作价值函数 Q π ( s t , a t ) Q^{\pi}(s_t, a_t) Qπ(st,at)
- 优势函数 A π ( s t , a t ) A^{\pi}(s_t, a_t) Aπ(st,at)
3.2.2 优势函数(Advantage Function)
优势函数衡量某个动作相对于平均水平的优势:
A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) A_{\pi}(s_t, a_t) = Q_{\pi}(s_t, a_t) - V_{\pi}(s_t) Aπ(st,at)=Qπ(st,at)−Vπ(st)
可以简化为:
A π ( s t , a t ) = r t + γ V π ( s t + 1 ) − V π ( s t ) A_{\pi}(s_t, a_t) = r_t + \gamma V_{\pi}(s_{t+1}) - V_{\pi}(s_t) Aπ(st,at)=rt+γVπ(st+1)−Vπ(st)
3.2.3 广义优势估计(GAE)
为了平衡偏差与方差,引入GAE:
A ^ t GAE = ∑ l = 0 ∞ ( γ λ ) l δ t + l \hat{A}_t^{\text{GAE}} = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l} A^tGAE=l=0∑∞(γλ)lδt+l
其中 δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(s