深度深度网络设计中各种归一化方法总结

前言

狭义的归一化指对输入特征进行归一化, 这在经典的机器学习中用的比较多,目的是为了消除不同特征量纲的差异。常用的归一化方法包括: Z-score, Min-Max scaler等等。

这里,我们主要总结深度学习中的一些归一化的技巧。深度学习中的归一化已经不仅仅局限于输入数据的归一化,而是网络各个层的归一化,因为每个层相当于一个非线性变换, 随着网络层数的加深,数据分布会发生较大变化(即internal covariate shift)。归一化实际上起到正则化的作用,能够大大促进网络的训练和收敛, 减轻了对参数处置的敏感性, 允许模型以更大的学习率进行训练。

批量归一化 BN

Batch Normalization顾名思义就是对每个min-batch samples进行归一化,

下图为一个BN变换的伪码, 其中 m m m为Batchsize的大小, x i x_{i} xi实际上就是就是第i个样本feed forward到某个层的某个神经元节点的input(也就是上一层的输出的加权和)
可以看到:
1.BN操作实在Batch维度上进行的,具体:每个Batch包含m个样本,基于这m个samples为每个feature独立计算均值和方差,然后进行类似于Z-Score的操作,最后通过trainable parameters进行伸缩和平移,目的是为了保证BN变换为恒等变换

实际上BN操作可以看作一个独立的网络层。
在这里插入图片描述
下面是BN变换更加抽象的一种写法,增益参数 g i l g_{i}^{l} gil, 这里的 a i l a_{i}^{l} ail表示第l层的第i个节点的输入,它实际上就是由上一层输出 h l h_{l} hl经过Linear projection得到:
在这里插入图片描述
在这里插入图片描述

那么在网络训练和推断的过程中如何使用BN呢?
以前是每层的输入 x x x直接作为该层的Input,有了BN以后,x首先用于计算BN的输出 y y y,然后再把y作为该层Input, 这样以来,网络修改完毕 (见下图伪码2-5)。

网络修改完成后就可以再进行训练以同时优化原始模型参数和BN操作的参数( λ , β \lambda, \beta λ,β)了。

训练完成后,就可以将其用于推断了,这里的问题是: 推断时Batch=1, 如何来估计均值和方差呢?
这里使用所有mini-batches的samples来估计均值和方差,其在整个Inference的整个过程中是保持不变的,具体:
E [ x ] ← E B [ μ B ] E[x] \leftarrow E_{B}[\mu_{B}] E[x]EB[μB]
V a r [ x ] ← m m − 1 E B [ σ B 2 ] Var[x]\leftarrow \frac{m}{m-1}E_{B}[\sigma_{B}^{2}] Var[x]m1mEB[σB2]

这样以来,对于测试样本 x x x, 它的normalized input可以估计为:
x ^ = x − E [ x ] V a r [ x ] + ϵ \hat{x}=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon }} x^=Var[x]+ϵ xE[x]

相应的BN变换可以写为:
y = λ x ^ + β = λ v a r [ x ] + ϵ x + ( β − λ E [ x ] v a r [ x ] + ϵ ) y=\lambda \hat{x}+\beta=\frac{\lambda}{\sqrt{var[x]+\epsilon}}x+(\beta-\frac{\lambda E[x]}{\sqrt{var[x]+\epsilon}}) y=λx^+β=var[x]+ϵ λx+(βvar[x]+ϵ λE[x])
在这里插入图片描述
BN如何应用到卷积网络中呢?
原文中有这样的表述: we let B be the set of
all values in a feature map across both the elements of a
mini-batch and spatial locations,可见对于一个尺寸为(B, C, H,W)的Tensor, B,H,W这三个维度是共享归一化参数的,换句话说,BN操作逐Channel独立进行的,更严格的数学定义如下:
在这里插入图片描述
在这里插入图片描述
归一化参数( μ , σ \mu, \sigma μ,σ)总共有2C个。

