【RL】强化学习另一种思路:policy-based方法

博主的github链接,欢迎大家来访问~:https://github.com/Sh-Zh-7

强化学习经典算法实现地址:https://github.com/Sh-Zh-7/reinforce-learning-impl

之前我们所介绍的,都是所谓value-based方法,它的中心思想是:既然我们要求的策略,是在给定状态的基础上选择动作。那么我通过研究动作的价值,就可以得到最优的策略。接下来要讲的是另一种所谓的policy-based的方法,他所研究的,并不是相同状态下各个动作的价值,而是相同状态下,选择各个动作的概率。但是他这个概率,也是要根据所谓的价值进行更新的。所以这二者并没有什么太大的差别。

 

0. Policy-based VS Value-based

我们有强大的QLearning方法已经够用了,为什么还要values-based算法呢?原因是policy-based算法固有的缺陷:

  1. 对连续性动作处理不足:因为很多时候我们神经网络都被设计成给定状态输出各个动作的。然而,我们只能输出有限个动作,不能输出所有连续动作的分布。
  2. 对受限状态下问题处理能力不足:对于我们的网络而言,只要是状态相同,那我们最后输出的动作价值也一定是相同的。然而,很多问题中,由于我们agent对环境观察不足,很容易出现明明不同状态,但是我们观察到的状态却完全相同的情况。这一点我们的QLearning就无法处理了。
  3. 无法满足随机策略的需求:有些游戏中,我们是不能有确定的策略的,比如石头剪刀布。一旦我们的策略被对方发现,那我们的策略就失效了,所以我们的策略需要有一点随机性。然而QLearning的策略却是确定的。

 

1. 数学背景

我们之前value-based方法已经有特别明确的数学背景知识了——那就是引入包含accmulated reward的状态价值和动作价值,然后我们证明,只要每一次选择能使动作价值最大的动作,总可以得到更优的策略。通过不断地迭代,我们就可以获得最优的策略。

那现在的policy-based方法应该怎么解释呢?大家还记得我们之前提到要最大化accmulated reward R吗?policy-based方法并没有引入其它的量来求解,而是直接对这个R求导,首先我们先写出R和式子中出现的P的表达式:

【RL】强化学习另一种思路:policy-based方法_第1张图片【RL】强化学习另一种思路:policy-based方法_第2张图片

然后对R求导,看看结果如何:

【RL】强化学习另一种思路:policy-based方法_第3张图片

 其中我们不难发现,这个log P中的P,就是我们之前说的“输出动作”中的动作。可以看出,为了顺利地进行求导,我们还需要知道R的具体值。

 

2. 进一步理解和调整

在得到了上面那个式子以后还不够,我们希望它能够符合我们的直觉,因此我们才要来理解它:

(1)是R不是r:

我们这里用到的R是整个trajactory的accumlated reward,而不是每一个step中的reward。想一想就好了,Atari中的space invander游戏中,我们就是设置左右移动reward为0,fire reward为1。显然如果仅仅是一个step的reward的话,我们的左右移动将变得毫无意义。

(2)为什么是log:

在明白这个问题之前,我们首先要了解:一个函数log+求梯度,实际上是求梯度再除以它本身。所以使用Log, 其实是对梯度做了一个normalization。为什么要做normalizaiton呢?请看下图:

【RL】强化学习另一种思路:policy-based方法_第4张图片

这副图讲述了一个问题——那就是在同一个状态,不同的动作reward不同的情况下,我们有可能经过对reward小的动作经过多次采样(这一点可能是由于你函数初始化导致的),使得其权重比reward比他高的动作还要高。这样一来,我们反而要提升它的权重了?这是完全没有道理的。

(3)添加baseline:

我们之前已经把R和logP都介绍了一遍,下面我们稍微对这个式子做点修改,我们不是单纯的R,而是剪掉一个baseline。

【RL】强化学习另一种思路:policy-based方法_第5张图片

这样做得目的就是让我们的R有正有负,因为我们使通过采样来模拟概率分布的,因此可能会遇到一些动作没有采样到。如果所有的reward都是正的,只是大小不同的话,我们的神经网络也会选择增加其它reward可能较小的动作的权重,而不增加没采样到的reward较大的权重。因此我们选择增加一个baseline,让不同动作的reward有正有负

(4)R的选择:

讲了这么多了,还没讲R是怎么计算的呢,现在我列出可行的计算R的方法:

  1. 基于状态价值:\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t) V(s,w)
  2. 基于动作价值:\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t) Q(s,a,w)
  3. 基于优势函数:\small A(S,A,w,\beta) = Q(S,A, w, \alpha, \beta) - V(S,w,\alpha)\small \theta = \theta + \alpha \nabla_{\theta}log \pi_{\theta}(s_t,a_t)\delta(t)E_(t)即可。

 

3. 实现:PolicyGradient

PG算法的实现非常简单,就是使用MC方法进行采样得到精确的accumulated reward,然后反向传播即可。这种算法又叫MCPG方法,显然还有其它更为复杂的方法,这里我就不介绍了。

【RL】强化学习另一种思路:policy-based方法_第6张图片

你可能感兴趣的:(Reinforce,Learning)