Abstract
本文主要介绍 DDPG, TD3 和 SAC这三种continuous action下的off-policy算法。
其中 DDPG和TD3属于确定性策略,SAC属于随机策略。
问题1: 确定性策略和随机性策略的区别:
在确定性策略下,我们在一个状态下只会进行一种固定的动作;而随机性策略,在一个状态下会生成 不同动作的执行概率,然后根据概率进行随机选择。
在有些问题中,因此观测值是不完全的,可能会将不同的状态看作一种状态,在这时候 执行确定性策略可能会就陷入困境。 但是很多问题下,有的随机性策略使用 高斯分布下的重参数化,最终的结果有可能方差极小,也就近似等于确定性算法。 确定性策略与随机性策略的结果都比较不错。确定性策略因为是off-policy,所以过去的经验可以重复利用,在有些问题中 data-efficiency 会比较重要。因此确定性策略和随机性策略应该根据问题需要进行选择。
问题2:off-policy的含义:
off-policy是指 我们获取经验的过程是使用behavior policy+较大的noise exploration,但是我们最后期望得到的是 target policy和没有noise的behavior policy。 因为我们是使用behavior policy+Noise exploration进行的,所以生成的经验池中的数据的决策度量
ρ
\rho
ρ是根据
π
b
\pi_b
πb。
举例: 我们在off-policy中经常会用到 ϵ \epsilon ϵ-greedy policy, Gaussian noise, OU noise等等。为了增加探索范围,可能还会在每个episode的前N步采用随机动作。 这些都使得 经验池中的经验的决策度量 和 真实我们的策略的决策度量之间有很大的差别。 off-policy使用经验池中的数据来学习 target policy和target Q。【需要注意的是:确定性策略和随机策略都有off-policy方法。而确定性策略中没有重要性采样,但是在随机策略中有重要性采样。】
而on-policy 一般只适用于随机性的策略, 每次生成的经验都是基于当前的策略。然后根据当前的数据更新策略与Q值。然后再根据新的策略生成新的数据,之前的数据都会被丢弃掉。这是on-policy(使用target policy来生成数据)
DDPG
在离散问题中,我们如果有了 Q函数,那么我们可以直接得到对应的策略
a
=
a
r
g
m
a
x
Q
(
s
,
:
)
a= argmax \ Q(s,:)
a=argmax Q(s,:)。 而在连续问题当中,如果我们有了Q,我们也没办法直接得到连续的动作空间下的最优动作。而DPPG采用的方式 就是
▽
θ
π
=
E
[
▽
θ
Q
(
s
,
μ
(
s
;
θ
)
)
]
\bigtriangledown_\theta \pi = E[\bigtriangledown_\theta Q(s,\mu(s;\theta))]
▽θπ=E[▽θQ(s,μ(s;θ))]。 我们在对应的状态下 沿着Q增大的方向改变我们的确定性策略。
如果我们得到了最优的Q函数,我们就可以最终达到每个状态下的最好的动作。而改善Q的方式就是使用经验池中数据,采用Q-learning的方式,使得Q更加趋近于
Q
∗
Q^*
Q∗。
因此,我们也就知道了 DPPG实际上就是 通过Q-learning得到最优的
Q
∗
Q^*
Q∗,然后使用梯度上升的方式,在不同的状态下更新策略,使得策略在不同的状态下对应更好的Q。因此,DDPG可以看作是 连续动作空间下的deep Q learning。
所以,更新到最好的策略的前提,就是学到得到更好的Q。
Q的目标函数
因为我们是采用动作策略的决策度量下的Q值最好,所以对应的目标函数就是:
J
(
ϕ
)
=
m
a
x
∑
s
ρ
π
b
(
s
)
Q
(
s
,
μ
(
s
)
)
=
E
(
s
,
a
,
r
,
s
′
,
d
)
∼
π
b
{
[
Q
ϕ
(
s
,
a
)
−
(
r
+
γ
(
1
−
d
)
m
a
x
a
′
Q
ϕ
(
s
′
,
a
′
)
)
]
2
}
J(\phi)=max \ \sum_s \rho^{\pi_b}(s) Q(s,\mu(s))=E_{(s,a,r,s',d)\sim \pi^b}\{ [ Q_{\phi}(s,a)- (r+\gamma(1-d)max_{a'} \ Q_\phi (s',a')) ]^2 \}
J(ϕ)=max s∑ρπb(s)Q(s,μ(s))=E(s,a,r,s′,d)∼πb{[Qϕ(s,a)−(r+γ(1−d)maxa′ Qϕ(s′,a′))]2}
其中
m
a
x
a
′
Q
ϕ
(
s
′
,
a
′
)
max_{a'}Q_{\phi}(s',a')
maxa′Qϕ(s′,a′)存在trick,以下再说明。
Tricks
Replay buffers
我们为了更好的更新Q,我们的经验池应该足够大,使得各种探索得到的经验都能够被充分的利用,使得Q充分的更新。 另外Replay buffer也不能保持所有经验,不然会使得学习变得很慢。【需要根据环境,进行调节。】
可以使用过去经验的原因:
我们在更新Q时,使用了bellman optimal equation(Q-learning),所以对于所有的 MDP转换,贝尔曼最有方程都是适用的。因此是off-policy算法。
Target Networks
Target Q
我们在使用真实值时,如果直接使用 动作策略对应的Q,会使得结果不稳定。因此,为了让结果更稳定,采用了一个接近Q参数的网络target Q(类似DQN)。
更新方式,不同于DQN(过一段时间,将behavior Q赋予target Q)。而是采用以下的方式:
ϕ
t
a
r
g
←
ρ
ϕ
t
a
r
g
+
(
1
−
ρ
)
ϕ
\phi_{targ}\leftarrow \rho \phi_{targ}+(1-\rho)\phi
ϕtarg←ρϕtarg+(1−ρ)ϕ
Target Policy
我们在
m
a
x
Q
t
a
r
g
max \ Q_{targ}
max Qtarg的时候,选择使用 target policy来进行,而不是选择 behavior policy来进行。
【在DQN中,我们在计算真实值时,采用的是
m
a
x
Q
t
a
r
g
(
s
′
,
:
)
max \ Q_{targ}(s',:)
max Qtarg(s′,:)。 而在Double Q中,我们采用的
Q
t
a
r
g
(
s
′
,
a
r
g
m
a
x
Q
b
(
s
′
,
:
)
)
Q_{targ}(s', argmax\ Q_b(s',:))
Qtarg(s′,argmax Qb(s′,:))】
根据 DDQN和DQN的关系,按理说应该采用 Behavior policy对应的动作,但是DDPG也并没有。
target policy的更新方式 和 target Q一样:
θ
t
a
r
g
←
ρ
θ
t
a
r
g
+
(
1
−
ρ
)
θ
\theta_{targ}\leftarrow \rho \theta_{targ}+(1-\rho)\theta
θtarg←ρθtarg+(1−ρ)θ
Exploration
DDPG的核心在于 Q的更新,因此探索是非常重要的一步。
DDPG原文使用OU noise,但是 后续的结果表明: Gaussian noise表现最好。
另外,为了增加探索,可以在每一个episode的前N步进行随机的动作选择,增大探索空间。
Pseudocode
TD3(Twin Delayed DDPG)
TD3算法主要在DDPG基础之上进行了调整,使得DDPG鲁棒性更强。
DDPG有时候崩溃的原因在于 Q函数开始大幅度的过评估,最后导致了策略更新出问题(利用了Q函数中的误差),TD3提出了3个trick来改善这个问题。
Tricks
target policy smoothing
在使用Q-learning更新时,真实值计算中,我们不直接使用
μ
θ
;
t
a
r
g
\mu_{\theta;targ}
μθ;targ,我们添加了一定的噪音。通过添加噪音,使得Q值更新更加的光滑(类似于正则化:减少DDPG 的Q值中不正确的sharp peak)。
a
′
(
s
′
)
=
c
l
i
p
(
μ
θ
;
t
a
r
g
(
s
′
)
+
c
l
i
p
(
ϵ
,
−
c
,
c
)
,
a
l
o
w
,
a
h
i
g
h
)
,
ϵ
∼
N
(
0
,
σ
)
a'(s')=clip(\mu_{\theta;targ}(s')+clip(\epsilon,-c,c),a_{low},a_{high}),\epsilon \sim N(0,\sigma)
a′(s′)=clip(μθ;targ(s′)+clip(ϵ,−c,c),alow,ahigh),ϵ∼N(0,σ)
但是,对于policy update时,则不使用该trick。
Clipped Double-Qlearning
学习两个target Q 函数
Q
t
a
r
g
1
,
Q
t
a
r
g
2
Q_{targ1},Q_{targ2}
Qtarg1,Qtarg2,可以减少Q的过估计(类似ensemble of neural network)。
y
(
r
,
s
′
,
d
)
=
r
+
γ
(
1
−
d
)
m
i
n
i
=
1
,
2
Q
ϕ
i
,
t
a
r
g
(
s
′
,
a
′
(
s
′
)
)
y(r,s',d)=r+\gamma(1-d)min_{i=1,2}\ Q_{\phi_i,targ}(s',a'(s'))
y(r,s′,d)=r+γ(1−d)mini=1,2 Qϕi,targ(s′,a′(s′))
然后使用该真值 更新 Q t a r g 1 Q_{targ1} Qtarg1和 Q t a r g 2 Q_{targ2} Qtarg2。
除了以上三个trick之外,TD3和DDPG没有差别。
延迟的策略更新
我们更新策略(behavior policy & target policy)的频率 要少于 Q函数的更新频率。 文章同推荐 更新两次Q,然后更新一次policy。
Pseudocode
SAC (soft actor-critic)
SAC 采用 随机策略,但是和 VPG, TRPO,PPO不同的点在于 SAC的随机策略不仅 计算策略的均值,也计算策略的方差。
虽然 都是假设为高斯分布,但是其他的 随机策略算法都是使用了固定的方差。 主要原因是 SAC 根据方差的大小(信息熵)来进行探索。
在状态 s s s下,随机策略的动作分布是 π ( a ∣ s ) \pi(a|s) π(a∣s),那么我们就可以知道其 信息熵 H ( π ( s ) ) = E a ∼ π ( a ∣ s ) [ − l o g π ( a ∣ s ) ] = ∫ a − π ( a ∣ s ) l o g π ( a ∣ s ) H(\pi(s))=E_{a \sim \pi(a|s)}[-log \ \pi(a|s)]=\int_a - \pi(a|s)log\pi(a|s) H(π(s))=Ea∼π(a∣s)[−log π(a∣s)]=∫a−π(a∣s)logπ(a∣s)。
SAC是信息熵正则化的强化学习算法,因此智能体在每一步除了有奖励
r
(
s
,
a
,
s
′
)
r(s,a,s')
r(s,a,s′),还会有信息熵
α
H
(
π
(
a
∣
s
)
)
\alpha H(\pi(a|s))
αH(π(a∣s))作为奖励。
π
∗
=
a
r
g
m
a
x
π
E
ρ
∼
π
b
[
∑
t
=
0
∞
γ
t
(
R
(
s
t
,
a
t
,
s
t
+
1
)
+
α
H
(
π
(
s
t
)
)
)
]
\pi^* =arg max_{\pi}\ E_{\rho \sim \pi_b}[\sum_{t=0}^{\infty} \gamma^t(R(s_t,a_t,s_{t+1})+\alpha H(\pi(s_t)))]
π∗=argmaxπ Eρ∼πb[t=0∑∞γt(R(st,at,st+1)+αH(π(st)))]
V
π
(
s
)
=
E
a
∼
π
[
Q
π
(
s
,
a
)
]
+
α
H
(
π
(
s
)
)
=
E
a
∼
π
[
Q
π
(
s
,
a
)
−
α
l
o
g
(
π
(
a
∣
s
)
)
]
V^\pi(s)=E_{a\sim \pi}[ Q^\pi (s,a) ]+\alpha H(\pi(s))=E_{a \sim \pi}[Q^\pi(s,a)-\alpha log(\pi(a|s))]
Vπ(s)=Ea∼π[Qπ(s,a)]+αH(π(s))=Ea∼π[Qπ(s,a)−αlog(π(a∣s))]
信息熵对于每一个 动作都是相同的,主要是针对不同的状态。 如果状态s的信息熵比比较大,那么就会鼓励该动作(加强探索,增加收敛);如果信息熵比较小,但是奖励比较大,那么很可能是较优动作;如果信息熵比较小,奖励比较小,那么就没必要探索了。 因此信息熵和 策略的方差 实现了 不同状态下的探索。
目标函数
J ( θ ) = E ρ ∼ π b [ Q π ( s , a ) ] J(\theta)=E_{\rho \sim \pi_b}[Q^{\pi}(s,a)] J(θ)=Eρ∼πb[Qπ(s,a)]
策略是 V值的梯度。
Tricks
only one policy
在随机性策略中因为不同的动作都有可能执行,SAC也添加了信息熵来增大探索空间。 不需要添加额外的exploration(Gaussian noise等等)。 因为不需要多个policy,只需要一个policy就行。因此以下选择s’对应的a’时,直接使用policy采样得到: a ′ = π ( s ′ ) a'=\pi(s') a′=π(s′)。
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
′
)
−
α
l
o
g
π
(
a
′
∣
s
′
)
)
]
,
a
′
∼
π
(
s
′
)
Q^\pi(s,a)=E_{s' \sim P, a'\sim \pi}[r(s,a,s')+\gamma(Q(s',a')+\alpha H(\pi(s')))]=E_{s' \sim P. a'\sim \pi}[r(s,a,s')+\gamma(Q(s',a')-\alpha log \ \pi(a'|s'))], a' \sim \pi(s')
Qπ(s,a)=Es′∼P,a′∼π[r(s,a,s′)+γ(Q(s′,a′)+αH(π(s′)))]=Es′∼P.a′∼π[r(s,a,s′)+γ(Q(s′,a′)−αlog π(a′∣s′))],a′∼π(s′)
注意,
a
′
a'
a′是从目前的策略中采样得到的,不是根据之前的经验。
double-Q clip
我们使用了 两个
Q
t
a
r
g
Q_{targ}
Qtarg,使用
m
i
n
i
=
1
,
2
(
Q
t
a
r
g
,
i
)
min_{i=1,2}(Q_{targ,i})
mini=1,2(Qtarg,i)来更新结果。
y
(
r
,
s
′
,
d
)
=
r
+
γ
(
1
−
d
)
[
m
i
n
i
=
1
,
2
Q
t
a
r
g
,
i
(
s
′
,
a
′
)
−
α
l
o
g
π
θ
(
a
′
∣
s
′
)
]
,
a
′
∼
π
(
s
′
)
y(r,s',d)=r+\gamma (1-d)[ min_{i=1,2}Q_{targ,i}(s',a')-\alpha log\ \pi_\theta(a'|s') ],a' \sim \pi(s')
y(r,s′,d)=r+γ(1−d)[mini=1,2Qtarg,i(s′,a′)−αlog πθ(a′∣s′)],a′∼π(s′)
policy选择
生成 μ ( s ) , σ ( s ) \mu(s),\sigma(s) μ(s),σ(s),那么动作就是 a ( s ) = t a n h ( μ ( s ) + σ ( s ) ∗ ξ ) , ξ ∼ N ( 0 , I ) a(s)=tanh( \mu(s)+\sigma(s)*\xi ),\xi \sim N(0,I) a(s)=tanh(μ(s)+σ(s)∗ξ),ξ∼N(0,I)
policy 更新
▽ θ [ m i n i = 1 , 2 Q ϕ , i ( s , a ′ ( s ) ) − α l o g π θ ( a ′ ) ] \triangledown_\theta [min_{i=1,2}Q_{\phi,i}(s,a'(s))-\alpha log \ \pi_{\theta}(a')] ▽θ[mini=1,2Qϕ,i(s,a′(s))−αlog πθ(a′)]
target Q 更新
和DPPG, TD3相同。
Pseudocode
Reference
Spinningup
Deterministic Policy Gradient Algorithms, Silver et al. 2014
Continuous Control With Deep Reinforcement Learning, Lillicrap et al. 2016
Addressing Function Approximation Error in Actor-Critic Methods, Fujimoto et al, 2018