深度强化学习笔记06【总结:DDPG/TD3/SAC】

总结:

  • DDPG解决DQN难以处理连续动作空间问题:DDPG = DQN + DPG
  • TD3解决过估计Q值问题:TD3 = DDPG + clipped double-Q learning + “delayed” policy updates + target policy smoothing
  • SAC将SPG与DDPG结合:SAC = DDPG + SPG + clipped double-Q learning + entropy-regularization + reparameterization

主要参考资料:OpenAI Spinning up Algorithms


一、DDPG

1.1 概述

  DQN不便解决连续动作空间环境,这源于critic训练的回归拟合方程存在求解actions中Q value最大值问题。DDPG为解决该问题,训练一个actor输出唯一action,作为critic的输入能输出近似最大Q值:
max ⁡ a Q ∗ ( s , a ) ≈ Q θ ( s , π θ ( s ) ) \max_aQ^*(s,a)≈Q_{\theta}(s,{\pi}_{\theta}(s)) amaxQ(s,a)Qθ(s,πθ(s))​  因为动作空间是连续的,可以认为policy对action可微,从而利用policy gradient的方法去更新actor,而继续用Q learning的方法去更新critic。DDPG的关键点:off-policy、仅能被用于连续动作空间、可被看作是连续动作空间的deep Q learning。
​  总之,DDPG主要做了两件事:1)通过Q learning学习一个Q function(critic);2)通过DPG学习一个policy(actor)。并且actor仅输出一个action(确定性),作为critic的输入能输出近似最大Q值。

