Trust Region Policy Optimization 论文阅读与理解

本文主要讨论两个目标:1. 如何让目标函数(total reward)在policy更新时是持续递增的。2. 如何让policy在更新后的“行为”与更新前相似,而不是“参数”相近,因为参数相近的两个模型行为上可能有很大差别。第二个目标也是为了保证更新时的稳定性,因为参数上的“一小步”走错了可能导致整个模型崩溃。为此需要在行为上在与旧的policy行为有一定相似程度的情况下进行更新。这个一定的相似程度就是Trust Region置信区间,如下图。下面从第一个目标开始推导,会省略很多推导步骤,最后优化的部分采用spinningup中的优化方法。

 相关重要公式推导

首先对于第一点,作者构建下面这个目标函数,其中\pi是旧的policy,\tilde{\pi }是更新后的policy。\eta \left ( \pi \right )= E_{s0,a0,...}\left [ \sum_{t=0}^{\infty }\gamma ^{t}r\left ( s_{t} \right ) \right ],是PG的目标函数。下面这个公式的意思就是,更新后的policy \tilde{\pi }的total reward是在之前的policy的基础上增加了后面那一项。那么只要后面那一项大于等于0,就能保证policy的更新使目标函数变大。

\eta \left ( \tilde{\pi } \right )= \eta \left ( \pi \right )+\sum_{s}\rho_{\tilde{\pi } \left ( s \right )}\sum_{a}\tilde{\pi }\left ( a\mid s \right )A_{\pi }\left ( s,a \right )

上面的公式只取了最后的推导结果,原始公式是从时间序列相加的,推导成了在状态序列上相加求和。\rho _{\pi }\left ( s \right )是 discounted visitation frequencies。现在有个问题是后面那项的数据是从更新后的policy进行采样的,更新后的policy还没有的,没法求解,所以作者将discounted visitation frequencies换成了旧的policy降低难度,变成下面公式:

L_{\pi} \left ( \tilde{\pi } \right )= \eta \left ( \pi \right )+\sum_{s}\rho_{\pi \left ( s \right )}\sum_{a}\tilde{\pi }\left ( a\mid s \right )A_{\pi }\left ( s,a \right)

然后经过一系列推导,作者给出上面两个公式的关系如下:

\eta \left ( \tilde{\pi } \right )\geq L_{\pi}\left ( \tilde{\pi} \right )-CD_{KL}^{max}\left ( \pi,\tilde{\pi} \right ),    其中C=\frac{4\epsilon \gamma }{\left ( 1-\gamma \right )^{2}}

上面的关系保证更新可以使目标函数递增。然后考虑\pi的参数为\theta,并且使用采样的方法来求解上式,上面的那个C会使得参数的更新很小,作者在KL上增加约束来提高更新的步伐,中间经过一些推导得到下式:

\underset{\theta }{maxminize}L_{\theta_{old}}\left ( \theta \right ),

subject to \bar{D}_{KL}^{\rho\theta_{old}}\left ( \theta _{old},\theta \right )\leq \delta

KL散度的约束就是保证一开始提到的第二个目标,\delta就是置信区间。KL散度是作用在policy输出的动作概率分布上,不是参数上。接下来要求解上面的公式了,上面的公式里A前面那一项是更新后的policy,采样重要性采样的方法将他换成对更新前的policy采样,然后把上面求解公式变成下面目标函数:

\underset{\theta }{maximize}E_{s,a\sim \pi _{\theta old}}\left [ \frac{\pi _{\theta }\left ( a\mid s \right )}{\pi _{\theta old }\left ( a\mid s \right )} A_{\theta old}\left ( a,s \right ) \right ]

                       subject to E_{s\sim \pi _{\theta old}}\left [ D_{KL}\left ( \pi _{\theta old}\left ( \cdot \mid s \right ) \parallel \pi \left ( \cdot \mid s \right ) \right ) \right ]\leq \delta

以上两式就是TRPO最终的目标函数了,总体上看, 就是使用重要性采样的方式将原始的目标函数变成了代理目标函数(surrogate object function),并且在更新后的policy上增加了约束,与更新前的policy的KL散度不能大于某个置信值\delta

求解目标函数

上面的目标函数也不太好求解,于是作者将其泰勒展开,并用一节导数近似目标函数,用二阶导数近似KL散度,逼近后的公式如下:

\theta _{k+1}=\underset{\theta }{argmax} \left ( g^{T}\left ( \theta -\theta _{k} \right ) \right )

                     s.t. \frac{1}{2}\left ( \theta -\theta _{k} \right )^{T}H\left( \theta -\theta _{k} \right ) \leq \delta

其中g是policy gradient,H是KL散度的Hessian矩阵,上式使用拉格朗日算子求解可得:

\theta _{k+1}=\theta _{k}+\alpha ^{j}\sqrt{\frac{2\delta }{g^{T}H^{-1}g}}H^{-1}g

上面的\alpha ^{j}是后加上去的,叫backtracking coefficient,j是最小的非负整数,使KL散度小于\delta。模型的参数一般很多,对上面的Hessian矩阵求逆开销是很大的,但Hessian一般以H^{-1}g的形式出现。H^{-1}g可以看成是Hx=g的解x=H^{-1}g,因此只要求解前面的线性方程就行。求解Hx=g使用共轭梯度法,具体为:

从维基百科上截的,上面的A就是H,b就是g。可以看到,Hessian基本上是以Hx的形式出现的(上面的AxAp) ,所以可以直接求Hx来避免计算及保存整个Hessian,使用如下公式:

Hx=\triangledown _{_{\theta }}\left ( \left ( \triangledown _{\theta }\bar{D}_{KL}\left ( \theta \mid \theta _{k} \right ) \right )^{T}x \right )

总的算法流程(spinning up版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值