SAC论文地址:点这里
Soft Q-learning论文地址:点这里
SAC算法及其应用论文:点这里
学习参考:SAC
作者源码,点这里
PyTorch源码地址,点这里
关于信息熵:
信息熵及信息量的公式
信息熵的概念
信息熵的取值范围
阅读目的:
SAC和TD3两篇文章发表时间很相近,有意思的是,双方在各自的论文里将自己的算法表现为优于对方。但无论怎么说,SAC作为一种新的强化学习算法,值得去学习。
SAC是一种最大化含熵目标的Off-policy算法,以标准Actor-Critic算法为框架,不同于DDPG,SAC学习的是随机性策略。
Soft Actor-Critic Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
Abstract
- 作者指出先前的Model-free算法具有采样难度大、不易收敛等特点。
- 因此本文旨在介绍一种Off-policy的AC算法——SAC。
- SAC以最大化含熵目标为优化对象。
- 作者指出:和其他Off-policy算法相比,SAC能取得更加稳定的效果。
1. Introduction
作者指出造成限制model-free算法面向真实task的主要原因有2个方面:
- 采样复杂度大,效率低。有些task需要成百上千的数据;有些task需要高维的数据(经验)来学习。造成这个问题的一个原因是有些算法是On-policy(在轨策略),比如REFORCEMENT、PPO、A3C等,对于每一步的梯度更新,它们都采用新采样的数据,用完就丢掉了,低效且浪费。我们都知道梯度下降(上升)有一个学习率
η
\eta
η,这个参数的存在使得不是一次就能达到目标的,需要在同一批数据上多次训练的。
因此,针对这一问题,可以采用Off-policy(离轨策略),离轨策略算法一般都有一个经验池 D \mathcal{D} D,我可以一边采集新策略,另一边可以从经验池里采mini-batch个经验进行离线训练,也就是说之前的经验我可以重复利用很多次,做到尽量不浪费。 - 难以调节超参数导致收敛问题。Model-free的算法对于超参数都十分敏感。有时候不同的task需要不同的超参数,甚至看上去相差不大的超参数,结果却是完全不同——一个收敛到接近全局最优,另一种可能就只是局部最优。
Note:
- Off-policy算法最大的问题在于稳定性较差,容易发散,特别是在连续动作空间task上。最典型的就是DDPG,它将Actor和Critic网络分开训练,2个网络又是相互依存的,其中一个的不准确就会导致另一个不准确,如此循环下去,势必会造成发散。因此DDPG训练就会存在不稳定,过拟合问题(TD3针对DDPG的不稳定性,制定了策略延迟更新、策略平滑来解决)。
- DDPG另一个问题就在于对超参数以及网络结构敏感,这种敏感使得你很难去针对不同task指定可泛化的超参数标准。
因此,针对提升采样效率和稳定性问题,作者提出了他的Off-plocy算法——SAC。
SAC算法采用最大含熵目标为优化对象,之前类似也有很多算法这么做,比如众所周知的SQL就是在经典累计奖励的基础上增加了信息熵这一项,以前对于每一个step,只有奖励
r
(
s
,
a
)
r(s,a)
r(s,a),现在多了个
H
(
π
(
⋅
∣
s
)
)
\mathcal{H}(\pi(\cdot|s))
H(π(⋅∣s))。
这一改变直接增加了算法的探索性以及鲁棒性。探索性体现在信息熵的最大化会使得输出的各个动作都会趋于平均,比如Uniform策略就是高熵值策略。鲁棒性体现在当我环境中出现难以避免的噪声,那么如果我采用得是之前的贪婪策略,这种确定性会使得我的Agent失效,但是SAC却不一样,它的策略是这样的:每一种动作都有一定的概率存在,只不过有高有低罢了,那么当我遇到噪声,我就还会有其他概率的动作做出来,就不会让Agent失效了。
2. Related Work
略
3. Preliminaries
介绍2种强化学习框架:
- 标准最大期望累计奖励。
- 最大含熵目标。
3.1. Notation
就是一些RL符号的说明,注意一下 ρ π ( s t , a t ) \rho^\pi(s_t,a_t) ρπ(st,at)代表在策略 π ( a t ∣ s t ) \pi(a_t|s_t) π(at∣st)下的同轨策略分布。
3.2. Maximum Entropy Reinforcement Learning
标准: J ( π ) = ∑ t = 0 T E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) ] 个 人 认 为 : J ( π ) = E ( s t , a t ) ∼ ρ π ∑ t = 0 T [ r ( s t , a t ) ] J(\pi)=\sum^T_{t=0}\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}[r(s_t,a_t)] \\个人认为:J(\pi)=\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}\sum^T_{t=0}[r(s_t,a_t)] J(π)=t=0∑TE(st,at)∼ρπ[r(st,at)]个人认为:J(π)=E(st,at)∼ρπt=0∑T[r(st,at)]含熵目标: J ( π ) = ∑ t = 0 T E ( s t , a t ) ∼ ρ π [ r ( s t , a t ) + α H ( π ( ⋅ ∣ s t ) ) ] 同 理 : J ( π ) = E ( s t , a t ) ∼ ρ π ∑ t = 0 T [ r ( s t , a t ) + α H ( π ( ⋅ ∣ s t ) ) ] (1) J(\pi)=\sum^T_{t=0}\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}[r(s_t,a_t)+\alpha\mathcal{H}(\pi(\cdot|s_t))]\tag{1} \\同理:J(\pi)=\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}\sum^T_{t=0}[r(s_t,a_t)+\alpha\mathcal{H}(\pi(\cdot|s_t))] J(π)=t=0∑TE(st,at)∼ρπ[r(st,at)+αH(π(⋅∣st))]同理:J(π)=E(st,at)∼ρπt=0∑T[r(st,at)+αH(π(⋅∣st))](1)Note:
- 温度系数 α \alpha α控制着输出动作的随机度, α \alpha α越大,输出动作分布越均匀, α \alpha α越小,随机性越低,最大含熵目标就趋近于标准的RL目标(即 α → 0 \alpha \to0 α→0)。
- 对于包含折扣因子
γ
\gamma
γ的含熵目标:
J
(
π
)
=
∑
t
=
0
∞
E
(
s
t
,
a
t
)
∼
ρ
π
[
∑
l
=
t
∞
γ
l
−
t
E
s
l
∼
p
,
a
l
∼
π
[
r
(
s
l
,
a
l
)
+
α
H
(
π
(
⋅
∣
s
l
)
)
∣
(
s
t
,
a
t
)
]
]
同
理
:
J
(
π
)
=
E
(
s
t
,
a
t
)
∼
ρ
π
[
∑
l
=
t
∞
γ
l
−
t
[
r
(
s
l
,
a
l
)
+
α
H
(
π
(
⋅
∣
s
l
)
)
∣
(
s
t
,
a
t
)
]
]
J(\pi)=\sum^\infty_{t=0}\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}[\sum^\infty_{l=t}\gamma^{l-t}\mathbb{E}_{s_l\sim p,a_l\sim\pi}[r(s_l,a_l)+\alpha\mathcal{H}(\pi(\cdot|s_l))|(s_t,a_t)]]\\同理:J(\pi)=\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}[\sum^\infty_{l=t}\gamma^{l-t}[r(s_l,a_l)+\alpha\mathcal{H}(\pi(\cdot|s_l))|(s_t,a_t)]]
J(π)=t=0∑∞E(st,at)∼ρπ[l=t∑∞γl−tEsl∼p,al∼π[r(sl,al)+αH(π(⋅∣sl))∣(st,at)]]同理:J(π)=E(st,at)∼ρπ[l=t∑∞γl−t[r(sl,al)+αH(π(⋅∣sl))∣(st,at)]]这里的
p
p
p指的应该是转移概率密度
p
(
s
′
,
r
∣
s
,
a
)
p(s',r|s,a)
p(s′,r∣s,a)。一般RL里面这种服从的分布有3种写法,第一种是同轨策略分布
ρ
π
\rho^\pi
ρπ,他表示
已经访问过
的轨迹分布,也可以这么写: s 0 , a 0 , ⋯ ∼ π s_0,a_0,\cdots\sim\pi s0,a0,⋯∼π,直观的体现了RL基于马尔科夫链的特性,表示一种轨迹。第二种是转移概率矩阵 P P P,这种用在表示单步贝尔曼等式的时候,作为对比,上述第一种是多个单步的总和。上述两种往往在理论公式中出现。但是这是理论上,实际中我们通过采样实现,根据确定性等价估计,TD类算法可以通过采样来等效估计 ρ π \rho^\pi ρπ,我们一般称之为经验 < s t , a t , r t + 1 , s t + 1 , a t + 1 > <s_t,a_t,r_{t+1},s_{t+1},a_{t+1}> <st,at,rt+1,st+1,at+1>,On-policy通常采用当前探索到的样本,比如AC、A3C算法等;Off-policy通常采用经验回访池 D \mathcal{D} D,比如DDPG等。第三种是在REFORCEMENT这类算法或者MC算法中出现的,就是轨迹 τ ∼ g ( τ ) \tau\sim g(\tau) τ∼g(τ),前面2种都是针对单位样本而言,这种是针对整条轨迹为单位。
设置这种目标的好处在于(或者说随机策略的好处):
- 探索能力强。一方面从SQL中我们已经证明这种含熵目标的最优解是一种波尔茨曼分布函数,这种分布是一种概率分布,所以满足随机性。另一方面个人认为熵项可以看成正则化项,使得输出动作随机性增加,而不只是确定性动作。
- 在一些RL的task中,可能会有多个比较好的动作,随机性的策略会使得这些动作都能被选择到,而不像确定性策略,只能选一个固定的。
- 提升优化速度。作者发现优化含熵目标比优化标准目标更加快速。
- 当然还有其他好处,比如适合于多模式任务、可以作为另一个任务的初始化、鲁棒性等,更加详细的好处点这里。
作者指出,基于Q-learning的SQL算法是直接学习得到最优
Q
Q
Q函数,然后得到最优策略
π
∗
\pi^*
π∗。那么SAC要做的类似于标准的策略梯度上升算法,直接更新策略
π
\pi
π,从而得到最优策略
π
∗
\pi^*
π∗。
Note:
- 这就是SQL和SAC最明显的区别,其实也就是value-based和policy-based的区别。value-based先求出值函数,然后根据值函数求出策略,比如求贪婪啊等。policy-based基于策略网络,直接对策略用梯度上升进行更新,最后直接输出策略。
4. From Soft Policy Iteration to Soft Actor-Critic
几乎所有的RL算法都是基于广义策略迭代,包括策略评估和策略提升两个过程。4.1节将解释理论上的策略迭代分析。4.2节将理论走向实际,走向连续动作空间,并导出SAC算法。
4.1. Derivation of Soft Policy Iteration
策略评估
策略评估就是要通过迭代算出
Q
s
o
f
t
π
Q^\pi_{soft}
Qsoftπ。和SQL中一样,定义
T
\mathcal{T}
T为软贝尔曼回溯算子,表示迭代的意思。接下来给出最大含熵目标下的值函数如何计算的:
T
π
Q
(
s
t
,
a
t
)
=
r
(
s
t
,
a
t
)
+
γ
E
s
t
+
1
∼
p
[
V
(
s
t
+
1
)
]
(2)
\mathcal{T}^\pi Q(s_t,a_t)=r(s_t,a_t)+\gamma\mathbb{E}_{s_{t+1}\sim p}[V(s_{t+1})]\tag{2}
TπQ(st,at)=r(st,at)+γEst+1∼p[V(st+1)](2)其中(原文中忽略
α
\alpha
α):
V
(
s
t
)
=
E
a
t
∼
π
[
Q
(
s
t
,
a
t
)
−
log
π
(
a
t
∣
s
t
)
]
(3)
V(s_t)=\mathbb{E}_{a_t\sim\pi}[Q(s_t,a_t)-\log\pi(a_t|s_t)]\tag{3}
V(st)=Eat∼π[Q(st,at)−logπ(at∣st)](3)
这是怎么来的呢?如下图所示:
SQL中告诉我们Energy-based Policy是最大含熵目标的最优解,在SAC中并没有对这个类似于波尔茨曼分布的概率密度函数做介绍,这里做个简要说明,Energy-based Policy有以下特点:
- π ( ⋅ ∣ s ) ∝ exp ( − E ) \pi(\cdot|s)\propto\exp(-\mathcal{E}) π(⋅∣s)∝exp(−E)。 E \mathcal{E} E为能量函数,为了更好表达随机性以及 Q Q Q的分布特点,将 E = − 1 α Q ( s , a ) \mathcal{E}=-\frac{1}{\alpha}Q(s,a) E=−α1Q(s,a),即动作值函数为负能量函数。
- 根据EBM的特点 ∝ \propto ∝可以用归一化因子 ∫ 1 α Q ( s t , a ) d a \int \frac{1}{\alpha}Q(s_t,a)\mathrm{d}a ∫α1Q(st,a)da代替。
根据公式(3),我们可以容易得出
π
(
a
t
∣
s
t
)
=
exp
(
Q
s
o
f
t
−
V
s
o
f
t
)
\pi(a_t|s_t)=\exp(Q_{soft}-V_{soft})
π(at∣st)=exp(Qsoft−Vsoft),如果算上温度系数的话:
π
(
a
t
∣
s
t
)
=
exp
(
1
α
(
Q
s
o
f
t
−
V
s
o
f
t
)
)
\pi(a_t|s_t)=\exp(\frac{1}{\alpha}(Q_{soft}-V_{soft}))
π(at∣st)=exp(α1(Qsoft−Vsoft))
然后顺势就可以得出Soft Value Function的定义了:
V
s
o
f
t
π
=
α
⋅
log
∫
exp
(
1
α
Q
s
o
f
t
π
(
s
,
a
)
)
d
a
V^\pi_{soft}=\alpha\cdot\log\int\exp(\frac{1}{\alpha}Q^\pi_{soft}(s,a))\mathrm{d}a
Vsoftπ=α⋅log∫exp(α1Qsoftπ(s,a))da如下图所示:
Note:
- 从公式(2)(3)到此就是SAC的核心,即从Maximum Entropy Objective出发(公式(2)(3)),连接Energy-based Policy得出近似波尔茨曼分布的概率密度函数,然后进一步连接到Soft Value Function,如下图所示:
- 这和SQL是不同的,SQL是从Soft Value Function出发,连接Maximum Entropy Objective和Energy-based Policy。
Lemma 1
对于公式(2),无限迭代下去,即
Q
k
+
1
=
T
π
Q
k
Q^{k+1}=\mathcal{T}^\pi Q^{k}
Qk+1=TπQk,那么当
k
→
∞
k\to\infty
k→∞,
Q
π
→
Q
s
o
f
t
π
Q^\pi\to Q^\pi_{soft}
Qπ→Qsoftπ。
证明如下:
然后利用标准的策略评估方式,则
∀
s
,
a
\forall s,a
∀s,a有
Q
(
s
,
a
)
=
Q
s
o
f
t
(
s
,
a
)
Q(s,a)=Q_{soft}(s,a)
Q(s,a)=Qsoft(s,a)。
策略提升
在这里将证明Energy-based Policy确实可以向之前的
g
r
e
e
d
y
、
ϵ
−
g
r
e
e
d
y
greedy、\epsilon-greedy
greedy、ϵ−greedy策略一样,使得每一个step使用新策略,都可以使得对
∀
s
,
a
\forall s,a
∀s,a,有
Q
π
≤
Q
π
~
Q^\pi\leq Q^{\tilde{\pi}}
Qπ≤Qπ~,也就是说Energy-based Policy就是最大化含熵目标的最优解:
π
M
a
x
E
n
t
∗
=
arg max
π
E
(
s
t
,
a
t
)
∼
ρ
π
[
∑
l
=
t
∞
γ
l
−
t
⋅
(
r
(
s
l
,
a
l
)
+
α
H
(
⋅
∣
s
l
)
)
∣
(
s
t
,
a
t
)
]
\pi^*_{MaxEnt}=\argmax_\pi\mathbb{E}_{(s_t,a_t)\sim\rho^\pi}[\sum_{l=t}^\infty\gamma^{l-t}\cdot(r(s_l,a_l)+\alpha\mathcal{H}(\cdot|s_l))|(s_t,a_t)]
πMaxEnt∗=πargmaxE(st,at)∼ρπ[l=t∑∞γl−t⋅(r(sl,al)+αH(⋅∣sl))∣(st,at)]
作者指出,Energy-based Policy很难在实践中计算,因此定义了一个数簇
∏
\prod
∏,然后对于策略提升的每一个step所需的新策略,都通过在这个数簇中与旧的Energy-based Policy分布KL散度最小的那个分布产生,即:
π
n
e
w
=
arg min
π
′
∈
∏
D
K
L
(
π
′
(
⋅
∣
s
t
)
∣
∣
exp
(
Q
π
o
l
d
(
s
t
,
⋅
)
)
Z
π
o
l
d
(
s
t
)
)
(4)
\pi_{new}=\argmin_{\pi'\in\prod}D_{KL}(\pi'(\cdot|s_t)||\frac{\exp(Q^{\pi_{old}}(s_t,\cdot))}{Z^{\pi_{old}}(s_t)})\tag{4}
πnew=π′∈∏argminDKL(π′(⋅∣st)∣∣Zπold(st)exp(Qπold(st,⋅)))(4)证明如下:
Note:
- 其中归一化因子 Z Z Z不用管他,就像VI一样,在优化过程中会自动约掉的。
- 作者专门针对KL散度得出的策略进行证明也可以达到策略提升的效果,大体证明和SQL中附录A.1的类似。
- 在证明过程中需要注意 π n e w \pi_{new} πnew的KL散度度值一定不会大于 π o l d \pi_{old} πold的散度值,因为 π o l d ∈ ∏ \pi_{old}\in\prod πold∈∏,而 π n e w \pi_{new} πnew优化的时候是从 ∏ \prod ∏里挑选的。
- 数簇的存在是为了限制Policy在一定的范围之内,可以是高斯分布。
策略迭代
众所周知,RL算法基本上都是基于广义策略迭代(可参考《Sutton强化学习》)的,即策略迭代包含了策略评估和策略提升。具体可见下图:
Theorem 1(Soft Policy Iteration)
策略评估和策略提升相互交替进行,
π
\pi
π最终将会收敛到
π
∗
\pi^*
π∗。
证明:略(这可以从标准的RL策略迭代衍生过来理解)。
4.2. Soft Actor-Critic
想要将理论算法应用到连续动作空间中,要解决2大问题:
- 样本数有限。
- 状态动作连续。
对于样本数有限,我们可以采用Q-learning之于贝尔曼等式那样,用样本均值估计,然后使用随机梯度优化;对于连续动作状态的task,我们可采用值函数近似,比如用神经网络来代替之前的表格化方法。
作者设计了3种网络,分别是:
- V s o f t π ↔ V ψ ( s t ) V_{soft}^\pi\leftrightarrow V_\psi(s_t) Vsoftπ↔Vψ(st)
- Q s o f t π ↔ Q θ ( s t , a t ) Q^\pi_{soft}\leftrightarrow Q_\theta(s_t,a_t) Qsoftπ↔Qθ(st,at)
- π ( a t ∣ s t ) ↔ π ϕ ( a t ∣ s t ) \pi(a_t|s_t)\leftrightarrow \pi_\phi(a_t|s_t) π(at∣st)↔πϕ(at∣st)
Soft状态值函数
V
V
V的训练:
目标函数是根据公式(3)结合最小二乘误差设计的:
J
V
(
ψ
)
=
E
s
t
∼
D
[
1
2
(
V
ψ
(
s
t
)
−
E
a
t
∼
π
ϕ
(
⋅
∣
s
t
)
[
Q
θ
(
s
t
,
a
t
)
−
log
π
ϕ
(
a
t
∣
s
t
)
]
)
2
]
(5)
J_V(\psi)=\mathbb{E}_{s_t\sim\mathcal{D}}[\frac{1}{2}(V_\psi(s_t)-\mathbb{E}_{a_t\sim\pi_{\phi}(\cdot|s_t)}[Q_\theta(s_t,a_t)-\log\pi_\phi(a_t|s_t)])^2]\tag{5}
JV(ψ)=Est∼D[21(Vψ(st)−Eat∼πϕ(⋅∣st)[Qθ(st,at)−logπϕ(at∣st)])2](5)其梯度为:
∇
ψ
J
V
(
ψ
)
=
∇
ψ
V
ψ
(
s
t
)
⋅
(
V
ψ
(
s
t
)
−
Q
θ
(
s
t
,
a
t
)
+
log
π
θ
(
a
t
∣
s
t
)
)
(6)
\nabla_\psi J_V(\psi)=\nabla_\psi V_\psi(s_t)\cdot(V_\psi(s_t)-Q_\theta(s_t,a_t)+\log\pi_\theta(a_t|s_t))\tag{6}
∇ψJV(ψ)=∇ψVψ(st)⋅(Vψ(st)−Qθ(st,at)+logπθ(at∣st))(6)Note:
- 求导的时候不用考虑最前面的 E \mathbb{E} E,因为那个只是表达是mini-batch个样本上的随机优化。公式(6)表达的只是单样本上的梯度。
- D \mathcal{D} D是经验回放池,存放的是同轨策略分布的样本。
- 式(5)中动作的采样不是从经验回放池里的采的,其实是根据从池子里采样的状态 s s s,然后通过策略网络输出的动作 a a a。为什么要这样呢?因为公式(3)就是什么设计的。
- 作者表示同时维持两个值函数,可以使训练更加稳定,但之后SAC更新了版本,作者引入了自动调节的温度因子 α \alpha α,使得训练更加稳定,于是只保留了 Q Q Q,去掉了 V V V。(参考这里)
- 最小二乘误差是常用的Loss构建方法,其框架为 E ( ⋯ ) [ 1 2 ( A − B ) 2 ] \mathbb{E}_{(\cdots)}[\frac{1}{2}(A-B)^2] E(⋯)[21(A−B)2]。
Soft动作状态值函数Q的训练:
目标函数是根据公式(2)结合最小二乘误差设计的:
J
Q
(
θ
)
=
E
(
s
t
,
a
t
)
∼
D
[
1
2
(
Q
θ
(
s
t
,
a
t
)
−
Q
^
(
s
t
,
a
t
)
)
2
]
(7)
J_Q(\theta)=\mathbb{E}_{(s_t,a_t)\sim\mathcal{D}}[\frac{1}{2}(Q_\theta(s_t,a_t)-\hat{Q}(s_t,a_t))^2]\tag{7}
JQ(θ)=E(st,at)∼D[21(Qθ(st,at)−Q^(st,at))2](7)其中
Q
^
(
s
t
,
a
t
)
=
r
(
s
t
,
a
t
)
+
γ
E
s
t
+
1
∼
p
[
V
ψ
ˉ
(
s
t
+
1
)
]
(8)
\hat{Q}(s_t,a_t)=r(s_t,a_t)+\gamma\mathbb{E}_{s_{t+1}\sim p}[V_{\bar{\psi}}(s_{t+1})]\tag{8}
Q^(st,at)=r(st,at)+γEst+1∼p[Vψˉ(st+1)](8)
其梯度为:
∇
θ
J
Q
(
θ
)
=
∇
θ
Q
θ
(
s
t
,
a
t
)
⋅
(
Q
θ
(
s
t
,
a
t
)
−
r
(
s
t
,
a
t
)
−
γ
V
ψ
ˉ
(
s
t
+
1
)
)
(9)
\nabla_\theta J_Q(\theta)=\nabla_\theta Q_\theta(s_t,a_t)\cdot(Q_\theta(s_t,a_t)-r(s_t,a_t)-\gamma V_{\bar{\psi}}(s_{t+1}))\tag{9}
∇θJQ(θ)=∇θQθ(st,at)⋅(Qθ(st,at)−r(st,at)−γVψˉ(st+1))(9)Note:
- Q ^ \hat{Q} Q^为 Q Q Q目标值; V ψ ˉ V_{\bar{\psi}} Vψˉ为Target网络,和之前的Target网络一样的,只不过之前是 Q Q Q或者 π \pi π的,都起着提高训练稳定性的作用。
- 在SQL中,并没有设置 V V V网络,这里的 V V V目标值是通过将积分转为期望进行计算的。
策略网络
π
\pi
π的训练:
目标函数是
K
L
KL
KL散度:
J
π
(
ϕ
)
=
E
s
t
∼
D
[
D
K
L
(
π
ϕ
(
⋅
∣
s
t
)
∣
∣
exp
(
Q
θ
(
s
t
,
⋅
)
)
Z
θ
(
s
t
)
)
]
=
E
s
t
∼
D
,
a
t
∼
π
ϕ
(
⋅
∣
s
t
)
[
log
π
ϕ
(
a
t
∣
s
t
)
−
Q
θ
(
s
t
,
a
t
)
+
log
Z
θ
(
s
t
)
]
(10)
J_\pi(\phi)=\mathbb{E}_{s_t\sim\mathcal{D}}[D_{KL}(\pi_\phi(\cdot|s_t)||\frac{\exp(Q_\theta(s_t,\cdot))}{Z_\theta(s_t)})] \\ =\mathbb{E}_{s_t\sim\mathcal{D},a_t\sim\pi_\phi(\cdot|s_t)}[\log\pi_\phi(a_t|s_t)-Q_\theta(s_t,a_t)+\log Z_\theta(s_t)]\tag{10}
Jπ(ϕ)=Est∼D[DKL(πϕ(⋅∣st)∣∣Zθ(st)exp(Qθ(st,⋅)))]=Est∼D,at∼πϕ(⋅∣st)[logπϕ(at∣st)−Qθ(st,at)+logZθ(st)](10)显然我们对式(10)做梯度下降优化的时候,会出现
ϕ
\phi
ϕ的梯度为None的现象,因为
a
t
a_t
at一经采样,对于
π
θ
\pi_\theta
πθ中的
θ
\theta
θ的梯度就消失了。以PyTorch为例,比如求KL散度,其中一个分布是高斯分布带参数
θ
\theta
θ,那么经过这个参数化的高斯分布进行采样得出的粒子放到KL散度的式子中,对结果做BP,那么此时对
θ
\theta
θ的梯度是None!
针对这一问题,最常用的就是使用reparameterization trick(重参数技巧),通过积分变换
可以达到和之前一样的前向传播值,更加重要的是,关于
θ
\theta
θ的梯度不会消失。这个积分变换就是:
a
t
=
f
ϕ
(
ϵ
t
;
s
t
)
(11)
a_t=f_\phi(\epsilon_t;s_t)\tag{11}
at=fϕ(ϵt;st)(11)Note:
- 这个 ϵ \epsilon ϵ采样于一个高斯分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)。
- f = f ϕ μ ( s t ) + ϵ ⋅ f ϕ σ ( s t ) f=f^\mu_\phi(s_t)+\epsilon\cdot f_\phi^\sigma(s_t) f=fϕμ(st)+ϵ⋅fϕσ(st),即定义一个新网络 f f f输出均值 μ \mu μ和标准差 σ \sigma σ,也就是说 π ϕ ( ⋅ ∣ s t ) \pi_\phi(\cdot|s_t) πϕ(⋅∣st)是一个逼近Energy-based Policy的高斯分布 N ( μ , σ 2 ) \mathcal{N}(\mu,\sigma^2) N(μ,σ2)。为什么这个 f f f长这样呢?因为高斯分布有个性质:若 X ∼ N ( μ , σ 2 ) X\sim\mathcal{N}(\mu,\sigma^2) X∼N(μ,σ2),则 Y = X − μ σ ∼ N ( 0 , 1 ) Y=\frac{X-\mu}{\sigma}\sim\mathcal{N}(0,1) Y=σX−μ∼N(0,1),那么反过来,若 ϵ ∼ N ( 0 , 1 ) \epsilon\sim\mathcal{N}(0,1) ϵ∼N(0,1),则 a = ( μ + ϵ ⋅ σ ) ∼ N ( μ , σ 2 ) a=(\mu+\epsilon\cdot\sigma)\sim\mathcal{N}(\mu,\sigma^2) a=(μ+ϵ⋅σ)∼N(μ,σ2)。
- 千万不要以为有了网络 f f f,网络 π \pi π就不需要了。网络 f f f只是一个积分变换网络,是用来生成策略 π \pi π以及采样动作 a a a。生成的策略 π \pi π就是我们所需要的Actor以及可用来计算 log π ( a t ∣ s t ) \log\pi(a_t|s_t) logπ(at∣st)的值(式(12)需要用到)。
经过积分变换之后的式(10):
E
s
t
∼
D
,
ϵ
t
∼
N
(
0
,
1
)
[
log
π
ϕ
(
f
ϕ
(
ϵ
t
;
s
t
)
∣
s
t
)
−
Q
θ
(
s
t
,
f
ϕ
(
ϵ
t
;
s
t
)
)
+
log
Z
θ
(
s
t
)
]
(12)
\mathbb{E}_{s_t\sim\mathcal{D},\epsilon_t\sim\mathcal{N}(0,1)}[\log\pi_\phi(f_\phi(\epsilon_t;s_t)|s_t)-Q_\theta(s_t,f_\phi(\epsilon_t;s_t))+\log Z_\theta(s_t)]\tag{12}
Est∼D,ϵt∼N(0,1)[logπϕ(fϕ(ϵt;st)∣st)−Qθ(st,fϕ(ϵt;st))+logZθ(st)](12)其梯度为:
∇
ϕ
J
π
(
ϕ
)
=
∇
ϕ
log
π
ϕ
(
a
t
∣
s
t
)
+
(
∇
a
t
log
π
ϕ
(
a
t
∣
s
t
)
−
∇
a
t
Q
(
s
t
,
a
t
)
)
∇
ϕ
f
ϕ
(
ϵ
t
;
s
t
)
\nabla_\phi J_\pi(\phi)=\nabla_\phi\log\pi_\phi(a_t|s_t)+(\nabla_{a_t}\log\pi_\phi(a_t|s_t)-\nabla_{a_t}Q(s_t,a_t))\nabla_\phi f_\phi(\epsilon_t;s_t)
∇ϕJπ(ϕ)=∇ϕlogπϕ(at∣st)+(∇atlogπϕ(at∣st)−∇atQ(st,at))∇ϕfϕ(ϵt;st)Note:
- 梯度分两部分,第一部分是网络 π \pi π部分直接计算的对数 log \log log计算使得BP产生的梯度值。第二部分是重参数技巧带来的梯度,格式有点像DDPG中Actor部分对网络参数的梯度计算。之所以分两部分并用加号相连而不是连乘,是因为注意到式(12)的第一部分中有2处运算需要涉及到 ϕ \phi ϕ,一个是 log π ϕ ( ⋅ ) \log\pi_\phi(\cdot) logπϕ(⋅),另一个是 f ϕ ( ⋅ ) f_\phi(\cdot) fϕ(⋅),因为是两部分不同的运算,所以你就要分2次来分别对他两求导,因此就是相加,而连乘只有出现在链式结构,也就是把某一块看成整体,先对整体求导,再对某一块的参数求导,也就是式(13)的第二部分,显然 log π ϕ ( ⋅ ) \log\pi_\phi(\cdot) logπϕ(⋅)和 f ϕ ( ⋅ ) f_\phi(\cdot) fϕ(⋅)不是这样的关系。类似的,式(12)的后半部分, Q θ ( ⋅ ) Q_\theta(\cdot) Qθ(⋅)和 f ϕ ( ⋅ ) f_\phi(\cdot) fϕ(⋅)就是2部分的关系,求导的时候也要将关于 θ \theta θ的导数和关于 ϕ \phi ϕ的导数用加号连起来,但是这里我们只对 ϕ \phi ϕ求导,所以对 θ \theta θ的求导为0。
- 式(12)的归一化常数 Z Z Z通过求偏导就直接约掉了。 Z Z Z其实是V函数,但是和 ϕ \phi ϕ无关,所以不用写。
- 那么这个地方就会出现一个问题,就是 log \log log之后的策略网络 π \pi π,一般实际我们都会加上双曲正切函数tanh将动作收缩在环境的范围内。实际处理过程是这样的,网络 f f f输出均值 μ \mu μ、标准差 σ \sigma σ,所以 π ( a ∣ s ) = N ( μ , σ 2 ) \pi(a|s)=\mathcal{N}(\mu,\sigma^2) π(a∣s)=N(μ,σ2),其中输出动作 a = μ + σ ⋅ ϵ a=\mu+\sigma\cdot\epsilon a=μ+σ⋅ϵ,为了和之后受限的动作 a ˉ \bar{a} aˉ区分开来,未受限的记为 a = μ + ϵ ⋅ σ , π ( a ∣ s ) = N ( μ , σ 2 ) a=\mu+\epsilon\cdot\sigma,\pi(a|s)=\mathcal{N}(\mu,\sigma^2) a=μ+ϵ⋅σ,π(a∣s)=N(μ,σ2)。然后我们对 π \pi π的输出加上 t a n h tanh tanh的限制: a ˉ = t a n h ( a ) , π ( a ∣ s ) → π ˉ ( a ˉ ∣ s ) \bar{a}=tanh(a),\pi(a|s)\to\bar{\pi}(\bar{a}|s) aˉ=tanh(a),π(a∣s)→πˉ(aˉ∣s)。既然有了 t a n h tanh tanh的加入,所以式(12)的计算就不能直接就这么忽视了,作者之后在补充材料附录C中提出了解决办法。
- 具体的解决办法就是一个坐标变换。
a
ˉ
=
t
a
n
h
(
a
)
,
a
∈
R
d
\bar{a}=tanh(a),a\in\mathbb{R}^d
aˉ=tanh(a),a∈Rd,其实就是个坐标变换,根据坐标变换公式
q
(
z
)
=
q
(
x
)
⋅
∣
d
e
t
(
∂
x
∂
z
)
∣
,
(
z
=
T
(
x
)
)
q(z)=q(x)\cdot|det(\frac{\partial x}{\partial z})|,(z=T(x))
q(z)=q(x)⋅∣det(∂z∂x)∣,(z=T(x))可得出:
π
ˉ
(
a
ˉ
∣
s
)
=
π
(
a
∣
s
)
⋅
∣
d
e
t
(
∂
a
∂
a
ˉ
)
∣
=
π
(
a
∣
s
)
⋅
∣
d
e
t
(
∂
a
r
t
a
n
h
(
a
ˉ
)
∂
a
ˉ
)
∣
\bar{\pi}(\bar{a}|s)=\pi(a|s)\cdot|det(\frac{\partial{a}}{\partial{\bar{a}}})|\\=\pi(a|s)\cdot|det(\frac{\partial{artanh(\bar{a})}}{\partial\bar{a}})|
πˉ(aˉ∣s)=π(a∣s)⋅∣det(∂aˉ∂a)∣=π(a∣s)⋅∣det(∂aˉ∂artanh(aˉ))∣接下来的步骤如下图所示:
a r t a n h artanh artanh为反双曲正切函数
过估计
由于在策略提升部分容易产生过估计,于是作者提出使用2个
Q
Q
Q值来消除过估计。这种做法在Double Q-learning和TD3(主要也是仿照Double Q-learning)中都出现过。
具体做法:
独立训练2个
Q
Q
Q,分别记为
Q
1
、
Q
2
Q_1、Q_2
Q1、Q2。然后取两者中较小的那个加入到
V
V
V和
π
\pi
π的训练中。
Note:
- 2个 Q Q Q是同是训练的。
- 取较小值理论上有助于提高训练稳定性。
- 作者指出虽然单个 Q Q Q也能使算法生效,但是双 Q Q Q的做法可以提升训练速度,特别是在维度较高的task上。
算法伪代码如下:
Note:
- 三个网络的优化都是采用随机优化方式,并没有使用SVGD。
- 标准SAC的Target-Update采用
软更新
(Exponentially moving average),即每次向前滑动一小步, τ \tau τ一般取得很小,至于指数式,指的是重复迭代下去,就会出现 τ n \tau^n τn。而不是硬更新(hard Target-Update),即每隔固定的时间步就直接把估计网络参数直接全部复制给目标网络(最初的DQN就是这么做的)。 - 可以看出SAC采用Actor-Critic的框架,每个step更新Actor网络和Critic网络。两个网络也是相互依靠,谁也离不开谁。
5. Experiments
实验分成常规的算法对比实验和Ablation实验,大致和TD3论文类似。实验环境是Mujoco
。
5.1. Comparative Evaluation
第一个实验比较常规,就是对五种算法进行训练速度与训练表现的对比,具体结果如下:
Note:
- 从结果来看,SAC具有提高训练速度的特点,且SAC的表现力,即规定时间步内获取的总得分(不衰减)都超过其余4种算法(DDPG、PPO、SQL、TD3)。但是TD3的论文里,写着TD3的表现力超过SAC。
- 解释一下这个图,做5次实验,每次都是不同的随机种子,每次实验都统计3个值:最大值、最小值、平均值。然后将这三个值画上去,这其实算是构成了一个分布,平均值作为这个分布的样本均值,最大值和最小值之间的差距(阴影部分)就是样本方差,表征了算法的稳定性,方差越小,稳定性越高,算法越好。
5.2. Ablation Study
Ablation实验简单来说就是控制变量的对比实验,通过控制变量来研究每一个变量对结果的贡献是怎么样的。也就是说SAC的结果这么好,需要去研究到底是算法那一个特别的部分造成了表现力的突出。
除此之外,本节还将研究2个超参数的的敏感性:软更新参数
τ
\tau
τ以及reward scaling。
实验共分四部分:
- Stochastic vs. deterministic policy
- Policy evalution
- Reward scale
- Target network update
随机性策略 vs 确定性策略
SAC是一种随机性策略算法,他通过最大含熵目标输出一个分布。因此作者想要探究该随机性对表现力的影响。实验细节如下:
- SAC对比确定性策略的SAC变体(即目标不包含信息熵,类似于DDPG)。
- 双方都只是用1个 Q Q Q。
- 都是用硬更新,就是每隔一段时间,把估计网络参数全部复制目标网络上。
- 实验分2组,随机性和确定性各一组,每一组都进行5次实验,并使用不同的随机种子。
最后实验结果如下:
Note:
- 从实验结果来看,随机性策略的SAC显然更加稳定,这种稳定性在困难的环境中显得格外重要。
- 以上只是一个环境,作者在补充材料中进行了其余6次环境的实验,实验结果如下:
黄色线是标准的SAC,蓝色线是把标准SAC的软更新取代为硬更新,红色线是确定性的SAC,并采用硬更新。
策略评估
Note:
- 这里的确定性策略是指每次都选择SAC策略分布中的均值,最后结果要好于标准SAC的随机策略。
奖励衰减
这个超参数非常重要!因为它直接影响到了熵值和奖励值之间的平衡,也就是这个参数与温度因子
α
\alpha
α之间的大小关系会影响训练的结果。不同的reward会直接导致不同的熵值,实验结果如下:
Note:
- 从结果来看,reward scale的改变导致Agent表现力的改变。
- 当reward scale=1的时候,输出就是个uniform策略,等于就在最大化熵项了。无法利用奖励信息,算法自然失效。
- 当reward scale太大的话,策略就会成为接近确定性策略的随机性策略,熵项得到的训练就少了,就会导致探索能力下降,容易陷入局部最优,表现力就会下降。
- 因此这是个需要调节的超参数,不能太大也不能太小,需要在探索和利用之间平衡。
- 或者可以不动reward scale,改去调节温度因子 α \alpha α,后续SAC的升级版算法设计了自动调节的 α \alpha α。
Target软更新(TD3中也做了类似的实验)
标准SAC使用指数增长式滑动平均,附带平滑常数
τ
\tau
τ,也叫软更新。与之相对的是硬更新,是隔一段时间直接进行复制粘贴的Target更新方式。从DQN那时候我们就知道,Target网络的存在就是稳定训练的,当然也是为了做标签。因此
τ
\tau
τ的大小也直接影响了算法的稳定性。作者使用不同的
τ
\tau
τ进行实验,实验结果如下:
Note:
- τ \tau τ不能太大,否则训练极不稳定。
- 合适的 τ \tau τ的范围还是挺大的,也就是说, τ \tau τ这个超参数还是挺好调节的。
6. Conclusion
①整个SAC算法的网络图如下(图来自其他博主,链接在文章开头):
②SAC的优点:
- Off-policy算法,故采样效率高。
- 稳定性强
- 鲁棒性好,抗干扰能力强
- 随机性策略,探索性好。
③SAC的缺陷:
- SAC的policy的目的是趋近于玻尔兹曼分布,但是实际实现的时候,为了能够tractable,选择了输出一个高斯,也就是让高斯趋近于玻尔兹曼分布。这意味着SAC本质上还是unimodal的算法(而不是soft q-learning的multi-modal)。这使得SAC的创新性打了很大的折扣。
- 温度因子 α \alpha α需要针对不同环境进行调节,比较难搞。这个参数需要为不同的任务专门设计,甚至同一任务训练到不同时期,都各自有自己适合的。
7. Improvement
在最大化含熵目标算法中,
α
\alpha
α是一个必须要调节且很难调的超参数,上面的SAC中
α
\alpha
α是个固定的值。不同task,甚至同一个task的不同阶段,由于奖励不同,根据Ablation实验,会出现表现力的波动,因此针对这个,SAC作者设计了自动调节的温度因子
α
\alpha
α。
它的基本原理是:当Agent探索到新的区域时,最优的action还不清楚,应该提高
α
\alpha
α来增大探索能力,去探索更多的空间。当某一个区域已经探索得差不多,最优的action基本确定了,那么这个
α
\alpha
α就可以减小,从而把重心放在利用上,让最佳动作对应的概率稍大一些。
该算法详细的介绍见SAC算法与应用论文,该论文中还取消了
V
V
V网络,只采用
Q
Q
Q网络。