欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神经网络梯度消失、梯度爆炸

程序员文章站 2022-05-28 11:53:53
...

形成原因,以 BP 为例说明

  • 训练后期,最后一层网络越接近sigmoid两端,此时梯度很小,反向传播导致浅层网络的梯度更小,难以更新权重
  • 很深的网络哦容易出现这个问题,梯度计算的结果显示,低层网络的梯度是高层网络梯度结果(部分)的叠乘和它自己的部分的乘积。

解决方案

Batch Normalization

  • 解决问题:Internal Convoriance shift - 由于参数变化,神经网络中间层的数据分布与输入不同,随着网络加深,差异也变大。但是label不变(源空间和目标空间的分布不一致)
  • 解决方案:对每一层的输入做批量归一化,是数据分布为N(0,1),【注意:均值方差一致不代表数据分布一致】。y也通过下列形式y=λx^+β 做变换。
    - 一方面使得数据有恢复输入的数据分布的可能性,保留了网络的capacity。保证模型的表达能力不因为规范化而下降
    - 另一方面BN还解决了梯度弥散的问题。归一化得到的权重伸缩不变性(把w增大n倍,不影响归一化的结果)。但是在反向传播过程中,尺度较大的权重会得到更小的梯度,在同等学习速率下获得的更新更少,使得整体的w更加稳健?
    • 使用BN需要注意的问题:
  • BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。
    • 与Dropout的冲突
  • BN和海森矩阵

ReLU

- RELU没有sigmoid的饱和问题。但是RELU对大的梯度不鲁棒,有可能导致神经元不再**,值为0,梯度也为0。解决办法LeakyRELU         
- 实际情况是,我们还是首选RELU,通过设置小学习率防止神经元dead

ResNet,

        - 解决梯度消失(不过有效路径比较短)

        - 残差学习,让学习变得更加容易,差分放大器(使网络对微小的变化更加敏感,权重更新更快)
        - 集成学习