为 了降低分布变化的影响,可使用归一化策略Normalization,把数据分布映射到一个确定的区间。
神经网络中,常用的归一化策略有BN(Batch Normalization), WN(Weight Normalization), LN(Layer Normalization), IN(Instance Normalization).
BN是针对单个神经元进行归一化操作,多用于batch size大的CNN网络。使用batch size数量的样本的均值和方差,近似整体样本的均值和方差,独立地规范每一个输入维度x。也有人说,BN输出的是标准正态分布(不明白,大量样本的分布是正态分布?)。BN使用的这样均值、方差近似,给神经网络引入了噪声,提高了泛化性。BN对batch size和样本的随机要求相对严苛。
WN是对神经网络的权重进行归一化,不直接依赖于输入样本。虽然是对权重w进行限定,但限定的结果还是反应到y=w*x+b的y中。
LN是对当前神经网络层单个训练样本的所有神经元的输入进行计算,利用统一的均值和方差,对数据进行归一化。但是,对不同类别的特征使用同样的限定,会降低网络性能。
IN是对单个图像进行的归一化操作。常用于风格迁移等。
GN是对通道进行分组,每个组做归一化操作。GN可以看作是LN与IN之间的一种折中方案。把当前层的所有通道都作为一个组的时候,GN结果就是LN。如果把所有通道N分为N个组里,GN结果就是IN。
一、批量标准化(BN,Batch Normalization)
1、BN 简介
a、协变量偏移问题
- 我们知道,在统计机器学习中算法中,一个常见的问题是
协变量偏移(Covariate Shift)
,协变量可以看作是输入变量
。一般的深度神经网络都要求输入变量在训练数据和测试数据上的分布是相似的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。 - 传统的深度神经网络在训练时,随着参数的不算更新,
中间每一层输入的数据分布往往会和参数更新之前有较大的差异
,导致网络要去不断的适应新的数据分布,进而使得训练变得异常困难,我们只能使用一个很小的学习速率和精调的初始化参数来解决这个问题。而且这个中间层的深度越大时,这种现象就越明显。由于是对层间数据的分析,也即是内部(internal),因此这种现象叫做内部协变量偏移(internal Covariate Shift)。
b、解决方法
- 为了解决这个问题,Sergey Ioffe’s 和 Christian Szegedy’s 在2015年首次提出了批量标准化(Batch Normalization,BN)的想法。该想法是:不仅仅对输入层做标准化处理,还要对 每一中间层的输入(激活函数前) 做标准化处理,使得输出服从均值为 0,方差为 1 的正态分布,从而避免内部协变量偏移的问题。之所以称之为
批
标准化:是因为在训练期间,我们仅通过计算当前层一小批数据
的均值和方差来标准化每一层的输入。 - BN 的具体流程如下图所示:首先,它将隐藏层的输出结果(如,第一层: Wh1 · x ,状态值)在 batch 上进行标准化;然后,经过缩放(scale)和平移(shift)处理,最后经过 RELU 激活函数得到h1送入下一层(就像我们在数据预处理中将 x 进行标准化后送入神经网络的第一层一样)。
2、BN 的优点
现在几乎所有的卷积神经网络都会使用批量标准化操作,它可以为我们的网络训练带来一系列的好处。具体如下:
- 首先,通过对输入和中间网络层的输出进行标准化处理后,减少了内部神经元分布的改变,使降低了不同样本间值域的差异性,得大部分的数据都其处在非饱和区域,从而保证了梯度能够很好的回传,
避免了梯度消失和梯度爆炸
- 其次,通过减少梯度对参数或其初始值尺度的依赖性,使得我们可以使用较大的学习速率对网络进行训练,从而
加速网络的收敛
- 最后,由于在训练的过程中批量标准化所用到的均值和方差是在一小批样本(mini-batch)上计算的,而不是在整个数据集上,所以均值和方差会有一些小噪声产生,同时缩放过程由于用到了含噪声的标准化后的值,所以也会有一点噪声产生,这迫使后面的神经元单元不过分依赖前面的神经元单元。所以,它也可以看作是一种正则化手段,
提高了网络的泛化能力
,使得我们可以减少或者取消 Dropout,优化网络结构
)你再也不用去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了
,因为BN具有提高网络泛化能力的特性
3、BN 的使用注意事项
- BN 通常应用于输入层或任意中间层,且最好在
激活函数前
使用 - 使用 BN 的层
不需要加 bias 项
了,因为减去batch 个数据的均值 μB后,偏置项 b 的作用会被抵消掉,其平移的功能将由 β来代替 BN 的训练阶段均值和方差的求法
:- 全连接层:对每个节点(node) 对应的 batch 个数据(所有像素)分别求均值和方差
- 二维卷积层:对每一个 channel 所对应的 batch 个特征图(所有像素)求均值和方差,输出 C 维
- BN 层参数:mean(C 维)、variance(C 维)、moving average factor(1 维,caffe 中默认为 0.999)
BN 的测试阶段均值和方差的求法
:测试时,使用的是 训练集 的每一个 BN 层累积下来的 均值和方差(C 维);训练阶段使用 指数衰减滑动平均(EMA) 将每个 batch 的均值和方差不断的累积下来,从而近似得到整个样本集的均值和方差- 指数衰减滑动平均(EMA)介绍见:指数加权移动平均(Exponential Weighted Moving Average),均值的计算公式如下(标准差的计算同理)
二、归一化、标准化
详情见:https://blog.csdn.net/wuzhongqiang/article/details/103764412