神经网络梯度消失、梯度爆炸
程序员文章站
2022-05-28 11:53:53
...
形成原因,以 BP 为例说明
- 训练后期,最后一层网络越接近sigmoid两端,此时梯度很小,反向传播导致浅层网络的梯度更小,难以更新权重
- 很深的网络哦容易出现这个问题,梯度计算的结果显示,低层网络的梯度是高层网络梯度结果(部分)的叠乘和它自己的部分的乘积。
解决方案
Batch Normalization
- 解决问题:Internal Convoriance shift - 由于参数变化,神经网络中间层的数据分布与输入不同,随着网络加深,差异也变大。但是label不变(源空间和目标空间的分布不一致)
- 解决方案:对每一层的输入做批量归一化,是数据分布为N(0,1),【注意:均值方差一致不代表数据分布一致】。y也通过下列形式 做变换。
- 一方面使得数据有恢复输入的数据分布的可能性,保留了网络的capacity。保证模型的表达能力不因为规范化而下降
- 另一方面BN还解决了梯度弥散的问题。归一化得到的权重伸缩不变性(把w增大n倍,不影响归一化的结果)。但是在反向传播过程中,尺度较大的权重会得到更小的梯度,在同等学习速率下获得的更新更少,使得整体的w更加稳健?- 使用BN需要注意的问题:
- BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。
- 与Dropout的冲突
- BN和海森矩阵
ReLU
- RELU没有sigmoid的饱和问题。但是RELU对大的梯度不鲁棒,有可能导致神经元不再**,值为0,梯度也为0。解决办法LeakyRELU
- 实际情况是,我们还是首选RELU,通过设置小学习率防止神经元dead
ResNet,
- 解决梯度消失(不过有效路径比较短)
- 残差学习,让学习变得更加容易,差分放大器(使网络对微小的变化更加敏感,权重更新更快)
- 集成学习
上一篇: Android Dialog点击内容外围小部分区域没有消失
下一篇: C基础 旋转数组查找题目