lecture6:Policy OptimizatiobⅡ(策略优化2)
3、ACKTR方法
是对TRPO的改进,NIPS,2017
想提升TRPO的计算效率
通过K-FAC的方法去加速FIM求逆(但是上节课不是说不用直接求逆,只需要转化成无约束优化,然后用共轭梯度法优化就可以吗???)
思想来源于ICML2015(国际机器学习大会)的论文
这篇论文提出:因为SGD是一阶优化,因此不是那么准确,因此提出了Natural Gradient Descend(上一节讲的),包含二阶信息,同时去除曲率影响。但是需要求逆,因此提出K-FAC方法去分解.
把FIM分解成一个个block(近似???),因为神经网络有多层结构组成,因此每个block对应于一层的参数(所以是对角矩阵)。对于对角线上的每个矩阵,可以做一个Kronecker product分解,因此对每个小矩阵求逆,就是对分解的矩阵求逆。
以下是分解的形式,以及优化过程对比
link如下:
4、PPO方法
是TRPO的简化版本,将有约束优化问题转化为无约束优化问题
就是说在极大化整个函数的同时让第二项最小
同时beta根据KL散度的大小动态调整,以增强约束效果,达到自适应的效果
利用SGD方法,比TRPO效率高
clipping版本:
因为回报是基于重要度采样的,因此之前讲过的几种方法的objective function如下:
这里又对ratio进行了限制
natural 方法中的KL散度约束是关于下一步的pi与当前pi;
TRPO中的KL散度约束是关于两个pi当前状态下所有动作可取动作;
PPO中的KL散度约束与TRPO同,但是多了个ratio约束,这个约束与KL散度约束的不同:
(1)、只与当前动作有关
(2)、是直接的限幅
具体分析:当advantage function取正的时候,我们希望鼓励这种行为,所以这个时候要希望他不要增加太多;当advantage function取负的时候,我们希望不要降低太多,所以这个时候希望他不要怕降低太多。
具体算法
代码:
Openai官网
Demo
他可以嵌入到其他的算法中
三、价值函数优化
好处:不用重要度采样,同时有贝尔曼方程的保证。
1、DDPG
DQN是输出一个确定性策略(离散动作空间),但是我们希望得到一个连续的动作空间。
DDPG的动作是将s输入到u中,得到的确定性策略,然后再传递给DQN的a。
对于DDPG,有这样几个objective:
这里的Q-target的形式与之前advantage function不同,之前是通过条件概率期望得到的。这里就是正宗的方法。
与DQN相同的是都有Reply buffer和target network
步骤
根据s计算u,进而确定动作,然后根据动作走一步得到Q-target,再根据这两步的Q值计算loss,再更新Q函数的参数(两个的)。
对于policy更新,就只需要对待优化的Q取最大就可以。最终得到合适的u函数
注意这里一共有四个network,分别是u和q的,同时每个都有一个正在优化的以及一个target版本。这里我感觉有种类似双Q-Learning的味道。
分别用来更新和评估!!!
代码:
代码讲解见周老师视频。
2、Twin Delayed DDPG(TD3)
和MC方法对比发现DDPG中对Q的估计存在过大估计。
因此提出三种tricks
1、双Q学习;2、延时更新策略;3、让target policy smoothing
对于双Q学习的target中用到,注意不是待优化的Q。让target等于两个中更小的那个值。同时看代码发现,他在待优化的target中也用了两个Q的和的loss。等于是用了4个Q。
对于target smoothing,引入噪声,据说可以达到regularize的目的。同时看代码发现,在policy更新时只用了第一个待优化的Q。即Q1.
有意思的点:根据比较ddpg,发现比官方的参数更加不敏感(初始条件敏感是所有的一个难题)
代码库:周老师强烈推荐
作者本身的代码库,包括官方和自己的DDPG,以及TD3。在鼠标位置。
3、soft actor-critic(sac)
引入entropy regularization的思想
entropy是一个量度,度量随机变量对于概率函数自身的无序程度。当enropy越大的时候,随机变量的概率函数越大。
因为算法希望对未知空间更多探索。
我们在V函数中加入H,同时在贝尔曼中迭代,以及在采样中的表示:
也用了两个Qtarget
可以让a本来看作从pi中的采样看成是和参数无关的采样。而是从高斯中采样。
Reparameterization
对于这样一个既求对theta梯度,同时x服从关于theta的分布的问题,很难求解,因此用Reparameterization 的trick。可以规避求导。
对于SAC和Reinforce两者都用技巧规避了求导,link如下:
代码
最新的sac论文
链接
两个现有算法的总结实现