一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作相关的知识,希望对你有一定的参考价值。
文章目录
- 1. 简介
- 2. Batch Normalization
- 3. Layer Normalizaiton
- 4. Instance Normalization
- 5. Group Normalization
- 6. Switchable Normalization
1. 简介
归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)、Switchable Normalization(2018年)。
下列图片展示了BN、LN、IN和GN之间的区别与联系,图片来自GroupNorm。
将输入的图像shape记为[N, C, H, W],其中N表示batch_size,c表示channel,H和W分别表示图像或者feature map的高度和宽度。这几种归一化方法的区别如下:
batchNorm
:BN计算均值和标准差时,固定channel(在一个channel内),对HW和batch作平均
layerNorm
:LN计算均值和标准差时,固定batch(在同一个样本内),对HW和channel作平均
;instanceNorm
:IN计算均值和标准差时,同时固定channel和batch(在同一个样本的一个channel内),对HW作平均
GroupNorm
:GN计算均值和标准差时,固定batch且对channel作分组(在一个样本内对channel作分组),在分组内对HW作平均
。SwitchableNorm
:是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。
一些资料链接
- Batch Normalization
- Layer Normalizaiton
- Instance Normalization
- Group Normalization
- Switchable Normalization
2. Batch Normalization
Batch Normalization技巧自从2015年被谷歌提出以来,也是首次提出Normalization操作
。因其有效提升网络训练效率,获得广泛应用与持续研究。其规范化针对单个神经元进行,利用网络训练时一个mini-batch 的数据来计算该神经元
x
i
x_i
xi的均值和方差,因而称为 Batch Normalization。
BN的主要思想
:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,强迫数据保持均值为0,方差为1的正态分布,避免发生梯度消失
。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W, 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。
BN归一化方法图示如下:
上图中,N表示batch_size,9*9表示图像的大小,5表示channel,那么BN的求解过程如下:
a_mean = mean(a)=a0 + a1 +... + an)/((n + 1) * 9 * 9)
a_std = std(a)
new_a = gamma * (a - a_mean) / a_std + beta
BN算法流程如下:
总体来说就是先沿着通道计算每个batch的
均值
u u u和方差
δ 2 \\delta^2 δ2,根据均值和方差进行归一化,然后加上缩放和平移变量 y i = γ x i ^ + β y_i = \\gamma\\hatx_i+\\beta yi=γxi^+β,其中 γ \\gamma γ和 β \\beta β由反向梯度去学习。
加入缩放平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练
,也就是说为了保证模型的表达能力不因为规范化而下降
。 这两个参数是用来学习的参数。
BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近
。在进行训练之前,要做好充分的 shuffle,否则效果会差很多。
BN 需要在运行过程中统计每个 mini-batch 的一阶统计量(均值)二阶统计量(方差),因此不适用于动态的网络结构和RNN 网络。不过,也有研究者专门提出了适用于 RNN 的 BN 使用方法,就不深入介绍了。
3. Layer Normalizaiton
batch normalization存在以下缺点:
对batchsize的大小比较敏感
,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布
;- BN实际使用时需要计算并且保存某一层神经网络batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,sequence的长度是不一致的,换句话说
RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其他sequence长很多,这样training时,计算很麻烦
。
LN 针对单个训练样本
进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。
LN的方法是对于每一个sample中的多个feature(也就是channel)进行归一化操作
。把图像的尺寸表示为[N, C, H, W]的话,LN则是对于[C,H,W]进行归一化。BN和LN的计算过程差异如下:
4. Instance Normalization
Instance Normalization是对一个样本中的每一个通道进行单独的标准化操作,一般用于风格化迁移
,但如果特征图可以用到通道之间的相关性,那么就不建议使用它做Instance Normalization处理。
还是把图像的尺寸表示为[N, C, H, W]的话,IN则是针对于[H,W]进行归一化。
5. Group Normalization
Group Normalization (GN)是 Layer Normalizaiton 和 Instance Normalization 标准化的折中做法,GN算法将一个样本的的通道划分为多个group,然后在对每一个group进行标准化。
GN将channel分组,然后再做归一化
。GN 相当于把一本C页的书平均分成G份,每份成为有C/G页的小册子,对每个小册子做Norm。
以CNN训练图像为例,使用多个卷积核对图像进行卷积会得到多个feature map,但这些feature map,并不一定都是相互独立的,某些feature map 之间可能存在某些联系,这时使用IN算法对每一个feature map做标准化无疑会丢失这些关联
,而为了某些feature map之间的联系而使用LN算法对整个样本进行标准化又会占用大量内存资源
,造成不必要的浪费。
GN算法首先将相互关联的feature map组合成一个group 然后再这个group上进行标准化,这样保留了通道之间的关联,又节省了资源。GN同样可以针对于minibatch size较小的情况。因为它有不受batch size的约束。
可以看到与BN不同,LN/IN和GN都没有对batch作平均,所以当batch变化时,网络的错误率不会有明显变化。但论文的实验显示:LN和IN 在时间序列模型(RNN/LSTM)和生成模型(GAN)上有很好的效果,而GN在视觉模型上表现更好
。
6. Switchable Normalization
Switchable Normalization将 BN、LN、IN 结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。
SN具有以下三个优点:
鲁棒性
:无论batchsize的大小如何,SN均能取得非常好的效果;
通用性
:SN可以直接应用到各种类型的应用中,减去了人工选择归一化策略的繁琐;
多样性
:由于网络的不同层在网络中起着不同的作用,SN能够为每层学到不同的归一化策略,这种自适应的归一化策略往往要优于单一方案人工设定的归一化策略。
参考:https://blog.csdn.net/liuxiao214/article/details/81037416
以上是关于一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作的主要内容,如果未能解决你的问题,请参考以下文章