Actor-Critic

QAC

Actor-Critic 算法结合了值函数近似和策略函数近似:

  • Actor 负责更新策略函数 π(as,θ)\pi(a|s,\theta)

θt+1=θt+αθθlnπ(atst,θt)qt(st,at)\theta_{t+1}=\theta_{t}+\alpha_{\theta}\nabla_{\theta}\ln\pi(a_t|s_t,\theta_{t})q_t(s_t,a_t)

  • Critic 负责通过Sarsa算法更新值函数 q(s,a,w)q(s,a,w)

wt+1=wt+αw[rt+1+γq(st+1,at+1,wt)q(st,at,wt)]wq(st,at,wt)w_{t+1}=w_{t}+\alpha_w[r_{t+1}+\gamma q(s_{t+1},a_{t+1},w_{t}) -q(s_t,a_t,w_{t})]\nabla_{w}q(s_t,a_t,w_{t})

基本的 Actor-Critic算法也被称为 Q actor-critic (QAC) ,适合连续状态空间和连续动作空间。

路径寻找:如下图,在一个连续的平面世界中,包括平坦区域、草地和边界。状态空间是连续的 S=[0,6]×[0,6]\mathcal S=[0,6]\times[0,6] ,动作空间也是连续的,可以360度自由行走 A=[0,2π]\mathcal A=[0,2\pi]。如果Agent在平坦区域每单位路程奖励 -1 ;在草坪的每单位路程奖励 -2;在目标区域的奖励为 0。

Jupyter Notebook Code

A2C

之前我们推导出了带基线的策略梯度

θJ(θ)=ESd,Aπ[δπθlnπ(AS,θ)]\nabla_{\theta}J(\theta)=\mathbb E_{S\sim d,A\sim\pi}[\delta_{\pi}\nabla_{\theta}\ln\pi(A|S,\theta)]

其中

δπ=qπ(S,A)vπ(S)\delta_{\pi}=q_{\pi}(S,A)-v_{\pi}(S)

被称作优势函数(Advantage Function),如果优势函数大于零,则说明该动作比平均动作好,如果优势函数小于零,则说明当前动作还不如平均动作好。基于上面公式得到的Actor-Critic 方法被称为 Advantage actor-critic (A2C)。

基于贝尔曼方程

qπ(s,a)vπ(s)=E[Rt+1+γvπ(St+1)vπ(St)St=s,At=a]q_{\pi}(s,a)-v_{\pi}(s)=\mathbb E[R_{t+1}+\gamma v_{\pi}(S_{t+1})-v_{\pi}(S_t)|S_t=s,A_t=a]

于是策略更新变为

θt+1=θt+αθδtθlnπ(atst,θt)\theta_{t+1}=\theta_{t}+\alpha_{\theta}\delta_t\nabla_{\theta}\ln\pi(a_t|s_t,\theta_{t})

其中

δt=rt+1+γvt(st+1)vt(st)\delta_t= r_{t+1}+\gamma v_{t}(s_{t+1})-v_t(s_t)

值函数 v(s,w)v(s,w) 使用时序差分算法估计

wt+1=wt+αwδtwv(st,wt)w_{t+1}=w_t+\alpha_w\delta_t\nabla_wv(s_t,w_t)

算法流程如图

Off-policy AC:若使用行为策略 β\beta 采集经验样本,则每步需要乘以重要性权重修正

δt=π(atst,θt)β(atst)[rt+1+γvt(st+1)vt(st)]\delta_t=\frac{\pi(a_t|s_t,\theta_t)}{\beta(a_t|s_t)}[r_{t+1}+\gamma v_{t}(s_{t+1})-v_t(s_t)]

DPG

确定策略梯度 (Deterministic Policy Gradient, DPG) 是最常用的连续控制方法,顾名思义使用确定性策略

a=μ(s,θ)a=\mu(s,\theta)

目标函数

J(θ)=E[vμ(S)]=sSd(s)vμ(s)J(\theta)=\mathbb E[v_{\mu}(S)]=\sum_{s\in\mathcal S}d(s)v_{\mu}(s)

则确定性策略梯度

θJ(θ)=ESd[θvμ(S)]=ESd[θqμ(S,μ(S,θ))]=ESd[θμ(S,θ)aqμ(S,a)a=μ(S,θ)]\begin{aligned} \nabla_{\theta}J(\theta)&=\mathbb E_{S\sim d}[\nabla_{\theta}v_{\mu}(S)] \\ &=\mathbb E_{S\sim d}[\nabla_{\theta}q_{\mu}(S,\mu(S,\theta))] \\ &=\mathbb E_{S\sim d}[\nabla_{\theta}\mu(S,\theta)\nabla_aq_{\mu}(S,a)|_{a=\mu(S,\theta)}] \end{aligned}

由此我们得到更新 θ\theta 的随机梯度提升

θt+1=θt+αθθμ(st,θt)aqμ(st,a)a=μ(st,θt)\theta_{t+1}=\theta_{t}+\alpha_{\theta}\nabla_{\theta}\mu(s_t,\theta_t)\nabla_aq_{\mu}(s_t,a)|_{a=\mu(s_t,\theta_t)}

使用时序差分近似值函数 q(s,a,w)q(s,a,w) 的更新公式为

wt+1=wt+αw[rt+1+γq(st+1,at+1,wt)q(st,at,wt)]wq(st,at,wt)w_{t+1}=w_{t}+\alpha_w[r_{t+1}+\gamma q(s_{t+1},a_{t+1},w_{t}) -q(s_t,a_t,w_{t})]\nabla_{w}q(s_t,a_t,w_{t})

算法流程如图