在前面的文章中,介绍过基于Value的一系列强化学习算法以及基于Policy的强化学习算法。这两类算法有着各自优势,也有着各自的缺点。
本篇文章将介绍一个新的算法Actor-Critic,该算法融合了基于Value和基于Policy的特点,既可以解决连续型动作空间的强化学习问题,也可以单步更新。
算法原理
Actor-Critic算法,故名思义,分为Actor和Critic两部分。其中Actor主要用来进行动作的选择,与基于Policy的强化学习算法一样,输入状态,直接输出策略。Critic主要用来评价动作的好坏,基于这个评价来决定增大还是减小这个动作被选择的概率,即根据这个评价更新Actor的参数,其输入是状态和Actor选择的动作,输出是对应的评价。
在Policy Gradient中,使用蒙特卡罗做参数的更新公式是:
θ=θ+α∇θlogπθ(st,at)vt
因为是通过蒙特卡洛法来估计状态价值函数,所以需要对整个回合进行采样。而在 Actor-Critic算法中,直接通过Critic就可以估计状态价值函数,所以不需要对整个回合进行采样,进而可以做到单步更新。
Critic除了可以估计状态价值函数外,也可以采用其他的评估点,不同的评估点对应的Actor更新公式如下:
-
状态价值更新公式为:
θ=θ+α∇θlogπθ(st,at)V(s,w)
-
动作价值更新公式为:
θ=θ+α∇θlogπθ(st,at)Q(s,a,w)
-
TD误差的表达式有两种:δ(t)=Rt+1+γV(St+1)−V(St)或者δ(t)=Rt+1+γQ(St+1,At+1)−Q(St,At),更新公式可以写为:
θ=θ+α∇θlogπθ(st,at)δ(t)
-
优势函数,即在Dueling DQN中的A(s,a;θ,α),是动作价值函数和状态价值函数的差值,更新公式为:
θ=θ+α∇θlogπθ(st,at)A(s,a;θ,α)
对于Critic的更新,可以直接与DQN一样,求出均方误差,然后通过梯度来更新参数,公式如下:
yj={rjrj+γQ(ϕj+1,a′;θ)for terminal ϕj+1for non-terminal ϕj+1δ=(yj−Q(ϕj,aj;θ))2
算法流程

这里说一下循环迭代中的主要流程:
-
根据策略网络Actor选择出动作A。
-
执行动作A,观测状态S′,得到奖励R。
-
计算TD误差。
δ={R+γv^(S′,w)−v^(S,W)R−v^(S,W)if non-terminalelse
-
更新Critic网络的参数。
w=w+αwIδ∇v^(S,w)
-
更新Actor网络的参数。
θ=θ+αθIδ∇lnπ(A∣S,θ)
算法缺点
Actor-Critic算法的缺点主要是因为Critic收敛速度慢,Critic如果没收敛,那么它的评估就不是很准确,这就直接导致Actor的收敛困难。Critic就像是一个指导老师,去纠正学生Actor的错误,但是如果这个老师本身就不知道对错,那么就是瞎指挥,学生就得不到应有的指导。