如何理解归一化(Normalization)对于神经网路(深度学习)的帮助?
在深度学习中,归一化的手段可谓无处不在。
对神经网路的输入进行归一化,对每一层的归一化(Batch Normalization、Layer Normalization),对权重的归一化(Weight Normalization)都有效的提升了神经网路的表现。
这些归一化手段是否有基于一些共同的想法?归一化手段为什么能对神经网路的训练和表现带来帮助?
BN最早被认为通过降低所谓Internal Covariate Shift,这种想法的出处可考至Understanding the difficulty of training deep feedforward neural networks,想必这也是batch norm作者这么设计的初衷。但是这种想法并没有过多实验支持,比如说去年NeurlPS这篇paper作者做了实验,在batch norm之后加上一些随机扰动(non-zero mean and non-unit variance,人为引入covariate shift),发现效果仍然比不加好很多。为什么放在batch norm layer之后而不是之前?因为为了证伪batch norm通过forward pass这一步降低covariate shift来提升网路训练效率的。这样说来故事就变得很有趣了,也就是说我们大概都理解一些BN对BN层之前网路噪音的好处,那么能不能研究一下它对它后面layer的影响?所以这些研究从优化的角度,有如下几种观点。
- BN通过修改loss function, 可以令loss的和loss的梯度均满足更强的Lipschitzness性质(即函数f满足L-Lipschitz和 -smooth,令L和 更小,后者其实等同于f Hessian的eigenvalue小于 ,可以作为光滑程度的度量,其实吧我觉得,一般convex optimization里拿这个度量算convergence rate是神器,对于non-convex optimization,不懂鸭,paper里好像也没写的样子),这么做的好处是当步子迈得大的时候,我们可以更自信地告诉自己计算出来的梯度可以更好地近似实际的梯度,因此也不容易让优化掉进小坑里。有意思的地方来了,是不是我在某些地方插入一个1/1000 layer,把梯度的L-Lipschitz变成1/1000L-Lipschitz就能让函数优化的更好了呢?其实不是的,因为单纯除以函数会改变整个优化问题,而BN做了不仅仅rescale这件事情,还让原来近似最优的点在做完变化之后,仍然保留在原来不远的位置。这也就是这篇文章的核心论点,BN做的是问题reparametrization而不是简单的scaling。 [1]
- BN把优化这件事情分解成了优化参数的方向和长度两个任务,这么做呢可以解耦层与层之间的dependency因此会让curvature结构更易于优化。这篇证了convergence rate,但由于没有认真读,所以感觉没太多资格评价。[2]
归一化手段是否殊途同归?很可能是的,在[1]的3.3作者也尝试了Lp normalization,也得到了和BN差不多的效果。至于Layer norm还是weight norm,可能都可以顺著这个思路进行研究鸭,无论是通过[1]还是[2],可能今年的paper里就见分晓了,lets see。
- How Does Batch Normalization Help Optimization?
- Exponential convergence rates for Batch Normalization: The power of length-direction decoupling in non-convex optimization
其实这个问题很难,很偏理论。
回顾一下围绕normalization的一些工作(由最新到最旧的BatchNorm):
2019,Weight Standardization(没有发表,但是有大佬Alan Yuille加持)
Weight Standardization 2019
WS叫权重标准化,建立在BN可以平滑损失landscape/BN可以平滑激活值这个观点上,进一步提升GN的效果匹配到BN的水平上,针对GN在micro-batch训练时性能不及BN。WS的原理是:减小损失和梯度的Lipschitz常数。
2019,Dynamic Normalization
Differentiable Dynamic Normalization for Learning Deep Representation ICML 2019
跟SN类似,加入了GN。
2019,Switchable Normalization
Differentiable Learning-to-Normalize via Switchable Normalization ICLR 2019
SN是为每一层选择/学习适当的归一化层(IN、LN和BN),在ImageNet,COCO,CityScapes,ADE20K和Kinetics等数据集上进行实验,应用涵盖图像分类、物体检测、语义分割和视频分类。
2019,Iterative Normalization(CVPR)
Iterative Normalization Beyond Standardization towards Efficient Whitening CVPR 2019
DBN的高效版本
2019,Spatially-Adaptive Normalization(CVPR)
Semantic Image Synthesis with Spatially-Adaptive Normalization CVPR 2019
用于图像生成
2018,Gradient Normalization(ICML)
GradNorm Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks ICML 2018
2018,Kalman Normalization
Kalman Normalization Normalizing Internal Representations Across Network Layers NIPS 2018
2018,Decorrelated Batch Normalization
Decorrelated Batch Normalization CVPR 2018
BN+白化
2018,Spectral Normalization(ICLR)
Spectral Normalization for Generative Adversarial Networks ICLR 2018
2018,Group Normalization(ECCV)
Group Normalization ECCV 2018
用于物体检测和语义分割等batch size很小的时候
GroupNorm是InstanceNorm的变体。
2018,Batch-Instance Normalization
Batch-Instance Normalization for Adaptively Style-Invariant Neural Networks NIPS 2018
2018,Instance-Batch Normalization
Two at Once Enhancing Learning and Generalization Capacities via IBN-Net ECCV 2018
2016,Layer Normalization(没有发表)
用于RNN
2016,Instance Normalization(没有发表,但是经过了实践检验)
用于风格迁移
2016,Weight Normalization(NIPS)
2015,Batch Normalization(ICML)
用于卷积网路ConvNet和图像分类
逐篇看。。。总结归纳。。。需要时间。。。
以下摘自我的另一个回答,小莲子:碎碎念:Transformer的细枝末节。原本是介绍 Layer Normalization 的。