文章目录

  • 过大或者过小的初始化
  • 1. 所有的参数初始化为0或者相同的常数
  • 2. 随机初始化
  • 3. Batch Normalization
  • 4. Xavier
    • 限制
    • 均匀分布
    • 正态分布
  • 5. MSRA
    • 正态分布
    • 均匀分布
    • 总结及使用的概率公式

神经网络模型一般依靠随机梯度下降进行模型训练和参数更新,网络的最终性能与收敛得到的最优解直接相关,而收敛结果实际上又很大程度取决于网络参数的最开始的初始化。理想的网络参数初始化使模型训练事半功倍,相反,糟糕的初始化方案不仅会影响网络收敛,甚至会导致梯度弥散或爆炸。

参数初始化的理想状态是参数正负各半,期望为0。

过大或者过小的初始化

如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。

如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。

而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。

1. 所有的参数初始化为0或者相同的常数

最简单的初始化方法就是将权值参数全部初始化为0或者一个常数,但是使用这种方法会导致网络中所有的神经元学习到的是相同的特征。

当网络达到稳定状态时, 参数(权值)在理想情况下应该保持正负各半(此时期望为0)。因此一种看起来简单的方法,干脆将所有参数都初始化为0, 因为这样可以使得初始化全零时参数的期望与网络稳定时参数期望一致。
但是,参数全是零时网络不同神经元的输出必然相同,相同的输出必然导致梯度更新完全一样,这样会令更新后的参数仍然保持一样的状态。换句话说,如果参数进行了全零的参数化,那么网络神经元将无法训练模型。例如,对于y=WX+by=WX+by=WX+b,由于参数W需要和X乘积,因此不能初始化为0,而b可以。

2. 随机初始化

3. Batch Normalization

4. Xavier

初始化方法由Bengio等人在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中提出。

它为了保证前向传播和反向传播时每一层的方差一致:在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。根据每层的输入个数和输出个数来决定参数随机初始化的分布范围,是一个通过该层的输入和输出参数个数得到的分布范围内的均匀分布。

基于上述的准则,初始的权值参数(Wl)(W^l)(Wl)(lll为网络的第lll层)要符合以下公式

W[l]∼N(μ=0,σ2=1n[l−1])b[l]=0\begin{aligned} W^{[l]} & \sim \mathcal{N}\left(\mu=0, \sigma^{2}=\frac{1}{n^{[l-1]}}\right) \\ b^{[l]} &=0 \end{aligned} W[l]b[l]​∼N(μ=0,σ2=n[l−1]1​)=0​

其中nl−1n^{l-1}nl−1是第l−1l-1l−1层的神经元的个数。 也就是说,初始的权值www可以从均值μ=0\mu = 0μ=0,方差为σ2=1nl−1\sigma^{2}=\frac{1}{n ^{l-1}}σ2=nl−11​的正态分布中随机选取。

正向传播的推导过程:

推导过程中的三个假设:

  • 权值矩阵www是独立同分布的,且其均值为0
  • 每一层的输入aaa是独立同分布的,且均值也为0
  • www和aaa是相互独立的

设LLL层的权值矩阵为WWW,偏置为bbb,其输入为aaa

zl=wlal−1+blz^l = w^la^{l-1} + b^l zl=wlal−1+bl

Var(zl)=Var(∑i=0nwilail)=∑i=0nVar(wilail−1)Var(z^l) = Var(\sum_{i=0}^nw_{i}^la_i^l) = \sum_{i=0}^n Var(w_{i}^la_i^{l-1}) Var(zl)=Var(i=0∑n​wil​ail​)=i=0∑n​Var(wil​ail−1​)

有统计概率的知识可得到:(第一个假设WWW,xxx相互独立)

Var(wixi)=E2(wi)Var(wi)+E2(xi)Var(xi)+Var(wi)Var(xi)Var(w_ix_i) = E^2(w_i)Var(w_i) + E^2(x_i)Var(x_i) + Var(w_i)Var(x_i) Var(wi​xi​)=E2(wi​)Var(wi​)+E2(xi​)Var(xi​)+Var(wi​)Var(xi​)

