PPO算法原理¶
约 1111 个字 预计阅读时间 6 分钟
一、强化学习基础概念¶
-
核心要素(以超级玛丽游戏为例)
- Environment(环境):游戏本身(画面、后台程序),负责状态转换、奖励生成等
- Agent(智能体):根据策略决策动作,目标是最大化累积奖励
- State(状态):游戏当前状况,是Agent决策的依据(视频中假设State=Observation)
- Action(动作):Agent的行为(如左移、右移、跳跃)
- Reward(奖励):环境对动作的反馈(如吃金币+10分,死亡-100分)
- Action Space(动作空间):所有可能动作的集合(如超级玛丽的left/up/right)
- Trajectory(轨迹):状态与动作的序列(S₀→A₀→S₁→A₁→…→Sₜ),也称episode
- Return(回报):从当前时刻到结束的累积奖励(需考虑长远收益) -
策略函数(π)
- 输入:State(状态)
- 输出:Action的概率分布(如向左0.1、向上0.2、向右0.7)
- 动作选择:根据概率采样(而非取最大值),目的是探索更多可能性
二、强化学习核心目标与数学表达¶
-
目标:训练策略网络参数θ,使Return的期望最大化
- 数学表达:\(\max_\theta \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau)]\)- 其中\(\tau\)为轨迹,\(p_\theta(\tau)\)为轨迹的概率分布,\(R(\tau)\)为轨迹的回报
-
策略梯度(Policy Gradient)
- 采用梯度上升法优化目标函数,梯度公式:
\(\(\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_{i=1}^N \sum_{t=0}^{T} \log \pi_\theta(a_{i,t} | s_{i,t}) \cdot R(\tau_i)\)\)
- 直观意义:若轨迹回报为正,增大该轨迹中所有动作的概率;若为负,减小概率
三、算法优化与改进¶
-
回报修正
- 引入衰减因子γ(γ<1),使远期奖励影响衰减:
\(\(G_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \dots + \gamma^{T-t} R_T\)\)
- 仅累积当前动作后的奖励(动作无法影响历史奖励) -
优势函数(Advantage Function)
- 定义:\(A(s,a) = Q(s,a) - V(s)\)- \(Q(s,a)\)(动作价值函数):状态s下执行动作a的期望回报
- \(V(s)\)(状态价值函数):状态s的期望回报
- 作用:去除基线影响,仅反映动作相对优势(好的动作A>0,差的动作A<0)
-
GAE(Generalized Advantage Estimation)
- 平衡采样偏差与方差,结合多步采样的优势:
\(\(\hat{A}_t^{\text{GAE}(\lambda)} = \sum_{l=0}^\infty (\gamma \lambda)^l \delta_{t+l}\)\)- 其中\(\delta_t = R_{t+1} + \gamma V(s_{t+1}) - V(s_t)\)为时序差分误差
- λ控制权重分配(如λ=0.9时,一步采样权重0.1,两步0.09,逐步衰减)
-
Actor-Critic架构
- Actor:策略网络,负责输出动作概率
- Critic:价值网络,估算状态价值V(s),辅助计算优势函数
- 价值网络训练:拟合回报的衰减累积和(\(G_t\)作为标签)
四、PPO算法核心¶
-
核心改进:解决On-Policy效率低的问题,采用Off-Policy训练
- 重要性采样:用参考策略\(\pi_{\theta'}\)采样数据,训练目标策略\(\pi_\theta\),引入修正系数:
\(\(L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min \left( \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta'}(a_t | s_t)} A_t, \text{clip}\left( \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta'}(a_t | s_t)}, 1-\epsilon, 1+\epsilon \right) A_t \right) \right]\)\)
- 截断机制:限制策略更新幅度(如ε=0.2时,概率比控制在0.8~1.2之间),替代KL散度约束 -
训练流程
- 用参考策略\(\theta'\)采样轨迹数据
- 计算优势函数\(A_t\)
- 最小化PPO损失函数\(L^{CLIP}(\theta)\)更新目标策略θ
- 重复采样与训练(数据可多次使用)
五、训练代码与实现要点¶
-
网络结构
- 策略网络:输入为游戏画面(状态),输出动作概率分布(如3个神经元+Softmax)
- 价值网络:可与策略网络共享特征提取层,输出单个值(状态价值) -
训练步骤
- 采集数据:让Agent玩N场游戏,获取轨迹与回报
- 计算目标:用GAE计算优势函数\(A_t\)
- 更新网络:通过PPO损失函数优化策略网络和价值网络
- 迭代:更新参考策略\(\theta' \leftarrow \theta\),重复训练
六、注意事项¶
- 奖励设计:Reward定义直接影响训练效果,需合理设置(如通关正奖励、死亡负奖励)
- 探索与利用:训练时需根据概率采样动作,避免陷入局部最优
- 策略约束:确保目标策略与参考策略差异不大(通过截断机制),否则采样数据失效
- 价值网络拟合:需用衰减累积回报作为标签,平衡偏差与方差
- 效率问题:PPO通过Off-Policy机制复用数据,显著提升训练速度
七、总结¶
PPO算法通过重要性采样和截断机制,在保证稳定性的前提下实现了高效的Off-Policy训练,核心是平衡策略更新幅度与数据利用率,是强化学习中应用广泛的算法(尤其在大语言模型RLHF中)。