作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
接下来的几个博客将会分享以下有关DQN算法及其改进,包括DQN(Nature)、Double DQN、 Multi-step DQN、Pirority Replay Buffer、 Dueling DQN、DQN from Demonstrations、Distributional DQN、Noisy DQN、Q-learning with continuous actions、Rainbow、Practical tips for DQN等。
Rainbow
Rainbow一个集多长所长的模型,来自论文 Rainbow: Combining Improvements in Deep Reinforcement Learning,他主要包括我们前面提到的一下几个改进,我们这里稍微再回顾一下:
Double Q-Learning
Double Q-Learning 构建了两个结构相同但是参数数值不同的模型:Behavior Net-work 和 Target Network。在模型更新时,首先由 Behavior Network 选出
t
+
1
t+1
t+1 时刻的最优行动,然后由 Target Network 得到估计
t
+
1
t+1
t+1 时刻最优行动的目标价值估计。通过将这两个步骤解耦,我们可以减少 Q-Learning 方法对价值过高估计带来的影响,其中的核心公式为
L
(
θ
)
=
(
r
t
+
1
+
γ
q
θ
−
(
s
t
+
1
,
argmax
a
′
q
θ
(
s
t
+
1
,
a
′
)
)
−
q
θ
(
s
t
,
a
t
)
)
2
L(\theta)=\left(r_{t+1}+\gamma q_{\theta^{-}}\left(s_{t+1}, \operatorname{argmax}_{a^{\prime}} q_{\theta}\left(s_{t+1}, a^{\prime}\right)\right)-q_{\theta}\left(s_{t}, a_{t}\right)\right)^{2}
L(θ)=(rt+1+γqθ−(st+1,argmaxa′qθ(st+1,a′))−qθ(st,at))2
Prioritized Replay Buffer
Prioritized Replay Buffer 通过对 Replay Buffer 中不同的样本赋子不同的权重,使得 模型有更高的概率训练对自己有更多提升的样本上, 同时以较低的概率训练对自己提升有限的样本。样本出现的权重和样本采样时的 TD-Error有关,样本的学习率和更新权重还可以根据参数进行调整。
Dueling Networks
Dueling Networks 将状态行动价值模型 q ( s , a ) q(s, a) q(s,a) 分解成状态价值 v ( s ) v(s) v(s) 和价值优势 A ( s , a ) A(s, a) A(s,a) 两个部分,分解后的两部分具有明确的含义,而这样的分解也同时降低了训练的难度,其中的核心公式为
q ( s t , a t ) = v ( s t ) + ( A ( s t , a t ) − 1 ∣ A ∣ ∑ a ′ A ( s t , a t ′ ) ) q\left(s_{t}, a_{t}\right)=v\left(s_{t}\right)+\left(A\left(s_{t}, a_{t}\right)-\frac{1}{|A|} \sum_{a^{\prime}} A\left(s_{t}, a_{t}^{\prime}\right)\right) q(st,at)=v(st)+(A(st,at)−∣A∣1a′∑A(st,at′))
Multi-step Learning
前面介绍的 Q-Learning 大多通过下一时刻的回报和价值估计得到目标价值,这种方法在前期具有学习速度较慢的弱点,为了克服这个弱点,Multi-step Learning 使用了更多步的回报,这样在训练前期目标价值可以估计得更准确,从而加快训练速度,其中的核心公式为
q
′
(
s
t
,
a
t
)
=
r
t
+
1
+
γ
r
t
+
2
+
⋯
+
γ
n
−
1
r
t
+
n
+
max
a
γ
n
q
(
s
t
+
n
+
1
,
a
)
q^{\prime}\left(s_{t}, \boldsymbol{a}_{t}\right)=r_{t+1}+\gamma \boldsymbol{r}_{t+2}+\cdots+\gamma^{n-1} r_{t+n}+\max _{a} \gamma^{n} q\left(s_{t+n+1}, \boldsymbol{a}\right)
q′(st,at)=rt+1+γrt+2+⋯+γn−1rt+n+amaxγnq(st+n+1,a)
Distributional Network
DQN 网络只输出了期望形式的价值,而对价值缺少更细致的刻画。Distributional Network 的模型结构可以输出价值的分布形式。我们可以设定价值模型可能的输出范围
[
V
M
I
N
,
V
M
A
X
]
,
\left[V_{\mathrm{MIN}}, V_{\mathrm{MAX}}\right],
[VMIN,VMAX], 并在范围内以直方图的形式表示价值对应的出现概率,这使模型的表现能力有了很大的提升,分布形式模型的表示形式如下所示:
{
z
i
=
V
M
I
N
+
i
Δ
z
:
0
⩽
i
<
N
}
p
i
(
x
,
a
)
=
e
θ
i
(
x
,
a
)
∑
j
e
θ
j
(
x
,
a
)
\begin{array}{l} \left\{z_{i}=V_{\mathrm{MIN}}+i \Delta z: 0 \leqslant i<N\right\} \\ p_{i}(x, a)=\frac{\mathrm{e}^{\theta_{i}(\boldsymbol{x}, a)}}{\sum_{j} \mathrm{e}^{\theta_{j}(\boldsymbol{x}, \boldsymbol{a})}} \end{array}
{zi=VMIN+iΔz:0⩽i<N}pi(x,a)=∑jeθj(x,a)eθi(x,a)
Noisy Network
模型的探索能力一直是一个需要提高的方面。为了更优雅、灵活地提高模型的探索能力, Noisy Network 为模型参数加入了一定的噪声,通过噪声的随机性改变参数的 数值,进而改变模型输出的数值,对应的更新公式为
L
(
θ
)
=
E
ϵ
−
,
ϵ
[
E
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
∼
D
[
r
t
+
γ
max
a
∗
∈
A
Q
(
s
t
+
1
,
a
∗
,
ϵ
−
;
θ
−
,
σ
−
)
−
Q
(
s
t
,
a
t
,
ϵ
;
θ
,
σ
)
]
2
]
\begin{aligned} L(\theta)=& E_{\epsilon^{-}, \epsilon}\left[E_{\left(s_{t}, a_{t}, r_{t}, s_{t+1}\right) \sim D}\left[r_{t}+\gamma \max _{a * \in A} Q\left(s_{t+1}, a^{*}, \epsilon^{-} ; \theta^{-}, \sigma^{-}\right)\right.\right.\\ &\left.\left.-Q\left(s_{t}, a_{t}, \epsilon ; \theta, \sigma\right)\right]^{2}\right] \end{aligned}
L(θ)=Eϵ−,ϵ[E(st,at,rt,st+1)∼D[rt+γa∗∈AmaxQ(st+1,a∗,ϵ−;θ−,σ−)−Q(st,at,ϵ;θ,σ)]2]
如何结合:
首先我们把TD的一步自举换成n步自举, 目的分布变成了
d
t
(
n
)
=
(
R
t
(
n
)
+
γ
t
(
n
)
z
,
p
θ
ˉ
(
S
t
+
n
,
a
t
+
n
∗
)
)
d_{t}^{(n)}=\left(R_{t}^{(n)}+\gamma_{t}^{(n)} z, \quad \boldsymbol{p}_{\bar{\theta}}\left(S_{t+n}, a_{t+n}^{*}\right)\right)
dt(n)=(Rt(n)+γt(n)z,pθˉ(St+n,at+n∗))
于是损失函数变成了
D
K
L
(
Φ
z
d
t
(
n
)
∥
d
t
)
D_{\mathrm{KL}}\left(\Phi_{z} d_{t}^{(n)} \| d_{t}\right)
DKL(Φzdt(n)∥dt)
注意Rainbow是2017年提出的, 那时候人们还在用C51呢, 所以用KL散度衡量两个分布之间的差异不足为奇。
接下来, Prioritized experience replay排序的顺序也需要调整, 因为之前我们是依据TD-error排 序的, 现在因为不再使用Q值函数了, TD-error应该进化为KL散度了, 于是
p
t
∝
(
D
K
L
(
Φ
z
d
t
(
n
)
∥
d
t
)
)
ω
p_{t} \propto\left(D_{\mathrm{KL}}\left(\Phi_{z} d_{t}^{(n)} \| d_{t}\right)\right)^{\omega}
pt∝(DKL(Φzdt(n)∥dt))ω
最后是把Dueling DQN的结构和Distributional DQN的结构结合起来, 因为它们都是对网络结构进行了调整。
我们从Dueling DQN的结构出发, 原先是输出一个状态值函数
V
(
s
)
V(s)
V(s) 和一組动作的优势函数
A
(
s
,
a
)
,
A(s, a),
A(s,a), 现在我们需要输出分布了。
别忘了C51用的是固定的atoms位置, 可变的atoms概率表示分布。atoms的个数为
N
N
N
那么value stream
v
η
v_{\eta}
vη 的输出应该是一个
N
N
N 维的向量, 而advantage stream
a
ψ
a_{\psi}
aψ 的输出应该 是一个
N
×
∣
A
∣
N \times|\mathcal{A}|
N×∣A∣ 的矩阵, 最后每个atoms对应的概率可以表示头
p
θ
i
(
s
,
a
)
=
exp
(
v
η
i
(
ϕ
)
+
a
ψ
i
(
ϕ
,
a
)
−
a
ˉ
ψ
i
(
s
)
)
∑
j
exp
(
v
η
j
(
ϕ
)
+
a
ψ
j
(
ϕ
,
a
)
−
a
ˉ
ψ
j
(
s
)
)
p_{\theta}^{i}(s, a)=\frac{\exp \left(v_{\eta}^{i}(\phi)+a_{\psi}^{i}(\phi, a)-\bar{a}_{\psi}^{i}(s)\right)}{\sum_{j} \exp \left(v_{\eta}^{j}(\phi)+a_{\psi}^{j}(\phi, a)-\bar{a}_{\psi}^{j}(s)\right)}
pθi(s,a)=∑jexp(vηj(ϕ)+aψj(ϕ,a)−aˉψj(s))exp(vηi(ϕ)+aψi(ϕ,a)−aˉψi(s))
最后,作者还比较了如果从Rainbow中去掉某个因素,模型的性能: 可以看出Prioritized replay和multi-step learning是最关键的两项技术,特别是multi-step learning。
上一篇:强化学习的学习之路(二十七)_2021-01-27:Q-learning with continuous actions
上一篇:强化学习的学习之路(二十九)_2021-01-29:Practical tips for DQN