强化学习课程学习(7)——基于策略梯度方法求解RL

在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习。这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很多局限性,因此在另一些场景下我们需要其他的方法,比如策略梯度(Policy Gradient)Actor-CriticAsynchronous Advantage Actor-critic(以下简称A3C)等。

整体来看下强化学习的分类:

强化学习课程学习(7)——基于策略梯度方法求解RL_第1张图片

Value Based强化学习方法存在很多不足之处,主要体现以下几点:

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

Policy Gradient(PG)

  • 在强化学习中,有两大类方法,一种基于值(Value-based),一种基于策略(Policy-based

    • Value-based的算法的典型代表为Q-learningSARSA,将Q函数优化到最优,再根据Q函数取最优策略。
    • Policy-based的算法的典型代表为Policy Gradient,直接优化策略函数。
  • 采用神经网络拟合策略函数,需计算策略梯度用于优化策略网络。

    • 优化的目标是在策略π(s,a)的期望回报:所有的轨迹获得的回报R与对应的轨迹发生概率p的加权和,当N足够大时,可通过采样N个Episode求平均的方式近似表达。

    强化学习课程学习(7)——基于策略梯度方法求解RL_第2张图片

    • 优化目标对参数θ求导后得到策略梯度:

PG实例——可连续版本控制的CartPole问题

核心代码:

# from parl.algorithms import PolicyGradient # 也可以直接从parl库中导入PolicyGradient算法,无需重复写算法

class PolicyGradient(parl.Algorithm):
    def __init__(self, model, lr=None):
        """ Policy Gradient algorithm
        
        Args:
            model (parl.Model): policy的前向网络.
            lr (float): 学习率.
        """

        self.model = model
        assert isinstance(lr, float)
        self.lr = lr

    def predict(self, obs):
        """ 使用policy model预测输出的动作概率
        """
        return self.model(obs)

    def learn(self, obs, action, reward):
        """ 用policy gradient 算法更新policy model
        """
        act_prob = self.model(obs)  # 获取输出动作概率
        # log_prob = layers.cross_entropy(act_prob, action) # 交叉熵
        log_prob = layers.reduce_sum(
            -1.0 * layers.log(act_prob) * layers.one_hot(
                action, act_prob.shape[1]),
            dim=1)
        cost = log_prob * reward
        cost = layers.reduce_mean(cost)

        optimizer = fluid.optimizer.Adam(self.lr)
        optimizer.minimize(cost)
        return cost

策略梯度提供了和DQN`之类的方法不同的新思路,但是我们上面的`蒙特卡罗策略梯度reinforce`算法却并不完美。由于是`蒙特卡罗法,我们需要完全的序列样本才能做算法迭代,同时蒙特卡罗法使用收获的期望来计算状态价值,会导致行为有较多的变异性,我们的参数更新的方向很可能不是策略梯度的最优方向。因此,Policy Based的强化学习方法还需要改进。

以上所有版本的代码都是基于百度开发的paddlepaddleparl框架实现的,版本是paddlepaddle=1.6.3parl=1.3.1!

感谢百度AI studio提供学习资料和平台,感谢科科老师的讲解!

你可能感兴趣的:(强化学习,深度学习)