2018 年被提出的 Soft Actor-Critic (SAC) 是最大熵强化学习的代表作。它从 2017 年的 Soft Q-Learning 改进而来,在无模型的在线强化学习算法中,SAC 是一种非常高效且稳定的算法,至今仍被广泛使用。
最大熵强化学习
熵 (entropy) 是对随机变量的随机程度的度量。对于连续随机变量,我们通常使用微分熵。在此后的讨论中,如果没有明确说明,我们默认熵指的是微分熵,随机变量指的是连续随机变量。
香农熵的某些性质在连续随机变量和微分熵上并不成立,例如微分熵可以是负数。在使用微分熵时,要注意这些性质的变化。
如果 X 是一个连续随机变量,并且它的概率密度函数为 p,那么它的微分熵就定义为
H(X)=Ex∼p[−logp(x)]
在强化学习中,我们可以使用 H(π(⋅∣s)) 来表示策略 π 在状态 s 下的随机程度。
最大熵强化学习 (maximum entropy RL) 的核心思想是,为了鼓励策略进行探索,除了要求最大化累积奖励,还要使得策略更随机。为此,在强化学习的目标中加入一项熵的正则项,定义为
π∗=argπmaxEπ[t∑r(st,at)+αH(π(⋅∣st))]
其中,α 是一个正则化的系数,用来控制熵的重要程度。
熵强化学习增强了强化学习算法的探索程度,α 越大,探索性就越强,有助于加速后续的策略学习,并减少策略陷入较差的局部最优的可能性。
软策略迭代
重复交替使用软策略评估和软策略提升,最终策略可以收敛到最大熵强化学习目标中的最优策略。
软策略评估
在最大熵强化学习框架中,由于目标函数发生了变化,其他的一些定义也有相应的变化。贝尔曼方程变为软贝尔曼方程 (Soft Bellman Equation):
Q(st,at)=r(st,at)+γEst+1[V(st+1)]
其中,状态价值函数为
V(st)=Eat∼π[Q(st,at)−αlogπ(at∣st)]=Eat∼π[Q(st,at)]+H(π(⋅∣st))
软策略评估定理的证明
假定动作空间 ∣A∣<∞ (为了保证熵增强奖励是有界的),定义熵增强奖励为:
rπ(st,at)≜r(st,at)+Est+1∼p[H(π(⋅∣st+1))]
并将更新规则重写为:
Q(st,at)←rπ(st,at)+γEst+1∼p,at+1∼π[Q(st+1,at+1)]
可以通过《Reinforcement learning: An introduction》(Sutton, R. S. and Barto, A. G., 1998) 中的策略评估收敛性完成证明。
软策略提升
有如下软策略提升公式:
πnew=argπ′minDKL(π′(⋅∣s),Zπold(s,⋅)exp(α1Qπold(s,⋅)))
或者说
πnew=Zπold(s,⋅)exp(α1Qπold(s,⋅))
软策略提升定理的证明
我们首先证明如下的引理:
H(πold(⋅∣s))+Ea∼πold[Qsoftπold(s,a)]≤H(πnew(⋅∣s))+Ea∼πnew[Qsoftπold(s,a)]
因为
logπnew(a∣s)=Qsoftπold(s,a)−log∫exp(Qsoftπold(s,a′))da′
对两边同时对 πold 取期望得到
∫πold(a∣s)logπnew(a∣s)da=Eπold[Qsoftπold(s,a)]−log∫exp(Qsoftπold(s,a′))da′
右边最后一项与 πold 无关所以取期望后不变。所以有:
========≤H(πold(⋅∣s))+Eπold[Qsoftπold(s,a)]−∫πold(a∣s)logπold(a∣s)da+Eπold[Qsoftπold(s,a)]−∫πold(a∣s)logπold(a∣s)da+∫πold(a∣s)logπnew(a∣s)da+log∫exp(Qsoftπold(s,a′))da′−∫πold(a∣s)logπnew(a∣s)πold(a∣s)da+log∫exp(Qsoftπ(s,a′))da′−DKL(πold∥πnew)+log∫exp(Qsoftπold(s,a))da−DKL(πold∥πnew)+logπnew(a∣s)exp(Qsoftπold(s,a))−DKL(πold∥πnew)+∫πnew(a∣s)logπnew(a∣s)exp(Qsoftπold(s,a))da−DKL(πold∥πnew)+∫πnew(a∣s)Qsoftπold(s,a)da−∫πnew(a∣s)logπnew(a∣s)da−DKL(πold∥πnew)+Eπnew[Qsoftπold(s,a)]+H(πnew(⋅∣s))Eπnew[Qsoftπold(s,a)]+H(πnew(⋅∣s))
在上述引理的基础上有:
Qsoftπ(s,a)=Es1[r0+γ(H(π(⋅∣s1))+Ea1∼π[Qsoftπ(s1,a1)])]≤Es1[r0+γ(H(π~(⋅∣s1))+Ea1∼π~[Qsoftπ(s1,a1)])]=Es1[r0+γ(H(π~(⋅∣s1))+r1)]+γ2Es2[H(π(⋅∣s2))+Ea2∼π[Qsoftπ(s2,a2)]]≤Es1[r0+γ(H(π~(⋅∣s1))+r1]+γ2Es2[H(π~(⋅∣s2))+Ea2∼π~[Qsoftπ(s2,a2)]]=Es1a2∼π~,s2[r0+γ(H(π~(⋅∣s1))+r1)+γ2(H(π~(⋅∣s2))+r2)]+γ3Es3[H(π~(⋅∣s3))+Ea3∼π~[Qsoftπ(s3,a3)]]⋮≤Eτ∼π~[r0+t=1∑∞γt(H(π~(⋅∣st))+rt)]=Qsoftπ~(s,a).
损失函数
原始论文中的 SAC 除了 Q 函数之外,还会学习一个值函数 Vψ;但是在更现代的实现中则只学习 Q 函数。本文介绍后者。
SAC 进一步拓展了目标网络和 DDQN 的思想,使用两个网络 Qω1,Qω2 来估计 Q 函数,在每次使用 Q 值时,选择两个网络中 Q 值较小的那个;同时,两个网络分别具有目标网络 Qω1−,Qω2−,用于计算目标 Q 值。策略则被策略网络 πθ 建模为高斯分布,使用重参数化技巧进行采样。
任意一个 Q 网络损失函数为:
==LQ(ω)E(st,at,rt,st+1)∼R[21(Qω(st,at)−(rt+γVω−(st+1)))2]E(st,at,rt,st+1)∼R,at+1∼πθ(⋅∣st+1)[21(Qω(st,at)−(rt+γ(j=1,2minQωj−(st+1,at+1)−αlogπ(at+1∣st+1))))2]
其中,R 是策略过去收集的数据 (从 Replay Buffer 中提取)。
π 的损失函数由 KL 散度得到,化简后为:
Lπ(θ)=Est∼R,at∼πθ[αlog(πθ(at∣st))−Qω(st,at)]
可以理解为最大化函数 V,因为有 V(st)=Eat∼π[Q(st,at)−αlogπ(at∣st)]。
熵正则项的自动调节
SAC 也有固定熵正则项系数的版本。但是自动调整的版本性能更好。
一些文献也将熵正则项系数 α 称为温度系数 (temperature parameter), 但是强化学习中充斥着各种意义不同的被称为温度的参数,本文尽量采取更加明确的说法。
熵正则项的系数 α 是 SAC 中非常重要的一个参数。在不同的状态下需要不同大小的熵:
- 在最优动作不确定的某个状态下,熵的取值应该大一点
- 在最优动作比较确定的状态下,熵的取值可以小一点
因此,比较合适的选择是对 α 进行自动调节。为了自动调整熵正则项,SAC 将强化学习的目标改写为一个带约束的优化问题 (其中 ρπ 表示策略 π 采样得到的状态动作对的分布):
πmaxEπ[t∑r(st,at)]s.t.E(st,at)∼ρπ[−log(πt(at∣st))]≥H0
也就是最大化期望回报,同时约束熵的均值大于 H0。化简得到 α 的损失函数:
L(α)=Est∼R,at∼π(−∣st)[−αlogπ(at∣st)−αH0]
即当策略的熵低于目标值 H0 时,训练目标 L(α) 会使得 α 的值增大,进而在最小化上述损失函数 Lπ(θ) 的过程中增加了策略熵对应项的重要性;而当策略的熵高于目标值 H0 时,训练目标 L(α) 会使得 α 的值减小,进而使得策略训练时更专注于价值提升。