由第一第二个假设可知:lll层输入的均值为0,权值参数WWW的均值也为0,即:E(xi)=0,E(wi)=0E(x_i) = 0,E(w_i) = 0E(xi​)=0,E(wi​)=0则有:Var(wixi)=Var(wi)Var(xi)Var(w_ix_i) = Var(w_i)Var(x_i)Var(wi​xi​)=Var(wi​)Var(xi​),即

Var(zl)=∑i=0nVar(wil)Var(xil−1)Var(z^l) = \sum_{i=0}^nVar(w_i^l)Var(x_i^{l-1}) Var(zl)=i=0∑n​Var(wil​)Var(xil−1​)

设权值矩阵WWW独立同分布的则有

Var(wl)=Var(w11l)=⋯=Var(Wijl)Var(w^l) = Var(w_{11}^l) = \cdots = Var(W_{ij}^l) Var(wl)=Var(w11l​)=⋯=Var(Wijl​)

输入al−1a^{l-1}al−1也是独立同分布的有:

Var(al−1)=Var(a1l−1)=⋯=Var(ail−1)Var(a^{l-1}) = Var(a_1^{l-1}) = \cdots = Var(a_i^{l-1}) Var(al−1)=Var(a1l−1​)=⋯=Var(ail−1​)

则有

Var(zl)=nl−1Var(wl)Var(al−1)Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}) Var(zl)=nl−1Var(wl)Var(al−1)

  • nl−1n^{l-1}nl−1是第l−1l-1l−1层的神经元的个数

这里得出了第lll层输入到激活函数中的值zlz^lzl与其输入al−1a^{l-1}al−1(也就是上一层输出的激活值)的方差之间的关系。但我们假设的是每一层输出的激活值的方差保持不变,也就是说要得到Var(al)Var(a^l)Var(al)和Var(al−1)Var(a^{l-1})Var(al−1)之间的关系。

设fff为激活函数,则有

al=f(zl)a^l = f(z^l) al=f(zl)

Xavier假设的激活函数为tanh,其函数曲线为

其中间的部分可以近似线性linear regime,而在训练的过程就要保证激活值是落在这个线性状体的区间内的,不然就会出现梯度饱和的情况。所以,这里可以近似的有

al=tanh(zl)a^l = tanh(z^l) al=tanh(zl)

也就是说:

Var(al)=Var(zl)=nl−1Var(wl)Var(al−1)Var(a^l) = Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}) Var(al)=Var(zl)=nl−1Var(wl)Var(al−1)

要让每一层的激活值的方差保持不变,则有

Var(al)=Var(al−1)Var(a^l) = Var(a^{l-1}) Var(al)=Var(al−1)

即有

Var(wl)=1nl−1Var(w^l) = \frac{1}{n^{l-1}} Var(wl)=nl−11​

通常输入神经元和输出神经元的个数不一定总是相同的,这里取两者的均值

∀i,Var⁡(Wl+1)=2nl+nl+1\forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} ∀i,Var(Wl+1)=nl​+nl+1​2​

限制

对于权值的初始化,Glorot提出两个准则:

  • 各个层激活值的方差保持不变(正向传播)
  • 各个层的梯度值的方差保持不变(反向传播)

在Xavier的推导的过程中,做了以下假设:

  • 权值矩阵www是独立同分布的,且其均值为0
  • 每一层的输入aaa是独立同分布的,且均值也为0
  • www和aaa是相互独立的

但是,对Xavier限制最大的则是,其是基于tanh作为激活函数的。
上述公式的详细推导过程可参见 http://www.deeplearning.ai/ai-notes/initialization/ 。

Xavier的初始化有个假设条件,激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign。

均匀分布

通过上面的推导,得出权值矩阵的均值为:0,方差为

∀i,Var⁡(Wl+1)=2nl+nl+1\forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} ∀i,Var(Wl+1)=nl​+nl+1​2​

