神经网络模型一般依靠随机梯度下降进行模型训练和参数更新,网络的最终性能与收敛得到的最优解直接相关,而收敛结果实际上又很大程度取决于网络参数的最开始的初始化。理想的网络参数初始化使模型训练事半功倍,相反,糟糕的初始化方案不仅会影响网络收敛,甚至会导致梯度弥散或爆炸。
参数初始化的理想状态是参数正负各半,期望为0。
过大或者过小的初始化
如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。
如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。
而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。
1. 所有的参数初始化为0或者相同的常数
最简单的初始化方法就是将权值参数全部初始化为0或者一个常数,但是使用这种方法会导致网络中所有的神经元学习到的是相同的特征。
当网络达到稳定状态时, 参数(权值)在理想情况下应该保持正负各半(此时期望为0)。因此一种看起来简单的方法,干脆将所有参数都初始化为0, 因为这样可以使得初始化全零时参数的期望与网络稳定时参数期望一致。
但是,参数全是零时网络不同神经元的输出必然相同,相同的输出必然导致梯度更新完全一样,这样会令更新后的参数仍然保持一样的状态。换句话说,如果参数进行了全零的参数化,那么网络神经元将无法训练模型。例如,对于y=WX+b,由于参数W需要和X乘积,因此不能初始化为0,而b可以。
2. 随机初始化
3. Batch Normalization
4. Xavier
初始化方法由Bengio等人在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出。
它为了保证前向传播和反向传播时每一层的方差一致:在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。根据每层的输入个数和输出个数来决定参数随机初始化的分布范围,是一个通过该层的输入和输出参数个数得到的分布范围内的均匀分布。
基于上述的准则,初始的权值参数(Wl)(l为网络的第l层)要符合以下公式
W[l]b[l]∼N(μ=0,σ2=n[l−1]1)=0
其中nl−1是第l−1层的神经元的个数。 也就是说,初始的权值w可以从均值μ=0,方差为σ2=nl−11的正态分布中随机选取。
正向传播的推导过程:
推导过程中的三个假设:
- 权值矩阵w是独立同分布的,且其均值为0
- 每一层的输入a是独立同分布的,且均值也为0
- w和a是相互独立的
设L层的权值矩阵为W,偏置为b,其输入为a
zl=wlal−1+bl
则
Var(zl)=Var(i=0∑nwilail)=i=0∑nVar(wilail−1)
有统计概率的知识可得到:(第一个假设W,x相互独立)
Var(wixi)=E2(wi)Var(wi)+E2(xi)Var(xi)+Var(wi)Var(xi)
由第一第二个假设可知:l层输入的均值为0,权值参数W的均值也为0,即:E(xi)=0,E(wi)=0则有:Var(wixi)=Var(wi)Var(xi),即
Var(zl)=i=0∑nVar(wil)Var(xil−1)
设权值矩阵W独立同分布的则有
Var(wl)=Var(w11l)=⋯=Var(Wijl)
输入al−1也是独立同分布的有:
Var(al−1)=Var(a1l−1)=⋯=Var(ail−1)
则有
Var(zl)=nl−1Var(wl)Var(al−1)
- nl−1是第l−1层的神经元的个数
这里得出了第l层输入到激活函数中的值zl与其输入al−1(也就是上一层输出的激活值)的方差之间的关系。但我们假设的是每一层输出的激活值的方差保持不变,也就是说要得到Var(al)和Var(al−1)之间的关系。
设f为激活函数,则有
al=f(zl)
Xavier假设的激活函数为tanh,其函数曲线为
其中间的部分可以近似线性linear regime,而在训练的过程就要保证激活值是落在这个线性状体的区间内的,不然就会出现梯度饱和的情况。所以,这里可以近似的有
al=tanh(zl)
也就是说:
Var(al)=Var(zl)=nl−1Var(wl)Var(al−1)
要让每一层的激活值的方差保持不变,则有
Var(al)=Var(al−1)
即有
Var(wl)=nl−11
通常输入神经元和输出神经元的个数不一定总是相同的,这里取两者的均值
∀i,Var(Wl+1)=nl+nl+12
限制
对于权值的初始化,Glorot提出两个准则:
- 各个层激活值的方差保持不变(正向传播)
- 各个层的梯度值的方差保持不变(反向传播)
在Xavier的推导的过程中,做了以下假设:
- 权值矩阵w是独立同分布的,且其均值为0
- 每一层的输入a是独立同分布的,且均值也为0
- w和a是相互独立的
但是,对Xavier限制最大的则是,其是基于tanh作为激活函数的。
上述公式的详细推导过程可参见 http://www.deeplearning.ai/ai-notes/initialization/ 。
Xavier的初始化有个假设条件,激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign。
均匀分布
通过上面的推导,得出权值矩阵的均值为:0,方差为
∀i,Var(Wl+1)=nl+nl+12
[a,b] (间的均匀分布的方差为) var=12(b−a)2,设Fin(为输入的神经元个数)Fout为输出的神经元个数
limit=Fin+Fout6
则权值参数从分布
W∼U[−limit,limit]→W∼U[−Fin+Fout6,+Fin+Fout6]
正态分布
基于正态分布的Xavier初始化从均值为0,方差为Fin+Fout2的正态分布中随机选取。
W∼N(0.0,Fin+Fout2)
5. MSRA
由何凯明在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,由于Xavier的假设条件是激活函数是关于0对称的,而常用的ReLU激活函数并不能满足该条件。
只考虑输入的个数,MSRA的初始化是一个均值为0,方差为Fin2的高斯分布
w∼G[0,Fin2]
正向传播的推导过程:
其前半部分的推导和Xavider类似,对于第l层,有如下公式 :
yl=Wlxl+bl
其中
- xl为当前层的输入,也是上一层的激活后的输出值
- yl为当前层输入到激活函数的值
- wl和bl为权值和偏置
其中xl以及wl都是独立同分布的,(和Xavier相同的假设条件),则有:
Var[yl]=nlVar[wlxl]
设wl的均值为0,即E(wl)=0,则有:
Var(yl)=nl(E(Wl2)⋅E(xl2)−E2(wl)⋅E2(xl))=nl(E(Wl2)⋅E(xl2)−0⋅E2(xl))=nl(E(Wl2)⋅E(xl2)−0⋅E(xl2))=nl(E(Wl2)⋅E(xl2)−E2(wl)⋅E(xl2))=nl(E(Wl2)−E2(wl))⋅E(xl2)=nlVar(wl)⋅E(xl2)
这里有和Xavier一个很大的不同是,这里没有假设输入的值的均值为0。这是由于,使用ReLU的激活函数,xl=max(0,yl−1),每层输出的值不可能均值为0。
上面最终得到
Var(yl)=nlVar(wl)⋅E(xl2)
初始化时通常设,w的均值为0,偏置b=0,以及w和x是相互独立的,则有
E(yl)=E(wlxl)=E(xl)⋅E(wl)=0
也就是说,yl的均值为0。
再假设w是关于0对称分布的(均匀分布,高斯分布都符合),则可以得到yl在0附近也是对称分布的。
这样,使用ReLU作为激活函数,则有
xl=max(0,yl−1)
由于只有当yl−1>0的部分,xl才有值,且yl在0附近也是对称分布的,则可以得到
E(xl2)=21E(yl−12)=21(E(yl−12)−E(yl−1)),(由于E(yl−1)=0)=21Var(yl−1)
将得到的
E(xl2)=21Var(yl−1)
带入到
Var(yl)=nlVar(wl)⋅E(xl2)
则可以得到
Var[yl]=21nlVar[wl]Var[yl−1]
将所有层的方差累加到一起有:
Var[yL]=Var[y1](l=2∏L21nlVar[wl])
为了是每一层的方差保持不变,则有:
21nlVar[wl]=1,∀l
也即得到 权值矩阵的方差应该是
2/nl
和Xavier的方法,也可以使用正态分布或者均匀分布来取得初始的权值矩阵的值。
正态分布
W∼N(0.0,2/nl)
均匀分布
W∼U[−6/nl,6/nl]
总结及使用的概率公式
正确的初始化方法应该避免指数级地减小或放大输入值的大小,防止梯度“饱和”。 Glorot提出两个准则:
- 各个层激活值的方差保持不变(正向传播)
- 各个层的梯度值的方差保持不变(反向传播)
通常初始的权值矩阵的均值为0.
这这些条件的基础上,Glorot 使用(tanh)作为激活函数,并假设输入值的均值为0,提出了Xavier初始化的方法。
而Kaiming使用ReLU作为激活函数,就无法满足数值的均值为0的条件,因此使用Xavier来初始化ReLU作为激活函数的网络,效果也就不是那么理想。其提出了MSRA的初始化方法,来解决该问题。
附
推导时使用的概率公式:
D(x)=E(x2)−E2(x)D(xy)=E(x2y2)−E2(xy)=E(x2)E(y2)−E2(x)E2(y)
如果E(y)=0,则有:
D(xy)=D(y)E(x2)
如果(x,y)是相互独立的,则有
E(xy)=E(x)E(y)
本文只推导了正向传播的过程,对于反向传播的推导可参考原始论文
[1] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
[2] Understanding the difficulty of training deep feedforward neural networksf