基于Policy的强化学习算法

在文章基于Value的强化学习算法中,介绍了Q-learning和SARSA两种经典的强化学习算法。在本篇文章中,将介绍一下基于Policy的经典强化学习算法——Policy Gradient。

Value-based算法的不足

  1. Value-based强化学习算法,是根据当前状态下的Q值来选取动作去执行。因此,一旦Q值表收敛,那么对于某一个状态ss,其选择的动作aa将是唯一确定的,即确定性的策略。这就导致其无法解决最优策略是随机策略的强化学习问题,例如猜拳,每次都出锤子当然不是最优解,让对方猜不出的随机策略反而更好一些。

  2. 在受限状态下,Value-based算法表现的不是很好。由于观测手段或者其他一些原因,导致观测到的两个不同的状态却得到了同样的特征,导致选择的策略效果不好。例如猜拳的时候,同一对手在tt时刻出了剪刀,在t+1t+1时刻也出了剪刀,如果只考虑对手以及动作,那么在ttt+1t+1时刻观察到的特征是一样的。然而,在t+2t+2时刻对手不一定会出剪刀。

  3. 对于连续动作空间的强化学习问题的求解效果不好。因为Value-based算法的动作选择是在动作空间中选择QQ值最大的动作,所以需要输出动作空间中每一个动作的QQ值。因此,对于动作空间非常大的连续动作空间来说,评估每一个动作的QQ值的成本是非常大的。例如方向盘转的角度,随着转动精度的无限提高,动作空间可以趋近于无穷。

Policy Gradient

Policy-based算法的输入和Value-based一样,但是输出的是动作空间中每一个动作被选择的概率,换句话说,输出的是动作空间中动作被选择的概率分布。这时策略函数可以用如下公式表示,其中θ\theta是要训练的参数:

πθ(s,a)=P(as,θ)π(as)\pi_\theta(s,a)=P(a|s,\theta)\approx\pi(a|s)

其优化目标有以下三种形式:

  1. 初始状态收获的期望:J1(θ)=Vπθ(s1)=Eπθ(G1)J_1(\theta)=V_{\pi\theta}(s1)=E_{\pi\theta}(G1)
  2. 状态收获的平均价值:JavV(θ)(θ)=sdπθVπθ(s)J_{avV(\theta)}(\theta)=\displaystyle\sum_sd_{\pi\theta}V_{\pi\theta}(s),其中dπθ(s)d_{\pi\theta(s)}是基于策略πθ\pi_\theta生成的马尔可夫链关于状态的静态分布。
  3. 每个time-step的平均奖励:JavR(θ)=sdπθ(s)aπθ(s,a)RsaJ_{avR(\theta)=\displaystyle\sum_sd_{\pi\theta}(s)\displaystyle\sum_a\pi_\theta(s,a)R_s^a}

无论哪种形式,根据策略定理,对θ\theta求导的梯度为:

θJ(θ)=Eπθ[θlogπθ(s,a)Qπ(s,a)]\nabla\theta J(\theta)=E_{\pi\theta}[\nabla_\theta \log\pi_\theta(s,a)Q_\pi(s,a)]

其中θlogπθ(s,a)\nabla_\theta log\pi_\theta(s,a)称为分值函数。

对于πθ(s,a)\pi_\theta(s,a),在离散空间中常使用softmax函数,使用描述状态和行为的特征ϕ(s,a)\phi(s,a)与参数θ\theta的线性组合来权衡一个行为发生的几率,即:

πθ(s,a)=eϕ(s,a)Tθbeϕ(s,b)Tθθlogπθ(s,a)=ϕ(s,a)Eπθ[ϕ(s,.)]\begin{gathered}\pi_\theta(s,a)=\frac{e^{\phi(s,a)^T\theta}}{\displaystyle\sum_be^{\phi(s,b)^T\theta}}\\\nabla_\theta \log\pi_\theta(s,a)=\phi(s,a)-E_{\pi\theta}[\phi(s,.)]\end{gathered}

在连续行为空间常用高斯函数,对应的行为从高斯分布N(ϕ(s)Tθ,σ2)N(\phi(s)^T\theta,\sigma^2)中产生,求导之后为:

θlogπθ(s,a)=(aϕ(s)Tθ)ϕ(s)σ2\nabla_\theta \log\pi_\theta(s,a)=\frac{(a-\phi(s)^T\theta)\phi(s)}{\sigma^2}

对于目标函数的优化可以采用蒙特卡洛梯度策略算法,使用随机梯度上升法更新参数,使用策略梯度法返回vtv_t作为Qπ(s,a)Q_\pi(s,a)的无偏估计。算法如下:

首先初始化参数θ\theta,之后对于每一个蒙特卡洛序列,做以下两步:

  1. 用蒙特卡洛计算序列每个时间位置tt的状态价值vtv_t

  2. 对序列每个时间位置tt,使用梯度上升法,更新策略函数的参数θ\theta

    θ=θ+αθlogπθ(st,at)vt\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s_t,a_t)v_t

最后返回策略函数的参数θ\theta,这个策略函数可以是softmax,也可以是高斯策略或者其他策略。

Policy-based的不足

  1. Policy-based往往收敛于局部最优解而不是全局最优解。
  2. 由于其输出的是动作概率分布,需要基于这个分布对动作进行采样,当动作空间非常大时,成本也比较高。
坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者:bdqfork
  • 本文链接:/articles/47
  • 版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
表情 |预览
快来做第一个评论的人吧~