权重的初始值

在神经网络的学习中,权重的初始值特别重要。设定什么样的权重初始值,经常关系到神经网络的学习能否成功。

将权重初始值设为0的话,将无法正确进行学习。为什么不能将权重初始值设成一样的值呢?这是因为在误差反向传播法中,所有的权重值都会进行相同的更新。这使得神经网络拥有许多不同的权重的意义丧失了。为了防止“权重均一化”(严格地讲,是为了瓦解权重的对称结构),必须随机生成初始值。

反向传播中梯度的值不断变小,最后消失。这个问题称为梯度消失(gradient vanishing)。层次加深的深度学习中,梯度消失的问题可能会更加严重。

各层的激活值的分布都要求有适当的广度。为什么呢?因为通过在各层间传递多样性的数据,神经网络可以进行高效的学习。反过来,如果传递的是有所偏向的数据,就会出现梯度消失或者“表现力受限”的问题,导致学习可能无法顺利进行。

Batch Normalization

Batch Norm有以下优点:

• 可以使学习快速进行(可以增大学习率)。

• 不那么依赖初始值(对于初始值不用那么敏感)。

• 抑制过拟合(降低Dropout等的必要性)。

Batch Norm的思路是调整各层的激活值分布使其拥有适当的广度。为此,要向神经网络中插入对数据分布进行正规化的层,即BatchNormalization层(下文简称Batch Norm层),如图6-16所示。

Batch Norm以进行学习时的mini-batch为单位,按mini-batch进行正规化。具体而言,就是进行使数据分布的均值为0、方差为1的正规化。

用数学式表示的话,如下所示。

对mini-batch的m个输入数据的集合B求均值和方差,然后,对输入数据进行均值为0、方差为1(合适的分布)的正规化。ε是一个微小值(比如, 10e-7 等),它是为了防止出现除以0的情况

式(6.7)所做的是将mini-batch的输入数据变换为均值为0、方差为1的数据,通过将这个处理插入到激活函数的前面(或者后面),可以减小数据分布的偏向。

接着,Batch Norm层会对正规化后的数据进行缩放和平移的变换,用数学式可以如下表示。

γ和β是参数。一开始γ = 1,β = 0,然后再通过学习调整到合适的值。

上面就是Batch Norm的算法。这个算法是神经网络上的正向传播。如果使用第5章介绍的计算图,Batch Norm可以表示为图6-17。

Batch Norm的反向传播的推导有些复杂,在Frederik Kratzert的博客“Understanding the backwardpass through Batch Normalization Layer“一文。

使用MNIST数据集观察使用Batch Norm层和不使用Batch Norm层时学习的过程会如何变化,结果如图6-18所示。

从图6-18的结果可知,使用Batch Norm后,学习进行得更快了。接着,给予不同的初始值尺度,观察学习的过程如何变化。图6-19是权重初始值的标准差为各种不同的值时的学习过程图。

我们发现,几乎所有的情况下都是使用Batch Norm时学习进行得更快。同时也可以发现,实际上,在不使用Batch Norm的情况下,如果不赋予一个尺度好的初始值,学习将完全无法进行。综上,通过使用Batch Norm,可以推动学习的进行。并且,对权重初始值变得健壮(“对初始值健壮”表示不那么依赖初始值)。