强化学习的学习之路(二十六)_2021-01-26: Noisy DQN

作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在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) yN(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+γaAmaxQ(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+γaAmaxQ(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] [N 1,+N 1] 的均匀分布进行初始化,参数 σ \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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页