Zephus 发表于 2022-8-26 14:47

【强化学习】PPO算法

近似策略优化(Proximal Policy Optimization,PPO)算法结合了 A2C (有多个workers)和 TRPO (使用信赖域来改进actor)的思想。
主要思想是,在更新之后,新策略应该不会离旧策略太远。为此,ppo 使用裁剪来避免过大的更新。
参考:
<hr/>
PPO算法在环境中训练
https://www.zhihu.com/video/1543565215031316480
PPO 让我们在具有挑战性的环境中训练人工智能政策,比如上面展示的Roboschool ,一个智能体试图触达一个目标(粉色球体) ,学习走路,跑步,转弯,利用自己的势头从轻微的撞击中恢复过来,以及如何在被撞倒时从地上站起来。
策略梯度(policy gradient)方法是最近在使用深层神经网络控制方面取得突破的基础,从视频游戏到3D 运动,再到围棋。但是,通过策略梯度方法获得良好结果是具有挑战性的,因为它们对步长的选择很敏感ーー步长太小,进展缓慢得无可救药; 步长太大,信号被噪音淹没,或者性能可能出现灾难性下降。它们的采样效率通常也很低,需要数百万(或数十亿)的时间步骤来学习简单的任务。
研究人员试图通过限制或优化策略更新的大小,使用TRPO和ACER等方法来消除这些缺陷。这些方法有它们自己的权衡ーー ACER 比 PPO 复杂得多,需要添加用于离线学习策略修正的代码和重放缓冲区,而在 Atari 基准上的表现仅略好于 PPO;TRPO ーー尽管对连续控制任务有用ーー不容易与策略和值函数之间共享参数或辅助损失的算法兼容,比如那些用于解决 Atari 和其他视觉输入重要的领域的问题的算法。
PPO
有了监督式学习,我们可以很容易地实现成本函数,在它上面运行梯度下降法,并且非常有信心地认为,只需相对较少的超参数调整,我们就可以得到优秀的结果。强化学习的成功之路并不那么明显ーー这些算法有许多难以调试的活动部件,为了获得好的结果,它们需要大量的调优工作。PPO 在易于实现、样例复杂性和易于调优之间取得了平衡,试图在每个步骤中计算一个更新,以最小化成本函数,同时确保与前一策略的偏差相对较小。
PPO使用了一种新的目标函数来控制策略在每次迭代中的变化,这在其它算法中是不常见的:
L^{C L I P}(\theta)=\hat{E}_{t}\left[\min \left(r_{t}(\theta) \hat{A}_{t}, \operatorname{clip}\left(r_{t}(\theta), 1-\varepsilon, 1+\varepsilon\right) \hat{A}_{t}\right)\right]\\

[*]\theta 为策略参数
[*]\hat{E}_{t} 表示对时间步长的经验预期
[*]r_t 是在新策略和旧策略下的概率比
[*]\hat{A_t} 在 t 时刻估计优势
[*]\varepsilon 是一个超参数,通常是0.1或者0.2
这个目标实现了一个与随机梯度下降兼容的信赖域更新方法,并通过消除 KL 惩罚和需要自适应更新来简化算法。在测试中,该算法在连续控制任务中表现出最佳性能,几乎与 Atari 上的 ACER 性能相当,但是它实现起来要简单得多。
参考:
<hr/>背景
PPO 的动机与 TRPO 的问题相同: 我们如何利用现有数据对策略进行尽可能大的改进,而不至于意外导致性能崩溃?当 TRPO 试图用一个复杂的二阶方法来解决这个问题时,PPO 是一个一阶方法的家族,它使用一些其他的技巧来使新的策略接近旧的策略。PPO 方法实现起来要简单得多,而且从经验上看至少和 TRPO 一样好。
PPO 有两个主要的变体: PPO -Penalty和 PPO-Clip。
PPO-Penalty:该算法可以近似地解决类似 TRPO 的 KL 约束更新,但在目标函数中惩罚 KL 发散,而不是使其成为一个硬约束,并在训练过程中自动调整惩罚系数,使其适当缩放。
PPO-Clip:在目标中没有 KL 散度项,也没有任何约束。取而代之的是在目标函数中进行专门裁剪,以消除新策略远离旧策略的动机。
在这里,我们只关注 PPO-Clip (OpenAI 中使用的主要变体)。
快览

