#深入理解# BN LN IN GN几种标准化的区别

首先说明一下这 Batch Normalization Layer Normalization Instance Normalization Group Normalization都是标准化过程,
在这里我也说一下我对标准化的个人理解:
对数据进行标准化首先是减去均值,让数据以0为中心进行波动;
然后除以标准差使数据的标准差为1,本质上是让数据残差的均值为1,波动均值为1

归一化和标准化

这里先简单说明一下归一化和标准化的区别:

归一化:数据线性映射到0-1之间,无量纲化(可以忽略单位对计算的影响),使不同量纲的数据具有可比性
标准化:常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1
从公式可知,标准化和归一化两者都是对样本进行平移缩放
详细分析请参考我的这篇文章->#浅析# tensorflow中的批标准化

简述

在这里插入图片描述
上边这张图显示了四种标准化的方向,其中C轴表示通道,N轴表示Batch中的样本序号,H、W轴可以认为是图像样本中的宽和高
这里还要简单说明一下,如果标准化时忽略了某些维度,那么标准化之后的数据还会保留这些维度之间的信息;这样说可能有些绕,以BN为例,BN对在每一个通道内进行标准化,忽略了像素位置、batch中的样本序号,因此BN就保留了上述这些维度上数据的关联,而同时却丢失了通道之间的数据联系,因为是对每个通道进行的标准化,因此通道之间的关联自然就丢失了

Batch Normalization

在这里插入图片描述

BN过程:

在CNN网络中,每层网络的的输出都有多个 feature map(通道),而每个feathre map 又是由多个像素点组成;在进行BN时,算法会将一个batch中所有样本的所有feature map按feature map的序号划分为N(N=feature map)组,然后对这N组内的所有像素点进行N次标准化,

BN层的作用

  1. 加快网络的训练和收敛的速度
  2. 控制梯度爆炸防止梯度消失
  3. 防止过拟合

分析:
(1)加快收敛速度
在深度神经网络中中,如果每层的数据分布都不一样的话,将会导致网络非常难收敛和训练,而如果把每层的数据都在转换在均值为零,方差为1 的状态下,这样每层数据的分布都是一样的训练会比较容易收敛。
(2)防止梯度爆炸和梯度消失
以sigmoid函数为例,sigmoid函数使得输出在[0,1]之间,实际上当x过大或者过小,经过sigmoid函数后输出范围就会变得很小,而且反向传播时的梯度也会非常小,从而导致梯度消失,同时也会导致网络学习速率过慢;同时由于网络的前端比后端求梯度需要进行更多次的求导运算,最终会出现网络后端一直学习,而前端几乎不学习的情况。
Batch Normalization (BN) 通常被添加在每一个全连接和激励函数之间,使数据在进入激活函数之前集中分布在0值附近,大部分激活函数输入在0周围时输出会有加大变化,下图能够很好的解释这个问题
在这里插入图片描述
梯度爆炸:
第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n,假如激活层斜率均为最大值0.25,所有层的权值为100,这样梯度就会指数增加。(使用bn层后权值的更新也不会很大)

(3)BN算法防止过拟合
在网络的训练中,BN的使用使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,即同样一个样本的输出不再仅仅取决于样本的本身,也取决于跟这个样本同属一个batch的其他样本,而每次网络都是随机取batch,这样就会使得整个网络不会朝这一个方向使劲学习。一定程度上避免了过拟合。

BN在测试和训练时上有何不同?

  • 训练时,BN层每次都会用每个Batch内数据的均值和标准差对Batch内的样本进行标准化;同时会通过滑动平均的方式不断更新训练集上全局均值和方差并保存
  • 测试时,用保存好的训练集上的均值和方差对测试集上的每个数据进行标准化

BN放在什么位置?

其实BN一般放在激活函数之前或之后,其实这两种效果差别不大,但是当激活函数使用 sigmoid 或是 tanh时,将BN放在激活函数之前能够防止输入激活函数的值过大或者过小,从而防止梯度消失的情况出现

Layer Normalization

在这里插入图片描述

Layer Normalization 是对一个样本中的所有数据进行标准化;因为RNN一般用来处理序列数据,大部分序列类型的数据样本长度往往存在较大差异,如果使用BN处理就会出现某些通道没有某些样本数据的问题,即使使用特定字符填充,也会造成某些通道分布不均匀的问题

Instance Normalization

在这里插入图片描述

Instance Normalization是对一个样本中的每一个通道进行单独的标准化操作,一般用于风格化迁移,但如果特征图可以用到通道之间的相关性,那么就不建议使用它做Instance Normalization处理

Group Normalization

在这里插入图片描述
Group Normalization (GN)是 Layer Normalizaiton 和 Instance Normalization 标准化的折中做法,GN算法将一个样本的的通道划分为多个group,然后在对每一个group进行标准化
以CNN训练图像为例,使用多个卷积核对图像进行卷积会得到多个feature map,但这些feature map,并不一定都是相互独立的,某些feature map 之间可能存在某些联系,这时使用IN算法对每一个feature map做标准化无疑会丢失这些关联,而为了某些feature map之间的联系而使用LN算法对整个样本进行标准化又会占用大量内存资源,造成不必要的浪费;
GN算法首先将相互关联的feature map组合成一个group 然后再这个group上进行标准化,这样保留了通道之间的关联,又节省了资源
同时解决的batch_size过小 BN效果较差的问题(仅在单样本内部做标准化,与batch内的其他样本无关)

Switchable Normalization

Switchable Normalization将 BN、LN、IN 结合,赋予权重,让网络自己去学习归一化层应该使用什么方法,但训练复杂这里不做赘述

参考文章:

  1. 一文搞懂Batch Normalization,Layer/Instance/Group Norm
  2. 如何进行 batch normalization 2d 的计算?

以下是几种标准化的原始论文:

  1. Batch Normalization
  2. Layer Normalizaiton
  3. Instance Normalization
  4. Group Normalization
  5. Switchable Normalization
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值