缺点
1.Batchsize的设置对BN的效果有很大影响;
2.BN主要是应用的前馈神经网络,不适用循环网络, 原因在于:RNN是按timestep展开的深度神经网络,假定RNN中使用BN的话,需要为每个timestep存储相关的统计信息,这本身耗费大量存储,更严重的是,RNNs支持变长输入, 如果test sequence的长度比training sequence的长度还长,这显然会出问题;
3. BN并不适用对噪声敏感(noise-sensitive)的场景、任务,比如强化学习等, 原因在于: 归一化的时候总是用在mini-batch上的统计信息来近似替代全局的统计信息,这引入了Noise。
4.

层归一化LN

Layer Normlaization 顾名思义就是对每个Layer内各个神经元的输入进行归一化,换句话说,Leyer内的各个神经元共享归一化参数,并且这些参数与Batchsize的大小无关,从而克服了BN中对BatchSize的依赖,可以用到Online Scenario (例如RNNs)。

上述参数的计算如下,H为某隐层的神经元节点的数量,
在这里插入图片描述
对于RNN, LN的定义如下, 其中 g g g b b b分别代表增益参数和偏置参数:
在这里插入图片描述
其中第 t t t步的输入 a t a^{t} at计算如下:
在这里插入图片描述
众所周知,标准的RNN极易出现梯度爆炸和梯度消失的问题,加入了LN以后,LN使得对某一层所有的Summed inputs的缩放不会引起average summed input产生变化,这使得隐藏层之间的动态变化、信息流更加稳定;

LN是在RNN背景下提出的,也可以将其应用到全连接前馈神经网络(FFNN)中, 具体上面公式中的H表示隐层节点的数量, 那么如何将其用到卷积网络CNN中呢?

由于每个卷积核用于从Input中提取某种Pattern,因此对于一个尺寸为(B,C, H,W)的Tensor, LN实际上是在C, H, W三个维度上进行的,其数学定义如下:
L N ( x ) = λ ( x − μ ( x ) σ ( x ) ) + β LN(x)=\lambda(\frac{x-\mu(x)}{\sigma(x)}) + \beta LN(x)=λ(σ(x)xμ(x))+β
μ b ( x ) = 1 H W C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C x b c h w \mu_{b}(x)=\frac{1}{HWC}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}x_{bchw} μb(x)=HWC1h=1Hw=1Wc=1Cxbchw
σ b ( x ) = 1 H W C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C ( x b c h w − μ b ( x ) ) 2 + ϵ \sigma_{b}(x)=\sqrt{\frac{1}{HWC}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}(x_{bchw}-\mu_{b}(x))^{2}+\epsilon} σb(x)=HWC1h=1Hw=1Wc=1C(xbchwμb(x))2+ϵ
LN的归一化参数量为2B。

实例归一化IN

Instance normalization (IN), 顾名思义是在Instance level进行归一化, 实际上它与BN的区别也在于此: BN是在整个samples上进行归一化,Batch维度共享归一化参数,而IN是在逐个Sample内进行归一化。 其数学定义如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于尺寸为(B,C, H,W)的Tensor, 总的归一化参数( μ , σ \mu, \sigma μ,σ)的数量为:2BC (而BN只有2C个).。

自适应实例归一化AdaIN

提到IN, 有必要提及著名的自适应实例归一化(Adaptive Instance Normalization, AdaIN), AdaIN在很多经典的Style transfer的研究中都有使用。 什么是AdaIN?
AdaIN基于所谓的Conditioned Instance Normalization (CIN)进一步发展而来,主要作用是直接使用Target style的统计信息(对应 λ , β \lambda, \beta λ,β)来对Normalized Content image的style进行迁移,其数学与IN操作非常类似,定义如下:
在这里插入图片描述
可以看到,括号里面是对Input image进行Normalize操作, 在IN中, λ , β \lambda,\beta λ,β分别对应scale和shift的参数, 也是网络需要去学习的参数。而在AdaIN里面,对应的参数 σ , μ ) \sigma, \mu) σ,μ)表示的是任意Style Image的统计信息, 不需要通过训练获得。简而言之, AdaIN通过在Feature spapce 迁移Feature statistics进行Style Transfer

