强化学习(五)—— 策略梯度及reinforce算法

1 概述

  在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点:

   1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是需要对每个动作下的价值函数的大小进行比较的,因此在高维或连续的动作空间下是很难处理的。

  2)在基于价值的强化学习中我们用特征来描述状态空间中的某一状态时,有可能因为个体观测的限制或者建模的局限,导致真实环境下本来不同的两个状态却再我们建模后拥有相同的特征描述,进而很有可能导致我们的value Based方法无法得到最优解。如下图:

    

    当有些个体选择比较容易观测的特征来描述状态空间时,比如颜色,则在上图中两个灰色格子(代表着两个不同的状态)的特征表示是一样的,倘若我们的最终目的是要获得金币,则当你在左边的灰色格子时,你需要往右移;当你在右边的灰色格子时,你需要往左移。而在基于价值的强化学习方法中,策略往往时确定的,也就是你的状态确定了,动作就确定了,那么在这里如果两个灰色格子的状态是一样,则执行的动作是一样的。这显然是不行的。

  3)无法解决随机策略问题,基于价值的强化学习的策略是确定的,而基于策略的强化学习是具有随机性的。

2 策略梯度

  和用函数来表示价值函数一样,我们也可以用函数来表示策略:

    $\pi_{\theta}(s,a) = P(a|s,\theta)\approx  \pi(a|s)$

  此时策略函数是一个参数为$\theta$的函数,这个函数可以用各种神经网络来表示。

  定义好了策略函数,就需要考虑怎么来优化该策略函数,既然是连续函数,我们可以用梯度上升法来寻找最优策略。接下来的问题就是如何定义目标函数,一般目标函数有三种:

  1)start value

    在离散的状态空间下,我们会随机初始化一个状态$s_1$,从这个状态出发到达终点的期望可以作为目标函数:

    $J_1(\theta) = V_{\pi_{\theta}}(s_1) = \mathbb{E}_{\pi_{\theta}}(G_1)$

  2) average value

    在连续的状态空间下,无法初始化一个状态,值能得到在初始时各状态的概率分布情况,因此针对每个可能的状态出发到达终点,并根据初始时状态的概率分布来求均值:

    $J_{avV}(\theta) =\sum\limits_sd_{\pi_{\theta}}(s)V_{\pi_{\theta}}(s)$

    在这里$d_{\pi{\theta}}(s)$是基于策略$\pi{\theta}$生成的马尔科夫链关于状态的静态分布。

  3) average reward per time-step

    我们可以使用每一个时间步长在各种情况下所能得到的平均奖励,也就是说在一个确定的时间步长里,查看个体出于所有状态的可能性,然后每一种状态下采取所有行为能够得到的即时奖励,所有奖励安概率求和得到:  3) average reward per time-step

    $J_{avR}(\theta) = =\sum\limits_sd_{\pi_{\theta}}(s) \sum\limits_a \pi_{\theta}(s,a) R_s^a$

  但不管用上面哪一种目标函数作为我们的目标函数,最终的形态都可以表示为:

    $\nabla_{\theta} J(\theta) = \mathbb{E}_{\pi_{\theta}}[\nabla_{\theta}log \pi_{\theta}(s,a) Q_{\pi}(s,a)]$

  在上面的式子中$\nabla_{\theta}log \pi_{\theta}(s,a)$ 是不会改变的,这个一般称为分值函数,但后面的$Q_{\pi}(s,a)$是可能发生改变的。

3 策略函数

  我们上面抽象的用一个函数表示了策略函数,那策略函数的具体形式是什么样子的呢?一般来说,对于离散的动作空间,用softmax函数来描述;对于连续的动作空间,用高斯函数来描述。

  在离散的动作空间中,softmax函数描述了各个动作被选中的概率,在构建网络时可以当作是一个多分类的问题:

    $\pi_{\theta}(s,a) = \frac{e^{\phi(s,a)^T\theta}}{\sum\limits_be^{\phi(s,b)^T\theta}}$

  其中$\phi(s,a)$表示的是给定状态s,动作a的特征表示。

  在连续的动作空间中,策略产生动作是遵循高斯分布$\mathbb{N(\phi(s)^T\theta, \sigma^2)}%$的。

4 reinforce算法流程

  在蒙特卡洛策略梯度reinforce算法,我们用价值函数$v(s)$近似的替代上面的目标函数中的$Q(s, a)$。则整个流程如下:

  假设迭代轮数为EPISODES,采样的序列最大长度为L,学习速率为$\alpha$,状态集为S,动作集为A。

  1)for episode in range(EPISODES):   # 开始迭代

  2)初始化状态s,在这里s为状态向量

  3)for step in range(T):  # 序列采样

    a) 将状态向量s输入到策略函数中,我们可以得到softmax之后每个动作的概率,根据概率去选择动作(增加了随机性,而不是每次选择概率最大的动作);

    b) 在状态s下执行当前动作$a$,获得下一状态$s‘$,当前奖励$R$,是否终止状态${is\_end}$;

    c) 将当前的状态$s$,动作$a$,奖励$R$分别存储在一个列表中;

    d) 更新状态,$s = s'$;

    e) 判断是否是最终状态,如果是则将这条采样得到的序列用来更新策略函数中的参数;否则继续循环采样。

      

猜你喜欢

转载自www.cnblogs.com/jiangxinyang/p/10407406.html