补充:关于BatchNorm的理解:
观点:
Although batch normalization has enabled the deep learning community to make substantial gains in recent years, we anticipate that in the long term it is likely to impede progress.
BN优点:
Downscales the residual branch:BN对残差块中的residual分支(相对于identity分支而言)做了downscale,迫使在训练初期残差块的输出主要由identity分支主导,从而使训练初期的梯度更有利于稳定训练
Eliminates mean shift: BN消除了ReLU等非对称激活函数带来的mean shift问题
mean shift:由于ReLU等激活非零对称,即使输入样例的内积接近0,输出样例见内积也会是正数且较大。该现象会随网络深度增加变得愈发复杂
Regularizing effect:一些论文认为BN带有正则项效果的原因在于其在训练数据的一个子集上计算数据统计量,本身带有一定噪声。出于这个原因,BN的batch_size应该多调一调(比如batch_size稍小一些,统计量噪声更大一些,或许regularizing效果更明显使得泛化能力更好;但是噪声太大也可能对训练产生影响)
-
Allows efficient large-batch training:BN使得损失函数的优化平面更加平滑(经典的“BN smoothens the loss landscape”理论),进而增大了最大稳定学习率
- 小batch-size训练好像并不受此性质的增益
- 该性质对于大batch-size训练有帮助(即便在固定epoch budget下不提升测试准确率),尤其是对于分布式训练等场景而言,可以在更少次参数更新下达到相同准确率
BN缺点:
Expensive computation budget: BN明显增大了计算量和内存开销。另外对于某些网络结构,BN会显著增加梯度计算时间
Discrepancy between training and testing: BN模型训练、测试阶段出现不一致的行为
最简单的,训练时BN的输出范围是有上下界的,而推理时没有。经验上讲,Batch越小这种不一致会越明显
-
Breaks the independence between training examples in a mini-batch: BN打破了mini-batch内部样本之间的独立性。这可能是BatchNorm最大的缺陷,其可能带来的负面影响有:
- 在使用不同的硬件环境下训练时难以复现精度,即便使用完全一致的代码
- 实现时容易出错,尤其是分布式训练(比如①DCGAN和SAGAN中测试时BN用的仍是训练模式,导致其报告的结果很大程度依赖batchsize;②EfficientNet代码中对BN的滑动平均也计算了滑动平均,导致平均结果变得预期之外地更加复杂)
- Batch内不同样本之间信息的交互(即batch内信息泄露,intra-batch information leakage),使网络可以“欺骗”某些损失函数,进而导致某些任务可能无法直接使用BN,如contrastive learning和sequence modeling task。SimCLR中提出使用跨副本批归一化(cross-replica batch normalization)解决该问题。
-
在许多Low-level vision中效果不佳
- 一方面是因为这类任务输入分辨率高,显存限制bs只能很小,小bs会导致训练不稳定,所以不如不加
- 如GridNet,EDSR等明确说了不使用BN
- 另一方面,如ERRNet论文中提到,在low-level vision task中,即使增大batchsize到可以接受的大小,某些任务仍会出现相当不佳的结果,比如经常出现的color attenuation/shifting issues
附:IN缺点:StyleGAN中发现水滴状伪影
其他理论:
- Random noise in the input layer for data augmentation has long been discovered equivalent to a weight decay method, in the sense that the inverse of the signal-to-noise ratio acts as the decay factor
- Batch norm layer should be frozen when finetuning, especially when gap between old and new data is large
- (待验证)当使用小batchsize训练时,可以尝试在inference阶段使用train mode而非eval mode,因为模型训练时积累的统计量可能并不稳定,使用样本均值方差或许更好。
另外,值得注意的是,目前一些最新的BatchNorm相关论文都很少再提及原论文中关于消除internal covariant shift的解释了。