介绍
安利一下Karpathy的这篇文章:https://zhuanlan.zhihu.com/p/27699682,不多做介绍,看了就知道好。
强化学习算法除了value-base的方法,还有另一类方法,这类方法像监督学习一样直接去拟合策略,这一类方法叫做policy-base的方法,同样,这里只是讨论model-free也就是没有用到模型的方法。
那么如何去拟合策略呢?我们可以先看一下监督学习的做法,如果用监督学习的做法,那么就需要某个状态下应该采取的正确的策略,通过这些(s,a)就可以用分类(a是离散的时候)或回归(a是连续的时候)的方法去拟合策略P(a|s;
θ
)了。但是强化学习中没有正确的标签,那要怎么办呢?我们可以构造衡量一个策略是好是坏的目标函数。
如下图:
上图中的三种目标函数都是可以去衡量一个策略的好坏的。
此外,我们可以这样理解,尽管没有正确的标签a,但我们可以定义一个得分函数或者说优势函数去衡量在当前状态s下按照策略采取动作a的好坏程度,我们把她定义为A(s,a)。那么一个好的策略应该是平均来说不管处于什么状态按照该策略作出的动作a都是最好的也就是E[A(s,a)]是最大的,所以我们的目标找出一个策略能够最大化E [A (s,a)]。当A(s,a)定义为动作价值函数时,也就正好等于上图中的第二个目标函数。在监督学习中,A(s,a)就可以定义为各种各样的loss函数。
那么现在的关键就是如何计算目标函数关于参数
θ
的梯度,结论如下:
直观上理解这个式子,期望符号里面的式子左边表示的是要让策略在状态s时作出倾向于动作a的动作的话参数
θ
应该更新的方向,而右边的动作值函数衡量的是在状态s下作出动作a的好坏程度,如果好,那么就应该鼓励往这个方向更新,否则,就应该抑制往这个方向更新,然后把所有的(s,a)的情况都取个平均就得到了最后更新的方向。
当然,在计算期望时,一样的使用样本的均值去代替期望。
为了减少方差,一种有效的做法是引入baseline,然后将动作值函数减去这个baseline:
policy-base的方法的优点在于:
对非MDP问题也能较好地应用,能够学到随机的策略而不仅仅是确定的策略
更好的收敛性。(但我个人觉得其实当后面提到用到函数近似时跟value-base的方法一样会导致没有算法没有明确的目标函数)
对高维的动作或连续的动作也能很好地适应
缺点在于:
更容易收敛到局部最优解
算法不够高效而且高方差
蒙特卡罗策略梯度
当优势函数定义为动作价值函数而且用Gt来代替动作价值函数时,求出来的梯度便是蒙特卡罗策略梯度,对应的算法叫REINFORCE(图中的vt就是Gt):
Gt无偏差,但方差大,算法也需要迭代很多次才收敛。
actor-critic 策略梯度
为了降低方差,我们函数近似的方法来近似动作值函数,这意味着我们既要学习动作值函数又要学习策略,这样求出来的梯度叫做actor-critic策略梯度:
分析下算法过程,用动作值函数的近似来代替Gt,减小了方差,但我们可以看到,在做值函数估计时,只对一对(s,a)进行了更新,这样作出的函数近似与真实的动作值函数肯定是相差甚远的,这样一来就意味着算法没有一个准确的目标函数来优化。同时,on-line的更新方法可以看出数据不是iid的,所以回归的效果也不会有多好。
对于没有确定的目标函数的问题,有一个理论如下:
证明如下:
为了进一步减小方差,在第一小节里也有说,可以引入baseline,而B(s)函数的一种选择是状态值函数V(s):
同样的,不能直接去得到正确的优势函数,仿照Gt,我们可以采用它的一个采样来代替它,只不过这个采样也不是准确的,而是包含状态值函数的函数近似的:
总结就是:
一些理解
1.关于算法性能,自己有一些理解,不知道对不对,先写下来,以后有新的理解再更改:
有方差会导致算法不稳定
有偏差会导致算法不收敛和不稳定
还有一些其他原因也会导致算法不收敛和不稳定
影响算法的一些因素:
(1)随机梯度下降;会引入方差,从而使算法不稳定
(2)on-line learning导致的数据非iid;属于其他原因(违反了监督学习的数据iid假设)导致算法不稳定和不收敛
(3)函数近似;会引入偏差,导致没有固定目标函数,从而导致算法不稳定和不收敛
(4)使用Gt;会引入方差,导致算法不稳定
解决的一些方法:
<1> (1)和(2)可以用批梯度下降缓解
<2> (3)可以用类似于DQN里的fix target的方案缓解
<3> (4)可以用(3)和优势函数缓解
2.关于人类学习和现在RL算法的不同点
Karpathy那篇文章最后讨论了一下人类学习和RL算法学习的异同点,我总结了一下,然后觉得最主要的观点就是人类学习会利用“先验知识+想象”和“记忆”。(PS:model-base的方法貌似跟想象有些联系)