强化学习论文(PPO)
介绍:
PPO:Proximal Policy Optimization Algorithms
在强化学习中,经常会面临梯度更新过大,导致训练不稳定,甚至崩溃的问题。为了解决该问题,诞生了TPRO(Trust Region Policy Optimization,TRPO)算法。
TPRO算法实现起来比较复杂,需要二阶优化,并且与包括噪声(诸如丢弃)或参数共享(在策略和值函数之间,或与辅助任务)的架构不兼容。针对这些问题,本论文提出了PPO算法。
TPRO:
在常规的policy gradient方法中,我们用gradient asent方法来最大化目标函数:
其中是一个随机的策略,
是在step t的优势函数。这个过程中,如果梯度变化太大,会直接导致训练崩溃。因此,我们将目标函数进行约束,避免其过度更新,就有了一个“代目标”函数:

是更新前的策略参数。这里我们需要在对目标进行线性近似和对约束(KL离散度)进行二阶近似和共轭梯度,实现起来更为复杂。
如果将约束转换为惩罚,则其形式变为:
![]()
惩罚形式虽然从二次近似变成了一次近似,但是实验中表明其参数需要动态调整才能保证约束。
PPO:
让我们设定:

则PTRO中的“代目标”函数就变为:
![]()
CPI表示保守政策迭代(conservative policy iteration),在没有约束的情况下,我们最大化该“代目标”可能会引起策略参数更新过大,导致策略崩溃。因此,我们给出一个带惩罚的“代目标”:
![]()
- 其中
是超惨,0.2是最为常见的一个值。
-
表示将
限制在区间
内;
该“代目标”函数起到的作用是:
- 限制策略更新幅度:通过截断
,防止策略在一次更新中发生过大的变化。
- 保留优化灵活性:当优势
为正时,允许
增加,但不超过
;当
为负时,允许
减少,但不低于
。
- 提高数据利用率:由于有了稳定的目标函数,可以对同一批数据进行多次更新,而不会导致策略崩溃。

自适应的KL惩罚系数:
另外一种替代clip的惩罚方法,是KL离散度进行系数惩罚方法
![]()
通过自适应的调制超参来控制策略更新的幅度。
自适应调整方法:

这样,会根据策略更新的情况,自适应地调整,维持策略变化在合适的范围内。
这里和
是KL离散度的期望值,也就是说起范围是在[0,1]之间。因此,这里而KL离散度表示的是新旧两个策略的相似度,越接近1,就越相似;越接近0,就差异越大。
因此实际上是在侧面的控制策略更新的幅度。所以选择一个固定的
,通过系数
来控制策略的更新幅度。
在实验中表明,clip的方式比KL离散度方式表现更好。
算法:
假设我们用一个共享参数神经网络来同时输出policy和q-value(一个共享的backbone,两个输出头),则,“代目标”函数可写成:
![]()
其中:
- S是entropy
-
是q-value的loss,
-
就是前文的截断“代目标”
-
是系数
注意:
- policy gradient通常是要用梯度上升,最大化目标
- value gradient通常是要用梯度下降,最小化目标
- 所以这里是
-
,在
前面加了一符号,变成统一用梯度上升方法。当然也可以反过来统一用梯度下降方法。
伪代码:

算法中构造了一个N个线程并行环境。在每个迭代中,每个actor都手机T步数据,构建一个NT步的累计loss,然后做K个epoch的SGD,来更新参数,并将得到的新参数复制给
更多推荐

所有评论(0)