Batch Normalization和Layer Normalization

为什么需要归一化

       各个特征之间的量纲不同,会导致在计算loss时,会过度依赖于量纲较大的那些特征,而忽略量纲较小的特征,导致梯度下降时走“之字形”路线。

1 对比

  1. BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN
  2. LN在通道方向上,对C、H、W归一化,主要对RNN效果明显;

       如果把特征图[公式]比喻成一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 有W 个字符。

  1. BN 求均值时,相当于把这些书按页码一一对应地加起来(例如第1本书第36页,第2本书第36页…),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字),求标准差时也是同理。
  2. LN 求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”,求标准差时也是同理。

2 Batch Normalization

2.1 why BN?

       (1)在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。

       (2)Internal Covariate Shift (ICS) 问题:当底层网络中参数发生微弱变化时,由于每一层中的线性变换与非线性激活映射,这些微弱变化随着网络层数的加深而被放大(类似蝴蝶效应);另一方面,参数的变化导致每一层的输入分布会发生改变,进而上层的网络需要不停地去适应这些分布变化,使得我们的模型训练变得困难,网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度。

2.2 BN的主要思想

       针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。

2.3 BN的算法过程

       BN的使用位置在全连接层或者卷积层之后,激活函数之前。

  1. 沿着通道计算每个batch的均值 μ \mu μ
  2. 沿着通道计算每个batch的方差 σ 2 \sigma^2 σ2
  3. 做归一化
  4. 加入缩放和平移变量 γ \gamma γ β \beta β
           加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。

2.4 BN的作用

       (1)BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度

       (2)BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定

       (3)BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题

       (4)有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)

2.5 BN存在的问题

       每次是在一个batch上计算均值、方差,如果batch size太小,则计算的均值、方差不足以代表整个数据分布。

2.6 测试阶段如何使用Batch Normalization?

利用BN训练好模型后,我们保留了每组mini-batch训练数据在网络中每一层的 μ b a t c h \mu_{batch} μbatch σ b a t c h 2 \sigma_{batch}^2 σbatch2 。此时我们使用整个样本的统计量来对Test数据进行归一化,具体来说使用均值与方差的无偏估计:
μ t e s t = E ( μ b a t c h ) σ t e s t 2 = m m − 1 E ( σ b a t c h 2 ) \mu_{test}=E(\mu_{batch})\\ \sigma_{test}^2=\frac{m}{m-1}E(\sigma_{batch}^2) μtest=E(μbatch)σtest2=m1mE(σbatch2)

3 Layer Normalization

       针对BN不适用于深度不固定的网络(sequence长度不一致,如RNN),LN对深度网络的某一层的所有神经元的输入进行normalization操作。LN中同层神经元的输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差。
       Layer Normalization (LN) 的一个优势是不需要批训练,在单条数据内部就能归一化。LN不依赖于batch size和输入sequence的长度,因此可以用于batch size为1和RNN中。LN用于RNN效果比较明显,但是在CNN上,效果不如BN。

参考

https://zhuanlan.zhihu.com/p/72589565

你可能感兴趣的:(深度学习)