神经网络初始化

日期:2019.05.26
参考:http://www.deeplearning.ai/ai-notes/initialization/

神经网络初始化

初始化会对深度神经网络模型的训练时间和收敛性产生重大影响。简单的初始化方法可以加速训练,但使用这些方法需要注意小心常见的陷阱。本文将解释如何有效地对神经网络参数进行初始化。

有效初始化的重要性

要构建机器学习算法,通常要定义一个体系结构(例如逻辑回归、支持向量机、神经网络)并对其进行训练学习参数。

  • 训练神经网络的常见流程
    • 初始化参数(一般不采用常量初始化方案和太小或太大的值初始化权重方案)
    • 选择优化算法(例如Adam,Momentum,RMSProp,Stochastic和Batch Gradient Descent方法。)
    • 重复以下步骤
      • 向前传播输入
      • 计算成本函数
      • 使用反向传播计算与参数相关的成本梯度
      • 根据优化算法,利用梯度更新每个参数
        之后给定一个新的数据点,使用模型来预测其类型

初始化值太大\太小会导致梯度爆炸或梯度消失

在优化循环的每次迭代(前向,成本,后向,更新)中,观察到当从输出层向输入层移动时,反向传播的梯度要么被放大,要么被最小化。

假设所有的激活参数都是线性的(恒等函数)。则输出激活为:

假设,那么输出预测为:

  • 情况1:初始化值过大导致梯度爆炸
    如果每个权重的初始化值都比单位矩阵稍大,即

    可简化表示为

    值将会随着l的值呈指数级增长。当这些激活用于向后传播时,会导致梯度爆炸。也就是说,与参数相关的成本梯度太大。 这导致成本围绕其最小值振荡。

    初始化值太大导致成本围绕其最小值震荡

  • 情况2:初始化值过小会导致梯度消失
    如果每个权重的初始化值都比单位矩阵稍小,即

    可简化表示为

    值将会随着l的值呈指数级下降。当这些激活用于后向传播时,可能会导致梯度消失。也就是说,与参数相关的成本梯度太小。这会导致成本在达到最小值之前收敛。

    初始化值太小导致模型过早收敛

总而言之,使用大小不合适的值对权重进行将导致神经网络的发散或训练速度下降。 虽然我们用的是简单的对称权重矩阵来说明梯度爆炸/消失的问题,但这一现象可以推广到任何不合适的初始化值。

如何确定合适的初始化值

经验原则

  • 激活的平均值应为零。
  • 激活的方差应该在每一层保持不变。

在上述两个经验原则下,反向传播的梯度信号不应该在任何层中乘以太小或太大的值。梯度应该可以移动到输入层,而不会爆炸或消失。
更具体地说,对于层l,其前向传播是:

想要下式成立

确保均值为零,并保持每层输入方差值不变,可以保证信号不会爆炸或消失。该方法既适用于前向传播(用于激活),也适用于向后传播(用于关于激活的成本梯度)。这里建议使用Xavier初始化(或其派生初始化方法),对于每个层l,有:

层l中的所有权重均自正态分布中随机挑选,其中均值 ,方差,其中是第层网络中的神经元数量。偏差已初始化为零。

Xavier初始化的理由

  • 目的
    建立 和 之间的关系

  • 常见的数学技巧

    • 在方差之外提取求和
    • 将乘积的方差转换为方差的乘积
  • 初始假设

    • 假设层的激活通常分布在零附近。
    • 假设激活函数为tanh
  • 假设

    • 权重是独立且相同的分布
    • 输入是独立且相同的分布
    • 权重和输入是相互独立的
  • 前向传播为

  • 假设初始化神经网络,并且输入标准化
    在训练的早期使用tanh的线性制度,值足够小所以,意味着

    此外

使用简化为

将在方差之外提取求和
\operatorname{Var}\left(a_{k}^{[l]}\right)=\operatorname{Var}\left(z_{k}^{[l]}\right)=\operatorname{Var}\left(\sum_{j=1}^{n^{l-1}} w_{k j}^{[l]} a_{j}^{[l-1]}\right)=\sum_{j=1}^{n^{l-1}} \operatorname{Var}\left(w_{k j}^{[l]} a_{j}^{[l-1]}\right)
将乘积的方差转换为方差的乘积并使用 and
\operatorname{Var}\left(w_{k j}^{[l]} a_{j}^{[l-1]}\right)=E\left[w_{k j}^{[l]}\right]^{2} \operatorname{Var}\left(a_{j}^{[l-1]}\right)+\operatorname{Var}\left(w_{k j}^{[l]}\right) E\left[a_{j}^{[l-1]}\right]^{2}+\operatorname{Var}\left(w_{k j}^{[l]}\right) \operatorname{Var}\left(a_{j}^{[l-1]}\right)
带入假设
\operatorname{Var}\left(z_{k}^{[l]}\right)=\sum_{j=1}^{n^{[l-1 ]}} \operatorname{Var}\left(w_{k j}^{[l]}\right) \operatorname{Var}\left(a_{j}^{[l-1]}\right)\sum_{j=1}^{n^{[l-1]}} \operatorname{Var}\left(W^{[l]}\right) \operatorname{Var}\left(a^{[l-1]}\right)=n^{[l-1]} \operatorname{Var}\left(W^{[l]}\right) \operatorname{Var}\left(a^{[l-1]}\right)
第一个假设导致

第二个假设导致

同样的想法

整合上述,得到

希望方差不变()需要
\begin{aligned} \operatorname{Var}\left(a^{[L]}\right) &=n^{[L-1]} \operatorname{Var}\left(W^{[L]}\right) \operatorname{Var}\left(a^{[L-1]}\right) \\ &=n^{[L-1]} \operatorname{Var}\left(W^{[L]}\right) n^{[L-2]} \operatorname{Var}\left(W^{[L-1]}\right) \operatorname{Var}\left(a^{[L-2]}\right) \\ &=\ldots \\ &=\left[\prod_{l=1}^{L} n^{[l-1]} \operatorname{Var}\left(W^{[l]}\right)\right] \operatorname{Var}(x) \end{aligned}

根据我们如何初始化权重,我们的输出和输入的方差之间的关系会有很大的不同。 请注意以下三种情况。
n^{[l-1]} \operatorname{Var}\left(W^{l l}\right) \left\{\begin{array}{ll}{<1} & {\Longrightarrow \text { Vanishing Signal }} \\ {=1} & {\Longrightarrow \operatorname{Var}\left(a^{[L |}\right)=\operatorname{Var}(x)} \\ {>1} & {\Longrightarrow \text { Exploding Signal }}\end{array}\right.

  • 结果
    • 为了使前向传播不爆炸不消失,必须通过初始化设置

    • 为了使梯度不爆炸不消失,必须通过初始化设置

总结

在实践中,使用Xavier初始化的机器学习工程师会将权重初始化为或,其中后一个分布的方差是和的调和平均。

Xavier初始化可以与tanh激活一起使用。此外,还有大量其他初始化方法。 例如,如果你正在使用ReLU,则通常的初始化是He初始化,其初始化权重通过乘以Xavier初始化的方差2来初始化。 虽然这种初始化证明稍微复杂一些,但其思路与tanh是相同的。

你可能感兴趣的:(神经网络初始化)