设计好神经网络结构以及loss function 后,训练神经网络的步骤以下:算法
神经网络的训练过程是一个迭代的过程,俗话说:好的开始就是成功的一半,因此的权值参数的初始化的值对网络最终的训练结果有很大的影响。 过大或者太小的初始值,对网络收敛的结果都会有很差的结果。网络
最简单的初始化方法就是将权值参数所有初始化为0或者一个常数,可是使用这种方法会致使网络中全部的神经元学习到的是相同的特征。ide
假设神经网络中只有一个有2个神经元的隐藏层,如今将偏置参数初始化为:\(bias = 0\),权值矩阵初始化为一个常数\(\alpha\)。 网络的输入为\((x_1,x_2)\),隐藏层使用的激活函数为\(ReLU\),则隐藏层的每一个神经元的输出都是\(relu(\alpha x_1 + \alpha x_2)\)。 这就致使,对于loss function的值来讲,两个神经元的影响是同样的,在反向传播的过程当中对应参数的梯度值也是同样,也就说在训练的过程当中,两个神经元的参数一直保持一致,其学习到的特征也就同样,至关于整个网络只有一个神经元。函数
若是权值的初始值过大,则会致使梯度爆炸,使得网络不收敛;太小的权值初始值,则会致使梯度消失,会致使网络收敛缓慢或者收敛到局部极小值。学习
若是权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度降低更新参数的时,参数更新的幅度也会很大,这就致使loss function的值在其最小值附近震荡。spa
而太小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会致使loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。设计
Xavier初始化,由Xavier Glorot 在2010年的论文 Understanding the difficulty of training deep feedforward neural networks 提出。
为了不梯度爆炸或者梯度消失,有两个经验性的准则:orm
在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。blog
基于上述的准则,初始的权值参数\(W^l\)(\(l\)为网络的第\(l\)层)要符合如下公式
\[ \begin{aligned} W^{[l]} & \sim \mathcal{N}\left(\mu=0, \sigma^{2}=\frac{1}{n^{[l-1]}}\right) \\ b^{[l]} &=0 \end{aligned} \]get
其中\(n^{n-1}\)是第\(l-1\)层的神经元的个数。 也就是说,初始的权值\(w\)能够从均值\(\mu = 0\),方差为\(\sigma^{2}=\frac{1}{n ^{l-1}}\)的正态分布中随机选取。
正向传播的推导过程:
推导过程当中的三个假设:
设\(L\)层的权值矩阵为\(W\),偏置为\(b\),其输入为\(a\)
\[ z^l = w^la^{l-1} + b^l \]
则
\[ Var(z^l) = Var(\sum_{i=0}^nw_{i}^la_i^l) = \sum_{i=0}^n Var(w_{i}^la_i^{l-1}) \]
有统计几率的知识可获得:(第一个假设\(W\),\(x\)相互独立)
\[ Var(w_ix_i) = E^2(w_i)Var(w_i) + E^2(x_i)Var(x_i) + Var(w_i)Var(x_i) \]
由第一第二个假设可知:\(l\)层输入的均值为0,权值参数\(W\)的均值也为0,即:\(E(x_i) = 0,E(w_i) = 0\)则有:\(Var(w_ix_i) = Var(w_i)Var(x_i)\),即
\[ Var(z^l) = \sum_{i=0}^nVar(w_i^l)Var(x_i^{l-1}) \]
设权值矩阵\(W\)独立同分布的则有\(Var(w^l) = Var(w_{11}^l) = \cdots = Var(W_{ij}^l)\),输入\(a^{l-1}\)也是独立同分布的有:\(Var(a^{l-1}) = Var(a_1^{l-1}) = \cdots = Var(a_i^{l-1})\)
则有
\[ Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}),(n-1)为上一层神经元的个数 \]
这里得出了第\(l\)层输入到激活函数中的值\(z^l\)与其输入\(a^{l-1}\)(也就是上一层输出的激活值)的方差之间的关系。但咱们假设的是每一层输出的激活值的方差保持不变,也就是说要获得\(Var(a^l)\)和\(Var(a^{l-1})\)之间的关系。
设\(f\)为激活函数,则有
\[ a^l = f(z^l) \]
Xavier假设的激活函数为\(tanh\),其函数曲线为
其中间的部分能够近似线性(linear regime),而在训练的过程就要保证激活值是落在这个线性状体的区间内的,否则就会出现梯度饱和的状况。因此,这里能够近似的有
\[ a^l = tanh(z^l) \]
也就是说:
\[ Var(a^l) = Var(z^l) = n^{l-1}Var(w^l)Var(a^{l-1}) \]
要让每一层的激活值的方差保持不变,则有\(Var(a^l) = Var(a^{l-1})\),既有
\[ Var(w^l) = \frac{1}{n^{l-1}} \]
一般输入神经元和输出神经元的个数不必定老是相同的,这里取二者的均值
\[ \forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} \]
限制
对于权值的初始化,Glorot提出两个准则:
在Xavier的推导的过程当中,作了如下假设:
可是,对Xavier限制最大的则是,其是基于tanh做为激活函数的。
上述公式的详细推导过程可参见 http://www.deeplearning.ai/ai-notes/initialization/ 。
Xavier的初始化有个假设条件,激活函数关于0对称,且主要针对于全链接神经网络。适用于tanh和softsign。
经过上面的推导,得出权值矩阵的均值为:0,方差为
\[ \forall i, \operatorname{Var}\left(W^{l+1}\right)=\frac{2}{n_{l}+n_{l+1}} \]
$[a,b] \(间的均匀分布的方差为\) var = \frac{(b-a)^2}{12}\(,设\)F_{in}\(为输入的神经元个数,\)F_{out}$为输出的神经元个数
\[ limit = \sqrt{\frac{6}{F_{in} + F_{out}}} \]
则权值参数从分布
\[ 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] \]
基于正态分布的Xavier初始化从均值为0,方差为\(\sqrt{\frac{2}{F_{in} + F_{out}}}\)的正态分布中随机选取。
\[ W \sim N(0.0,\sqrt{\frac{2}{F_{in} + F_{out}}}) \]
由 Kaiming 在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification提出,因为Xavier的假设条件是激活函数是关于0对称的,而经常使用的ReLU激活函数并不能知足该条件。
只考虑输入的个数,MSRA的初始化是一个均值为0,方差为\(\sqrt{\frac{2}{F_{in}}}\)的高斯分布
\[ w \sim G\left[0, \sqrt{\frac{2}{F_{in }}}\right] \]
正向传播的推导过程:
其前半部分的推导和Xavider相似
对于第\(l\)层,有以下公式 :
\[ \mathbf{y}_{l}=\mathbf{W}_{l} \mathbf{x}_{l}+\mathbf{b}_{l} \]
其中,\(x_l\)为当前层的输入,也是上一层的激活后的输出值。\(y_l\)为当前层输入到激活函数的值,\(w_l\)和\(b_l\)为权值和偏置。其中\(x_l\)以及\(w_l\)都是独立同分布的,(和Xavier相同的假设条件),则有:
\[ \operatorname{Var}\left[y_{l}\right]=n_{l} \operatorname{Var}\left[w_{l} x_{l}\right] \]
设\(w_l\)的均值为0,即\(E(w_l) = 0\),则有:
\[ \begin{align*} \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{align*} \]
这里有和Xavier一个很大的不一样是,这里没有假设输入的值的均值为0。这是因为,使用ReLU的激活函数,\(x_l = max(0,y_{l-1})\),每层输出的值不可能均值为0。
上面最终获得
\[ \operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) \]
初始化时一般设,\(w\)的均值为0,偏置\(b = 0\),以及\(w\)和\(x\)是相互独立的,则有
\[ \begin{align*} \operatorname{E}(y_l) &= \operatorname{E}(w_lx_l) \\ &= \operatorname{E}(x_l) \cdot \operatorname{E}(w_l) \\ &= 0 \end{align*} \]
也就是说,\(y_l\)的均值为0。
再假设\(w\)是关于0对称分布的(均匀分布,高斯分布都符合),则能够获得\(y_l\)在0附近也是对称分布的。
这样,使用ReLU做为激活函数,则有
\[ x_l = max(0,y_{l-1}) \]
因为只有当\(y_{l-1} > 0\)的部分,\(x_l\)才有值,且\(y_l\)在0附近也是对称分布的,则能够获得
\[ \begin{align*} \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{align*} \]
将获得的\(\operatorname{E}(x_l^2) = \frac{1}{2}\operatorname{Var}(y_{l-1})\),带入到 $\operatorname{Var}(y_l) = n_{l} \operatorname{Var}(w_l) \cdot E(x_l^2) $ 则能够获得
\[ \operatorname{Var}\left[y_{l}\right]=\frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right] \operatorname{Var}\left[y_{l-1}\right] \]
将全部层的方差累加到一块儿有:
\[ \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) \]
为了是每一层的方差保持不变,则有:
\[ \frac{1}{2} n_{l} \operatorname{Var}\left[w_{l}\right]=1, \quad \forall l \]
也即获得 权值矩阵的方差应该是
\[ \sqrt{2 / n_{l}} \]
和Xavier的方法,也可使用正态分布或者均匀分布来取得初始的权值矩阵的值。
正态分布
\[ W \sim N(0.0,\sqrt{2 / n_{l}}) \]
均匀分布
\[ W \sim U[-\sqrt{6 / n_{l}},\sqrt{6 / n_{l}}] \]
### 总结及使用的几率公式
正确的初始化方法应该避免指数级地减少或放大输入值的大小,防止梯度“饱和”。 Glorot提出两个准则:
一般初始的权值矩阵的均值为0.
这这些条件的基础上,Glorot 使用\(tanh\)做为激活函数,并假设输入值的均值为0,提出了Xavier初始化的方法。
而Kaiming使用ReLU做为激活函数,就没法知足数值的均值为0的条件,所以使用Xavier来初始化ReLU做为激活函数的网络,效果也就不是那么理想。其提出了MSRA的初始化方法,来解决该问题。
附
推导时使用的几率公式:
\[ 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) \]
若是\(E(y) = 0\),则有:
\[ D(xy) = D(y)E(x^2) \]
若是\(x,y\)是相互独立的,则有
\[ E(xy) = E(x)E(y) \]
本文只推导了正向传播的过程,对于反向传播的推导可参考原始论文