深度强化学习7——策略梯度(Policy Gradient)

前面讲到的DQN系列强化学习,主要对价值函数进行了近似表示,基于价值来学习。这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很多局限性,主要面临以下问题:

  • 对连续动作的处理能力不足。DQN之类的方法一般都是只处理离散动作,无法处理连续动作,实际上value-based方法在训练时需要在某个状态下选取使Q值最大的动作,这相当于在所有连续动作上求argmax,比如说方向盘转动的角度,将无法求argmax操作。
  • 对受限状态下的问题处理能力不足。在使用特征来描述状态空间中的某一个状态时,有可能因为个体观测的限制或者建模的局限,导致真实环境下本来不同的两个状态却再我们建模后拥有相同的特征描述,进而很有可能导致我们的value Based方法无法得到最优解。
  • 无法解决随机策略问题。Value Based强化学习方法对应的最优策略通常是确定性策略,因为其是从众多行为价值中选择一个最大价值的行为,而有些问题的最优策略却是随机策略,这种情况下同样是无法通过基于价值的学习来求解的。

针对上面面临的问题,需要新的方法解决上述类别问题,比如Policy Based强化学习方法

Policy Based

前面我们讲到的Value Based强化学习,换句话说就是通过计算每一个状态动作的价值,然后选择价值最大的动作执行。这是一种间接的做法,有没有更直接的做法?比如直接输出动作,这当然是可行的。我们在Value Based方法里引入了动作价值函数,接受状态和动作的输入,输出得到近似的动作价值。

在Policy Based里我们也用了类似的做法,对策略进行近似表示,此时策略\pi可以被被描述为一个包含参数\theta的函数,输入状态s,可以得到输出动作a,即:

                                                                                                                a=\pi (s,\theta )

或者输出动作概率:

                                                                                                              a=P (a|s,\theta )

将策略表示成一个连续的函数后,我们就可以用连续函数的优化方法来寻找最优的策略了。而最常用的方法就是梯度上升法。

Policy Gradient

要使用梯度上升法,我们需要有一个目标函数。对于策略π,目标函数其实是比较容易给定的,我们从起始状态s0出发,根据该策略获取状态的轨迹

其中s_{i}表示状态,a_{i}表示action,r_{i}表示在的状态s_{i}下采取动作a_{i}可以获得的奖励,强化学习看重的是整个局的最后的奖励,我们最终获得的奖励为

                                                                                          R_{\theta }=\sum_{t=1}^{T}r_{t}

我们用\overline{R}_{\theta }来表示期望的奖励

                                                                                 \overline{R}_{\theta }=\sum _{\tau }R(\tau )P(\tau|\theta )

然而实际上我们有大数定律,当采样的数足够大的时候,事物出现的频率就能无限接近它的期望值。类似于抛质地均匀的硬币,当抛的次数足够多的时候,正反面的比例接近1:1,此时公式变为

                                                                      \overline{R}_{\theta }=\sum _{\tau }R(\tau )P(\tau|\theta )\approx \frac{1}{N}\sum _{n=1}^{N}R(\tau^{n} )

那么我们的目的就是使得这个期望奖励最大化,要做的就是找出最大化的\overline{R}_{\theta },即

                                                                          \theta_{*} =argmax_{\theta} \sum _{\tau }R(\tau )P(\tau|\theta )

此时就有了梯度上升

                                                                               \bigtriangledown \overline{R}_{\theta }=\sum _{\tau }R(\tau )\bigtriangledown P(\tau|\theta )

利用公式

                                                                                   \mathit{d} log(f(x))=\frac{\mathit{d}f(x)}{f(x)}

进行公式推导

                                                    \begin{matrix} \bigtriangledown \overline{R}_{\theta }=\sum _{\tau }R(\tau )\bigtriangledown P(\tau|\theta ) =\sum _{\tau }R(\tau )P(\tau|\theta ) \frac{\bigtriangledown P(\tau|\theta )}{P(\tau|\theta ) }\\ =\sum _{\tau }R(\tau )P(\tau|\theta ) \bigtriangledown log(P(\tau|\theta )) \approx\frac{1}{N}\sum _{n=1}^{N}R(\tau^{n} ) \bigtriangledown log(P(\tau|\theta )) \\ \end{matrix}

此时我们只需要求出P(\tau|\theta ),实际上我们根据上面的状态轨迹有

                                            P(\tau|\theta )=p(s_{0})p(a_{0}|s_{0},\theta )p(r_{1},s_{1}|s_{0},a_{0})p(a_{1}|s_{1},\theta )p(r_{2},s_{2}|s_{1},a_{1})\cdots \cdots =p(s_{0})\prod_{t=0}^{T}p(a_{t}|s_{t},\theta)p(r_{t+1},s_{t+1}|s_{t},a_{t})

所以有

                                                                       \bigtriangledown log(P(\tau|\theta ))= \sum_{t=0}^{T}\bigtriangledown log(p(a_{t}|s_{t},\theta ))

最后有

                                                                   \bigtriangledown \overline{R}_{\theta }\approx\frac{1}{N}\sum _{n=1}^{N}R(\tau^{n} )\sum_{t=0}^{T}\bigtriangledown log(p(a_{t}|s_{t},\theta ))

其实整个式子也十分地好理解,假如在某个state下采取的action最后的Reward为正的,那就增加最后一项的概率,反之如果Reward为负的,那就减少这项的概率。

Add a Baseline

我们来考虑一种情况,在游戏中可能我们的期望永远是正的,比如一场游戏某个好的动作可以得20分,而不好的动作也能得1分,这样会导致什么样的后果呢,我们可以看下图

  • 在理想的情况,考虑某个state下有三个动作a,b,c,每一项的概率加起来为1,每一项的weight(R)是不一样的,可能有的大,有的小,乘起来之后经过Normalize,奖励高的自然概率就高了,这也是我们想要的。
  • 在现实中,由于我们采用的是采样的方法,我们只能是采样到部分的action,我们可能只采样到了b和c,没采样到a的,但是由于采样到的b和c概率在上升,没采样到的a只能下降,这样是非常不科学的。

解决的办法就是让期望减掉一个Baseline,让一些不那么好的行为能得到一个负的反馈,也就是让我们的奖励减去一个b,这个b有很多取法,只要能达到目的就行。

                                                    \bigtriangledown \overline{R}_{\theta }\approx\frac{1}{N}\sum _{n=1}^{N}(R(\tau^{n})-b)\sum_{t=0}^{T}\bigtriangledown log(p(a_{t}|s_{t},\theta ))

总结

策略梯度提供了和DQN之类的方法不同的新思路,实际上对比下Value Based,注意到这系列的算法通常是采用epsilon-greedy的策略进行探索,这保证了不管你要训练的策略收敛到什么样的结果,始终能保证所有的状态都能探索到。而在Policy Based下,很可能你要训练的策略给出的action的分布是比较极端的,比如在某个action上给出0.9999...的概率,那么此时很多状态都无法进行探索,就会收敛到局部最优。

因此,Policy Based的强化学习方法还需要改进,为什么我们不把Value Based和Policy Based结合起来呢?下一篇我们将介绍将两者结合起来的策略梯度方法Actor-Critic。

个人相关深度强化学习github地址:https://github.com/demomagic

PS: 如果觉得本篇本章对您有所帮助,欢迎关注、评论、赞!如果要转发请注明作者和出处

参考文献:

    [1]强化学习(十三) 策略梯度(Policy Gradient)

    [2]李宏毅-Proximal Policy Optimization (PPO)

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值