神经网络中的其他技术

介绍一些技巧,防止神经元饱和导致学习缓慢

#更好的代价函数和激活函数

前面已经介绍,我们使用corss entropy function+sigmoid function 或者softmax active fuction + log-likehood能够较好的避免学习缓慢的问题,具体请参考这里

但请注意,这里我们只针对输出神经元在错误的值上饱和导致的学习下降,而对隐藏层的神经元毫无办法。

#权重初始化

#标准正态分布初始化

最常见的初始化神经元方法是使用标准正态分布随机初始化,这会带来一个问题。

设想,我们第一层神经元的$w、b$已经初始化为服从$U(0,1)$的正态分布,且输入$x$为0或者1,这里假设为0的有500个,1也有五百个。

因此,我们考虑带权和:

$$z = \sum_j w_jx_j + b$$

不难得到,$z $服从$U(0,501)$的正太分布。这将导致我们的$z$非常分散,也就是说$z >>1 $或者$z<<-1$。这对我们是非常不利的,因为这将导致$\sigma(z)$接近1或者0,神经网络将很难继续学习。

#减小标准差进行初始化

因此,我们可以将$w$初始化为服从$U(0,\frac{1}{n_{in}})$的高斯分布,其中$n_{in}$表示有这么多个输入权重的神经元。

这样,根据上面假设的例子,$z$会服从$U(0,\frac{3}{2})$的正态分布,比之前好了很多。

#为什么不处理$b$

经验表明,如何初始化偏置影响不大。

有些人甚至将偏置初始化为0也可以。

#神经元的其他模型

除了常见的sigmoid神经元,近年来还出现了很多其他神经元,在不同神经网络中有不同的优势。

#Tanh

tanh神经元使用heperbolic tangent函数代替S型函数:

$$\tanh (z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$

我们可以得到其余sigmoid函数的关系:

$$\sigma(z) = \frac{1+\tanh (z/2)}{2}$$

函数的主要区别在于,tanh神经元的输出值为(-1,1)而不是(0,1)。

有时候tanh神经元比sigmoid表现的更好,一个直觉的观察为:当$\delta_j^{l} $变化时,所有的$w_{jk}^{l}$都会随着变大或变小,但如果是tanh神经元的话,值为负和正的神经元的变化方向会相反,更符合实际。

#RLU

Rectified linear neuron是主要用于LSTMRNN等网络中的神经元,其输出为:

$$\max (0,w x+b)$$

这个神经元的特点是:

  1. 提高RLU的带全输入并不会导致其饱和,所以也就不存在前面的学习速率下降的问题。

  2. 当带全输入为负数时,梯度就消失了,神经网络完全停止了学习。

Load Comments?