防止神经元饱和的若干方法

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

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

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

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

权重初始化

标准正太分布初始化

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

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

因此,我们考虑带权和:

z = j w j x j + b

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

减小标准差进行初始化

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

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

为什么不处理 b

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

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

猜你喜欢

转载自blog.csdn.net/crazy_scott/article/details/80343312