八、改进神经网络的学习方法(4):权重初始化

本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。

1. 原始权重初始化的缺点

  之前根据独立高斯随机变量来选择权重和偏置,其被归一化为均值为0,标准差1。但是这样的初始化方法会带来梯度学习算法变慢的缺点,下面举例说明。
  假设我们使用一个有大量输入神经元的网络,比如说1000个输入神经元,并且已经使用归一化的高斯分布初始化了连接第一个隐藏层的权重。现在我将注意力集中在这一层的连接权重上,忽略网络其他部分。为了简化,假设我们使用训练输入 x x x,其中一半的输入神经元值为0,另一半为1,虽然这种情况很特殊,但是结论是具有普遍适应性的。让我们考虑这一隐藏层的神经元权值输入 z = ∑ j w j x j + b z=\sum_jw_jx_j+b z=jwjxj+b。其中500个项消去了,因为对应的输入为0。所以 z z z 是遍历总共501个归 一化的高斯随机变量的和,包含500个权重项和额外的1个偏置项。因为独立随机变量和的方差是每个独立随机变量方差的和,因此 z z z 本身是一个均值为0标准差为 501 ≈ 22.4 \sqrt{501}\approx22.4 501 22.4 的高斯分布,如图1所示其实有一个非常宽的高斯分布,完全不是非常尖的形状

八、改进神经网络的学习方法(4):权重初始化_第1张图片
图1. 变量 $z$ 的分布情况

从图1可以看出 ∣ z ∣ |z| z 会变得很大,即 z > > 1 z>>1 z>>1 或者 z < < − 1 z<<-1 z<<1。如果是这样,隐藏神经元的输出就会接近1或者0,也就表示我们的隐藏神经元会饱和。由反向传播的公式可以知道,这些权重在我们进行梯度下降算法时会学习得非常缓慢,减慢学习速度。之前介绍的交叉熵代价函数只是在输出层有效,但对于隐藏神经元的饱和却一点作用都没有。
  我已经讨论了第一个隐藏层的权重输入。当然,类似的论证也适用于后面的隐藏层:如果后面隐藏层的权重也是用归一化的高斯分布进行初始化,那么激活值将会非常接近1或者0,学习速度也会相当缓慢。

2. 改进方法

  因为上述的方法中是由于权值输入 ∣ z ∣ |z| z 的方差很大导致这一现象的发生,因此应该限制他的方差。具体的方法为使用均值为0标准差为 1 n i n \frac{1}{\sqrt{{n_{in}}}} nin 1的高斯随机分布初始化权重,但是继续用均值为0标准差为1的高斯分布来对偏置进行初始化。这样权值输入 ∣ z ∣ |z| z 的均值仍然是0,根据独立随机变量和的方差是每个独立随机变量方差的和,方差的计算公式如下
S 2 = ( 1 n i n ) 2 n i n 2 + 1 = 3 2 ≈ 1.22 S^2=\left(\frac{1}{\sqrt{n_{in}}}\right)^2\frac{n_{in}}{2}+1=\sqrt{\frac32}\approx1.22 S2=(nin 1)22nin+1=23 1.22
得到具有尖锐峰值的高斯分布,如图2所示

八、改进神经网络的学习方法(4):权重初始化_第2张图片
图2. 改变独立随机变量方差后的权值输入的分布情况

很明显具有这样分布的神经网络更不可能饱和,也不大可能遇到学习速度下降的问题。注意到我们对于偏置值的初始化方法没有改变;有些人将所有的偏置初始化为0,依赖梯度下降来学习合适的偏置,但是因为差别不是很大。实际上,考虑到已经避免了饱和的问题,如何初始化偏置影响不大。

3. 实际效果

  让我们在 MNIST 数字分类任务上比较一下新旧两种权重初始化方式。同样,还是使用30个隐藏元,minibatch 的大小为10,规范化参数 λ = 5 \lambda = 5 λ=5,然后是交叉熵代价函数。我们将learningrate从 η = 0.5 \eta = 0.5 η=0.5 降到 η = 0.1 \eta = 0.1 η=0.1 ,因为这样会让结果在图像中表现得更加明显。实验结果如图3所示

八、改进神经网络的学习方法(4):权重初始化_第3张图片
图3. 改变方差前后实验效果对比图

如图3在经过一轮迭代后,第一种初始化方式的分类准确率在 87% 以下,而新的方法已经几乎达到了 93%。两种情形下,我们最终都获得了超过 96% 的准确率,但是新的 初始化技术带来了速度的提升。

  基于这些实验,看起来提升的权重初始化仅仅会加快训练,不会改变网络的最终性能。然而,在第四章,我们会看到一些例子里面使 1 n i n \frac1{n_{in}} nin1用初始化权重的长期运行 的结果要显著更优。因此,不仅仅能够带来训练速度的加快,有时候在最终性能上也有很大的提升。

你可能感兴趣的:(八、改进神经网络的学习方法(4):权重初始化)