文章目录

  • 七种normalization
  • 1. Normalization
  • 动机
  • 原理
  • 优点
  • 缺点
  • 2. Batch Normalization
  • 动机
  • 原理
  • 优点
  • 缺点
  • 3. Layer Normalization
  • 动机
  • 原理
  • 优点
  • 4. Instance Normalization
  • 动机
  • 原理
  • 优缺点
  • 5. Group Normalization
  • 动机
  • 原理
  • 6. Weight Normalization
  • 动机
  • 原理
  • 优点
  • 7. Cosine Normalization
  • 动机
  • 原理
  • 参考文献


七种normalization

机器学习中,模型最喜欢的数据就是服从独立同分布的数据(现实世界中几乎不存在)。“独立”是指各个特征相互独立,没有依赖关系;“同分布”是指各个特征服从相同的分布,常常是高斯分布。然而,我们从自然界中直接获取的数据往往与“独立同分布”相差甚远,使机器学习或深度学习模型难以拟合数据分布,因此人们提出normalization来缓解这一问题。

1. Normalization

动机

在深度学习中,数据的标准化(normalization)很常见,其目的是将数据按比例缩放,使之落入一个小的特定区间。

一般来说,normalization是指将初始数据集进行标准化。初始数据集中不同特征的数据分布一般都是不同的(例如房价分布在100000~10000000不等,房屋面积分布在10-500不等),如果不进行normalization,就可能导致神经网络过度甚至只关注值大的特征。常见的normalization有四种,如《opencv 读取图片 图片数据处理 笔记》一文的【2.3 归一化】

还有一个词standardization,一般是指将数据正态化,使平均值1方差为0. 因此normalization和standardization 是针对数据而言的,消除一些数值差异带来的特种重要性偏见。

原理

设数据集形状为(N, C, H, W),normalization可以对所有数值一起进行标准化,也可以以C轴隔离(即C=1和C=2的数据分别标准化)。

MINMAX标准化:数值被平移缩放到一个指定的范围7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization(常用[0,1]):
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_02

优点

  • 使不同特征的数据分布范围尽量相似,一定程度上消除了模型对某些特征的过分依赖
  • 使用梯度下降算法优化参数时,缓解了不同特征梯度变化范围不一致的问题,进而加速训练,更容易收敛

缺点

  • 加入新样本后,数据范围可能会有所变动,最好是所有样本重新标准化

2. Batch Normalization

动机

试想,数据在经过深度神经模型的某隐层之后,是否还保持着输入该隐层之前的数据分布?显然,难以避免会有细微的偏差。深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们被迫非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。但当网络层数很大时,仍然无法训练得到泛化能力很好的网络模型。Google 将这一现象总结为 Internal Covariate Shift

batch normalization很好地解决了这一问题。其思想是在每一层神经网络之后,对数据重新进行标准化(normalization),使数据分布恢复到尽量接近原分布。这里的“batch”是指模型在训练时,每次输入一个batch,只对这一个batch进行标准化。当然在具体实现时,也可以保留着以往batch的聚合值(均值和方差),从而尽可能地达到全局标准化。

顺便想到,网络层数过深时,往往也会引起梯度下降和梯度消失。

原理

设每个batch的张量形状为(B, C, H, W),batch normalization将进行C次独立的标准化,每次标准化的数据为(B, H, W)。

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_计算机视觉_03
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_04
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_05

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_06分别是(batch_size, C, H, W)这4个维度的下标。7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_07,7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_计算机视觉_08分别表示第7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_09个通道的均值和方差;7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_10是可学习参数,表示数据缩放程度; 7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_11是可学习参数,表示偏移量。

优点

  • 解决数据在经过深度神经网络层之后产生的内部协变量偏移问题,进而加速训练,更易收敛

缺点

  • 依赖于batch_size的大小,batch_size越小,效果越不好
  • 对于RNN等变长输入的模型,在运算到网络的尾部时,只有少量较长序列还在参与运算,退化为batch_size过小问题

3. Layer Normalization

动机

batch normalization不适用于RNN等动态网络和batchsize较小的场景:

  1. 当batch size太小时,比如一个batch只有2个样本,都很难称得上是个分布,如果进行batch normalization,恐怕每个batch的输出都一模一样了吧。
  2. RNN等动态网络场景,其实本质原因与1一样;由于RNN共享隐层参数且输入序列是不定长的,RNN的时间片进行到尾部时,往往只有最长的那两三个序列还在运算,等同于batch size一直减小,直到为0。

layer normalization的出现很好的解决了上述问题。layer normalization是对每个样本进行标准化,与batch的大小无关。

原理

设每个batch的张量形状为(batch_size, C, H, W),layer normalization将进行batch_size次独立的标准化,每次标准化的数据为(C, H, W),也就是每个样本自己进行一次标准化。

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_计算机视觉_12
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_13
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_14

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_06分别是(batch_size, C, H, W)这4个维度的下标。

优点

  • 避免了batch norm受限于batch size大小的问题
  • 每个样本单独进行标准化,将不同样本约束在同一分布内,增强模型泛化能力

4. Instance Normalization

动机

作者指出在图像风格迁移任务中,生成式模型计算得到的 Feature Map 的各个 Channel 的均值与方差将影响到所生成图像的风格。故作者提出了 IN,在 Channel 层面对输入数据进行归一化,再使用目标图像的Channel 的均值与方差对结果进行 ‘去归一化’。一种更适合对单个像素有更高要求的场景的归一化算法(IST,GAN等)。

原理

IN 与LN 类似,仅对单个样本进行归一化,但是 IN 并不进行仿射变换。

设每个batch的张量形状为(B, C, H, W),Instance Normalization将进行B×C次独立的标准化,每次标准化的数据为(H, W)。

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_16
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_17
7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_18

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_06分别是(batch_size, C, H, W)这4个维度的下标。

优缺点

  • 在图片视频分类等特征提取网络中大多数情况BN效果优于IN,在生成式类任务中的网络IN优于BN。

5. Group Normalization

动机

GN的动机也是为了解决BN受限于batch size的问题。

原理

可以直接看图理解与BN、LN、IN的区别,其实GN就相当于LN的拆分版、IN的组队版。(下图Layer Norm的所有蓝色格子就是一个样本)

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_20

6. Weight Normalization

动机

BN 和 LN 均将规范化应用于输入的特征数据7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_21

原理

考虑普通的神经元7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_22是两个向量的内积形式。分解7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_23,标量7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_24表示7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_25的模长,7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_计算机视觉_26表示与7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_25同方向的单位向量。原先对参数7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_25的优化转化为对参数7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_247种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_数据_30的优化。

参考:Weight Normalization原理与使用

优点

  • WN是通过重写深度网络的权重来进行加速的,没有引入对minibatch的依赖,更适合于RNN网络
  • 引入更少的噪声
  • 不需要额外的空间进行存储minibatch的均值和方差,对时间的开销也小,所以速度会更快

7. Cosine Normalization

动机

对输入数据7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_21的变换已经做过了,横着来是 LN,纵着来是 BN。对模型参数7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_32的变换也已经做过了,就是 WN。那还有什么可做的呢?大佬们盯上了神经网络运算过程中的内积计算,即7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_33中的“7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_机器学习_34”。

在经过深层网络结构之后,可能数据分布的方差已经很大,从而内积计算的结果也会很大,进而导致梯度爆炸等一系列问题。IN的目的是将这个结果值标准化到一个特定的区间

原理

考虑普通的神经元7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_深度学习_22,Cosine Normalization的做法是

7种Normalization总结(batch normalization,layer normalization,Weight Normalization,Cosine Normalization)_normalization_36