Skip to content

PPO算法原理

约 1111 个字 预计阅读时间 6 分钟

一、强化学习基础概念

  1. 核心要素(以超级玛丽游戏为例)
    - Environment(环境):游戏本身(画面、后台程序),负责状态转换、奖励生成等
    - Agent(智能体):根据策略决策动作,目标是最大化累积奖励
    - State(状态):游戏当前状况,是Agent决策的依据(视频中假设State=Observation)
    - Action(动作):Agent的行为(如左移、右移、跳跃)
    - Reward(奖励):环境对动作的反馈(如吃金币+10分,死亡-100分)
    - Action Space(动作空间):所有可能动作的集合(如超级玛丽的left/up/right)
    - Trajectory(轨迹):状态与动作的序列(S₀→A₀→S₁→A₁→…→Sₜ),也称episode
    - Return(回报):从当前时刻到结束的累积奖励(需考虑长远收益)

  2. 策略函数(π)
    - 输入:State(状态)
    - 输出:Action的概率分布(如向左0.1、向上0.2、向右0.7)
    - 动作选择:根据概率采样(而非取最大值),目的是探索更多可能性

二、强化学习核心目标与数学表达

  1. 目标:训练策略网络参数θ,使Return的期望最大化
    - 数学表达:\(\max_\theta \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau)]\)

    • 其中\(\tau\)为轨迹,\(p_\theta(\tau)\)为轨迹的概率分布,\(R(\tau)\)为轨迹的回报
  2. 策略梯度(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. 回报修正
    - 引入衰减因子γ(γ<1),使远期奖励影响衰减:
    \(\(G_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \dots + \gamma^{T-t} R_T\)\)
    - 仅累积当前动作后的奖励(动作无法影响历史奖励)

  2. 优势函数(Advantage Function)
    - 定义:\(A(s,a) = Q(s,a) - V(s)\)

    • \(Q(s,a)\)(动作价值函数):状态s下执行动作a的期望回报
    • \(V(s)\)(状态价值函数):状态s的期望回报
    • 作用:去除基线影响,仅反映动作相对优势(好的动作A>0,差的动作A<0)
  3. 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,逐步衰减)
  4. Actor-Critic架构
    - Actor:策略网络,负责输出动作概率
    - Critic:价值网络,估算状态价值V(s),辅助计算优势函数
    - 价值网络训练:拟合回报的衰减累积和(\(G_t\)作为标签)

四、PPO算法核心

  1. 核心改进:解决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散度约束

  2. 训练流程
    - 用参考策略\(\theta'\)采样轨迹数据
    - 计算优势函数\(A_t\)
    - 最小化PPO损失函数\(L^{CLIP}(\theta)\)更新目标策略θ
    - 重复采样与训练(数据可多次使用)

五、训练代码与实现要点

  1. 网络结构
    - 策略网络:输入为游戏画面(状态),输出动作概率分布(如3个神经元+Softmax)
    - 价值网络:可与策略网络共享特征提取层,输出单个值(状态价值)

  2. 训练步骤
    - 采集数据:让Agent玩N场游戏,获取轨迹与回报
    - 计算目标:用GAE计算优势函数\(A_t\)
    - 更新网络:通过PPO损失函数优化策略网络和价值网络
    - 迭代:更新参考策略\(\theta' \leftarrow \theta\),重复训练

六、注意事项

  1. 奖励设计:Reward定义直接影响训练效果,需合理设置(如通关正奖励、死亡负奖励)
  2. 探索与利用:训练时需根据概率采样动作,避免陷入局部最优
  3. 策略约束:确保目标策略与参考策略差异不大(通过截断机制),否则采样数据失效
  4. 价值网络拟合:需用衰减累积回报作为标签,平衡偏差与方差
  5. 效率问题:PPO通过Off-Policy机制复用数据,显著提升训练速度

七、总结

PPO算法通过重要性采样和截断机制,在保证稳定性的前提下实现了高效的Off-Policy训练,核心是平衡策略更新幅度与数据利用率,是强化学习中应用广泛的算法(尤其在大语言模型RLHF中)。