大模型RLHF训练-PPO算法详解:Proximal Policy Optimization Algorithms
一、TL;DR
- 提出了一种新的策略梯度方法家族,用于强化学习,这些方法交替进行与环境交互采样数据
- 提出了一个新的目标函数,使得能够进行多个小批量更新的多轮训练
- 这些新方法为近端策略优化(Proximal Policy Optimization,PPO),它们具有一些信任域策略优化的优点
- 证明PPO优于其他在线策略梯度方法,并且总体上在样本复杂度、简单性和运行时间之间取得了有利的平衡。
- 推荐大家别看了,直接调库完事(总体来说PPO是什么呢?就是一个经过多轮迭代以后,拿到的奖励分数是最高且复杂度和稳定性最好的优化方法,这个优化方法是怎么得到的呢?通过修改损失函数、加入一些截断等策略得到的)
二、问题和出发点
现有的方法和问题点:
- Deep Q-learning:在许多简单问题上失败
- Vanilla Policy Gradient Methods:数据效率和鲁棒性较差
- Trust Region / Natural Policy Gradient Methods:相对复杂,且不兼容包含噪声(如Dropout)或参数共享的架构
出发点:
- 开发一种可扩展(适用于大型模型和并行实现)、数据高效且鲁棒(即无需超参数调整即可在多种问题上成功)的方法
方法:
- 引入一种算法来改善当前的状况,该算法在仅使用一阶优化的情况下,达到了TRPO的数据效率和可靠的性能
- 提出了一个带有截断概率比率的新目标函数,该函数形成了对策略性能的下界
- 交替进行从策略中采样数据和对采样数据进行多轮优化,发现带有截断概率比率的版本表现最佳
- 在连续控制任务中,优于前面的算法算法。在Atari游戏中,它的样本复杂度显著优于A2C,与ACER相当,但PPO要简单得多。
三、背景 Policy Optimization
这一节别看了,真的晦涩难懂
3.1 策略梯度优化方法
策略梯度方法通过计算策略梯度的估计值,并将其代入随机梯度上升算法来工作。最常用的梯度估计器具有以下形式:
其中,πθ 是一个随机策略,A^t 是时间步 t 处优势函数的估计值。这里的期望 E^t[...] 表示在一个交替进行采样和优化的算法中,对有限批次样本的经验平均值。通过构造一个目标函数使用自动微分软进行求微分,其梯度为策略梯度估计器;估计值 g^是通过对下式进行求导得到的:
虽然在同一个轨迹上对这个损失 LPG 进行多次优化步骤看起来很有吸引力,但实际上这样做缺乏充分的理论依据,并且经验上通常会导致策略更新幅度过大(参见第6.1节;结果未展示,但与“无截断或惩罚”设置相似或更差)。
3.2 信任域方法-TRPO
在信任域策略优化(TRPO) 中,最大化一个目标函数,同时受到策略更新幅度的约束。具体来说:
(3)式满足(4)式,θold 是更新前的策略参数向量。通过使用共轭梯度算法,并对目标函数进行线性近似,对约束条件进行二次近似,可以高效地近似求解该问题。
实际上,支持 TRPO 的理论建议使用惩罚项而不是约束条件,即求解无约束优化问题:
其中 β 是某个系数。这是因为某个替代目标(它计算的是状态上的最大 KL 散度而不是均值)形成了策略 π 性能的下界(即悲观估计)。TRPO 使用硬约束而不是惩罚项,是因为很难选择一个单一的 β 值,使其在不同问题上(甚至在同一个问题中,随着学习过程的进展,问题的特性也会发生变化)都能表现良好。因此,为了实现我们的目标——开发一种能够模拟 TRPO 单调改进的一阶算法,实验表明,仅仅选择一个固定的惩罚系数 β 并使用 SGD 优化惩罚目标(公式 (5))是不够的;还需要进行其他修改。
3.3 截断的替代目标函数-Clipped Surrogate Objective
设 rt(θ) 表示概率比率 rt(θ)=πθold(at∣st)πθ(at∣st),因此 r(θold)=1。TRPO 最大化了一个“替代”目标函数:
3.4 自适应KL惩罚系数-Adaptive KL Penalty Coefficient
截断替代目标的替代方案,或者与之结合使用,即对 KL 散度施加惩罚,并自适应调整惩罚系数,以便在每次策略更新时达到某个目标值的 KL 散度 。虽然在实验里面发现 KL 惩罚的性能不如截断替代目标,然而,我们还是将其包含在这里,因为这是一个重要的基准。
在该算法的最简单实现中,我们在每次策略更新时执行以下步骤:
-
使用多个小批量 SGD(随机梯度下降)周期,优化带有 KL 惩罚的目标函数:
四、PPO算法
之前提到的替代损失函数可以通过对典型的策略梯度实现进行微小的修改来计算和求导。对于使用自动微分的实现,只需构建损失函数 L-CLIP 或 L-KLPEN 代替 L-PG,并对该目标执行多次随机梯度上升步骤。
大多数用于计算方差降低的优势函数估计器的技术都使用了学习到的状态价值函数 V(s),PPO使用一个结合了策略替代目标和价值函数误差项的损失函数。这个目标可以通过添加熵奖励来进一步增强,以确保足够的探索
将这些项结合起来,我们得到了以下目标函数,它在每次迭代中被(近似)最大化:
其中,c1 和 c2 是系数,S 表示熵奖励,LVF,t 是平方误差损失 (Vθ(st)−Vtarg,t)2。
一种流行的策略梯度实现方式,由 [Mni+16] 推广并适用于循环神经网络,运行策略 T 个时间步(其中 T 远小于剧集长度),并使用收集到的样本进行更新。这种风格需要一个不超出时间步 T 的优势估计器。[Mni+16] 使用的估计器是:
其中 t 指定在给定长度为 T 的轨迹片段内的时间索引 [0,T]。推广这种选择,我们可以使用广义优势估计的截断版本,当 λ=1 时,它简化为公式 (10):
使用固定长度轨迹片段的近端策略优化(PPO)算法如下所示。在每次迭代中,每个 N(并行)执行器收集 T 个时间步的数据。然后我们在这些 NT 个时间步的数据上构建替代损失函数,并使用小批量 SGD(或者通常为了更好的性能,使用 Adam [KB14])对其进行 K 轮优化:
五、EXPERIMENTS
目标函数比较
计算最后 100 个剧集的平均总奖励来对每次算法运行进行评分,得到算法和超参数,截断惩罚得分最高:
六、结论
本文介绍了近端策略优化(Proximal Policy Optimization, PPO),这是一类策略优化方法,它通过多次随机梯度上升迭代来执行每次策略更新。这些方法具有信任域方法的稳定性和可靠性,但实现起来要简单得多,仅需要对原始策略梯度方法的代码进行少量修改即可。此外,它们适用于更广泛的场景(例如,在使用策略和价值函数的联合架构时),并且总体性能更优。