Actor-Critic

Actor-Critic( A 2 C   A 3 C A2C \ A3C A2C A3C

1、首先要搞清楚什么是actor-critic算法,它是怎么来的?

Actor-critic算法是一种policy based的on policy的model-free算法。和value based的DQN算法有着本质的不同。policy based算法是将policy参数化 π ( a ∣ s , θ ) = Pr ⁡ { A t = a ∣ S t = s , θ t = θ } \pi(a | s, \boldsymbol{\theta})=\operatorname{Pr}\left\{A_{t}=a | S_{t}=s, \boldsymbol{\theta}_{t}=\boldsymbol{\theta}\right\} π(as,θ)=Pr{At=aSt=s,θt=θ} 用它估计的价值函数用 v ^ ( s , w ) \hat{v}(s, \mathbf{w}) v^(s,w) 表示。这里需要主义,参数化表示的价值函数都是连续函数是可以求梯度的!针对policy based强化学习问题,我们的目标依然是最大化回报,即:最大化 E [ ∑ t = 0 H R ( s t ) ∣ π θ ] E\left[\sum_{t=0}^{H} R\left(s_{t}\right) | \pi_{\theta}\right] E[t=0HR(st)πθ]

我们可以用 τ \tau τ 表示一组状态-动作序列 s 0 , u 0 , ⋯   , s H , u H , s_{0}, u_{0}, \cdots, s_{H}, u_{H}, s0,u0,,sH,uH, G ( τ ) = ∑ t = 0 H R ( s t , u t ) , G(\tau)=\sum_{t=0}^{H} R\left(s_{t}, u_{t}\right), G(τ)=t=0HR(st,ut), 表示轨迹 τ \tau τ 的回报, P ( τ ; θ ) P(\tau ; \theta) P(τ;θ) 表示轨迹 τ \tau τ 出现的概率; 则强化学习的目标函数可表示为:
U ( θ ) = E ( ∑ t = 0 H G ( s t , u t ) ; π θ ) = ∑ τ P ( τ ; θ ) G ( τ ) (9.1.1) \begin{aligned}U(\theta)=E\left(\sum_{t=0}^{H} G\left(s_{t}, u_{t}\right) ; \pi_{\theta}\right)=\sum_{\tau} P(\tau ; \theta) G(\tau)\end{aligned}\tag{9.1.1} U(θ)=E(t=0HG(st,ut);πθ)=τP(τ;θ)G(τ)(9.1.1)
则我们的目标就是: max ⁡ θ U ( θ ) = max ⁡ θ ∑ τ P ( τ ; θ ) R ( τ ) \max _{\theta} U(\theta)=\max _{\theta} \sum_{\tau} P(\tau ; \theta) R(\tau) maxθU(θ)=maxθτP(τ;θ)R(τ) ,根据gradient ascent方法有: θ n e w = θ o l d + α ∇ θ U ( θ ) \theta_{n e w}=\theta_{o l d}+\alpha \nabla_{\theta} U(\theta) θnew=θold+αθU(θ)

这里需要说明,虽然该目标函数不是连续的但是在数学上它是可以写成如下形式的(具体证明没有找到):
∇ θ U ( θ ) = ∇ θ ∑ τ P ( τ ; θ ) G ( τ ) = ∑ τ ∇ θ P ( τ ; θ ) G ( τ ) = ∑ τ P ( τ ; θ ) P ( τ ; θ ) ∇ θ P ( τ ; θ ) G ( τ ) = ∑ τ P ( τ ; θ ) ∇ θ P ( τ ; θ ) P ( τ ; θ ) G ( τ ) = ∑ τ P ( τ ; θ ) ∇ θ ln ⁡ P ( τ ; θ ) G ( τ ) = E [   ∇ θ ln ⁡ P ( τ ; θ ) G ( τ )   ] (9.1.2) \begin{aligned}\nabla_{\theta} U(\theta) &=\nabla_{\theta} \sum_{\tau} P(\tau ; \theta) G(\tau) \\&=\sum_{\tau} \nabla_{\theta} P(\tau ; \theta) G(\tau) \\&=\sum_{\tau} \frac{P(\tau ; \theta)}{P(\tau ; \theta)} \nabla_{\theta} P(\tau ; \theta) G(\tau) \\&=\sum_{\tau} P(\tau ; \theta) \frac{\nabla_{\theta} P(\tau ; \theta)}{P(\tau ; \theta)} G(\tau) \\&=\sum_{\tau} P(\tau ; \theta) \nabla_{\theta} \ln P(\tau ; \theta) G(\tau)\\&=E \left[\ \nabla_{\theta} \ln P(\tau ; \theta) G(\tau) \ \right]\end{aligned}\tag{9.1.2} θU(θ)=θτP(τ;θ)G(τ)=τθP(τ;θ)G(τ)=τP(τ;θ)P(τ;θ)θP(τ;θ)G(τ)=τP(τ;θ)P(τ;θ)θP(τ;θ)G(τ)=τP(τ;θ)θlnP(τ;θ)G(τ)=E[ θlnP(τ;θ)G(τ) ](9.1.2)
由此可以得到:
∇ θ U ( θ ) ≈ g ^ = 1 m ∑ i = 1 m ∇ θ ln ⁡ P ( τ ; θ ) G ( τ ) (9.1.3) \begin{aligned}\nabla_{\theta} U(\theta) \approx \hat{g}=\frac{1}{m} \sum_{i=1}^{m} \nabla_{\theta} \ln P(\tau ; \theta) G(\tau)\end{aligned}\tag{9.1.3} θU(θ)g^=m1i=1mθlnP(τ;θ)G(τ)(9.1.3)
这个公式中 ∇ θ log ⁡ P ( τ ; θ ) \nabla_{\theta} \log P(\tau ; \theta) θlogP(τ;θ) 就是目标函数变化最快的方向, G ( τ ) G(\tau) G(τ) 可以看作更新的幅度

对于 ∇ θ log ⁡ P ( τ ; θ ) \nabla_{\theta} \log P(\tau ; \theta) θlogP(τ;θ) 这一项,通过数学上的一些技巧可以证明它和环境的动态特性是无关的!
∇ θ ln ⁡ P ( τ ( i ) ; θ ) = ∇ θ ln ⁡ [ ∏ t = 0 H P ( s t + 1 ( i ) ∣ s t ( i ) , u t ( i ) ) ⏟ dynamics model  ⋅ π θ ( u t ( i ) ∣ s t ( i ) ) ⏟ policy  ] = ∇ θ [ ∑ t = 0 H ln ⁡ P ( s t + 1 ( i ) ∣ s t ( i ) , u t ( i ) ) + ∑ t = 0 H ln ⁡ π θ ( u t ( i ) ∣ s t ( i ) ) ] = ∇ θ ∑ t = 0 H ln ⁡ π θ ( u t ( i ) ∣ s t ( i ) ) = ∑ t = 0 H ∇ θ ln ⁡ π θ ( u t ( i ) ∣ s t ( i ) ) ⏟ no dynamics model required!!  (9.1.4) \begin{aligned}\nabla_{\theta} \ln P\left(\tau^{(i)} ; \theta\right) &=\nabla_{\theta} \ln \left[\prod_{t=0}^{H} \underbrace{P\left(s_{t+1}^{(i)} | s_{t}^{(i)}, u_{t}^{(i)}\right)}_{\text {dynamics model }} \cdot \underbrace{\pi_{\theta}\left(u_{t}^{(i)} | s_{t}^{(i)}\right)}_{\text {policy }}\right] \\&=\nabla_{\theta}\left[\sum_{t=0}^{H} \ln P\left(s_{t+1}^{(i)} | s_{t}^{(i)}, u_{t}^{(i)}\right)+\sum_{t=0}^{H} \ln \pi_{\theta}\left(u_{t}^{(i)} | s_{t}^{(i)}\right)\right] \\&=\nabla_{\theta} \sum_{t=0}^{H} \ln \pi_{\theta}\left(u_{t}^{(i)} | s_{t}^{(i)}\right) \\&=\sum_{t=0}^{H} \underbrace{\nabla_{\theta} \ln \pi_{\theta}\left(u_{t}^{(i)} | s_{t}^{(i)}\right)}_{\text {no dynamics model required!! }}\end{aligned}\tag{9.1.4} θlnP(τ(i);θ)=θlnt=0Hdynamics model  P(st+1(i)st(i),ut(i))policy  πθ(ut(i)st(i))=θ[t=0HlnP(st+1(i)st(i),ut(i))+t=0Hlnπθ(ut(i)st(i))]=θt=0Hlnπθ(ut(i)st(i))=t=0Hno dynamics model required!!  θlnπθ(ut(i)st(i))(9.1.4)
再考虑上折扣率就有:
∇ θ U ( θ ) = E [   ∇ θ ln ⁡ P ( τ ; θ ) G ( τ )   ] = E [   ∑ t = 0 H γ t   ∇ θ ln ⁡ π θ ( u t ( i ) ∣ s t ( i ) ) G ( τ )   ] (9.1.5) \begin{aligned}\nabla_{\theta} U(\theta) &=E \left[\ \nabla_{\theta} \ln P(\tau ; \theta) G(\tau) \ \right]\\&= E \left[\ \sum_{t=0}^{H} \gamma^t \ \nabla_{\theta} \ln \pi_{\theta}\left(u_{t}^{(i)} | s_{t}^{(i)}\right) G(\tau) \ \right]\end{aligned}\tag{9.1.5} θU(θ)=E[ θlnP(τ;θ)G(τ) ]=E[ t=0Hγt θlnπθ(ut(i)st(i))G(τ) ](9.1.5)
所以更新的就可以采用以下形式:
θ t + 1 ← θ t + α γ t G t ∇ ln ⁡ π ( A t ∣ S t ; θ ) , t = 0 , 1 , … (9.1.6) \begin{aligned}\boldsymbol{\theta}_{t+1} \leftarrow \boldsymbol{\theta}_{t}+\alpha \gamma^{t} G_{t} \nabla \ln \pi\left(A_{t} | S_{t} ; \boldsymbol{\theta}\right), \quad t=0,1, \ldots\end{aligned}\tag{9.1.6} θt+1θt+αγtGtlnπ(AtSt;θ),t=0,1,(9.1.6)
这就是policy based的gradient算法,其中比较经典的是REINFORCE算法。

在这里插入图片描述

该算法需要生成一幕完整的序列,是基于MC的算法,因此它的方差比较大。又因为用到了随机梯度的方法所以有时容易陷入局部最优解。

为了解决这个问题,引入了基线 b ( s ) b(s) b(s) 这个概念!则有:
E [ γ ′ ( G t − B ( S t ) ) ∇ ln ⁡ π ( A t ∣ S i ; θ ) ] = E [ γ ′ G t ∇ ln ⁡ π ( A t ∣ S t ; θ ) ] (9.1.7) \begin{aligned}\mathrm{E}\left[\gamma^{\prime}\left(G_{t}-B\left(S_{t}\right)\right) \nabla \ln \pi\left(A_{t} | S_{i} ; \mathbf{\theta}\right)\right]=\mathrm{E}\left[\gamma^{\prime} G_{t} \nabla \ln \pi\left(A_{t} | S_{t} ; \mathbf{\theta}\right)\right]\end{aligned}\tag{9.1.7} E[γ(GtB(St))lnπ(AtSi;θ)]=E[γGtlnπ(AtSt;θ)](9.1.7)
相关证明以及引入基线后确实能减小方差的证明此处略去。

上式左边可以做出如下改动:
E [ γ ′ ( G t − B ( S t ) ) ∇ ln ⁡ π ( A t ∣ S i ; θ ) ] = E [ Ψ t   ∇ ln ⁡ π ( A t ∣ S i ; θ ) ] (9.1.8) \begin{aligned}\mathrm{E}\left[\gamma^{\prime}\left(G_{t}-B\left(S_{t}\right)\right) \nabla \ln \pi\left(A_{t} | S_{i} ; \mathbf{\theta}\right)\right]= \mathrm{E}\left[ \Psi_t \ \nabla \ln \pi\left(A_{t} | S_{i} ; \mathbf{\theta}\right)\right]\end{aligned}\tag{9.1.8} E[γ(GtB(St))lnπ(AtSi;θ)]=E[Ψt lnπ(AtSi;θ)](9.1.8)
其中当 Ψ t = A ( a t , s t ) = γ t [ q π ( S t , A t ) − v π ( S t ) ] \Psi_{t}= A(a_t, s_t) = \gamma^{t}\left[q_{\pi}\left(S_{t}, A_{t}\right)-v_{\pi}\left(S_{t}\right)\right] Ψt=A(at,st)=γt[qπ(St,At)vπ(St)] 时(注意:此处的价值函数都是在参数化了策略之后得到的,在代码中价值函数是CNN的输出)就是典型的actor-critic算法。其中 Ψ t \Psi_t Ψt 是critic, ∇ ln ⁡ π ( A t ∣ S i ; θ ) \nabla \ln \pi\left(A_{t} | S_{i} ; \mathbf{\theta}\right) lnπ(AtSi;θ) 是actor。这里需要强调,因为critic中用价值函数来估计了回报,这种基于其他估计来更新自己的估计的方法正是自举法的体现,并且只有用到了bootstrapping方法的才是actor-critic算法,因此即使将REINFORCE算法中的基线用价值函数替代也不算是actor-critic。也正因为actor-critic算法采用了bootstrapping,所以引入了偏差但是能减小方差。

2、Actor-critic的一些特点

actor和critic是用同一个神经网络训练的但是最后的全连接层不同。当使用A3C(asynchronous advantage actor critic)时利用多线程的技巧,让多个agent同时做exploration,累计gradient,在一个episode结束后用整个轨迹来进行更新,这么做可以取代DQN中的experience replay。因为使用了多线程,不同线程中的actor-learner学到的经验关联性不高因此可以避免使用experience replay但仍能有一个比较稳定的学习过程。并且由于摆脱了experience replay的束缚,asynchronous的思想可以用到on-policy的算法上比如SARSA;其次开多线程可以加快学习的速度。

参考资料

知乎专栏
《强化学习原理与python实现》肖智清

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值