强化学习Actor-Critic算法

在前面的文章中,介绍过基于Value的一系列强化学习算法以及基于Policy的强化学习算法。这两类算法有着各自优势,也有着各自的缺点。

  • 基于Value的算法可以单步更新,在确定性策略,离散动作空间的强化学习问题上有着良好的性能,但不适合解决连续型动作空间的强化学习问题。

  • 基于Policy的强化学习算法以回合为单位来更新,可以解决随机策略,连续型动作空间的强化学习问题,但因为是回合更新,收敛速度较慢。

本篇文章将介绍一个新的算法Actor-Critic,该算法融合了基于Value和基于Policy的特点,既可以解决连续型动作空间的强化学习问题,也可以单步更新。

算法原理

Actor-Critic算法,故名思义,分为Actor和Critic两部分。其中Actor主要用来进行动作的选择,与基于Policy的强化学习算法一样,输入状态,直接输出策略。Critic主要用来评价动作的好坏,基于这个评价来决定增大还是减小这个动作被选择的概率,即根据这个评价更新Actor的参数,其输入是状态和Actor选择的动作,输出是对应的评价。

在Policy Gradient中,使用蒙特卡罗做参数的更新公式是:

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

因为是通过蒙特卡洛法来估计状态价值函数,所以需要对整个回合进行采样。而在 Actor-Critic算法中,直接通过Critic就可以估计状态价值函数,所以不需要对整个回合进行采样,进而可以做到单步更新。

Critic除了可以估计状态价值函数外,也可以采用其他的评估点,不同的评估点对应的Actor更新公式如下:

  1. 状态价值更新公式为:

    θ=θ+αθlogπθ(st,at)V(s,w)\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s_t,a_t)V(s,w)

  2. 动作价值更新公式为:

    θ=θ+αθlogπθ(st,at)Q(s,a,w)\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s_t,a_t)Q(s,a,w)

  3. TD误差的表达式有两种:δ(t)=Rt+1+γV(St+1)V(St)\delta(t)=R_{t+1}+\gamma V(S_{t+1})-V(S_t)或者δ(t)=Rt+1+γQ(St+1,At+1)Q(St,At)\delta(t)=R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t),更新公式可以写为:

    θ=θ+αθlogπθ(st,at)δ(t)\begin{gathered}\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s_t,a_t)\delta(t)\end{gathered}

  4. 优势函数,即在Dueling DQN中的A(s,a;θ,α)A(s,a;\theta,\alpha),是动作价值函数和状态价值函数的差值,更新公式为:

    θ=θ+αθlogπθ(st,at)A(s,a;θ,α)\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s_t,a_t)A(s,a;\theta,\alpha)

对于Critic的更新,可以直接与DQN一样,求出均方误差,然后通过梯度来更新参数,公式如下:

yj={rjfor terminal ϕj+1rj+γQ(ϕj+1,a;θ)for non-terminal ϕj+1δ=(yjQ(ϕj,aj;θ))2\begin{gathered}y_j=\begin{cases}r_j &\text{for terminal }\phi_{j+1} \\r_j+\gamma Q(\phi_{j+1},a';\theta) &\text{for non-terminal }\phi_{j+1}\end{cases}\\\delta=(y_j-Q(\phi_j,a_j;\theta))^2\end{gathered}

算法流程

这里说一下循环迭代中的主要流程:

  1. 根据策略网络Actor选择出动作AA

  2. 执行动作AA,观测状态SS',得到奖励RR

  3. 计算TD误差。

    δ={R+γv^(S,w)v^(S,W)if non-terminalRv^(S,W)else\delta=\begin{cases}R+\gamma\hat{v}(S',w)-\hat{v}(S,W) &\text{if non-terminal} \\R-\hat{v}(S,W) &else\end{cases}

  4. 更新Critic网络的参数。

    w=w+αwIδv^(S,w)w=w+\alpha^wI\delta\nabla\hat{v}(S,w)

  5. 更新Actor网络的参数。

    θ=θ+αθIδlnπ(AS,θ)\theta=\theta+\alpha^\theta I\delta\nabla\ln\pi(A|S,\theta)

算法缺点

Actor-Critic算法的缺点主要是因为Critic收敛速度慢,Critic如果没收敛,那么它的评估就不是很准确,这就直接导致Actor的收敛困难。Critic就像是一个指导老师,去纠正学生Actor的错误,但是如果这个老师本身就不知道对错,那么就是瞎指挥,学生就得不到应有的指导。

坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文作者:bdqfork
  • 本文链接:/articles/51
  • 版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA 许可协议。转载请注明出处!
表情 |预览
快来做第一个评论的人吧~