作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在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等。
增强探索能力是强化学习中经常遇到的问题,在前面我们曾接触过 ϵ − \epsilon- ϵ− greedy 的方 法,这个算法中以一定的概率 ϵ \epsilon ϵ 随机执行行动,而在剩下的 1 − ϵ 1-\epsilon 1−ϵ 中执行最优行动,这相当于在执行策略的环节增加一定的噪声,使得模型具备一定的探索能力
我们现在介绍另一种增强探索能力的方法: Noisy Network,来自论文 Noisy Networks for Exploration。不同于
ϵ
\epsilon
ϵ -greedy 的方法,它使用了一种更平滑的手段增加探索能力。那么,算法是如何实现想要的效果的呢?我们以一个简单的函数为例,来看看它的
效果。这个函数的形式为
y
=
w
x
+
b
y=w x+b
y=wx+b
其中
x
x
x 表示输人、y 表示输出,
w
w
w 和
b
b
b 是函数的参数。也就是说,如果输人是
x
,
x,
x, 那 么经过函数的变换,输出的结果就会变成
y
∘
y_{\circ}
y∘ 这样,我们就可以使用这个函数表示自然界中一组
x
x
x 和
y
y
y 的关系。当然,自然界中存在着一定的噪声,我们无法直接使用这个函数进行表示,于是给函数加一个噪声项,于是函数变为
y
=
w
x
+
b
+
ϵ
y=w x+b+\epsilon
y=wx+b+ϵ
其中
ϵ
\epsilon
ϵ 服从均值为 0 , 方差为
σ
2
\sigma^{2}
σ2 的高斯分布
ϵ
∼
N
(
0
,
σ
2
)
\epsilon \sim N\left(0, \sigma^{2}\right)
ϵ∼N(0,σ2)
σ
\sigma
σ 是一个固定值,表示噪声带来的方差。这样我们也可以认为
y
y
y 服火如下的高斯分布:
y
∼
N
(
w
x
+
b
,
σ
2
)
y \sim N\left(w x+b, \sigma^{2}\right)
y∼N(wx+b,σ2)
可以看出由于噪声的存在,我们可以从同一个
x
x
x 映射到多个
y
y
y, 这相当于增加了输 出的不确定性。不确定性对于探索来说十分重要,由于不确定性的存在,我们可以选择确定行动之外的其他行动,因此我们发现噪声和探索存在某些类似的特性,我们可以利用噪声增加模型的探索能力。
一种添加噪声的方法是在参数上增加噪声。对于上面函数中的参数
w
w
w, 我们可以 定义参数来自均值为
μ
w
,
\mu_{w},
μw, 方差为
σ
w
\sigma_{w}
σw 的高斯分布。同理,参数
b
b
b 服从均值为
μ
b
,
\mu_{b},
μb, 方差 为
σ
b
\sigma_{b}
σb 的高斯分布,这样函数就变成了下面的形式:
w
~
∼
N
(
μ
w
,
σ
w
)
b
~
∼
N
(
μ
b
,
σ
b
)
y
=
w
~
x
+
b
~
\begin{array}{l} \tilde{w} \sim N\left(\mu_{w}, \sigma_{w}\right) \\ \tilde{b} \sim N\left(\mu_{b}, \sigma_{b}\right) \\ y=\tilde{w} x+\tilde{b} \end{array}
w~∼N(μw,σw)b~∼N(μb,σb)y=w~x+b~
这个形式理解起来并不难,前向计算也并不困难,但是反向计算却有点困难,如何将得到的反向梯度传递到高斯分布中的分布参数呢?为了简化计算,我们需要将参数的表现形式做一定的变换,变成固定部分和随机部分的和,形式如下所示:
w
~
=
μ
w
+
σ
w
ϵ
b
~
=
μ
b
+
σ
b
ϵ
\begin{array}{l} \tilde{w}=\mu_{w}+\sigma_{w} \epsilon \\ \tilde{b}=\mu_{b}+\sigma_{b} \epsilon \end{array}
w~=μw+σwϵb~=μb+σbϵ
w ~ = μ w + σ w ϵ b ~ = μ b + σ b ϵ \begin{array}{l} \tilde{w}=\mu_{w}+\sigma_{w} \epsilon \\ \tilde{b}=\mu_{b}+\sigma_{b} \epsilon \end{array} w~=μw+σwϵb~=μb+σbϵ
ϵ
\epsilon
ϵ代表参数中的随机部分,它不属于参数, 服从确定的统计分布,例如均值为
0
,
0,
0, 方差为 1 的高斯分布
N
(
0
,
1
)
N(0,1)
N(0,1) 。在完成采样后,它可以被当成一个常量对待,这样另外两 个参数就可以使用前向后向计算优化了。当然,上面这种方法也只是为模型添加噪声的方法之一,如果利用这种方法增加噪声,那么如果函数原本有
N
N
N 个参数,为了实现噪声的效果,我们需要把参数数量增加一倍,对于小型网络来说,使用这样的方法添加噪声是可行的,但对较大的网络来说,增加一倍的网络参数会给计算带来不小的负担。
为了减少噪声参数的数量,我们还可以从函数参数的结构入手。在我们熟悉的全连接运算中,参数
w
w
w 一般是一个二维的矩阵,假设它的维度为
p
×
q
,
p \times q,
p×q, 那么我们可以只生成
p
+
q
p+q
p+q 个噪声参数,**也就是把对每个权重加噪声换成对每个神经元加噪声,**于是对于上述函数中每一个参数,可以用下面这种全新的形式 表示:
w
i
,
j
=
μ
w
[
i
,
j
]
+
f
(
σ
p
[
i
]
)
f
(
σ
q
[
j
]
)
ϵ
\boldsymbol{w}_{i, j}=\mu_{w}[i, j]+f\left(\sigma_{p}[i]\right) f\left(\sigma_{q}[j]\right) \epsilon
wi,j=μw[i,j]+f(σp[i])f(σq[j])ϵ
b j = μ b [ j ] + f ( σ q [ j ] ) ϵ b_{j}=\mu_{b}[j]+f\left(\sigma_{q}[j]\right) \epsilon bj=μb[j]+f(σq[j])ϵ
其中参数数值的第一项保持不变,后面一项的表示有些变化。我们将添加的 p + q p+q p+q 个参数分成两部分,一部分的维度为 p , σ p [ i ] p, \sigma_{p}[i] p,σp[i] 表示其中的第 i i i 个噪声参数; 另一部分的维度 为 q , σ q [ j ] q, \sigma_{q}[j] q,σq[j] 表示其中第 j j j 个噪声参数。这里的 f ( x ) = sgn ( x ) x f(x)=\operatorname{sgn}(x) \sqrt{x} f(x)=sgn(x)x样的设定,我 们在噪声效果和噪声参数数量两方面得到了很好的平衡。对于更复杂的模型,我们也 可以采用类似的方法添加噪声参数来实现对噪声信息的拟合。
完成了对添加噪声基本思想的介绍,下面就来介绍这个噪声的参数如何融入我们已经介绍的 DQN 算法,我们知道基于 Target Network 的 DQN 算法的目标函数公式为
L
(
θ
)
=
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
L(\theta)=E_{\left(s_{t}, a_{t}, \boldsymbol{r}_{t}, \boldsymbol{s}_{t+1}\right) \sim D}\left[\boldsymbol{r}_{t}+\gamma \max _{\boldsymbol{a} * \in \boldsymbol{A}} Q\left(\boldsymbol{s}_{t+1}, \boldsymbol{a}^{*} ; \theta^{-}\right)-Q\left(s_{t}, \boldsymbol{a}_{t} ; \theta\right)\right]^{2}
L(θ)=E(st,at,rt,st+1)∼D[rt+γa∗∈AmaxQ(st+1,a∗;θ−)−Q(st,at;θ)]2
其中
θ
\theta
θ 表示 Behavior Network 的模型参数,
θ
−
\theta^{-}
θ− 表示 Target Network 的模型参数。我们可以在值函数中加人一定的噪声,由于噪声会影响最终的价值输出,也会影响最终的行动,于是噪声的大小影响了模型的探索特性,噪声越小表示探索能力越小,噪声越大表示探索能力越大。我们可以为两个模型参数分别加入噪声随机变量
ϵ
\epsilon
ϵ 和
ϵ
−
,
\epsilon^{-},
ϵ−, 以及噪声参数
σ
\sigma
σ 和
σ
−
,
\sigma^{-},
σ−, 此时新的目标函数变为:
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(\boldsymbol{s}_{t}, \boldsymbol{a}_{t}, \boldsymbol{r}_{t}, \boldsymbol{s}_{t+1}\right) \sim D}\left[\boldsymbol{r}_{t}+\gamma \max _{\boldsymbol{a} * \in \boldsymbol{A}} Q\left(\boldsymbol{s}_{t+1}, \boldsymbol{a}^{*}, \epsilon^{-} ; \theta^{-}, \sigma^{-}\right)\right.\right.\\ &\left.\left.-Q\left(\boldsymbol{s}_{t}, \boldsymbol{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]
在原本的目标函数中噪声项并不存在,因此此时噪声的加入使得目标函数产生了偏差。为了消除这个偏差,我们可以对噪声求期望,由于噪声的期望值为
0
,
0,
0, 求解期望后目标函数不再有偏,但是模型依然拥有一定的探索能力。
最后,由于噪声的引人,我们需要考虑噪声参数的初始化。根据论文中的介绍,噪声参数为 p + q p+q p+q 个时,令 N = p × q , N=p \times q, N=p×q, 参数 μ \mu μ 按照范围为 [ 1 N , + 1 N ] \left[\frac{1}{\sqrt{N}},+\frac{1}{\sqrt{N}}\right] [N1,+N1] 的均匀分布进行初始化,参数 σ \sigma σ 将初始化为常量 $\frac{0.4}{\sqrt{N}} $
算法最终的结构如下:
结果如下图所示:
上一篇:强化学习的学习之路(二十五)_2021-01-25:Distributional DQN:Implicit Quantile Networks for Distributional RL
下一篇:强化学习的学习之路(二十七)_2021-01-27:Q-learning with continuous actions