POPLIN
POPLIN
是policy planning
的一个简称,PETS
这个算法采样的方式是最简单的CEM
方法,它没有关注当前的state
是啥,就随机给action
。POLIN
算法中就用一个policy
去采样,也就是说在POPLIN
中需要保留一个policy
用来在给定当前仿真状态的时候采样一个动作。使得其在当前的状态下能够采样出来更好的action
。给定一个状态,拿策略进行采样,得到的期望奖励可以表达为以下形式:
理论边界分析:SLBO,MBPO & BMPO
从理论层面去思考一下模型到底有多准,以至于它最终训练出来的policy
和真实的policy
能有多接近。这就会决定如何来使用这样一个模型。模型如果不准的话,原则上我们就少用它,少用它的话,我们的采样效率就不高。模型不准的情况下又多用它的话,最终的性能就会很低,因为引入了一些noise
。
值差异界限
这个bound
需要一些实际的要求与假设:
其中L LL为普希茨常数,表示神经网络上梯度最大的那个常数。
有了上述三个条件之后,就可以去做一个meta algorithm
:
这里的meta algorithm
说的是训练模型是一个algorithm
,训练policy
是一个algorithm
,从meta
层面上理解就是元算法。
因为trpo
算法的约束与上述优化目标的约束一样,所以在训练策略的时候,直接拿trpo
训练即可。策略训练完了之后,就可以拿到数据去训练模型。通过这种方式,让策略和模型相互迭代更新。通过这种方式,能够拿到策略所需要的环境模型。
这个时候就会有一个理论的收敛证明:
Theorem:基于Algorithm 1
,产生得到的策略π 0 , ⋯ , π T ⋯,πT对于如下值函数单调上升:
Proof:
因为D 和d 满足R1
,所以有:
有了上述的理论分析之后,就能够去导出SLBO
(Stochastic Lower Bound Optimization
):
上述算法2
模型的loss
为:
模型和策略的优化目标为:
SLBO
提供了一种策略如何学习才能够获得性能单调递增的思路。但是这里有个很强的假设就是model
能够拟合到最优真实模型。
基于模型的策略优化
两个环境模型所带来的误差有两部分组成,一个是转移模型所带来的ϵm,一个是策略带来的ϵ π
这里的η看作SLBO
中的value
即可。后面的与SLBO
很像,以差异的方式显示出来。
在branch
上采样k步得到的数据拿来训练policy
,与真实policy
的bound
如上所示。后面的这一项中有三小项,前面两个与ϵ π 有关,前面两小项与γ 有关,k 越大整体值越小。第三项与k 成线性关系。想要max住后面这一项的话,对后面的求导,发现k 等于0的效果是最好的,也就是说不要去使用model是最好的,这是一个悲观的推导。但是有值得注意的地方
最终的算法如下:
通过路径反向传播:SVG and MAAC
这里我们介绍白盒模型,我们把模型打开,看到里面梯度的传递方式,我们就可以直接对于当前policy
的参数求导,期望能够maxmize
我们未来value
的值。
与环境交互的过程中就像RNN
一样,只要构建了能够反向求导的模型,我们就可以打穿整条trajectory
把梯度求下来。
确定性策略梯度
在DDPG
里面,策略是可以用在连续动作空间中的。critic
模块对状态-动作的估计可以表示为如下形式:
这样在状态s ss下,想要出什么样的a aa能够使得Q QQ值最大。这就是链式法则去优化策略参数的一种方式。
随机性策略值函数梯度
- Learning Continuous Control Policies by Stochastic Value Gradients
若环境和策略都是随机的(stochastic
)的话,我们就可以用重参数化的方法(reparameterization
):
相应的V 也可以对策略的参数θ 进行求导:
通过这种方式就可以把随机采样出来的一个轨迹直接求导往前传,通过重参数化的方法来做到这一点。本来是一个条件分布:
但是我们因为加入了一些高斯白噪声,我们可以把一个高斯变成一个均值,加上方差乘上一个白噪声:
这里的μ 和σ 都是完全确定性的函数,我们只是加入了一个白噪声,让其像一个高斯分布而已。同样的方式可以在状态转移函数和策略上都加入相应的噪声,这样所有的模块都是确定性的,就能将导数进行传递了。
对于随机环境下求梯度的方式可以表示为:
这就是SVG
,在状态s 下直接对θ进行求导使得值函数变大。S V G ( ∞ ) 对整个轨迹进行求导更新:
- Model-Augmented Actor Critic: Backpropagation through paths
这篇文章的整个思路是和SVG
非常像的,
策略参数为θ 而整个的优化目标也为J π ( θ )。往后看H 步,然后拿一个critic
截住。这样就能对参数θ 做更新。