什么是权值初始化

在神经网络的前向传播的过程中,需要设置输入到输出的权重。

模型权重初始化代码 权值初始化_机器学习

为什么要权值初始化

正确的权值初始化可以促进模型的快速收敛,不正确的权值初始化可能使得模型在前向传播是发生发生信息消失,或在反向传播时发生梯度消失,最后出现模型难以训练的情况。

怎么权值初始化

首先我们要避免全零初始化

全零初始化的话网络中的神经元输出相同,反向传导也相同,参数更新相同,等价于只有一个神经元。

而应该采用随机初始化,使得权值采样于同一个分布下。

有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致;以保持网络中正向和反向数据流动

为什么要使得输入和输出的方差一致?

如果输入和输出不是同一个方差,那么在正向和反向流动中会产生信息消失或者梯度消失的情况,最终无法训练模型。

那么问题又来了

怎样让输入和输出的方差一致呢?

法一:调整权值分布

Xavier初始化

要求选择tanh作为激活函数,权值采样于

模型权重初始化代码 权值初始化_深度学习_02

分布下,N为输入样本个数

推导过程:

模型权重初始化代码 权值初始化_深度学习_03

MSRA

要求选择Relu作为激活函数,权值采样于

模型权重初始化代码 权值初始化_权值_04

分布下,N为输入样本个数

法二:调整神经元的输出

批归一化

前两种方法是调整权值分布,使得神经元的输出就具有和输入同样的分布

而批归一法是直接对输出减均值除方差,保证与符合0均值1方差分布。

使用在全连接层后,激活函数前。

模型权重初始化代码 权值初始化_权值_05

 

前文提到的“而批归一法是直接对输出减均值除方差,保证与符合0均值1方差分布。”符合(0,1)分布的描述不太正确,到底要求输出符合怎么样的分布是根据对分类的贡献自行决定的。

如果对这句话不太理解,不如放上批归一化的算法来看看

说明:图片中的输入指的不是样本数据输入,而是要进行批归一化的输入(也就是全连接层处理完的输出)

模型权重初始化代码 权值初始化_权值_06

 到第三步时,输出已经符合0,1分布了;但是不一定0,1分布就是最利于网络分类的分布,到底该选取怎样的分布,是由网络自行学习得到的,这也就是学习参数存在的理由。这里的学习参数表示进过批归一化处理后,输出满足

模型权重初始化代码 权值初始化_深度学习_07

为方差,

模型权重初始化代码 权值初始化_深度学习_08

为均值的分布