DQN不便解决连续动作空间问题,因为其算法中用于critic更新的回归拟合方程存在求解max问题,所以仅适用于离散动作空间。
前面提到的DQN仅用Critic完成训练是不严谨的,只是便于同Actor-Critic等方法区分类比。下图将结合DQN到DDPG进行梳理,但此图可能存在问题,了解框架即可。
DDPG(deep DPG)即DPG(deterministic policy gradient)与DQN(deep Q network)的结合。DDPG所做的事就是用actor得到一个action,去近似critic需要得到的最大Q值的action,也就是critic输入的action是由actor所确定的:
max
a
Q
∗
(
s
,
a
)
≈
Q
θ
(
s
,
π
θ
(
s
)
)
\max_aQ^*(s,a)≈Q_{\theta}(s,{\pi}_{\theta}(s))
amaxQ∗(s,a)≈Qθ(s,πθ(s))其中
π
θ
(
s
)
{\pi}_{\theta}(s)
πθ(s)就是由actor所确定的action:1)作为critic的输入能输出最大Q值;2)只输出一个动作(确定性)。此外,DDPG是基于Actor-Critic框架下源自DQN的方法,也有用到DQN中的relay buffer和target network。
总而言之,DDPG主要做了两件事:1)学习一个Q function(critic);2)学习一个policy(actor)。并且在此policy下的actor仅输出一个action,作为critic的输入能得到输出近似最大Q值。
1. Q Learning Side of DDPG(critic)
根据贝尔曼最优方程:
Q
∗
(
s
,
a
)
=
r
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
max
a
Q
∗
(
s
′
,
a
′
)
Q^*(s,a)=r_s^a+{\gamma}{\sum_{s'∈S}}P_{ss'}^a\max_aQ^*(s',a')
Q∗(s,a)=rsa+γs′∈S∑Pss′aamaxQ∗(s′,a′)上述方程maxQ前面的累加与概率转移矩阵其实是对maxQ求期望的过程。所以其另一种写法即:
Q
∗
(
s
,
a
)
=
E
s
′
~
S
[
r
s
a
+
γ
max
a
′
Q
∗
(
s
′
,
a
′
)
]
Q^*(s,a)=E_{s'~S}[r_s^a+{\gamma}\max_{a'}Q^*(s',a')]
Q∗(s,a)=Es′~S[rsa+γa′maxQ∗(s′,a′)] DQN中的critic通过该方程更新。DDPG要做的是用一个带参数的神经网络
Q
ϕ
(
s
,
a
)
Q_{\phi}(s,a)
Qϕ(s,a)来逼近
Q
∗
(
s
,
a
)
Q^*(s,a)
Q∗(s,a)。假设buffer中已有足够经验(actor所做的)为
(
s
,
a
,
r
,
s
′
,
d
)
(s,a,r,s',d)
(s,a,r,s′,d)且已知
s
′
s'
s′,则
a
′
=
π
ϕ
(
s
′
)
a'={\pi}_{\phi}(s')
a′=πϕ(s′)。通过TD学习,建立以均方误差为损失的目标函数:
J
(
ϕ
)
=
L
(
ϕ
)
=
E
(
s
,
a
,
r
,
s
′
,
d
)
~
D
[
(
Q
ϕ
(
s
,
a
)
−
(
r
+
γ
(
1
−
d
)
Q
ϕ
(
s
′
,
a
′
)
)
)
2
]
J(\phi)=L(\phi)=E_{(s,a,r,s',d)~D}[(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\phi}(s',a')))^2]
J(ϕ)=L(ϕ)=E(s,a,r,s′,d)~D[(Qϕ(s,a)−(r+γ(1−d)Qϕ(s′,a′)))2]使用gradient descent方法求minimum:
▽
ϕ
J
(
ϕ
)
=
▽
ϕ
E
(
s
,
a
,
r
,
s
′
,
d
)
~
D
[
(
Q
ϕ
(
s
,
a
)
−
(
r
+
γ
(
1
−
d
)
Q
ϕ
(
s
′
,
a
′
)
)
)
2
]
▽_{\phi}J(\phi)=▽_{\phi}E_{(s,a,r,s',d)~D}[(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\phi}(s',a')))^2]
▽ϕJ(ϕ)=▽ϕE(s,a,r,s′,d)~D[(Qϕ(s,a)−(r+γ(1−d)Qϕ(s′,a′)))2]实作中利用重要性采样近似该期望,也就是用mini-batch的平均梯度近似目标函数梯度:
▽
ϕ
J
(
ϕ
)
=
▽
ϕ
1
∣
B
∣
∑
(
s
,
a
,
r
,
s
′
,
d
)
~
B
(
Q
ϕ
(
s
,
a
)
−
(
r
+
γ
(
1
−
d
)
Q
ϕ
(
s
′
,
a
′
)
)
)
2
▽_{\phi}J(\phi)=▽_{\phi}\frac{1}{|B|}{\sum}_{(s,a,r,s',d)~B}(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\phi}(s',a')))^2
▽ϕJ(ϕ)=▽ϕ∣B∣1∑(s,a,r,s′,d)~B(Qϕ(s,a)−(r+γ(1−d)Qϕ(s′,a′)))2其中
B
B
B为mini-batch的大小。利用相邻状态Q进行差分训练的方法即TD法,它的缺点是每次更新后回归拟合方程都会改变,不利于训练的稳定性,解决方法是延用DQN中的target网络,target网络的参数不再随着每次更新后立即更新,而是更新若干次后再与online网络(原网络)同步更新,在此期间的online网络更新依靠target网络。所以目标函数梯度:
▽
ϕ
J
(
ϕ
)
=
▽
ϕ
1
∣
B
∣
∑
(
s
,
a
,
r
,
s
′
,
d
)
~
B
(
Q
ϕ
(
s
,
a
)
−
(
r
+
γ
(
1
−
d
)
Q
ϕ
^
(
s
′
,
π
θ
^
(
s
′
)
)
)
)
2
▽_{\phi}J(\phi)=▽_{\phi}\frac{1}{|B|}{\sum}_{(s,a,r,s',d)~B}(Q_{\phi}(s,a)-(r+{\gamma}(1-d)Q_{\hat{\phi}}(s',{\pi}_{\hat{\theta}}(s'))))^2
▽ϕJ(ϕ)=▽ϕ∣B∣1∑(s,a,r,s′,d)~B(Qϕ(s,a)−(r+γ(1−d)Qϕ^(s′,πθ^(s′))))2
其中
ϕ
\phi
ϕ和
θ
\theta
θ分别表示critic和actor网络的参数,
ϕ
^
\hat{\phi}
ϕ^和
θ
^
\hat{\theta}
θ^分别表示critic和actor的target网络参数。
DDPG的target网络更新参数不再像DQN中的一样进行硬更新:
ϕ
^
=
ϕ
\hat{\phi}=\phi
ϕ^=ϕ。而是采用软更新:
ϕ
^
′
=
τ
ϕ
+
(
1
−
τ
)
ϕ
^
\hat{\phi}'={\tau}\phi+(1-\tau)\hat{\phi}
ϕ^′=τϕ+(1−τ)ϕ^。其中
τ
\tau
τ是一个超参数,表示更新的软硬程度。至此完成了critic的更新。
正如前面所说,遍历连续动作空间中所有动作的Q值是十分困难的,DDPG则利用了一个target policy网络(actor的target网络)去计算近似critic输出最大Q值的action:
π
θ
^
(
s
′
)
{\pi}_{\hat{\theta}}(s')
πθ^(s′)。(为了稳定性,用actor的target网络训练critic,所以是
θ
^
\hat{\theta}
θ^)
2. Policy Learning Side of DDPG(actor)
actor的目标就是找到唯一一个action,其作为critic的输入能输出最大Q值。也就是学习训练
a
=
π
θ
(
s
)
a=\pi_{\theta}(s)
a=πθ(s)使得
Q
ϕ
(
s
,
a
)
Q_{\phi}(s,a)
Qϕ(s,a)最大:
m
a
x
θ
E
s
~
S
[
Q
ϕ
(
s
,
π
θ
(
s
)
)
]
max_{\theta}E_{s~S}[Q_{\phi}(s,\pi_{\theta}(s))]
maxθEs~S[Qϕ(s,πθ(s))]
J
(
θ
)
=
E
s
~
S
[
Q
ϕ
(
s
,
π
θ
(
s
)
)
]
J(\theta)=E_{s~S}[Q_{\phi}(s,\pi_{\theta}(s))]
J(θ)=Es~S[Qϕ(s,πθ(s))]使用gradient boosting方法求解,因为是连续动作空间,所以Q对action是可微的:
▽
θ
J
(
θ
)
=
∂
Q
∂
θ
=
∂
Q
ϕ
(
s
,
π
θ
(
s
)
)
∂
π
θ
(
s
)
∗
∂
π
θ
(
s
)
∂
θ
▽_{\theta}J(\theta)=\frac{\partial{Q}}{\partial{\theta}}=\frac{\partial{Q_{\phi}(s,{\pi}_{\theta}(s))}}{\partial{{\pi}_{\theta}(s)}}*\frac{\partial{{\pi}_{\theta}(s)}}{\partial{\theta}}
▽θJ(θ)=∂θ∂Q=∂πθ(s)∂Qϕ(s,πθ(s))∗∂θ∂πθ(s)
至此完成了actor的更新,与critic一样,actor网络也可以用target网络进行更新。更为详细的DDPG算法如下:
参考资料为OpenAI Spinning up:DDPG