[a,b][a,b][a,b] (间的均匀分布的方差为) var=(b−a)212var = \frac{(b-a)^2}{12}var=12(b−a)2​,设FinF_{in}Fin​(为输入的神经元个数)FoutF_{out}Fout​为输出的神经元个数

limit=6Fin+Foutlimit = \sqrt{\frac{6}{F_{in} + F_{out}}} limit=Fin​+Fout​6​​

则权值参数从分布

W∼U[−limit,limit]→W∼U[−6Fin+Fout,+6Fin+Fout]W \sim U[-limit,limit] \rightarrow W \sim U\left[-\sqrt{\frac{6}{F_{in} + F_{out}}}, + \sqrt{\frac{6}{F_{in} + F_{out}}}\right] W∼U[−limit,limit]→W∼U[−Fin​+Fout​6​​,+Fin​+Fout​6​​]

正态分布

基于正态分布的Xavier初始化从均值为0,方差为2Fin+Fout\sqrt{\frac{2}{F_{in} + F_{out}}}Fin​+Fout​2​​的正态分布中随机选取。

W∼N(0.0,2Fin+Fout)W \sim N(0.0,\sqrt{\frac{2}{F_{in} + F_{out}}}) W∼N(0.0,Fin​+Fout​2​​)

5. MSRA

由何凯明在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,由于Xavier的假设条件是激活函数是关于0对称的,而常用的ReLU激活函数并不能满足该条件。

只考虑输入的个数,MSRA的初始化是一个均值为0,方差为2Fin\sqrt{\frac{2}{F_{in}}}Fin​2​​的高斯分布

w∼G[0,2Fin]w \sim G\left[0, \sqrt{\frac{2}{F_{in }}}\right] w∼G[0,Fin​2​​]
正向传播的推导过程:

其前半部分的推导和Xavider类似,对于第l层,有如下公式 :

yl=Wlxl+bl\mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l} yl​=Wl​xl​+bl​
其中

  • xlx_lxl​为当前层的输入,也是上一层的激活后的输出值
  • yly_lyl​为当前层输入到激活函数的值
  • wlw_lwl​和blb_lbl​为权值和偏置

其中xlx_lxl​以及wlw_lwl​都是独立同分布的,(和Xavier相同的假设条件),则有:

Var⁡[yl]=nlVar⁡[wlxl]\operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right] Var[yl​]=nl​Var[wl​xl​]
设wlw_lwl​的均值为0,即E(wl)=0E(w_l)=0E(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)\begin{aligned} \operatorname{Var}(y_l) & = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E^2(x_l)) \\ &= n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E^2(x_l)) \\ & = n_{l}(E(W_l^2) \cdot E(x_l^2) - 0 \cdot E(x_l^2)) \\ & = n_{l}(E(W_l^2) \cdot E(x_l^2) - E^2(w_l) \cdot E(x_l^2)) \\ & = n_{l}(E(W_l^2) - E^2(w_l)) \cdot E(x_l^2) \\ & = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) \end{aligned} 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​)=nl​Var(wl​)⋅E(xl2​)​
这里有和Xavier一个很大的不同是,这里没有假设输入的值的均值为0。这是由于,使用ReLU的激活函数,xl=max(0,yl−1)x_l = max(0,y_{l-1})xl​=max(0,yl−1​),每层输出的值不可能均值为0。

上面最终得到
Var⁡(yl)=nlVar⁡(wl)⋅E(xl2)\operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) Var(yl​)=nl​Var(wl​)⋅E(xl2​)
初始化时通常设,www的均值为0,偏置b=0b=0b=0,以及www和xxx是相互独立的,则有

E⁡(yl)=E⁡(wlxl)=E⁡(xl)⋅E⁡(wl)=0\begin{aligned} \operatorname{E}(y_l) &= \operatorname{E}(w_lx_l) \\ &= \operatorname{E}(x_l) \cdot \operatorname{E}(w_l) \\ &= 0 \end{aligned} E(yl​)​=E(wl​xl​)=E(xl​)⋅E(wl​)=0​
也就是说,yly_lyl​的均值为0。

