【深度强化学习】#6 Soft Actor-Critic:最大熵与重参数化技巧
从DDPG到TD3,Actor-Critic方法围绕确定性策略在处理连续动作空间问题上走向了高峰,但确定性策略这一核心也成为了其进一步发展的瓶颈。在确定性策略下,智能体的探索严重依赖人为添加到动作的外部噪声,既引入了更繁琐的超参数调优,又从本质上限制了智能体在复杂环境中进行多样化探索的能力。为此,SAC应运而生。
SAC
SAC(Soft Actor-Critic,软演员-评论家)继承了TD3的技术精华,并将其转换为随机性策略的范式,从而提升了探索能力、样本效率和稳定性。
最大熵强化学习
SAC首先通过最大熵强化学习解决了策略网络在训练过程中逐渐降低探索性的问题。
最大熵强化学习向目标函数引入了策略的熵,用于衡量策略的随机性。对于原始的策略梯度,其目标是最大化期望累积奖励
J(θ)=E(st,at)∼ρπ[∑t=0Tγtr(st,at)] J(\theta)=\mathbb E_{(s_t,a_t)\sim\rho_\pi}\left[\sum^T_{t=0}\gamma^tr(s_t,a_t)\right] J(θ)=E(st,at)∼ρπ[t=0∑Tγtr(st,at)]
而SAC的目标是在最大化累积奖励的同时,最大化策略的熵,以鼓励探索
J(θ)=E(st,at)∼ρπ[∑t=0Tγt(r(st,at)+αH(πθ(⋅∣st)))] J(\theta)=\mathbb E_{(s_t,a_t)\sim\rho_\pi}\left[\sum^T_{t=0}\gamma^t(r(s_t,a_t)+\alpha\mathcal H(\pi_\theta(\cdot|s_t)))\right] J(θ)=E(st,at)∼ρπ[t=0∑Tγt(r(st,at)+αH(πθ(⋅∣st)))]
其中H(π(⋅∣s))\mathcal H(\pi(\cdot|s))H(π(⋅∣s))是策略π\piπ在状态sss下的熵
H(π(⋅∣s))=−Ea∼π[logπ(a∣s)]=−∫π(a∣s)logπ(a∣s)da \begin{split} \mathcal H(\pi(\cdot|s))&=-\mathbb E_{a\sim\pi}[\log\pi(a|s)]\\ &=-\int\pi(a|s)\log\pi(a|s)\mathrm da \end{split} H(π(⋅∣s))=−Ea∼π[logπ(a∣s)]=−∫π(a∣s)logπ(a∣s)da
观察−xlogx-x\log x−xlogx(以2为底)的函数图像,可知最大化策略的熵的效果就是让动作的概率向“中间”靠拢,即趋于均匀分布。随着底数的增大,函数的极值将变小,最大化目标对策略随机性的激励强度也将变小。

