参考链接:https://blog.csdn.net/qq_45649076/article/details/120494328
1.梯度消失和梯度爆炸(BN层解决)
梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大
2.退化问题(residual结构解决)
随着层数的增加,预测效果反而越来越差。
1.针对网络退化问题,采用Rresidual结构解决(隔层相连,弱化每层之间的强联系):
下图左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck
2.针对梯度消失和梯度爆炸等问题采用数据预处理和BN层解决。
BN层:它是一个可学习、有参数(γ、β)的网络层, 数据若没有进行归一化,在每一层隐藏层输出后,数据的分布就会发生变化,为了解决数据在中间层的变化,引入了批次归一化层,他将数据归一化至:均值0、方差为1的数据,使数据输出后,分布没有较大改变,因此不会引起大范围的梯度损失,不会导致梯度消失和梯度爆炸。
BN层训练过程:在训练阶段,running_mean和running_var在每次前向时更新一次;在测试阶段,则通过net.eval()固定该BN层的running_mean和running_var,此时这两个值即为训练阶段最后一次前向时确定的值,并在整个测试阶段保持不变。
公式:
意义:
1.减少对初始化的强烈依赖
2.允许更大的学习率,大幅提高训练速度:
3.改善流经网络的梯度
4.改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求