再假设www是关于0对称分布的(均匀分布,高斯分布都符合),则可以得到yly_lyl​在0附近也是对称分布的。

这样,使用ReLU作为激活函数,则有

xl=max(0,yl−1)x_l = max(0,y_{l-1}) xl​=max(0,yl−1​)
由于只有当yl−1>0y_l−1>0yl​−1>0的部分,xlx_lxl​才有值,且yly_lyl​在0附近也是对称分布的,则可以得到

E⁡(xl2)=12E⁡(yl−12)=12(E(yl−12)−E(yl−1)),(由于E(yl−1)=0)=12Var⁡(yl−1)\begin{aligned} \operatorname{E}(x_l^2) &=\frac{1}{2} \operatorname{E}(y_{l-1}^2) \\ &= \frac{1}{2}({E}(y_{l-1}^2) - E(y_{l-1})),(由于E(y_{l-1}) = 0)\\ & = \frac{1}{2}\operatorname{Var}(y_{l-1}) \end{aligned} E(xl2​)​=21​E(yl−12​)=21​(E(yl−12​)−E(yl−1​)),(由于E(yl−1​)=0)=21​Var(yl−1​)​

将得到的

E⁡(xl2)=12Var⁡(yl−1)\operatorname{E}(x_l^2) = \frac{1}{2}\operatorname{Var}(y_{l-1}) E(xl2​)=21​Var(yl−1​)

带入到

Var⁡(yl)=nlVar⁡(wl)⋅E(xl2)\operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) Var(yl​)=nl​Var(wl​)⋅E(xl2​)

则可以得到

Var⁡[yl]=12nlVar⁡[wl]Var⁡[yl−1]\operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right] Var[yl​]=21​nl​Var[wl​]Var[yl−1​]

将所有层的方差累加到一起有:

Var⁡[yL]=Var⁡[y1](∏l=2L12nlVar⁡[wl])\operatorname{Var}\left[y_{L}\right]=\operatorname{Var}\left[y_{1}\right]\left(\prod_{l=2}^{L} \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]\right) Var[yL​]=Var[y1​](l=2∏L​21​nl​Var[wl​])

为了是每一层的方差保持不变,则有:

12nlVar⁡[wl]=1,∀l\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l 21​nl​Var[wl​]=1,∀l

也即得到 权值矩阵的方差应该是

2/nl\sqrt{2 / n_{l}} 2/nl​​

和Xavier的方法,也可以使用正态分布或者均匀分布来取得初始的权值矩阵的值。

正态分布

W∼N(0.0,2/nl)W \sim N(0.0,\sqrt{2 / n_{l}}) W∼N(0.0,2/nl​​)

均匀分布

W∼U[−6/nl,6/nl]W \sim U[-\sqrt{6 / n_{l}},\sqrt{6 / n_{l}}] 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)D(x)=E\left(x^{2}\right)-E^{2}(x) \\ D(x y)=E\left(x^{2} y^{2}\right)-E^{2}(x y)=E\left(x^{2}\right) E\left(y^{2}\right)-E^{2}(x) E^{2}(y) D(x)=E(x2)−E2(x)D(xy)=E(x2y2)−E2(xy)=E(x2)E(y2)−E2(x)E2(y)

如果E(y)=0E(y) = 0E(y)=0,则有:

D(xy)=D(y)E(x2)D(xy) = D(y)E(x^2) D(xy)=D(y)E(x2)

如果(x,y)是相互独立的,则有