[*]PPO是一个在线学习算法。
[*]PPO 可用于具有离散或连续动作空间的环境。
关键方程
PPO-clip通过如下方式更新策略:
\theta_{k+1}=\arg \max _{\theta} \underset{s, a \sim \pi_{\theta_{k}}}{\mathrm{E}}\left \\通常采取多个步骤(通常是小批量的) SGD,以最大限度地实现目标。 这里 L 通过以下方式计算得到:
L\left(s, a, \theta_{k}, \theta\right)=\min \left(\frac{\pi_{\theta}(a \mid s)}{\pi_{\theta_{k}}(a \mid s)} A^{\pi_{\theta_{k}}}(s, a), \quad \operatorname{clip}\left(\frac{\pi_{\theta}(a \mid s)}{\pi_{\theta_{k}}(a \mid s)}, 1-\epsilon, 1+\epsilon\right) A^{\pi_{\theta_{k}}}(s, a)\right) \\ 其中 \varepsilon 是一个(小的)超参数,它粗略地新策略与旧策略之间允许的距离。
这是一个相当复杂的表达方式,乍看之下很难说它在做什么,或者它如何帮助新政策与旧政策保持一致。事实证明,这个目标有一个相当简化的版本,比较容易处理(也是我们在代码中实现的版本) :
L\left(s, a, \theta_{k}, \theta\right)=\min \left(\frac{\pi_{\theta}(a \mid s)}{\pi_{\theta_{k}}(a \mid s)} A^{\pi_{\theta_{k}}}(s, a), \quad g\left(\epsilon, A^{\pi_{\theta_{k}}}(s, a)\right)\right)\\ 其中
g(\epsilon, A)=\left\{\begin{array}{ll} (1+\epsilon) A & A \geq 0 \\ (1-\epsilon) A & A<0 \end{array}\right. \\ 为了找出哪些直觉可以从中得到启发,让我们看看一个单一的状态行为对 (s,a) ,然后想想案例。
Advantage is positive:假设状态-行为对的优势是正的,在这种情况下,它对目标的贡献减少到
L\left(s, a, \theta_{k}, \theta\right)=\min \left(\frac{\pi_{\theta}(a \mid s)}{\pi_{\theta_{k}}(a \mid s)},(1+\epsilon)\right) A^{\pi_{\theta_{k}}}(s, a) \\ 因为优势是正的,如果行动变得更有可能(也就是说,如果 \pi_{\theta}(a|s) 增加),目标就会增加。但是这一项的最小值限制了目标可以增加多少。一旦 \pi_{\theta}(a \mid s)>(1+\epsilon) \pi_{\theta_{k}}(a \mid s) ,最小值发挥作用,这一项达到了 (1+\epsilon) A^{\pi_{\theta_{k}}(s, a)} 。因此,新策略与旧策略背道而驰,并不能从中受益。
Advantage is negative:假设状态-行为对的优势是负的,在这种情况下,它对目标的贡献减少到
L\left(s, a, \theta_{k}, \theta\right)=\max \left(\frac{\pi_{\theta}(a \mid s)}{\pi_{\theta_{k}}(a \mid s)},(1-\epsilon)\right) A^{\pi_{\theta_{k}}}(s, a) \\
因为优势是负的,如果行动变得更不可能(也就是说,如果 \pi_{\theta}(a|s) 减小),目标就会增加。但是这一项的最大值限制了目标可以增加多少。一旦 \pi_{\theta}(a \mid s)<(1-\epsilon) \pi_{\theta_{k}}(a \mid s) ,最大值发挥作用,这一项达到了 (1-\epsilon) A^{\pi_{\theta_{k}}(s, a)} 。因此,新策略再次与旧策略背道而驰,并不能从中受益。
到目前为止,我们所看到的是,通过消除策略急剧变化的激励因素,clipping作为一种规范化手段,其超参数 \varepsilon 对应于新策略与旧策略之间的距离有多远,同时仍然有利于实现目标。
虽然这种clipping对于确保合理的策略更新大有帮助,但是仍然有可能最终得到一个与旧策略相距太远的新策略,不同的 PPO 实现使用了一些技巧来避免这种情况。在这里的实现中,我们使用一种特别简单的方法: 提前停止。如果新政策与旧政策的平均 KL 散度超过一个阈值,我们就停止采取梯度步骤。Exploration vs. Exploitation
PPO 以一种在线学习的方式训练随机策略。这意味着它根据其随机策略的最新版本通过抽样行动进行探索。动作选择的随机性程度取决于初始条件和训练过程。在训练过程中,策略通常会逐渐变得不那么随机,因为更新规则鼓励它利用已经找到的奖励。这可能导致策略陷入局部最优。
伪代码


参考:
页: [1]
查看完整版本: 【强化学习】PPO算法