组归一化GN

Group Normalization (GN)与Layer Normalization之间的关系就像分组卷积相比于常规卷积。简单来说,就是把Chanel维度分为G(G为预定义的超参数)个组, 然后组内独立进行Layer Normalization。 对于尺寸为(B,C,H,W)的Tensor, GN的归一化参数( μ , σ \mu, \sigma μ,σ)的数量为2BG (是LN归一化参数的G倍)。

局部响应归一化LRN

Local Response Normalization (LRN)最早在AlexNet中被提出, 与上面几种归一化技术不太一样,LRN实际上仿造了生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其数学定义如下:
在这里插入图片描述
其中 a x , y j a_{x,y}^{j} ax,yj表示将第j个Kernel应用到位置(x,y)后的非线性激活值, b x , y j b_{x,y}^{j} bx,yj即为其对应的LRN后的值。

可以看到LRN实际上就是在Channel方向上进行局部响应归一化, 具体来说:对于第i个channel的任意位置,基于其前n/2和后n/2对应位置的信息进行局部归一化,示意图如下:
在这里插入图片描述

权重归一化WN

上面提到的几个Normalization技术都是对某一层的Input进行Normalization, 而这里的Weight Normalization (WN)顾名思义是对权重进行Normalization。

WN的核心思想就是就是将权重向量的欧式范数与其方向进行了解耦。 其数学定义如下:
在这里插入图片描述
其中 W W W表示待优化的权重向量, v v v为参数向量, g g g为参数标量。
可以看到:当 g = ∣ ∣ w ∣ ∣ g=||w|| g=w v = w v=w v=w时,WN就退化为恒等映射, 因此WN的网络容量要更大,具体来说,1.当把参数g固定时, 只优化 w w w的方向,2.当把v固定时,只优化 w w w的范数。

可以很容易计算Loss- L L L关于参数 w w w v v v的梯度,如下:

在这里插入图片描述
在这里插入图片描述
可以得到两个发现:

  1. g ∣ ∣ v ∣ ∣ \frac{g}{||v||} vg表明在更新 v v v时会对梯度进行缩放;
  2. M w M_{w} Mw表明更新 v v v时会将梯度投影到一个远离 ▽ w \bigtriangledown _{w} w的方向;

特点:
WN操作的对象时权重参数,不依赖batchsize, 因此可以用到RNNs 以及其他noise-sensitive的场景(如强化学习, 生成式模型)中。

总结->各种归一化的统一数学表达形式

在这里插入图片描述
如上图,不同的归一化方式的区别仅在于共享归一化参数的维度不同,具体来说:
BN是逐Channel进行的,
LN是逐Sample进行的
IN 逐Channel, 逐Sample进行的
GN是逐Sample, 且Channel维度逐Group进行的

上面4中归一化的统一数学表达形式为 (此处忽略Scale和Shift操作):
在这里插入图片描述
在这里插入图片描述
区别就在于集合 S i S_{i} Si的定义上, 具体:
BN中,
在这里插入图片描述
LN中,
在这里插入图片描述
IN中,
在这里插入图片描述

GN中,
在这里插入图片描述
Ok.

References

  1. ImageNet Classification with Deep ConvolutionalNeural Networks;
  2. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift;
  3. Layer Normalization;
  4. Instance Normalization: The Missing Ingredient for Fast Stylization;
  5. Group Normalization;
  6. Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization;
  7. Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks;
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MasterQKK 被注册

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

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

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

打赏作者

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

抵扣说明:

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

余额充值