基于策略梯度算法

一 策略梯度法

前面部分的算法都是基于值函数,无论是策略迭代,还是Q-Learning,只要能够得到精确的值函数,就可以使用Bellman公式求出最优策略迭代。也就是说,我们的最优策略需要满足:

                                            

策略梯度法则使用了另外一种思路,这个思路实际上更容易被读者理解,强化学习的目标是最大化长期回报期望,于是目标也可以写作:

                                                    

其中表示使用策略进行交互得到的一条轨迹, 表示这条轨迹的总体回报。由于值函数实际上也是一个函数, 强化学习的目标是最大化这个函数。

二 算法推导

目标函数:

                            

对目标函数求导, 由于策略通常是定义良好的函数,所以求导运算可以和积分运算互换,得:

                                        

因为积分的缘故,这个形式不方便直接计算,于是我们对其做一个变换,这里用到对数求导的基本公式:

                                                    

经过变换可得:

                                                    

我们将y替换为, 将x替换成,同时将公式的左右俩边互换,就可以得到:

                                                

带入前面的公式可得:

                                    \begin{align}\bigtriangledown_\theta J(\theta) &= \int_{\tau \sim\pi_\theta(\tau)}\pi_\theta(\tau)\bigtriangledown_\thetalog\pi_\theta(\tau)r(\tau)d\tau \\&= E_{\tau \sim \pi_{\theta}(\tau) } [\bigtriangledown_\theta log\pi_\theta(\tau)r(\tau)]\end{align}

将上述公式进一步展开:

                                       

对其求导,可以得到:

\begin{align}\bigtriangledown_\theta log\pi(\tau) &= \bigtriangledown_\theta log[p(s_0)\prod_{t=0}^T \pi_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t )] \\&=\bigtriangledown_\theta [logp(s_0) +\sum_{t=0}^T log\pi_\theta(a_t|s_t) + \sum_{t=0}^Tlogp(s_{t+1}|s_t,a_t)  ] \\&=\sum_{t=0}^T \bigtriangledown_\theta log\pi_\theta (a_t|s_t)\end {align}

根据上面的推导,最终的公式为:

\begin{align}\bigtriangledown_\theta J(\theta) &= E_{\tau\sim \pi_\theta(\tau)}[(\sum_{t=0}^T \bigtriangledown_\theta log\pi_\theta(a_{i,t}|s_{i,t}))(\sum_{t=0}^Tr(s_{i,t}, a_{i,t}) )] \\&= \frac{1}{N}\sum_{i=1}^N[\sum_{t=0}^T \bigtriangledown_\theta log\pi_\theta(a_{i,t}|s_{i,t})(\sum_{t=0}^Tr(s_{i,t}, a_{i,t}) )]  \end {align}

Policy Gradient方法分为俩步:

1. 计算 

2. 

三 算法改进

首先回顾一些求解策略价值梯度的公式:

                

从这个公式中我们可以看到一个问题, 不论是那个时间段,我们都要用策略的梯度乘以所有时刻的回报值总合,这样的设计显然是不合理的。因为理论上,在t时刻我们完成了决策后,它最多只能影响t时刻之后的所有回报, 并不会影响t时刻之前的回报,因为我们无法通过现在的决策影响已经发生过的事情,所以这一部分的回报值不应该计算在梯度中。我们的公式改写成:

            

策略梯度法更像是加权版的最大化的最大似然法。"权重"将直接影响梯度的更新量,这样将会带来以下俩个问题。

1. 如果计算得出的序列问题回报数值较大,那么对应的参数更新量就会比较大,这样我们的优化就可能出现一定的波动, 这些波动很可能影响优化效果。

2. 在一些强化学习问题中,环境给予的回报始终为正,那么我们无论我们的决策如何,最终的累积的长期回报值都是一个正数。换句话说,我们会增强所有的策略,只是对于实际效果并不好的策略,我们为其提升的幅度有所降低。这样的更新方法和我们的初衷并不一致,我们降低不好行动的概率,而不是轻微提升不好的行动概率。

针对上面的问题:一个简单的方法就是给所有时刻的长期累积回报减去一个偏移量,这个偏移量也被称之为BaseLine, 我们用变量b表示,于是公式变为:

            

这个变量可以设计为同一起始点的不同序列在于同一时刻的长期回报均值,它的公式如下:

                                        

四Actor-Critic算法

4.1 降低算法的方差

我们用轨迹的回报表示整个序列的价值,这个表示是准确无误的, 但是在真实的训练过程中,为了尽可能地控制学习时间, 我们无法完成非常多次的交互, 往往只会进行有限次数的交互,这些交互有时并不能很好地代表轨迹的真实期望。每一个交互序列都会有一定的差异,对应的回报也会有一定的差异,因此不充足的交互会给轨迹回报带来较大的方差, 这和前面的蒙特卡罗方法类似。

机器学习的一个核心问题是平衡偏差和方差。对策略梯度模型来说,它的方差较大,为了模型的稳定,可以牺牲一定的偏差来换取方差。这其中的一种方法就是此用Actor-Critic算法,其主要的特点就是用一个独立模型估计轨迹的长期回报,而不再直接使用轨迹的真实回报。

你可能感兴趣的:(基于策略梯度算法)