1. 初始化方法

1. 为什么要选择合适的权重初始化

​     在训练一个神经网络模型之前,我们需要对模型中的权重进行初始化。这时,选择一个合适权重初始化方法尤为重要,一个好的权重初始化方法能够加速模型收敛减少训练时间

2. 合适的初始化方法应该具备哪些条件

  • 早期标准
    • 各层激活值不会出现饱和现象(早期激活函数主要以Sigmoid为主)。
    • 各层激活值不为0。
  • Glorot条件
    • 前向过程中,各层激活值方差不变。
    • 反向过程中,各层梯度值方差不变。

3.常用的几种权重初始化方法

  • 零初始化
  • 随机初始化
  • Xavier初始化
  • He 初始化
  • 预训练权重

3.1 零初始化

     零初始化将所有的权重 W W W设为0。将所有的权重 W W W设为0会出现“对称问题”,也就是每个神经元学到的东西都一样最终导致神经网络训练失败。

3.2 随机初始化

     随机初始化从一些分布中随机采样若干个小值赋值给权重 W W W。主要目的是防止出现零初始化中的对称问题。

​ 常用的几个分布:

  • 均匀分布
  • 高斯分布
  • 截断正态分布

3.3 X a v i e r 初 始 化 [ 1 ] Xavier初始化^{[1]} Xavier[1]

     随机初始化方法采用从均匀分布和高斯分布中随机采样值,那么均匀分布的上界和下界分别取什么值比较好?高斯分布的方差该怎么取值?Xavier初始化在保证每一层激活值具有相同方差的前提下,推导出了参考值。

  • 均匀分布

W ∼ U [ − 6 n i n + n o u t , 6 n i n + n o u t ] W\sim U[-\frac{6}{n_{in}+n_{out}}, \frac{6}{n_{in}+n_{out}}] WU[nin+nout6,nin+nout6]

  • 正态分布
    W ∼ N ( 0 , 2 n i n + n o u t ) W \sim N(0, \frac{2}{{n_{in}+n_{out}}}) WN(0,nin+nout2)

3.4 H e 初 始 化 [ 2 ] He初始化^{[2]} He[2]

     Xavier初始化比较适合于tanh激活函数,不太适用于ReLU激活函数。目前,ReLU激活函数是最常用的激活函数。针对ReLU激活函数,何恺明等人提出了He初始化又称为MSRA初始化。论文中提到Xavier初始化He初始化的最大区别在于:1.Xavier初始化只考虑线性情况,而He初始化考虑了非线性情况;2.二者计算得到的标准差不同。

  • 均匀分布

    W ∼ U [ − 6 n i n , 6 n i n ] W\sim U[-\frac{6}{n_{in}}, \frac{6}{n_{in}}] WU[nin6,nin6]

  • 正态分布
    W ∼ N ( 0 , 2 n i n ) W \sim N(0, \frac{2}{n_{in}}) WN(0,nin2)

3.5预训练权重初始化

     一般情况下,大家没有那么多算力和时间从零开始训练一个大型深度神经网络,此时我们一般会使用别人在一些大数据集上训练好的模型在自己数据集上进行fine-tune。当然此方法仅适用于已经存在的深度学习模型,自己设计的模型还是需要Xavier初始化He初始化权重从零开始训练。

​ 针对需要从零开始训练比较深的模型, V G G [ 3 ] VGG^{[3]} VGG[3]提供了一个可行的方法:先从零训练一个比较浅的模型,然后将比较浅模型的部分权重赋值给比较深模型的权重

4. 实验对比

    吴恩达老师在它的 d e e p l e a r n i n g . a i [ 4 ] deeplearning.ai^{[4]} deeplearning.ai[4]课程中做了一组实验来验证不同初始化对结果的影响。

  • 实验内容

     对三层全连接模型( FC10-FC5-FC1)采用不同初始化方法,并观察不同初始化方法对最终二分类问题结果的影响。

  • 输入数据

   使用sklearn合成环状数据,其中环状数据主要包含两类,300个训练样本,100个测试样本。数据分布图如图一所示:1. 初始化方法_第1张图片

图1 合成数据分布图

  • 实验

    本次实验采用三层全连接网络,初始学习率均采用 l r = 0.01 lr=0.01 lr=0.01,迭代次数15000次.

  • 实验结果

    表1 四种初始化测试集准确率对比

    初始化方法 测试集准确率
    零初始化 0.5
    随机初始化 0.81
    Xavier初始化 0.96
    He初始化 0.97

    四种初始化方法,损失下降情况如图2所示:
    1. 初始化方法_第2张图片

    图2 四种初始化结果损失下降情况

     结论: 从测试集准确率和损失下降情况来看,Xavier初始化和He初始化方法都是非常优秀的初始化方法。二者适用的激活函数不同,Xavier初始化比较适合tanh激活函数而He初始化比较适合ReLU激活函数。

5. 参考文献

  • [1] Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural networks[C]. international conference on artificial intelligence and statistics, 2010: 249-256.
  • [2] He K, Zhang X, Ren S, et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification[C]. international conference on computer vision, 2015: 1026-1034.
  • [3] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image
    recognition[C]. Proceedings of the international conference on learning representations,
    2015.
  • [4]Andrew Ng, https://www.deeplearning.ai/deep-learning-specialization/
  • [5]https://blog.csdn.net/xxy0118/article/details/84333635

你可能感兴趣的:(深度学习基础,深度学习)