深度学习中的参数初始化方法:Xavier详细推导+pytorch实现

缓解梯度消失和梯度爆炸的参数初始化方式:Xavier
Xavier 初始化,也称为Glorot初始化,是一种在训练深度学习模型时用于初始化网络权重的策略。其核心思想是保持每一层输出的方差与输入的方差一致,以防止信号在深层网络中的爆炸或消失。如果方差过大,那么网络的层将会更难以学习;如果方差过小,那么该层的权重将会难以更新。
总体来说,如果初始化权重过大或过小,可能会导致在训练过程中出现梯度消失或梯度爆炸的问题。如果权重初始化过大,激活函数(如sigmoid或tanh)可能会饱和,导致梯度接近于零,这将减慢学习速度。另一方面,如果权重初始化过小,那么权重更新可能会非常慢或完全停止,导致网络无法学习。
例如下图,在对sigmoid反向传播时,输入很小或很大的参数值都会导致对参数的偏导几乎为0,在进行梯度下降时,参数更新非常慢,几乎无法进行学习(甚至可能在某一层导致梯度消失,切断了与后续的联系)

假设与符号说明
权重
(这里表示 第
层从
层的第
个神经单元连接到
层的第
个神经单元的权重)是从均值为0,方差为
的分布中抽取的,并且符合独立同分布,权重矩阵为
,可以认为是
批次大小,每行是一个样本,这些样本有
个特征
层第
个神经单元的输入
(表示第
层的输入,即是
层的输出)服从均值为0的分布
没有非线性(即没有激活函数)的全连接层,输入维度为
,输出维度为
,满足
,即
层的输出是来自
层输出的加权和,注意这里权重矩阵被转置了,满足
的维度关系
正向均值
正向均值,就是对层的输出求数学期望,对于
层的任意一个神经单元
,其期望满足
这里意思是,第层的任意一个神经单元
的输出
,是来自
层的所有输出与其对应权重(从
连接到
对应权重)积的和。由于我们假定了权重和输入都是零均值,所以第
层输出的数学期望依然是0。
并且注意这里的输入和权重的独立假设允许我们进行
由于层每个神经单元的输出均值都是0,因此
层的输出均值就是一个零向量
正向方差
注意这里由于上面证明了输出的正向均值为0,因此这里的均值的平方项为0,将层的第
个神经单元的输出展开有
注意到,如果将这个和式的平方展开后,会产生很多交叉项,它们的最高次数都是1,根据前面我们知道,对一次项求期望会因为零均值的假设导致整项为0,因此我们只需要保留自身与自身相乘的项(二次项)
再根据期望性质,并且注意到,由于是零均值,对二次项求期望相当于求其方差
从而有
由于我们希望输入与输出的方差相同,只需要让输入维度乘以权重来自分布的方差为1
反向均值
根据反向传播的原理,先由损失函数对求导,再由
对
求导,得到
而同理正向传播,反向传播的均值和方差结果也是类似的,这里权重表示的是从层的神经单元
连向
层的神经单元
的权重
根据权重的独立同分布且零均值的特性,反向均值依然为0,即损失函数对层任意神经单元的输出求导的值为0
反向方差
这里需要注意到,由于交叉项会出现一次项,而我们知道一次项的权重均值为0,因此我们只保留二次项(自己与自己相乘)
注意我们权重方差是假定好的,并且从连接到
和从
连接到
的权重是一样的,有
我们同样希望反向传播的输入与输出的方差相同,因此需要
权衡
由于难以成立,因为我们不可能每次输入输出维度都相同,因此Xavier采用
(即对两个结果进行算术平均)
并将参数从正态分布中随机生成
也可以采用均匀分布
相比于原来我们指定方差例如用初始化参数,Xavier通过计算得出其方差而不是我们人为指定
pytorch实现
只需要初始化时指定xavier_normal_即可
通过正态分布方差的最大似然估计,我们发现推导和结果是相符合的