E(xy)=E(x)E(y)E(xy) = E(x)E(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

神经网络参数初始化方法相关推荐

  1. 【神经网络参数初始化方法】

    神经网络的参数学习.训练是一个凸优化的问题,在使用梯度下降算法进行优化时,参数初始值的选择会影响模型的泛化性能(局部最优解).优化效率(梯度消失.梯度爆炸),因此其选择十分关键. 神经网络参数初始化通 ...

  2. Xavier参数初始化方法

    目录 1 梯度消失与梯度爆炸 2 Xavier方法​​​​​​​ 1 梯度消失与梯度爆炸 这是一个深度学习领域遇到的老问题了,即使是现在,任何一个新提出的模型,无论是MLP.CNN.还是RNN,随着深 ...

  3. 常见的参数初始化方法

    常见的参数初始化方法 我们常见的几种初始化方法是按照"正态分布随机初始化--对应为normal"和按照"均匀分布随机初始化--对应为uniform",这里就不再 ...

  4. pytorch中的参数初始化方法

    参数初始化(Weight Initialization) PyTorch 中参数的默认初始化在各个层的 reset_parameters() 方法中.例如:nn.Linear 和 nn.Conv2D, ...

  5. bn层初始化参数_神经网络参数初始化方式

    看了文章<Understanding the difficulty of training deep feedforward neural networks>,里面提出了两种参数初始化的方 ...

  6. 深度神经网络调参数技巧,神经网络参数调节方法

    1.神经网络算法中,参数的设置或者调整,有什么方法可以采用 若果对你有帮助,请点赞. 神经网络的结构(例如2输入3隐节点1输出)建好后,一般就要求神经网络里的权值和阈值.现在一般求解权值和阈值,都是采 ...

  7. 吴恩达深度学习L2W1——神经网络权重初始化方法、正则化

    文章目录 神经网络的初始化 初始化数据 模型搭建 简单函数 零初始化--initialize_parameters_zeros 随机初始化--initialize_parameters_random ...

  8. 神经网络参数调整方法,神经网络的优化算法

    如何选择SVM,逻辑回归和神经网络算法 神经网络的设计要用到遗传算法,遗传算法在神经网络中的应用主要反映在3个方面:网络的学习,网络的结构设计,网络的分析.1.遗传算法在网络学习中的应用在神经网络中, ...

  9. pytorch tensor 初始化_Pytorch - nn.init 参数初始化方法

    Pytorch 的参数初始化 - 给定非线性函数的推荐增益值(gain value):nonlinearity 非线性函数gain 增益 Linear / Identity1 Conv{1,2,3}D ...

  10. PyTorch常用参数初始化方法详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. 用circlize包绘制circos-plot
  2. static用法解析---java语言
  3. ORACLE中的两个概念:user和schema的区别和联系
  4. 机器学习-机器学习概论(入门机器学习基础知识)
  5. Android中scrollview的scrollto方法不起作用的办法
  6. python解图片迷宫_[宜配屋]听图阁
  7. collatz序列 python程序_Python Collatz序列实现过程解析
  8. java实例_Java线程方式及实例
  9. react-navigation之动态修改title的内容
  10. Java数据结构:单链表Single Linked List基础笔记
  11. Java全栈学习路线
  12. 七月文章导读【5G相关】:从摩斯码到5G;5G承载网;5G链路自适应及CQI工作过程
  13. RK3399与MIPI DSI之间在DRM架构下的联结关系
  14. win xp故障恢复控制台应用实例
  15. win7怎么修改锁定计算机时间,锁定Windows7系统时间教程
  16. java惊魂_我的世界孤儿院惊魂
  17. 【干货】如何写微信公众号文章:文章流畅耐读的奥秘
  18. 滴滴一下,小程序专车来了
  19. excel使用—— 宏 | VBA | 画线
  20. CADD课程学习(10)-- 模拟不同体系与蛋白-蛋白相互作用(ZDOCK)

热门文章

  1. 易中天∑品读汉代风云人物
  2. 10000电信固话如何设置呼叫转移
  3. javalang 生成抽象语法树AST ----python源码分析
  4. nas服务器用户无访问权限,群晖NAS文件权限管理和账户的权限
  5. 【饥荒脚本】饥荒控制台代码自动输入
  6. EndNoteX9保姆级基础功能使用教程(够用!!)
  7. CVE-2022-27778漏洞修复
  8. java fop_java – 未找到类FOP
  9. 【风光摄影】用滤镜在前期控制完美光比
  10. 类和对象6:相关内置函数