深度强化学习笔记05【SAC】

SAC
1. 概述

​  探索性与样本利用率的权衡是强化学习算法主要的一对考量。DDPG/TD3的确定性使得算法探索性不足,可能会导致网络参数过早收敛至不理想的局部最优。为提高探索性并保持一定的样本利用率,Soft Actor-Critic(SAC)将随机梯度优化与DDPG类型算法进行结合。 SAC并不直接脱胎于TD3算法(二者几乎同时提出),但SAC有采用TD3中clipped double-Q trick,并且由于SAC中policy内在的随机性,其最终效果近似于TD3中的target policy smoothing。相比于TD3,SAC最为核心的特征就是结合了entropy regularization来实现这种内在的随机性。

不严谨的解释:SAC跟TD3的主要区别就是SAC加入了entropy-regularization来增加早期训练探索性,防止过早收敛至局部最优,这导致需要对V值和Q值重新定义一下。没错!entropy-regularization只是一种增加探索性的trick,跟noisy net、epsilon greedy、boltzmann一样!下面的重点就是entropy-regularization,主要难点在于引入entropy-regularization后,算法的函数(V和Q)都要改一下,不过变动不大。

​  SAC的核心特征是entropy regularization。policy通过权衡最大化return的期望和entropy进行训练,在策略中有一定量的随机性。这与探索性和样本利用率之间的权衡有着密切关联:entropy的增加可以导致更多的探索性,这可以加速以后的学习,并且可以防止策略过早收敛到不理想的局部最优点。
​  SAC关键点:off-policy算法、仅被用作连续动作空间环境、稍微改变SAC policy更新规则后可用作解决离散动作空间环境。

2. Entropy-Regularized RL

​  首先解释entropy-regularization。熵(entropy)是一个量,粗略地说,其表示一个随机变量的随机程度,熵低随机度低,熵高随机度高。令 x x x为质量或密度概率密度 P ( x ) P(x) P(x)的一个随机自变量。那么 x x x的熵 H H H能够被计算为:
H ( P ) = − ∑ x ∼ P P ( s ) log ⁡ P ( s ) H(P)=-\sum_{x{\sim}P}P(s){\log}P(s) H(P)=xPP(s)logP(s)写成期望形式: H ( P ) = E x ~ P [ − log ⁡ P ( s ) ] H(P)=E_{x~P}[-{\log}P(s)] H(P)=ExP[logP(s)]在policy gradient中,每步都有若干以不同几率执行的action,每个action执行完后都有对应的reward。entropy-regularized RL将该reward加上一个熵entropy用于增加其随机性。从而在一个episode中,优化目标是找到一个policy最大化return,该return则由这些加熵后的reward组合而成(discounted cumulative entropy-reward)。从而RL中的policy求解问题变为:
π ∗ = 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)))]其中 α > 0 \alpha>0 α0是一个熵增超参数,该值越大,熵越高,探索性就越高。基于此改动,critic输出的两个值函数也要相应作更正:
V π ( s ) = E τ ~ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ∣ s 0 = s ] V^{\pi}(s)=E_{\tau~\pi}[\sum_{t=0}^{∞}\gamma^t(R(s_t,a_t,s_{t+1})+{\alpha}H(\pi(·|s_t)))|s_0=s] Vπ(s)=Eτπ[t=0γt(R(st,at,st+1)+αH(π(st)))s0=s] Q π ( s , a ) = E τ ~ π [ ∑ t = 0 ∞ γ t R ( s t , a t , s t + 1 ) + α ∑ t = 1 ∞ γ t H ( π ( ⋅ ∣ s t ) ) ) ∣ s 0 = s . a 0 = a ] 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)))|s_0=s.a_0=a] Qπ(s,a)=Eτπ[t=0γtR(st,at,st+1)+αt=1γtH(π(st)))s0=s.a0=a]通过以上定义,利用贝尔曼方程,两个值函数的关系为: 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. SAC算法

知道Q函数定义后就能像TD3那样更新critic喽(在旧衍生版本的SAC中还有用到V函数的)

​  SAC同时训练学习一个policy π θ \pi_{\theta} πθ和两个Q functions Q ϕ 1 , Q ϕ 2 Q_{\phi_{1}},Q_{\phi_{2}} Qϕ1,Qϕ2(跟TD3一样)。且目前标准的SAC有两种变体:1)采用固定entropy-regularization参数 α \alpha α;2)在训练过程中利用entropy约束来变换entropy-regularization参数 α \alpha α。下面版本的SAC为第一种变体。当然SAC跟TD3不止entropy-regularization这一个区别,在接下来会继续从更新的角度阐述。

Learning Q

SAC与TD3相同点:

  • 利用MSBE最小化更新,通过对共享的目标方程作回归拟合(此处“共享”指的是两个Q function的回归拟合方程为同一个)。
  • 共享的目标方程通过目标Q网络计算而来,并且目标Q网络通过利用polyak平均训练过程的Q网络参数获得。
  • 共享的目标方程都利用了clipped double-Q的技巧

SAC与TD3不同点:

  • SAC的目标回归拟合方程还增加了一个熵正则项(entropy-regularization)。
  • SAC下一state的action来自于当前policy而不是TD3中的目标policy(也就是来自于relay buffer)。
  • SAC中没有应用TD3的target policy smoothing trick:对下一action加入服从裁剪标准正态分布的噪声以减少对Q值高估的可能性。SAC训练一个随机policy,可以理解为噪声源自于该随机性当中,其效果跟TD3采用的相当。

