强化学习7 策略梯度算法

强化学习是一个通过奖惩来学习正确行为的机制。家族中有很多种不一样的成员,有学习奖惩值,根据自己认为的高价值选行为,也就是Value-based learning,例如如Q-Learning,Deep-Q-network;也有不通过分析奖惩值,直接输出行为的方法,即基于策略的强化学习(Policy-Based RL),这就是今天要说的Policy Gradient加上一个神经网络来输出预测的动作。

在强化学习中,行动才是最终的目的。 但是前面的方法都是先求价值,然后再含蓄的从价值推出动作。对比起以值为基础的方法,Policy Gradient直接输出动作的最大好处就是,他能在一个连续区间内挑选动作,输出的这个action可以是一个连续的值,之前我们说到的value-based方法输出的都是不连续的值,然后再选择值最大的action。

而基于值的推算如果在无穷多得动作种计算价值,从而选择行为,这他可吃不消。

这样Policy Gradient就跳过了value这个阶段。而且Policy Gradient最大的一个优势是:而Policy Gradient可以在一个连续分布上选取action。

Policy-Based RL的优缺点

优点

  • 在高维(High dimension)和连续(Continuous)的动作空间里很有效。因为基于值的方法的话,必须要从价值中进行最大值的运算,动作很多的情况下很低效。
  • 更好的收敛性质(convergence property),因为是直接对策略进行操作的,而基于值的方法稍微绕了一些。
  • 可以学习到随机(Stochastic)的策略。

缺点

  • 比起全局最优,更倾向于收敛到局部最优
  • 对策略进行估计很低效,而且高方差

随机策略

Why

石头剪刀布:是完全随机的,因此用一个确定的策略,比如只出石头,是不太合理的,随机的策略更加合理。

方格世界:如上图所示,对于agent来说,两个灰色的区域是一摸一样的,因为左右完全对称,因此学习到的策略肯定也是一样的, 因此对于确定性策略来说,要么在灰色区域时都向左,要么都向右,但是无论那种,都有可能永远找不到宝藏,或许你可以采用 epsilon-greedy之类的带有一定随机性的策略,但是这将要花很长的时间去收敛。

策略目标函数 Policy Objective Function

  • 片段的环境下使用开始价值
  • 连续的环境下使用平均价值
  • 连续的环境下使用每一步的平均回报
    强化学习7 策略梯度算法_第1张图片

策略最优化 Policy Optimisation

基于策略的RL问题其实就是一个最优化的问题,对于优化问题,我们一般可以采用基于梯度或者不基于梯度的方法。

  • 基于梯度:

    • 梯度下降
    • 牛顿方法
  • 不基于梯度:

    • 爬山算法
    • 遗传算法

一步(One Step) MDP

下面我们真的开始计算策略梯度,也就是目标函数J的梯度,利用一步MDP来计算,从S出发,走一步,获得一个奖励r, 利用似然比方法计算策略梯度如下:
强化学习7 策略梯度算法_第2张图片

Monte-Carlo Policy Gradient (REINFORCE)

策略梯度定理

由上面的一步MDP推广到多步MDp的情况,就形成了策略梯度定理,这是非常重要的一个定理。一步奖励r用长期价值Q代替, 如下:
强化学习7 策略梯度算法_第3张图片

可以看到,无论目标函数是什么,策略梯度的公式是不变的,这就是上面我说的不用纠结目标函数的原因。 这里是一个期望,实际我们在模型无关的算法中就要拿掉这个期望了,因为我们是采样学习的,根据经验学习。每一步都确定了。

Monte-Carlo Policy Gradient (REINFORCE)

我们介绍最简单的Policy Gradient算法,用SGD更新参数,遵循策略梯度定理, 并且用蒙特卡洛的目标,也就是未来的折扣回报来代替长期价值Q,这是一个Q的无偏差采样,正因为无偏差,所以这个算法的方差很大,后面我们会采取一系列的方法来降低方差。

强化学习7 策略梯度算法_第4张图片

Actor-critic 还没完全搞懂!!

第一个降方差的手段就是引入Critic,因为上面说了REINFORCE算法是因为用Gt来代替Q才引来方差的,那么我们就不用Gt,改用对Gt的估计来代替Q,而Critic就负责对Gt进行估计,如果你们还记得上一篇笔记的话,这其实就是一个函数近似器(Function Approximation)。

  • Critic:通过参数w更新Q
  • Actor: 在critic建议的方向上更新策略的参数theta

举个例子,用一个线性的值函数近似器来估计Q,Qw(s; a) = φ(s; a)'w,Critic用线性的TD(0)算法来更新w, Actor用策略梯度来更新θ,这就是QAC算法。

回忆一下,线性的TD(0)算法是什么,这是上一篇笔记的内容,就是取代查找表的方法,用函数近似器来估计Q, 这里的函数近似器不是神经网络,是特征(Feature)的线性组合,也就是上面的Qw(s; a) = φ(s; a)'w,所以叫做线性函数近似器。 TD(0)指的是目标target的表示方法,采用的是TD target,如果采用Gt,那就变成了线性MC算法,同理TD(γ)也一样。
强化学习7 策略梯度算法_第5张图片

Actor-Critic算法的偏差问题

强化学习7 策略梯度算法_第6张图片

只要满足两个条件,值函数近似器就可以称为兼容值函数近似器。

  • 值函数近似器和策略兼容,具体看上图公式1
  • 值函数参数w最小化均方误差,具体看公式2

这样的话,策略梯度就不再是近似的了,而是确切的就是策略梯度。

Reducing Variance Using a Baseline

上面引用了Critic确实降低了方差,却还是不够,方差依然很大,为了进一步降低方差,引入了Baseline,我暂时翻译为基线。 我们从策略梯度中减去基线B(s)时,它可以降低方差,并且不会改变期望,如下:

你可能感兴趣的:(算法,python,人工智能)