背景
对于DRL中面对的exploration-exploition问题,目前广泛使用以下两种方法:
- ε-greedy法 通常应用于DQN类算法中,使agent以\(ε\)的概率采取随机行动,通常会在训练开始时设置\(\epsilon\)为1,然后慢慢衰减
- 熵正则化(entropy regularisation) 通常用于策略梯度算法中,通过将策略\(\pi\)的熵加入到损失函数中,算法能够生成更为均匀平滑的策略
NoisyNet
相比较上述两种方法将exploration分别使用启发式搜索以及损失函数的方式引入算法,NoisyNet算法通过将高斯噪声添加到网络中最后的完全连接层来实现exploration的引入。
相比于普通的神经网络,NoisyNet的权重和偏置都会受到噪音的影响。设其数学表示为\(y=f_{\theta}(x)\),其中\(\theta\)为受噪声影响的参数,则\(\theta\)可以被定义为:
\[ \theta \stackrel{\text { def }}{=} \mu+\Sigma \odot \varepsilon \]
其中\(\zeta \stackrel{\text { def }}{=}(\mu, \Sigma)\)为可学习的向量,\(\varepsilon\)为均值为0的高斯噪声,\(\Sigma\)为噪声的权重,\(\odot\)表示点乘。NoisyNet的损失函数可以表示为:
\[ \bar{L}(\zeta) \stackrel{\text { def }}{=} \mathbb{E}[L(\theta)] \]
也就是说,在优化的时候,只对\(\zeta\)中的参数计算梯度,而不对噪声进行优化;但是在计算损失函数的时候,则考虑到噪声的影响,使用\(\theta\)作为参数。
举个例子,考虑线性模型\(y=w x+b\),未经过噪声扰动时,其参数为\(w\),\(b\);经过噪声扰动后,式子变成:
\[ y \stackrel{\text { def }}{=}\left(\mu^{w}+\sigma^{w} \odot \varepsilon^{w}\right) x+\mu^{b}+\sigma^{b} \odot \varepsilon^{b} \]
其中\(\mu^{w}\),\(\sigma^{w}\),\(\mu^{b}\)以及\(\sigma^{b}\)是可以调整的,而\(\varepsilon^{w}\)以及\(\varepsilon^{b}\)是不可以调整的。
引入噪声的方法
Noisy Networks for Exploration 一文中提供了。两种引入噪声的方法。
Independent Gaussian noise 指的是给每一个权重都添加一个独立的噪声,并且具有模型自己学习的\(\mu\)和\(\sigma\)。假设一个具有p个神经元输入,q个神经元输出的全连接层,在这种情况下,需要的随机噪声变量个数为(pq+q)个。
Factorised Gaussian noise 指的是分配给每一个神经元一个独立的高斯噪声,每个神经元具有独立的\(\mu\)和\(\sigma\)。具体到每一个权重,权重\(w_{i j}\)的噪声为
\[ \varepsilon_{i, j}^{w}=f\left(\varepsilon_{i}\right) f\left(\varepsilon_{j}\right) \]
偏置\(b_{j}\)的噪声为
\[ \varepsilon_{j}^{b}=f\left(\varepsilon_{j}\right) \]
其中\(f\)可以使用\(f(x)=\operatorname{sgn}(x) \sqrt{|x|}\)
计算
根据损失函数,可以定义梯度为
\[ \nabla \bar{L}(\zeta)=\nabla \mathbb{E}[L(\theta)]=\mathbb{E}\left[\nabla_{\mu, \Sigma} L(\mu+\Sigma \odot \varepsilon)\right] \]
使用蒙特卡洛法估计有
\[ \nabla \bar{L}(\zeta) \approx \nabla_{\mu, \Sigma} L(\mu+\Sigma \odot \xi) \]
在DQN中存在Online network以及Target Network,其参数分别为\(\theta\)以及\(\theta'\)。当使用Noisy Network时,就变成了Online Network\(Q(s, a, \varepsilon ; \zeta)\)以及Target Network\(Q\left(s, a, \varepsilon^{\prime} ; \zeta^{-}\right)\)。使用蒙特卡洛法的损失函数为
\[ \bar{L}(\zeta)=\mathbb{E}\left[\mathbb{E}_{(s, a, r, y) \sim D}\left[r+\gamma \max _{b \in A} Q\left(s', b, \varepsilon^{\prime} ; \zeta^{-}\right)-Q(s, a, \varepsilon ; \zeta)\right]^{2}\right] \]
其中\(\varepsilon\)以及\(\varepsilon'\)为分别采样的噪声。作者建议在DQN中,每一个新的batch重新采样一次噪声。
具体流程如下:
Noisy Network也能应用在A3C中,具体参考 Noisy Networks for Exploration 。