一、BN层
1. 背景
为了追求更高的性能,卷积网络被设计得越来越深,然而网络却变得难以训练收敛与调参。
2. 原因
浅层网络的微弱变化经过多层线性变换与激活函数后会被放大,改变了每一层的输入分布,造成深层的网络需要不断调整以适应这些分布变化,最终导致模型难以训练收敛。
3. ICS现象
由于网络中参数变化导致的内部节点数据分布发生变化的现象被称为ICS(Internal Covariate Shift)。ICS现象容易使训练过程陷入饱和区,减慢网络的收敛。
4. 解决方法
2015年提出的BN层,从改变数据分布的角度避免了参数陷入饱和区。
BN层首先对每一个batch的输入特征进行白化操作,即去均值方差过程。假设一个batch的输入数据为xxx:B=B=B= { x1x_{1}x1,x2x_{2}x2,.........,xmx_{m}xm},首先求该batch数据的均值与方差,如式(1-1)和式(1-2)所示。
μB=1m∑i=1mxi(1-1)\mu _{B}= \frac{1}{m}\sum_{i=1}^{m}x_{i}\tag{1-1} μB=m1<

BN层通过白化操作和线性变换解决深度网络的训练难题,缓解梯度消失,加速收敛,简化调参并防止过拟合。在Pytorch中,通过nn.BatchNorm2d模块应用BN层。然而,BN层在小batch大小下效果受限,且测试依赖训练集。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



