【强化学习理论】基于策略的强化学习——深度确定性策略梯度算法
【强化学习理论】基于策略的强化学习——深度确定性策略梯度算法
深度确定性策略梯度算法(Deep Deterministic Policy Gradient,DDPG)是一种Actor-Critic框架的算法,该算法常用于连续控制任务(动作空间为连续型),其中Actor网络产生的动作是具体的、确定的动作而非动作的分布,因此被称为“确定性”策略梯度。本文介绍深度确定性策略梯度算法。
注:本文是在观看【王树森】深度强化学习(DRL)P19后的整理。
1. DDPG算法结构
DDPG作为一种Actor-Critic算法,由一个Actor网络(策略网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ), θ \theta θ表示网络参数)和一个Critic网络(价值网络 q ( s , a ; ω ) q(s,a;\omega) q(s,a;ω), ω \omega ω表示网络参数)组成,如下图所示。
图源【王树森】深度强化学习(DRL)P19。
-
Actor网络:输入为状态 s s s,输出为具体的动作(实数或者向量) a a a而非动作的概率分布,即 a = μ ( s ; θ ) a = \mu(s;\theta) a=μ(s;θ)这个动作会作为Critic网络的输入之一。
Actor的目标是输出好的动作(”好“与”不好“由Critic评估),使得Critic输出的动作价值尽量高。因此Actor的优化需要Critic参与,并需要对 θ \theta θ进行梯度上升。
-
Critic网络:输入为状态 s s s和Actor网络的输出 a a a,输出为状态-动作对 ( s , a ) (s,a) (s,a)的价值,即 Q ( s , a ) = q ( s , a ; θ ) Q(s,a) = q(s,a;\theta) Q(s,a)=q(s,a;θ)。
Critic的目标是尽量准确地评估动作的好坏,即准确地估计动作价值(这一点与DQN一致)。因此Critic的优化需要最小化TD error(后面解释什么是TD error),对 ω \omega ω进行梯度下降。
实际训练时,策略网络和价值网络都有对应的目标网络——目标策略网络(target policy network) μ ( s ; θ − ) \mu(s;\theta^-) μ(s;θ−)和目标价值网络(target value network) q ( s , a ; ω − ) q(s,a;\omega^-) q(s,a;ω−),即DDPG中总共有4个神经网络。
2. 如何训练Critic网络
由于Critic的目标是尽量准确地评估动作的好坏,即准确地估计动作价值,使用TD算法训练Critic网络。此时需要最小化TD error。
对于一个transition元组
(
s
t
,
a
t
,
r
t
,
s
t
+
1
]
)
(s_t,a_t,r_t,s_{t+1]})
(st,at,rt,st+1]),一般认为当前状态-动作对的动作价值
Q
(
s
t
,
a
t
)
Q(s_t,a_t)
Q(st,at)的目标(类似于”ground truth“的概念)为
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
r_t + \gamma Q(s_{t+1},a_{t+1})
rt+γQ(st+1,at+1),则可定义TD error
δ
t
\delta_t
δt为:
δ
t
=
Q
(
s
t
,
a
t
)
−
(
r
t
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
)
\delta_t = Q(s_t,a_t) - (r_t + \gamma Q(s_{t+1},a_{t+1}))
δt=Q(st,at)−(rt+γQ(st+1,at+1))
对于一个transition元组
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
(s_t,a_t,r_t,s_{t+1})
(st,at,rt,st+1),当前状态-动作对及未来下一步状态-动作对的动作价值均可以使用Critic网络估计:
Q
(
s
t
,
a
t
)
=
q
(
s
t
,
a
t
;
ω
)
,
Q
(
s
t
+
1
,
a
^
t
+
1
)
=
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
Q(s_t,a_t) = q(s_t,a_t;\omega), \quad Q(s_{t+1},\hat{a}_{t+1}) = q(s_{t+1},\hat{a}_{t+1};\omega)
Q(st,at)=q(st,at;ω),Q(st+1,a^t+1)=q(st+1,a^t+1;ω)
其中,下一状态的动作由策略网络计算提供,
a
^
t
+
1
=
μ
(
s
t
+
1
;
θ
)
\hat{a}_{t+1} = \mu(s_{t+1};\theta)
a^t+1=μ(st+1;θ),并非实际发生的动作,因此记为
a
^
t
+
1
\hat{a}_{t+1}
a^t+1。进一步的,可以计算TD error:
δ
t
=
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
⏟
t
a
r
g
e
t
\delta_t = q(s_t,a_t;\omega) - \underbrace{(r_t + q(s_{t+1},\hat{a}_{t+1};\omega))}_{target}
δt=q(st,at;ω)−target
(rt+q(st+1,a^t+1;ω))
有了TD error,根据Critic的目标,Critic网络的目标函数可以写成:
J
(
ω
)
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
δ
t
2
]
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
2
]
\mathcal{J}(\omega) = \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} [\delta_t ^2] = \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} [\textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))}^2]
J(ω)=E(st,at)∈(S,A)[δt2]=E(st,at)∈(S,A)[(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))2]
则网络参数更新的梯度为:
∂
J
(
ω
)
∂
ω
=
∂
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
2
]
∂
ω
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
∂
[
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
2
]
∂
ω
]
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
2
⋅
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
⋅
∂
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
∂
ω
]
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
2
⋅
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
⋅
(
∂
q
(
s
t
,
a
t
;
ω
)
∂
ω
−
∂
r
t
∂
ω
−
∂
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
∂
ω
)
]
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
2
⋅
(
q
(
s
t
,
a
t
;
ω
)
−
(
r
t
+
q
(
s
t
+
1
,
a
^
t
+
1
;
ω
)
)
)
⋅
(
∂
q
(
s
t
,
a
t
;
ω
)
∂
ω
−
0
−
0
)
]
=
E
(
s
t
,
a
t
)
∈
(
S
,
A
)
[
δ
t
⋅
∂
q
(
s
t
,
a
t
;
ω
)
∂
ω
]
\begin{aligned} \frac{\partial \mathcal{J}(\omega)}{\partial \omega} &= \frac{\partial \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} [\textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))}^2]}{\partial \omega} \\ &= \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} \left[\frac{\partial [\textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))}^2]}{\partial \omega}\right] \\ &= \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} \left[2 \cdot \textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))} \cdot \frac{\partial \textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))}}{\partial \omega}\right] \\ &= \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} \left[2 \cdot \textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))} \cdot \left( \frac{\partial q(s_t,a_t;\omega)}{\partial \omega} - \frac{\partial r_t}{\partial \omega} - \frac{\partial q(s_{t+1},\hat{a}_{t+1};\omega)}{\partial \omega} \right)\right] \\ &= \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} \left[2 \cdot \textcolor{blue}{(q(s_t,a_t;\omega) - (r_t + q(s_{t+1},\hat{a}_{t+1};\omega)))} \cdot \left( \frac{\partial q(s_t,a_t;\omega)}{\partial \omega} - 0 - 0 \right)\right] \\ &= \mathbb{E}_{(s_t,a_t) \in (\mathcal{S},\mathcal{A})} \left[ \delta_t \cdot \frac{\partial q(s_t,a_t;\omega)}{\partial \omega} \right] \end{aligned}
∂ω∂J(ω)=∂ω∂E(st,at)∈(S,A)[(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))2]=E(st,at)∈(S,A)[∂ω∂[(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))2]]=E(st,at)∈(S,A)[2⋅(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))⋅∂ω∂(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))]=E(st,at)∈(S,A)[2⋅(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))⋅(∂ω∂q(st,at;ω)−∂ω∂rt−∂ω∂q(st+1,a^t+1;ω))]=E(st,at)∈(S,A)[2⋅(q(st,at;ω)−(rt+q(st+1,a^t+1;ω)))⋅(∂ω∂q(st,at;ω)−0−0)]=E(st,at)∈(S,A)[δt⋅∂ω∂q(st,at;ω)]
由于对不同状态-动作对求期望与求偏导对象 ω \omega ω无关,因此可以将求期望运算从求偏导中提取出来,第一行转化为第二行;
根据链式法则,第二行转化为第三行;
在第四行中, r t r_t rt与求偏导对象 ω \omega ω无关,因此 ∂ r t ∂ ω = 0 \frac{\partial r_t}{\partial \omega} = 0 ∂ω∂rt=0;在后续会提到计算 q ( s t + 1 , a ^ t + 1 ; ω ) q(s_{t+1},\hat{a}_{t+1};\omega) q(st+1,a^t+1;ω)实际使用的是目标价值网络,该网络的参数实际为 ω − \omega^- ω−而不是 ω \omega ω,因此 q ( s t + 1 , a ^ t + 1 ; ω ) q(s_{t+1},\hat{a}_{t+1};\omega) q(st+1,a^t+1;ω)与求偏导对象 ω \omega ω也无关, ∂ q ( s t + 1 , a ^ t + 1 ; ω ) ∂ ω = 0 \frac{\partial q(s_{t+1},\hat{a}_{t+1};\omega)}{\partial \omega} = 0 ∂ω∂q(st+1,a^t+1;ω)=0,第四行转化为第五行;
根据TD error的定义,简化第五行,同时可忽略常数,得到第六行。
在神经网络中计算时,会按当前batch中的样本计算网络参数的梯度,即随机梯度
δ
t
⋅
∂
q
(
s
t
,
a
t
;
ω
)
∂
θ
\delta_t \cdot \frac{\partial q(s_t,a_t;\omega)}{\partial \theta}
δt⋅∂θ∂q(st,at;ω)。则Critic网络参数更新的式子为:
ω
←
ω
−
α
⋅
δ
t
⋅
∂
q
(
s
t
,
a
t
;
ω
)
∂
ω
\omega \leftarrow \omega - \alpha \cdot \delta_t \cdot \frac{\partial q(s_t,a_t;\omega)}{\partial \omega}
ω←ω−α⋅δt⋅∂ω∂q(st,at;ω)
其中,
α
\alpha
α为Critic网络的学习率。
3. 如何训练Actor网络
Actor的目标是输出好的动作(”好“与”不好“由Critic评估),使得Critic输出的动作价值尽量高。因此Actor的优化需要Critic参与。
根据Actor的目标,Actor网络的目标函数可以写成:
J
(
θ
)
=
E
(
s
t
,
a
t
)
∼
(
S
,
A
)
[
q
(
s
t
,
a
t
;
ω
)
]
=
E
(
s
t
,
a
t
)
∼
(
S
,
A
)
[
q
(
s
t
,
μ
(
s
t
;
θ
)
;
ω
)
]
\mathcal{J}(\theta) = \mathbb{E}_{(s_t,a_t)\sim(\mathcal{S},\mathcal{A})}[q(s_t, \textcolor{blue}{a_t}; \omega)] = \mathbb{E}_{(s_t,a_t)\sim(\mathcal{S},\mathcal{A})}[q(s_t, \textcolor{blue}{\mu(s_t;\theta)};\omega)]
J(θ)=E(st,at)∼(S,A)[q(st,at;ω)]=E(st,at)∼(S,A)[q(st,μ(st;θ);ω)]
则网络参数更新的梯度(这里直接写成随机梯度,省略期望)为:
∂
J
(
θ
)
∂
θ
←
∂
q
(
s
t
,
μ
(
s
t
;
θ
)
;
ω
)
∂
θ
=
∂
q
(
s
t
,
μ
(
s
t
;
θ
)
;
ω
)
∂
μ
(
s
t
;
θ
)
⋅
∂
μ
(
s
t
;
θ
)
∂
θ
(
此即为确定策略梯度
)
\begin{aligned} \frac{\partial \mathcal{J}(\theta)}{\partial \theta} &\leftarrow \frac{\partial q(s_t, \textcolor{blue}{\mu(s_t;\theta)};\omega)}{\partial \theta} \\ &= \frac{\partial q(s_t, \mu(s_t;\theta);\omega)}{\partial \mu(s_t;\theta)} \cdot \frac{\partial \mu(s_t;\theta)}{\partial \theta} \quad (此即为确定策略梯度) \end{aligned}
∂θ∂J(θ)←∂θ∂q(st,μ(st;θ);ω)=∂μ(st;θ)∂q(st,μ(st;θ);ω)⋅∂θ∂μ(st;θ)(此即为确定策略梯度)
根据链式法则,第一行转化为第二行。
令
g
=
∂
q
(
s
t
,
μ
(
s
t
;
θ
)
;
ω
)
∂
μ
(
s
t
;
θ
)
⋅
∂
μ
(
s
t
;
θ
)
∂
θ
g=\frac{\partial q(s_t, \mu(s_t;\theta);\omega)}{\partial \mu(s_t;\theta)} \cdot \frac{\partial \mu(s_t;\theta)}{\partial \theta}
g=∂μ(st;θ)∂q(st,μ(st;θ);ω)⋅∂θ∂μ(st;θ),
g
g
g即为确定策略梯度。由此,Actor网络参数更新的式子为:
θ
←
θ
+
β
⋅
g
\theta \leftarrow \theta + \beta \cdot g
θ←θ+β⋅g
4. 目标网络的使用
DQN中提到,前述TD error的计算方式会存在高估或低估动作价值的问题,这是因为TD error的计算中涉及到自举(Bootstrapping),在使用价值网络估计 Q ( s t + 1 , a t + 1 ) Q(s_{t+1},a_{t+1}) Q(st+1,at+1)时,如果此值已经高于或低于真实值,则对 Q ( s t , a t ) Q(s_t,a_t) Q(st,at)的估计也会高于或低于真实值。为了解决过估计的问题,DQN中使用了目标网络,此处也可以应用。
具体而言,记计算 Q ( s t + 1 , a t + 1 ) Q(s_{t+1},a_{t+1}) Q(st+1,at+1)使用的神经网络为目标价值网络 q ( s t + 1 , a t + 1 ; ω − ) q(s_{t+1},a_{t+1};\omega^-) q(st+1,at+1;ω−),其中 a t + 1 a_{t+1} at+1的计算也需要引入新的策略网络,即目标策略网络 μ ( s t + 1 ; θ − ) \mu(s_{t+1};\theta^-) μ(st+1;θ−)。
目标网络更新参数的方式为:
ω
−
←
τ
ω
+
(
1
−
τ
)
ω
−
,
θ
−
←
τ
θ
+
(
1
−
τ
)
θ
−
\omega^- \leftarrow \tau \omega + (1-\tau)\omega^-, \quad \theta^- \leftarrow \tau \theta + (1-\tau)\theta^-
ω−←τω+(1−τ)ω−,θ−←τθ+(1−τ)θ−
其中,
τ
∈
(
0
,
1
)
\tau \in (0,1)
τ∈(0,1),是一个超参数。当
τ
=
1
\tau=1
τ=1时,此种目标网络的更新方式与DQN的目标网络的更新方式一致。
5. 深度确定性策略梯度算法的流程
参考:第 13 章 DDPG 算法
6. 随机性策略和确定性策略的区别
随机性策略 | 确定性策略 | |
---|---|---|
策略网络输出 | 动作空间上的概率分布 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(a∣s;θ) | 具体的动作 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) |
使用动作 | 从动作分布中随机采样一个动作 | 直接使用输出的动作 |
应用场景 | 多用于离散型动作空间的控制任务 | 多用于连续型动作空间的控制任务 |
参考:【王树森】深度强化学习(DRL)P19