1.2 Critic 更新
  1. 贝尔曼最优方程(目标):
    Q ∗ ( s , a ) = r s a + γ ∑ s ′ ∈ S P s s ′ a m a x a Q ∗ ( s ′ , a ′ ) Q^*(s,a)=r_s^a+{\gamma}{\sum_{s'∈S}}P_{ss'}^amax_aQ^*(s',a') Q(s,a)=rsa+γsSPssamaxaQ(s,a)

  2. 基于TD法建立以MSBE为损失的目标函数:
    J ( ϕ ) = L ( ϕ ) = E ( s , a , r , s ′ , d ) ~ D [ ( Q ϕ ( s , a ) − ( r + γ ( 1 − d ) Q ϕ ( s ′ , a ′ ) ) ) 2 ] J(\phi)=L(\phi)=E_{(s,a,r,s',d)~D}[(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\phi}(s',a')))^2] J(ϕ)=L(ϕ)=E(s,a,r,s,d)D[(Qϕ(s,a)(r+γ(1d)Qϕ(s,a)))2]

  3. 利用采样到的batch-size个样本的均值近似该期望并使用gradient descent更新:
    ▽ ϕ J ( ϕ ) = ▽ ϕ 1 ∣ B ∣ ∑ ( s , a , r , s ′ , d ) ~ B ( Q ϕ ( s , a ) − ( r + γ ( 1 − d ) Q ϕ ( s ′ , a ′ ) ) ) 2 ▽_{\phi}J(\phi)=▽_{\phi}\frac{1}{|B|}{\sum}_{(s,a,r,s',d)~B}(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\phi}(s',a')))^2 ϕJ(ϕ)=ϕB1(s,a,r,s,d)B(Qϕ(s,a)(r+γ(1d)Qϕ(s,a)))2

1.3 Actor 更新
  1. 训练目标就是让critic输出的Q值最大: J ( θ ) = E s ~ S [ Q ϕ ( s , π θ ( s ) ) ] J(\theta)=E_{s~S}[Q_{\phi}(s,\pi_{\theta}(s))] J(θ)=EsS[Qϕ(s,πθ(s))]
  2. 因为动作空间连续,Q对action可微,结合链导性,利用gradient boosting更新:
    ▽ θ J ( θ ) = ∂ Q ∂ θ = ∂ Q ϕ ( s , π θ ( s ) ) ∂ π θ ( s ) ∗ ∂ π θ ( s ) ∂ θ ▽_{\theta}J(\theta)=\frac{\partial{Q}}{\partial{\theta}}=\frac{\partial{Q_{\phi}(s,{\pi}_{\theta}(s))}}{\partial{{\pi}_{\theta}(s)}}*\frac{\partial{{\pi}_{\theta}(s)}}{\partial{\theta}} θJ(θ)=θQ=πθ(s)Qϕ(s,πθ(s))θπθ(s)

Tips

DDPG中有沿用DQN中target network和relay buffer的trick(buffer里面数据是给critic的,policy的目的是最大化critic的输出)

1.4 伪代码

在这里插入图片描述


二、TD3

2.1 概述

​  主要解决DDPG中存在的问题(同样存在于DQN中):过估计Q值。原因在于神经网络本身的输出不稳定,而critic更新中总是要向最大Q值的那一个收敛,所以选择的更新方向总是被高估的Q值,如果episode过长,累积的误差会使得训练效果十分不理想。DQN中采用Double Q network减小选择高估Q值为更新方向概率: y = r + γ ( 1 − d ) Q 1 ( s ′ , a r g max ⁡ a Q 2 ( s ′ , a ) ) , y=r+\gamma(1-d)Q^1(s',arg\max_{a}{Q^2}(s',a)), y=r+γ(1d)Q1(s,argamaxQ2(s,a))两个Q网络嵌套,即便里面的选择了高估Q的action,只要外层Q值不高估就行了,即便外层会高估Q值,里面的不选择高估Q值的action就行。TD3中的采用是另一个方式: y = r + γ ( 1 − d ) min ⁡ i = 1 , 2 Q ϕ i , t a r g ( s ′ , a ′ ( s ′ ) ) , y=r+\gamma(1-d)\min_{i=1,2}Q_{\phi_{i,targ}}(s',a'(s')), y=r+γ(1d)i=1,2minQϕi,targ(s,a(s))选择两个Q网络输出Q值最小的那一个作为目标回归拟合,trick被称为clipped double-Q learning。

​  spinning up介绍的TD3与DDPG主要有三个区别:1)clipped double-Q learning;2)”Delayed” Policy Updates;3)Target Policy Smoothing。其中第2项就是减缓policy的更新频率,原文建议每两次更新critic再更新一次policy,有助于训练稳定性。第3项是向action中加入随机噪声,通过让Q值随着动作平滑变化,让policy难以输出使critic输出的Q值被高估的action,原文中,该噪声为clip处理后的标准高斯噪声(理解:Q值的过估计根本源自于神经网络的扰动性,在此基础上人为加入裁剪后的服从标准正态分布的噪声,可能会抵消或正则化该扰动误差,降低出现过估计Q值的可能)。总之这三种trick加入DDPG提高了其表现性能,并称之TD3。

2.2 更新

​  具体地,与DDPG相比,TD3在critic和actor的更新中对应有三点变化:

  1. critic更新中的回归拟合方程y应用clipped double-Q learning: y = r + γ ( 1 − d ) min ⁡ i = 1 , 2 Q ϕ i , t a r g ( s ′ , a ′ ( s ′ ) ) y=r+\gamma(1-d)\min_{i=1,2}Q_{\phi_{i,targ}}(s',a'(s')) y=r+γ(1d)i=1,2minQϕi,targ(s,a(s))
  2. steps循环中,每更新两次critic再更新一次actor。
  3. critic更新中的回归拟合方程y中的action加入裁剪后的高斯噪声: a ′ ( s ′ ) = c l i p ( π θ t a r + c l i p ( ϵ , − c , c ) , a L o w , a H i g h ) , ϵ ~ N ( 0 , σ ) a'(s')=clip(\pi_{\theta_{tar}}+clip(\epsilon,-c,c),a_{Low},a_{High}),\epsilon~N(0,\sigma) a(s)=clip(πθtar+clip(ϵ,c,c),aLow,aHigh),ϵN(0,σ)
2.3 伪代码

在这里插入图片描述


三、SAC

3.1 概述

​  SAC的核心特征是entropy-regularization trick。DDPG/TD3中确定性地收敛策略可能会使得算法探索性不足,导致policy过早收敛至不理想的critical point。SAC的目的是提高DDPG的探索性而又保留一定的样本利用率(exploration-exploitation trade off)。提升探索性的trick很多,包括最经典且简单的epsilon greedy,以及noise network等等。

​  SAC中用到的是entropy-regularization,利用与action相关联的熵去延缓收敛提升探索性,这种关联性来自于熵的定义:随机程度越高熵值越大。在SPG(stochastic policy gradient)训练早期的时候,actions的概率分布方差较大,随机程度高熵值较大;随着训练进行,policy逐渐收敛,actions的分布方差变小,随机程度变低熵值较小。根据这个特点,在价值函数中加入熵值:训练早期,return所加熵值较大,训练后期,return所加熵值较小,从而soft该收敛过程,使得训练收敛变缓,这可以保留早期policy的探索性防止过早收敛,还可以加速以后的学习(理解:这里的加速指的是更高效的收敛到理想的minimal point)。SAC主要的工作就是把SPG应用于DDPG的更新中并加入entropy-regularization。

​  加入熵项后,V值和Q值都要再定义,所以critic和actor更新的函数也要作改变。

​  对于critic的更新,原文作者引理证明:即便加入了熵项,也能确保Q值收敛向可能的最大值(soft policy evaluation)。

​  对于actor的更新,我还没完全理解清楚:作者用KL散度衡量policy与归一化后的Q function的指数之间的差距,想把这个作为更新目标:
J π ( ϕ ) = E s t ∼ D [ D K L ( π ϕ ( ⋅ ∣ s t ) ∣ ∣ exp ⁡ ( Q θ ( s t , ⋅ ) ) Z θ ( s t ) ) ] J_{\pi}(\phi)=E_{s_t\sim{D}}[D_{KL}(\pi_{\phi}(\cdot|s_t)||\frac{\exp(Q_{\theta}(s_t,\cdot))}{Z_{\theta}(s_t)})] Jπ(ϕ)=EstD[DKL(πϕ(st)∣∣Zθ(st)exp(Qθ(st,)))]此处笔者存疑:policy跟Q之间只有action作联系,即policy的目标是输出的action作为critic的输入能输出最大Q值,没有直接关系啊,他俩分布差距变小对policy的更新有意义吗?可作者在原文给出了引理证明:这样确实能得到更好的policy (soft policy improvement)。简单来说,证明的过程就是把该KL散度展开计算,增加policy约束并引用soft policy evaluation的证明同证,使用该更新目标能得到更好的policy。

spinning up文档中未用该方法更新,而是继承自DDPG的actor更新方法并采用原文提到的另外一个trick:reparameterization进行actor的更新

3.2 Entropy-regularization
  1. 将熵项加入reward中,并以最大化重构的return作为RL更新方向,用超参数α控制“探索度”:
    π ∗ = a r g max ⁡ π E τ ~ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ] \pi^*=arg\max_{\pi}E_{\tau~\pi}[\sum_{t=0}^{∞}\gamma^t(R(s_t,a_t,s_{t+1})+{\alpha}H(\pi(·|s_t)))] π=argπmaxEτπ[t=0γt(R(st,at,st+1)+αH(π(st)))]
  2. 重定义V值函数: V π ( s ) = E τ ~ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ] V^{\pi}(s)=E_{\tau~\pi}[\sum_{t=0}^{∞}\gamma^t(R(s_t,a_t,s_{t+1})+{\alpha}H(\pi(·|s_t)))] Vπ(s)=Eτπ[t=0γt(R(st,at,st+1)+αH(π(st)))]
  3. 重定义Q值函数: Q π ( s , a ) = E τ ~ π [ ∑ t = 0 ∞ γ t R ( s t , a t , s t + 1 ) + α ∑ t = 1 ∞ γ t H ( π ( ⋅ ∣ s t ) ) ) ] Q^{\pi}(s,a)=E_{\tau~\pi}[\sum_{t=0}^{∞}\gamma^tR(s_t,a_t,s_{t+1})+{\alpha}\sum_{t=1}^{∞}\gamma^tH(\pi(·|s_t)))] Qπ(s,a)=Eτπ[t=0γtR(st,at,st+1)+αt=1γtH(π(st)))]
  4. 通过以上定义,利用贝尔曼方程,两个值函数的关系为:
    V π ( s ) = E α ~ π [ Q π ( s , a ) ] + α H ( π ( ⋅ ∣ s t ) ) V^{\pi}(s)=E_{\alpha~\pi}[Q^{\pi}(s,a)]+{\alpha}H(\pi(·|s_t)) Vπ(s)=Eαπ[Qπ(s,a)]+αH(π(st)) Q π ( s , a ) = E s ′ ~ P [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) ) + α H ( π ( ⋅ ∣ s ′ ) ) ] = E s ′ ~ P [ R ( s , a , s ′ ) + γ V π ( s ′ ) ] Q^{\pi}(s,a)=E_{s'~P}[R(s,a,s')+\gamma(Q^{\pi}(s',a'))+{\alpha}H(\pi(·|s'))]=E_{s'~P}[R(s,a,s')+{\gamma}V^{\pi}(s')] Qπ(s,a)=EsP[R(s,a,s)+γ(Qπ(s,a))+αH(π(s))]=EsP[R(s,a,s)+γVπ(s)]
3.3 Critic 更新
  1. 根据上述加入熵项的Q值,写出其贝尔曼递归方程:

Q π ( s , a ) = E s ′ ~ P , a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) ) + α H ( π ( ⋅ ∣ s ′ ) ) ] = E s ′ ~ P , a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) ) − α log ⁡ π ( a ′ ∣ s ′ ) ] Q^{\pi}(s,a)=E_{s'~P,a'\sim{\pi}}[R(s,a,s')+\gamma(Q^{\pi}(s',a'))+{\alpha}H(\pi(·|s'))] =E_{s'~P,a'\sim{\pi}}[R(s,a,s')+\gamma(Q^{\pi}(s',a'))-{\alpha}{\log}\pi(a'|s')] Qπ(s,a)=EsP,aπ[R(s,a,s)+γ(Qπ(s,a))+αH(π(s))]=EsP,aπ[R(s,a,s)+γ(Qπ(s,a))αlogπ(as)]

其中与TD3不同的除了熵项的增加,最重要的是actions来自于当前policy与环境互动得到的数据,而非从buffer中sample的数据(states仍然是跟TD3一样从buffer里sample),spinning up没解释,个人理解:熵值取决于actions的probability,所以用旧数据的actions对探索的提升就没价值了?

  1. 用样本近似该期望: Q π ( s , a ) ≈ r + γ ( Q π ( s ′ , a ~ ′ ) − α log ⁡ π ( a ~ ′ ∣ s ′ ) ,   a ~ ′ ∼ π ( ⋅ ∣ s ′ ) ) Q^{\pi}(s,a)≈r+{\gamma}(Q^{\pi}(s',\tilde{a}')-{\alpha}\log\pi(\tilde{a}'|s'),~~\tilde{a}'\sim\pi(·|s')) Qπ(s,a)r+γ(Qπ(s,a~)αlogπ(a~s)  a~π(s))
  2. 目标函数: L ( ϕ i , D ) = E ( s , a , r , s ′ , d ) ∼ D [ ( Q ϕ i ( s , a ) − y ( r , s ′ , d ) ) 2 ] L(\phi_i,D)=E_{(s,a,r,s',d){\sim}D}[(Q_{\phi_i}(s,a)-y(r,s',d))^2] L(ϕi,D)=E(s,a,r,s,d)D[(Qϕi(s,a)y(r,s,d))2]
  3. 其中回归拟合方程: y ( r , s ′ , d ) = r + γ ( 1 − d ) ( min ⁡ j = 1 , 2 Q ϕ t a r g , j ( s ′ , a ~ ′ ) − α log ⁡ π ( a ~ ′ ∣ s ′ ) ) ,   a ~ ′ ∼ π ( ⋅ ∣ s ′ ) ) y(r,s',d)=r+{\gamma}(1-d)(\min_{j=1,2}Q_{\phi_{targ,j}}(s',\tilde{a}')-{\alpha}{\log}\pi(\tilde{a}'|s')),~~\tilde{a}'\sim\pi(·|s')) y(r,s,d)=r+γ(1d)(j=1,2minQϕtarg,j(s,a~)αlogπ(a~s))  a~π(s))

跟TD3中一样,也用到了clipped double-Q learning,用gradient descent更新该目标函数(MSBE)即可。

3.4 Actor 更新

原文使用了一种新的更新方式,但spinning up中仍使用DDPG的policy gradient,并加入原文提到的一个trick:reparameterization

  1. DDPG policy gradient:KaTeX parse error: Can't use function '$' in math mode at position 50: …i_{\theta}(s))]$̲or$J(\theta)=E_…
  2. SAC policy gradient:
    max ⁡ θ E s ∼ D , ξ ∼ N [ min ⁡ j = 1 , 2 Q ϕ j ( s , a ~ θ ( s , ϵ ) ) − α log ⁡ π θ ( a ~ θ ( s , ϵ ) ∣ s ) ] \max_{\theta} E_{s \sim \mathcal{D}, \\ \xi \sim \mathcal{N}}{[\min_{j=1,2} Q_{\phi_j}(s,\tilde{a}_{\theta}(s,\epsilon)) - \alpha \log \pi_{\theta}(\tilde{a}_{\theta}(s,\epsilon)|s)]} θmaxEsD,ξN[j=1,2minQϕj(s,a~θ(s,ϵ))αlogπθ(a~θ(s,ϵ)s)]​其中,与DDPG不同的有三处:1)熵项的增加;2)reparameterization对action的参数化定义;3)clipped double-Q network(跟TD3一样)。

  Reparameterization对action的参数化定义为: a ~ θ ( s , ϵ ) = tanh ⁡ ( μ θ ( s ) + σ θ ( s ) ⊙ ϵ ) ,            ϵ ∼ N ( 0 , I ) \tilde{a}_{\theta}(s, \epsilon) = \tanh\left( \mu_{\theta}(s) + \sigma_{\theta}(s) \odot \epsilon \right), \;\;\;\;\; \epsilon \sim \mathcal{N}(0, I) a~θ(s,ϵ)=tanh(μθ(s)+σθ(s)ϵ),ϵN(0,I)​该trick的目的是:1)压缩函数,使用tanh函数约束动作空间约束成有界而非无限空间;2)action满足一个高斯分布,其均值与方差由policy定义并具体由state取决,spinning up给出的解释是:在VPG、TRPO或PPO中,policy的标准差(log std devs)是用与状态无关的参数变量表示的,这意味着这些标准差在policy固定的情况下是固定的,基于spinning up开发组的经验,如果在SAC中使用一样的方法会导致算法效果不好,所以引入与神经网络参数有关的状态决定action空间。此外加入的epsilon噪声项是一个独立的超参数用于保持探索性。总之,SAC的actor更新目标就是步骤2,之后按照DDPG那样进行policy gradient即可。

3.5 伪代码

在这里插入图片描述


至此,笔者算是完成了spinning up中给出算法的理论学习。欢迎讨论学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值