一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作

文章目录
1. 简介
归一化层,目前主要有这几个方法,Batch (2015年)、Layer (2016年)、 (2017年)、Group (2018年)、 (2018年) 。
下列图片展示了BN、LN、IN和GN之间的区别与联系,图片来自 。
将输入的图像shape记为[N, C, H, W],其中N表示,c表示,H和W分别表示图像或者 map的高度和宽度 。这几种归一化方法的区别如下:
一些资料链接
2. Batch
Batch 技巧自从2015年被谷歌提出以来,也是首次提出操作 。因其有效提升网络训练效率,获得广泛应用与持续研究 。其规范化针对单个神经元进行,利用网络训练时一个mini-batch 的数据来计算该神经元 x i x_i xi?的均值和方差,因而称为 Batch。
BN的主要思想:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,强迫数据保持均值为0,方差为1的正态分布,避免发生梯度消失 。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W,而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵) 。求通道 1 的方差也是同理 。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差 。
BN归一化方法图示如下:
上图中,N表示,9*9表示图像的大小,5表示,那么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,LN,IN,GN,SN的归一化操作】BN算法流程如下:
总体来说就是先沿着通道计算每个batch的均值 u u u和方差 δ 2 \delta^2 δ2,根据均值和方差进行归一化,然后加上缩放和平移变量 y i = γ x i ^ + β y_i = \gamma\hat{x_i}+\beta yi?=γxi?^?+β,其中 γ \gamma γ和 β \beta β由反向梯度去学习 。
加入缩放平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练,也就是说为了保证模型的表达能力不因为规范化而下降 。这两个参数是用来学习的参数 。
BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近 。在进行训练之前,要做好充分的,否则效果会差很多 。
BN 需要在运行过程中统计每个 mini-batch 的一阶统计量(均值)二阶统计量(方差),因此不适用于动态的网络结构和RNN 网络 。不过,也有研究者专门提出了适用于 RNN 的 BN 使用方法,就不深入介绍了 。
3. Layer
batch 存在以下缺点:
对的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果太小,则计算的均值、方差不足以代表整个数据分布;BN实际使用时需要计算并且保存某一层神经网络batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的特征,可能存在一个特殊比其他长很多,这样时,计算很麻烦 。
LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和RNN,特别是自然语言处理领域 。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间 。
LN的方法是对于每一个中的多个(也就是)进行归一化操作 。把图像的尺寸表示为[N, C, H, W]的话,LN则是对于[C,H,W]进行归一化 。BN和LN的计算过程差异如下: