神经网络梯度消失的问题

  1. 因为梯度反传的时候,各项是累积的形式,对于sigmoid函数,该导数在 σ ′ ( 0 ) = 1 / 4 σ′(0)=1/4 σ(0)=1/4时达到最高。现在,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足|ωj|<1。有了这些信息,我们发现会有 ω j σ ′ ( z j ) < 1 / 4 ωjσ′(zj)<1/4 ωjσ(zj)<1/4,并且在进行所有这些项的乘积时,最终结果肯定会指数级下降:项越多,乘积的下降也就越快。
    如果把权重设置的很大,就会出现梯度爆炸的情况
    参考: http://www.cnblogs.com/maybe2030/p/6336896.html
  2. 主要是因为以前用sigmoid的时候,sigmoid中心部位和两侧的梯度差别太大,如果权重初始化得太大,激活值基本都在sigmoid两侧,两侧梯度几乎为0,传播几层就没有梯度了。即使用很好的初始化算法把激活值控制在一个合理范围内,优化几下有几个神经元就又跑到两侧了,而一旦到两侧,因为梯度过小,就再也无法通过梯度更新来使其恢复。
  3. 这个问题在提出ReLU有效的初始化方法(例如MSRA)后已经大概率解决。后来又出了个Batch Normalization,不管优化多少层都跟浅层一样,梯度消失问题基本可以认为彻底解决了

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