设计好神经网络结构以及loss function 后,训练神经网络的步骤如下:
- 初始化权值参数
- 选择一个合适的梯度下降算法(例如:Adam,RMSprop等)
- 重复下面的迭代过程:
- 输入的正向传播
- 计算loss function 的值
- 反向传播,计算loss function 相对于权值参数的梯度值
- 根据选择的梯度下降算法,使用梯度值更新每个权值参数
初始化
神经网络的训练过程是一个迭代的过程,俗话说:好的开始就是成功的一半,所以的权值参数的初始化的值对网络最终的训练结果有很大的影响。 过大或者过小的初始值,对网络收敛的结果都会有不好的结果。
所有的参数初始化为0或者相同的常数
最简单的初始化方法就是将权值参数全部初始化为0或者一个常数,但是使用这种方法会导致网络中所有的神经元学习到的是相同的特征。
假设神经网络中只有一个有2个神经元的隐藏层,现在将偏置参数初始化为: b i a s = 0 bias = 0 bias=0,权值矩阵初始化为一个常数 α \alpha α。 网络的输入为 ( x 1 , x 2 ) (x_1,x_2) (x1,x2),隐藏层使用的激活函数为 R e L U ReLU ReLU,则隐藏层的每个神经元的输出都是 r e l u ( α x 1 + α x 2 ) relu(\alpha x_1 + \alpha x_2) relu(αx1+αx2)。 这就导致,对于loss function的值来说,两个神经元的影响是一样的,在反向传播的过程中对应参数的梯度值也是一样,也就说在训练的过程中,两个神经元的参数一直保持一致,其学习到的特征也就一样,相当于整个网络只有一个神经元。
过大或者过小的初始化
如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,会导致网络收敛缓慢或者收敛到局部极小值。
如果权值的初始值过大,则loss function相对于权值参数的梯度值很大,每次利用梯度下降更新参数的时,参数更新的幅度也会很大,这就导致loss function的值在其最小值附近震荡。
而过小的初值值则相反,loss关于权值参数的梯度很小,每次更新参数时,更新的幅度也很小,着就会导致loss的收敛很缓慢,或者在收敛到最小值前在某个局部的极小值收敛了。
Xavier初始化
Xavier初始化,由Xavier Glorot 在2010年的论文 Understanding the difficulty of training deep feedforward neural networks 提出。
为了避免梯度爆炸或者梯度消失,有两个经验性的准则:
- 每一层神经元激活值的均值要保持为0
- 每一层激活的方差应该保持不变。
在正向传播时,每层的激活值的方差保持不变;在反向传播时,每层的梯度值的方差保持不变。
基于上述的准则,初始的权值参数 W l W^l Wl( l l l为网络的第 l l l层)要符合以下公式
W [ l ] ∼ N ( μ = 0 , σ 2 = 1 n [ 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
其中 n n − 1 n^{n-1} nn−1是第 l − 1 l-1 l−1层的神经元的个数。 也就是说,初始的权值 w w w可以从均值 μ = 0 \mu = 0 μ=0,方差为 σ 2 = 1 n l − 1 \sigma^{2}=\frac{1}{n ^{l-1}} σ2=nl−11的正态分布中随机选取。
正向传播的推导过程:
推导过程中的三个假设:
- 权值矩阵 w w w是独立同分布的,且其均值为0
- 每一层的输入 a a a是独立同分布的,且均值也为0
- w w w和 a a a是相互独立的
设 L L L层的权值矩阵为 W W W,偏置为 b b b,其输入为 a a a
z l = w l a l − 1 + b l z^l = w^la^{l-1} + b^l zl=wlal−1+bl
则
V a r ( z l ) = V a r ( ∑ i = 0 n w i l a i l ) = ∑ i = 0 n V a r ( w i l a i l − 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∑nwilail)=i=0∑nVar(wilail−1)
有统计概率的知识可得到:(第一个假设 W W W, x x x相互独立)
V a r ( w i x i ) = E 2 ( w i ) V a r ( w i ) + E 2 ( x i ) V a r ( x i ) + V a r ( w i ) V a r ( x i ) 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(wixi)=E2(wi)Var(wi)+E2(xi)Var(xi)+Var(wi)Var(xi)
由第一第二个假设可知: l l l层输入的均值为0,权值参数 W W W的均值也为0,即: E ( x i ) = 0 , E ( w i ) = 0 E(x_i) = 0,E(w_i) = 0 E(xi)=0,E(wi)=0则有: V a r ( w i x i ) = V a r ( w i ) V a r ( x i ) Var(w_ix_i) = Var(w_i)Var(x_i) Var(wixi)=V