【强化学习】策略梯度算法(Policy Gradient)

文章目录

  • 策略梯度(Policy Gradient)
    • Value Based & Policy Based
    • What is Policy Gradient?
    • 蒙特卡罗策略梯度过程
    • 策略梯度小结

策略梯度(Policy Gradient)

Value Based & Policy Based

在DQN算法中,主要对价值函数进行了近似表示,基于价值来学习。但基于价值的强化学习方法存在一些局限性:

  • 对连续动作的处理能力不足。(例如经典的PuckWord问题,大圆可操作的行为是在水平垂直共四个方向施加一个大小固定的力,借此来改变大圆的速度。假如此时该力的大小和方向是可灵活选择的,力在水平和垂直方向分解,即由两个连续变量组成,这个策略使用离散的方式是不好表达的,但Policy Based方法却容易建模)
  • 对受限状态下的问题处理能力不足。 使用特征描述状态空间的某个状态时,有可能因为个体观测的限制或建模的局限,导致真是环境下本来不同的两个状态却在建模后有相同的特征描述,进而可能导致Value Based方法无法找到最优解。
  • 无法解决随机策略问题。 Value Based方法对应的最优策略通常是确定性策略,因为它是从众多行为价值中选择一个最大价值的行为,而有些问题的最优策略为随机策略(比如“剪刀石头布”游戏),这种情况下无法通过基于Value的学习来求解。这是可考虑使用Policy Based强化学习方法。

What is Policy Gradient?

基于价值的强化学习算法是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。强化学习中另一个很重要的算法——Policy Gradient则省略中间的步骤,即直接根据当前的状态来输出动作或动作的概率。
回想在Value Based方法中,对价值函数进行了近似表示; q ^ ( s , a , w ) ≈ q π ( s , a ) \hat{q}\left( s,a,w\right)\approx q_\pi \left( s,a\right) q^(s,a,w)qπ(s,a)而在Policy Based方法中,我们采用类似的思路,对策略 进行近似表示
π θ ( s , a ) = P ( a ∣ s , θ ) ≈ π ( a ∣ s ) \pi_\theta\left( s,a\right)=P\left( a\mid s,\theta\right)\approx \pi\left(a\mid s\right) πθ(s,a)=P(as,θ)π(as)

之前在训练神经网络时,使用最多的就是反向传播法,我们需要一个误差函数,通过梯度下降来使损失最小。但对于强化学习来说,我们不知道动作的正确与否,只能通过奖励值来判断这个动作的相对好坏。

  • 如果一个动作得到的reward多,那么我们使其出现的概率增加,如果一个动作得到的reward少,我们使其出现的概率减小。

根据这个思想,构造如下的损失函数: l o s s = − log ⁡ ( p r o b ) × v t loss=-\log(prob) \times v_t loss=log(prob)×vt

  • 上式 log ⁡ ( p r o b ) \log(prob) log(prob)表示如果概率越小,反向的 log ⁡ ( p r o b ) \log(prob) log(prob)反而越大。 v t v_t vt表示当前状态s下采取动作a所能得到的奖励,是当前的奖励和未来奖励的贴现值的求和(也就是说策略梯度算法必须完成一个完整的episode才可以进行参数更新,而不是像Value Based方法那样,每一个 ( s , a , r , s ′ ) \left( s,a,r,s^{\prime}\right) (s,a,r,s)都可以进行参数更新)。如果prob很小的情况下,得到了一个大的reward,也就是大的 v t v_t vt,那么 l o s s loss loss就更大(我选了一个不常选的动作,却发现它能得到一个好的reward,那我就对这次的参数进行一个大幅修改)。

蒙特卡罗策略梯度过程

这里我们讨论最简单的策略梯度算法, 使用价值函数 v ( s ) v(s) v(s)来近似代替策略梯度公式里面的 Q π ( s , a ) Q_\pi (s,a) Qπ(s,a)。算法的流程很简单,如下所示:
输入:N个蒙特卡罗完整序列,训练步长 α \alpha α
输出:策略函数的参数 θ \theta θ

  1. for 每个蒙特卡罗序列:
    a. 用蒙特卡罗法计算序列每个时间位置t的状态价值 v t v_t vt
    b. 对序列每个时间位置t,使用梯度上升法,更新策略函数的参数θ:
    θ = θ + α ▽ θ log ⁡ π θ ( s t , a t ) v t \theta = \theta + \alpha\bigtriangledown_\theta\log\pi_\theta\left(s_t,a_t\right)v_t θ=θ+αθlogπθ(st,at)vt
  2. 返回策略函数的参数 θ \theta θ

策略梯度小结

  • 算法输出的是动作概率 ,而不是Q值
  • 需要一次完整的episode才可进行参数的更新

相关内容参考刘建平Pinard博客

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