Batch Normalization

1、为什么提出BN?

训练深层神经网络,由于每层的变化会导致训练困难,训练速度慢,继而提出BN实现训练速度提升的目的。

深度的神经网络模型会涉及多个函数或层组合,在其他层不变的前提下,使用梯度可以更新参数[1]
但实际是所有层同时更新。每个层在训练过程中的分布发生变化,每一层的输入都受到所有先前层的参数的影响,因此训练变得复杂,训练速度也比较慢。训练期间网络参数变化导致的数据分布的变化叫做Internal Covariate Shift。
所以在2015年作者提出BN,说是通过降低ICS实现BN的目的——加速深层网络的训练[2]

2、BN是什么?

Batchnorm全名是Batch Normalization,简称BN,即批规范化。可应用网络中任何的输入层和隐藏层。

Batch 是指操作对象是mini-batch数据(SGD是训练深层网络的一种有效方法,使用小批次mini-batch数据来训练深度网络)。
Normalization 标准化顾名思义转换数据到均值为0方差为1的数据分布,不过BN算法在此基础上稍微有些改进。

算法原理(或者说BN在做些什么?)

Batch Normalizing Transform, applied to activation x over a mini-batch

解读:
输入的x是mini-batch的一批数据;
输出的是经过BN处理后的一批新分布的数据;
首先,根据输入的x计算均值和方差,代入标准化公式得到均值为0方差为1的新数据\hat{x}。这里\epsilon是一个常数,避免分母为0的情况。
然后,引入缩放因子\gamma和迁移因子\beta得到更合适的分布数据y。其中\gamma,\beta是超参数,在模型训练中不断学习。
图片来源:https://www.cnblogs.com/skyfsm/p/8453498.html

经过BN处理后,每一层的输入在训练过程中的分布变得相对稳定。

例如小猫猫二分类任务,第i批次都是小黑猫,第j批次的小猫猫显然有不同的特征分布。由于BN的操作使得压缩在同一均值和方差下,深度网络变得更加稳定。


小结:深度网络难训练是因为所有层都在更新。BN使得网络每层的数据分布相对稳定,使得每一层可以尽量面对同一特征分布的输入值,降低训练难度。

3、BN在神经网络中是怎么应用的?

神经网络的每个单元负责两件事情:先计算z,然后应用到激活函数中再计算a。BN的操作是在激活函数应用前的。

【暂放】BN是如何在CNN网络中应用的?

4、BN的作用[2]

(1)降低ICS,提升训练稳定性,加速网络收敛速度。
(2)允许我们使用更高的学习率。
(3)不那么依赖参数初始值。
(4)充当正则化,在某些情况下消除了对Dropout的需要。
(5)深层网络使用sigmoid、tanh等激活函数变得可能。

【暂放】原因说明

5、补充

(1)BN并不是适用于所有任务

  • BN不适合图像像素到像素的项目。韩国团队在2017NTIRE图像超分辨率中取得了top1的成绩,主要原因竟是去掉了网络中的batchnorm层,由此可见,BN并不是适用于所有任务的。
  • RNN等动态网络使用BN效果不佳且使用起来不方便。
    详见来源

(2)为什么使用缩放因子和迁移因子?

如果不引入\gamma,\beta的处理,每一层的数据分布都是标准正态分布,导致其完全学习不到输入数据的特征。
【暂放】更多细节的理解

(3)参数b的舍去

当使用BN时,参数b是没有意义的

【暂放】更多细节的理解

(4)预测时均值和方差的计算

由于均值和方差是基于mini-batch计算的,但在测试时,如果只有一个数据,此时根据一个数据计算的均值和方差是无意义的。
所以我们会记录模型训练过程中的均值和方差,通过track_running_stats控制。预测前通过model.eval()固定BN。

CLASS torch.nn.BatchNorm2d(num_features, 
                           eps=1e-05,   # 对应分母中的epsilon
                           momentum=0.1, 
                           affine=True, 
                           track_running_stats=True)

参考资料

[1] 花书 8.7.1 Batch Normalization
[2] 论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
[3] 吴恩达《深度学习》调试处理——BN

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容