根据对数换底公式,底数的影响可以被吸收进温度参数α\alphaα中。α\alphaα越大,目标越鼓励策略的随机性,而底数在实际实现中通常采用自然常数eee。温度系数α\alphaα最简单的设置方法即手动调优,根据不同问题下策略的收敛速度和随机性设定。现代SAC常用自动熵调整,通过最小化损失函数L(α)=α(logπ(a∣s)+H~)L(\alpha)=\alpha(\log\pi(a|s)+\tilde{\mathcal H})L(α)=α(logπ(a∣s)+H~)学习,其中H~\tilde{\mathcal H}H~是人为设定的目标熵,根据经验通常设为−dim(A)-\mathrm{dim}(\mathcal A)−dim(A),即负的动作空间维度,以鼓励策略在每个动作维度上接近均匀分布。
对于新的策略评估方式,SAC也定义了新的Q函数,称为soft Q函数
Qsoftπ(st,at)=˙E(st,at)∼ρπ[r(st,at)+∑k=1Tγk(r(st+k,rt+k)+αH(π(⋅∣st+k)))] Q_{\mathrm{soft}}^\pi(s_t,a_t)\dot=\mathbb E_{(s_t,a_t)\sim\rho_\pi}\left[r(s_t,a_t)+\sum^T_{k=1}\gamma^k(r(s_{t+k},r_{t+k})+\alpha\mathcal H(\pi(\cdot|s_{t+k})))\right] Qsoftπ(st,at)=˙E(st,at)∼ρπ[r(st,at)+k=1∑Tγk(r(st+k,rt+k)+αH(π(⋅∣st+k)))]
soft Q函数将策略的熵同样视为一种奖励,融入在sts_tst执行动作ata_tat后能获得的期望累积回报当中,而Critic网络也将直接学习如何给出soft Q函数的估计值。soft Q函数不包含αH(π(⋅∣st))\alpha\mathcal H(\pi(\cdot|s_{t}))αH(π(⋅∣st)),是因为它由sts_tst决定而与ata_tat无关。
现在,我们可以将目标函数写为
J(θ)=Es∼ρπ,a∼πθ[Qsoftπ(s,a)+αH(πθ(⋅∣s))] J(\theta)=\mathbb E_{s\sim\rho_\pi,a\sim\pi_\theta}\left[Q^{\pi}_{\mathrm{soft}}(s,a)+\alpha\mathcal H(\pi_\theta(\cdot|s))\right] J(θ)=Es∼ρπ,a∼πθ[Qsoftπ(s,a)+αH(πθ(⋅∣s))]
(关于目标函数的状态-动作是否带下标t,这取决于我们是从整条轨迹的视角,还是从静态分布的视角来理解。通常轨迹视角使用求和形式,而静态分布视角使用价值函数形式)
根据策略梯度定理的一般形式,我们有目标函数的梯度
∇θJ(θ)=Es∼ρπ,a∼πθ[∇θlnπθ(a∣s)Qsoftπ(s,a)]+Es∼ρπ[∇θαH(πθ(⋅∣s))] \nabla_\theta J(\theta)=\mathbb E_{s\sim\rho_\pi,a\sim\pi_\theta}\left[\nabla_\theta\ln\pi_\theta(a|s)Q^{\pi}_{\mathrm{soft}}(s,a)]+\mathbb E_{s\sim\rho_\pi}[\nabla_\theta\alpha\mathcal H(\pi_\theta(\cdot|s))\right] ∇θJ(θ)=Es∼ρπ,a∼πθ[∇θlnπθ(a∣s)Qsoftπ(s,a)]+Es∼ρπ[∇θαH(πθ(⋅∣s))]
重参数化技巧
SAC又利用重参数化技巧从动作采样这一根源上降低了方差。
在DPG一章中,我们推导出确定性策略梯度定理如下
∇θJ(θ)=Es∼ρμθ[∇θμθ(s)∇aQμθ(s,a)∣a=μθ(s)] \nabla_\theta J(\theta)=\mathbb E_{s\sim\rho^{\mu_\theta}}[\nabla_\theta\mu_\theta(s)\nabla_aQ^{\mu_\theta}(s,a)|_{a=\mu_\theta(s)}] ∇θJ(θ)=Es∼ρμθ[∇θμθ(s)∇aQμθ(s,a)∣a=μθ(s)]
但是在Actor-Critic一章中,同样对于Q函数,我们使用的随机性策略梯度定理为
∇θJ(θ)=Es∼ρπ,a∼πθ[∇θlnπθ(a∣s)Q(s,a)] \nabla_\theta J(\theta)=\mathbb E_{s\sim\rho_\pi,a\sim\pi_\theta}[\nabla_\theta\ln\pi_\theta(a|s)Q(s,a)] ∇θJ(θ)=Es∼ρπ,a∼πθ[∇θlnπθ(a∣s)Q(s,a)]
对比发现,之前的随机性策略算法只关注了θ\thetaθ对πθ\pi_\thetaπθ的梯度,却没有利用θ→πθ→a→Q(s,a)\theta\rightarrow\pi_\theta\rightarrow a\rightarrow Q(s,a)θ→πθ→a→Q(s,a)这条路径的梯度。这是因为在随机性策略梯度的推导中,我们用采样得到的回报G(τ)G(\tau)G(τ)代替了真实函数Q(s,a)Q(s,a)Q(s,a),二者在期望意义下是等价的。如果直接计算Q(s,a)Q(s,a)Q(s,a)对aaa的梯度,我们就无法消去环境动态特性p(st+1∣st,at)p(s_{t+1}|s_t,a_t)p(st+1∣st,at),进而无法将梯度算符∇\nabla∇移到期望中,而环境动态特性通常是未知的。但是放弃利用动作梯度的信息而仅仅依赖采样拟合的代价就是高方差。
重参数化技巧通过规范策略的参数化形式,切断了采样随机性和策略网络参数θ\thetaθ之间的关系,打通了一条完全确定的梯度传播路径。我们通常采用高斯分布作为策略的形式,因为这符合我们对连续控制任务的直觉,也易于数学上的计算和随机性的调节。此时动作的分布为
a∼N(μθ(s),σθ(s)2) a\sim\mathcal N(\mu_\theta(s),\sigma_\theta(s)^2) a∼N(μθ(s),σθ(s)2)
策略网络将以状态sss为输入,输出高斯分布的均值μ\muμ和标准差σ\sigmaσ。而为了让随机性与参数θ\thetaθ无关,我们变换该分布如下
KaTeX parse error: Too many tab characters: & at position 83: …s)\cdot\epsilon&̲\\ &\quad\epsil…
由此,我们不再直接采样动作aaa,而是先从一个固定的、与参数θ\thetaθ无关的基础分布(如标准正态分布N(0,1)\mathcal N(0,1)N(0,1))中采样一个随机噪声ϵ\epsilonϵ,再通过一个确定的、可微的变换构造出动作aaa。
策略梯度推导
结合重参数化技巧,我们重新得到SAC的目标函数为
J(θ)=Es∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))+αH(πθ(fθ(ϵ;s)∣s))]=Es∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s)] \begin{split} J(\theta)&=\mathbb E_{s\sim\rho_\pi,\epsilon\sim\mathcal N}\left[Q^{\pi}_{\mathrm{soft}}(s,f_\theta(\epsilon;s))+\alpha\mathcal H(\pi_\theta(f_\theta(\epsilon;s)|s))\right]\\ &=\mathbb E_{s\sim\rho_\pi,\epsilon\sim\mathcal N}\left[Q^{\pi}_{\mathrm{soft}}(s,f_\theta(\epsilon;s))-\alpha\log\pi_\theta(f_\theta(\epsilon;s)|s)\right] \end{split} J(θ)=Es∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))+αH(πθ(fθ(ϵ;s)∣s))]=Es∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s)]
需要辨析的是,fθ(ϵ;s)f_\theta(\epsilon;s)fθ(ϵ;s)和πθ\pi_\thetaπθ都源于同一个策略,区别在于fθ(ϵ;s)f_\theta(\epsilon;s)fθ(ϵ;s)是一个动作生成器,负责采样;而πθ\pi_\thetaπθ是一个概率分布函数,负责评估动作的概率。
现在SAC的策略梯度为
∇θJ(θ)=∇θEs∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s)]=Es∼ρπ,ϵ∼N[∇θ(Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s))] \begin{split} \nabla_\theta J(\theta)&=\nabla_\theta\mathbb E_{s\sim\rho_\pi,\epsilon\sim\mathcal N}\left[Q^{\pi}_{\mathrm{soft}}(s,f_\theta(\epsilon;s))-\alpha\log\pi_\theta(f_\theta(\epsilon;s)|s)\right]\\ &=\mathbb E_{s\sim\rho_\pi,\epsilon\sim\mathcal N}\left[\nabla_\theta(Q^{\pi}_{\mathrm{soft}}(s,f_\theta(\epsilon;s))-\alpha\log\pi_\theta(f_\theta(\epsilon;s)|s))\right] \end{split} ∇θJ(θ)=∇θEs∼ρπ,ϵ∼N[Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s)]=Es∼ρπ,ϵ∼N[∇θ(Qsoftπ(s,fθ(ϵ;s))−αlogπθ(fθ(ϵ;s)∣s))]
Soft Q函数的梯度根据链式法则有
∇θ(Qsoftπ(s,fθ(ϵ;s)))=∇aQsoftπ(s,a)∣a=fθ(ϵ;s)⋅∇θfθ(ϵ;s) \nabla_\theta(Q^{\pi}_{\mathrm{soft}}(s,f_\theta(\epsilon;s)))=\nabla_aQ^\pi_{\mathrm{soft}}(s,a)|_{a=f_\theta(\epsilon;s)}\cdot\nabla_\theta f_\theta(\epsilon;s) ∇θ(Qsoftπ(s,fθ(ϵ;s)))=∇aQsoftπ(s,a)∣a=fθ(ϵ;s)⋅∇θfθ(ϵ;s)
熵的梯度
∇θ(−αlogπθ(fθ(ϵ;s)∣s))=−α∇θlogπθ(fθ(ϵ;s)∣s) \nabla_\theta(-\alpha\log\pi_\theta(f_\theta(\epsilon;s)|s))=-\alpha\nabla_\theta\log\pi_\theta(f_\theta(\epsilon;s)|s) ∇θ(−αlogπθ(fθ(ϵ;s)∣s))=−α∇θlogπθ(fθ(ϵ;s)∣s)
logπθ(fθ(ϵ;s)∣s)\log\pi_\theta(f_\theta(\epsilon;s)|s)logπθ(fθ(ϵ;s)∣s)是aaa和θ\thetaθ的函数,同样根据链式法则有
∇θlogπθ(fθ(ϵ;s)∣s)=∇θlogπθ(a∣s)∣a=fθ(ϵ;s)+∇alogπθ(a∣s)∣a=fθ(ϵ;s)⋅∇θfθ(ϵ;s) \nabla_\theta\log\pi_\theta(f_\theta(\epsilon;s)|s)=\nabla_\theta\log\pi_\theta(a|s)|_{a=f_\theta(\epsilon;s)}+\nabla_a\log\pi_\theta(a|s)|_{a=f_\theta(\epsilon;s)}\cdot\nabla_\theta f_\theta(\epsilon;s) ∇θlogπθ(fθ(ϵ;s)∣s)=∇θlogπθ(a∣s)∣a=fθ(ϵ;s)+∇alogπθ(a∣s)∣a=fθ(ϵ;s)⋅∇θfθ(ϵ;s)
其中第一项是保持动作aaa不变时,策略概率关于θ\thetaθ的梯度;第二项是θ\thetaθ引起动作aaa改变对策略概率的梯度。
第一项梯度对于任意给定的状态sss期望为零,证明如下
Ea∼πθ[∇θlogπθ(a∣s)]=∫πθ(a∣s)⋅∇θlogπθ(a∣s)da(自然对数导数性质)=∫πθ(a∣s)⋅∇θπθ(a∣s)πθ(a∣s)da=∫∇θπθ(a∣s)da(梯度变量与积分变量不一致时,梯度算符可提出)=∇θ∫πθ(a∣s)da(概率分布的归一化条件)=∇θ1=0 \begin{split} \mathbb E_{a\sim\pi_\theta}[\nabla_\theta\log\pi_\theta(a|s)]&=\int\pi_\theta(a|s)\cdot\nabla_\theta\log\pi_\theta(a|s)\mathrm da\\ \text{(自然对数导数性质)}&=\int\pi_\theta(a|s)\cdot\frac{\nabla_\theta\pi_\theta(a|s)}{\pi_\theta(a|s)}\mathrm da\\ &=\int\nabla_\theta\pi_\theta(a|s)\mathrm da\\ \text{(梯度变量与积分变量不一致时,梯度算符可提出)}&=\nabla_\theta\int\pi_\theta(a|s)\mathrm da\\ \text{(概率分布的归一化条件)}&=\nabla_\theta1=0 \end{split} Ea∼πθ[∇θlogπθ(a∣s)](自然对数导数性质)(梯度变量与积分变量不一致时,梯度算符可提出)(概率分布的归一化条件)=∫πθ(a∣s)⋅∇θlogπθ(a∣s)da=∫πθ(a∣s)⋅πθ(a∣s)∇θπθ(a∣s)da=∫∇θπθ(a∣s)da=∇θ∫πθ(a∣s)da=∇θ1=0
最终我们得到SAC完整的策略梯度如下
∇θJ(θ)=Es∼ρπ,ϵ∼N[(∇aQsoftπ(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s)] \nabla_\theta J(\theta)=\mathbb E_{s\sim\rho_\pi,\epsilon\sim\mathcal N}\left[(\nabla_aQ^\pi_{\mathrm{soft}}(s,a)|_{a=f_\theta(\epsilon;s)}-\alpha\nabla_a\log\pi_\theta(a|s)|_{a=f_\theta(\epsilon;s)})\cdot\nabla_\theta f_\theta(\epsilon;s)\right] ∇θJ(θ)=Es∼ρπ,ϵ∼N[(∇aQsoftπ(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s)]
随机梯度更新采用的梯度则为
∇θJ(θ)=(∇aQsoftπ(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s) \nabla_\theta J(\theta)=(\nabla_aQ^\pi_{\mathrm{soft}}(s,a)|_{a=f_\theta(\epsilon;s)}-\alpha\nabla_a\log\pi_\theta(a|s)|_{a=f_\theta(\epsilon;s)})\cdot\nabla_\theta f_\theta(\epsilon;s) ∇θJ(θ)=(∇aQsoftπ(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s)
网络框架
在其他技术细节上,SAC继承了TD3算法。网络框架上,SAC拥有一个Actor网络和双Critic-Q网络,以及它们各自的目标网络,并且目标网络的更新方式为软更新。但研究表明TD3中的延迟策略更新在SAC中效果并不显著,甚至会减慢策略的适应速度进而降低性能,因此没有被采用。
每个Q网络Qwj(s,a)Q_{w_j}(s,a)Qwj(s,a)的目标值为(由目标网络计算)
yt=r(st,at)+γ(minj=1,2Qwj′′(st+1,fθ′′(ϵ;st+1))−αlogπθ′′(fθ′′(ϵ;st+1)∣st+1)) y_t=r(s_t,a_t)+\gamma\left(\min_{j=1,2}Q'_{w_j'}(s_{t+1},f'_{\theta'}(\epsilon;s_{t+1}))-\alpha\log\pi'_{\theta'}(f'_{\theta'}(\epsilon;s_{t+1})|s_{t+1})\right) yt=r(st,at)+γ(j=1,2minQwj′′(st+1,fθ′′(ϵ;st+1))−αlogπθ′′(fθ′′(ϵ;st+1)∣st+1))
Actor网络的策略梯度为(由主网络计算)
∇θJ(θ)=(∇aQw1(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s) \nabla_\theta J(\theta)=(\nabla_aQ_{w_1}(s,a)|_{a=f_\theta(\epsilon;s)}-\alpha\nabla_a\log\pi_\theta(a|s)|_{a=f_\theta(\epsilon;s)})\cdot\nabla_\theta f_\theta(\epsilon;s) ∇θJ(θ)=(∇aQw1(s,a)∣a=fθ(ϵ;s)−α∇alogπθ(a∣s)∣a=fθ(ϵ;s))⋅∇θfθ(ϵ;s)
原始的SAC算法还使用了一个Critic-V网络,它用于估计Q网络除了r(st,at)r(s_t,a_t)r(st,at)的部分,进而计算Q网络的目标值
y=r(st,at)+γV(st+1) y=r(s_t,a_t)+\gamma V(s_{t+1}) y=r(st,at)+γV(st+1)
而双Q网络则用于计算V网络的目标值。但这仅仅是为了构建贝尔曼方程的形式,实现理论上的优雅。后来作者发现V网络是多余的,移除V网络可以降低算法复杂度、避免更多估计误差,算法性能却相当甚至更好。
算法流程
SAC的算法流程如下:
- 初始化
- Actor网络πθ(a∣s)\pi_\theta(a|s)πθ(a∣s)和Critic网络Qw1(s,a)Q_{w_1}(s,a)Qw1(s,a),Qw2(s,a)Q_{w_2}(s,a)Qw2(s,a);
 - 目标Actor网络πθ′′(a∣s)\pi_{\theta'}'(a|s)πθ′′(a∣s)和目标Critic网络Qw1′′(s,a)Q_{w_1'}'(s,a)Qw1′′(s,a),Qw2′′(s,a)Q_{w_2'}'(s,a)Qw2′′(s,a),参数分别从主网络复制而来;
 - 经验回放缓存区RRR;
 - 超参数:温度系数α\alphaα,动作选择器噪声ϵ∼N(0,I)\epsilon\sim\mathcal N(0,I)ϵ∼N(0,I)。
 
 - 循环(每一幕)
- 初始化状态s1s_1s1;
 - 循环(每个时间步ttt)
- 由动作选择器(主网络)采样动作at=fθ(ϵ;st)a_t=f_\theta(\epsilon;s_t)at=fθ(ϵ;st),得到奖励rtr_trt和后继状态st+1s_{t+1}st+1;
 - 将转移样本(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})(st,at,rt,st+1)存入回放缓冲区RRR;
 - 如果样本数量∣R∣⩾N|R|\geqslant N∣R∣⩾N,则随机采样一个小批量的NNN个转移样本(si,ai,ri,si+1)(s_i,a_i,r_i,s_{i+1})(si,ai,ri,si+1);
 - 对每个转移样本(si,ai,ri,si+1)(s_i,a_i,r_i,s_{i+1})(si,ai,ri,si+1),由动作选择器(目标网络)采样下一个动作ai′=fθ′′(ϵ;si+1)a_i'=f'_{\theta'}(\epsilon;s_{i+1})ai′=fθ′′(ϵ;si+1),并计算其对数概率logπθ′′(ai′∣si+1)\log\pi'_{\theta'}(a_i'|s_{i+1})logπθ′′(ai′∣si+1);
 - 计算样本批量的平均梯度更新每个Critic网络wt+1(j)=wt(j)−αw(j)1N∑i=1N[(yi−Qw(j)(si,ai))⋅∇w(j)Qw(j)(si,ai)]w_{t+1}^{(j)}=w_t^{(j)}-\alpha_{w^{(j)}}\frac1N\sum_{i=1}^N[(y_i-Q_{w^{(j)}}(s_i,a_i))\cdot\nabla_{w^{(j)}}Q_{w^{(j)}}(s_i,a_i)]wt+1(j)=wt(j)−αw(j)N1i=1∑N[(yi−Qw(j)(si,ai))⋅∇w(j)Qw(j)(si,ai)]
 - 计算样本批量的平均梯度更新Actor网络θt+1=θt+αθ1N∑i=1N∇θJi(θ)\theta_{t+1}=\theta_t+\alpha_\theta\frac1N\sum_{i=1}^N\nabla_\theta J_i(\theta)θt+1=θt+αθN1i=1∑N∇θJi(θ)
 - 软更新目标网络θ′←τθ+(1−τ)θ′wj′←τwj+(1−τ)wj′\begin{split}\theta'\leftarrow\tau\theta+(1-\tau)\theta'\\w_j'\leftarrow\tau w_j+(1-\tau)w_j'\end{split}θ′←τθ+(1−τ)θ′wj′←τwj+(1−τ)wj′
 
 
 - 直到Actor网络和Critic网络收敛。
 