先用递归贝尔曼方程来表示熵正则化后的 Q π Q^{\pi} Qπ,然后用熵的定义重写:
Q π ( s , a ) = E s ′ ~ P [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) ) + α H ( π ( ⋅ ∣ s ′ ) ) ] = E s ′ ~ P [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) ) − α log ⁡ π ( a ′ ∣ 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(Q^{\pi}(s',a'))-{\alpha}{\log}\pi(a'|s')] Qπ(s,a)=EsP[R(s,a,s)+γ(Qπ(s,a))+αH(π(s))]=EsP[R(s,a,s)+γ(Qπ(s,a))αlogπ(as)]等式右侧是对下一states(采样自relay buffer)和下一actions(来自当前policy而非relay buffer)所求期望。期望可由样本近似为:
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))

将下一action a ′ a' a替换为 a ~ ′ \tilde{a}' a~,是为强调再下一actions必须从policy中重新采样(相反, r ′ r' r s ′ s' s​应该来自于replay buffer)

上面这一段笔者有点迷糊,直接照搬翻译的spinning up,等我搞懂了再编辑

​  SAC使用这种目标的样本近似来设置每个Q函数的MSBE损失。与TD3一样,SAC使用了clipped double-Q trick,并且采取两者之间最小Q值的作目标回归拟合方程。综上所述,SAC的Q网络损失函数为:
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]其中目标回归拟合方程为:
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))

Learning the Policy

​  Policy在对每个state的训练中应最大化return期望与entropy期望的和。因此,最大化 V π V^{\pi} Vπ的式子应被扩展为:
V π ( s ) = E α ∼ π [ Q π ( s , a ) + α H ( π ( ⋅ ∣ s ) ) ] = E α ∼ π [ Q π ( s , a ) − α log ⁡ ( π ( a ∣ s ) ) ] V^{\pi}(s)=E_{\alpha\sim\pi}[Q^{\pi}(s,a)+{\alpha}H(\pi(·|s))] =E_{\alpha\sim\pi}[Q^{\pi}(s,a)-{\alpha}\log(\pi(a|s))] Vπ(s)=Eαπ[Qπ(s,a)+αH(π(s))]=Eαπ[Qπ(s,a)αlog(π(as))]最优化该值的方式利用了reparameterization trick。其中,通过计算状态、策略参数和独立噪声的确定型函数,从 π θ ( ⋅ ∣ s ) \pi_{\theta}(\cdot|s) πθ(s)中抽取样本。说明:为遵循SAC原文,使用压缩高斯策略,这意味着样本的获取根据: a ~ θ ( s , ξ ) = tanh ⁡ ( μ θ ( s ) + σ θ ( s ) ⊙ ξ ) ,            ξ ∼ N ( 0 , I ) . \tilde{a}_{\theta}(s, \xi) = \tanh\left( \mu_{\theta}(s) + \sigma_{\theta}(s) \odot \xi \right), \;\;\;\;\; \xi \sim \mathcal{N}(0, I). a~θ(s,ξ)=tanh(μθ(s)+σθ(s)ξ),ξN(0,I).

这个方法与使用在其它policy optimization中的方法有两个关键不同:

  • The squashing function:SAC policy中的tanh函数使得actions被约束在有限边界之内,这是VPG/TRPO/PPO都没有用到的。这改变了action的分布:在使用tanh之前,SAC像算法一样是factored gaussion分布,但在tanh处理之后就不是了。
  • The way standard deviations are parameterized:在VPG、TRPO和PPO中,利用状态独立的参数向量表示对数标准差。在SAC中将对数标准差作为神经网络的输出,这意味着对数标准差以一种复杂方式依赖于状态。拥有状态独立对数标准差的SAC,在我们的经验中,不能很好的工作。

​  reparameterization trick允许我们将对actions的期望(包含一个痛点:actions的分布取决于policy的参数)重写为对噪声的期望(这消除了痛点:分布现在不取决于参数):
E a ∼ π θ Q π θ ( s , a ) − α log ⁡ π θ ( a ∣ s ) = E ξ ∼ N Q π θ ( s , a ~ θ ( s , ξ ) ) − α log ⁡ π θ ( a ~ θ ( s , ξ ) ∣ s ) E_{a \sim \pi_{\theta}}{Q^{\pi_{\theta}}(s,a) - \alpha \log \pi_{\theta}(a|s)} = E_{\xi \sim \mathcal{N}}{Q^{\pi_{\theta}}(s,\tilde{a}_{\theta}(s,\xi)) - \alpha \log \pi_{\theta}(\tilde{a}_{\theta}(s,\xi)|s)} EaπθQπθ(s,a)αlogπθ(as)=EξNQπθ(s,a~θ(s,ξ))αlogπθ(a~θ(s,ξ)s)
​  为获得策略损失,最后一步是我们需要去用一个函数逼近器替换 Q π θ Q^{\pi_\theta} Qπθ
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,\xi)) - \alpha \log \pi_{\theta}(\tilde{a}_{\theta}(s,\xi)|s)]} θmaxEsD,ξN[j=1,2minQϕj(s,a~θ(s,ξ))αlogπθ(a~θ(s,ξ)s)]  SAC通过entropy regularization的方式训练随机性policy,并处于on-policy的方式进行探索。entropy regularization的参数 α \alpha α​具体控制着样本利用率和探索性的平衡,参数设置越高意味着探索性越高,参数设置越低意味着样本利用率越高,实作中应根据具体环境进行仔细调参。

4. 伪代码

在这里插入图片描述


参考资料为:OpenAI Spinning up SAC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值