深度学习中的归一化方法简介(BN、LN、IN、GN)

1. 协方差偏移

1.1 协方差偏移的概念

简而言之, 深度网络内部数据分布在训练过程中发生变化的现象。

统计机器学习的一个经典假设是“源域和目标域的数据分布是一致的”。协方差偏移就是分布不一致假设下的一个分支问题,他指的的源域和目标域的条件概率分布一致,但是边缘概率分布不一样,即
P s ( Y ∣ X = x ) = P t ( Y ∣ X = x ) P_s(Y|X=x)=P_t(Y|X=x) Ps(YX=x)=Pt(YX=x) P s ( X ) ≠ P t ( X ) P_s(X)\neq P_t(X) Ps(X)=Pt(X)对于神经网络的各层输出来说,由于它们经过了层内操作的作用,分布显然与各层的输入分布是不同的,而且差异会随着网络深度的增大而增大,但是他们的标签确实仍然不变的,因此符合了协方差偏移的定义。

1.2 协方差偏移的影响

训练深度网络的时候,神经网络隐藏层参数更新会导致网络输出层输出数据的分布发生变化,如果不做归一化,那么每层网络输入的数据分布都是不同的。随着层数的增加,根据链式法则,这种偏移现象会逐渐被放大,高层的输入分布变化的会非常剧烈,使得高层需要不断的去适应底层的参数更新。为了保证网络参数的稳定性和收敛性,往往会选择比较小的学习率,同时参数初始化的好坏也明显影响训练出的模型精度,特别是在训练具有饱和非线性的网络,比如采用S或者双S激活函数的网络,例如LSTM、GRU。

简而言之,协方差偏移导致了神经元的输入数据不再是“独立同分布”,有三个缺点

  1. 上层参数需要不断的适应新的输入数据分布,降低了学习速度
  2. 下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区(梯度消失和爆炸),使得学习过早停止
  3. 每次的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎

2. 归一化的通用框架与基本思想

假设神经网络的输入是 X = ( x 1 , x 2 , ⋯   , x d ) X = (x_1,x_2,\cdots,x_d) X=(x1,x2,,xd),通过运算,得到输出 y = f ( X ) y =f(X) y=f(X)

由于协方差偏移的存在,X的分布可能相差很大,要解决独立同分布问题,最好的方法就是对于每一层的数据都进行白化操作,但是标准的白化操作代价高昂,由于反向传播,我们还希望白化操作是可微的以保证可以进行梯度的更新。

白化操作是一个重要的数据预处理步骤,一般包含两个目的

  1. 去除特征之间的相关性 ⇒ \Rightarrow 独立
  2. 是的所有特征具有相同的均值和方差 ⇒ \Rightarrow 同分布

因此,以BN为代表的归一化方法退而求其次,进行了简化的操作,基本思想是:在 x 输入网络之前,先对其进行 平移和伸缩 变换,将 x 的分布规范化在固定区间范围的标准分布。通用的变化框架如下
h = f ( g ⋅ x − μ σ + b ) h =f(g\cdot \frac{x-\mu}{\sigma}+b) h=f(gσxμ+b)(1)在上式中, μ \mu μ 是平移参数(shift), σ \sigma σ 是缩放参数(scale),通过这两个参数进行平移和缩放变换。
x ^ = x − μ σ \hat{x}=\frac{x-\mu}{\sigma} x^=σxμ得到的数据符合均值为0,方差为1的标准分布。

(2)在上式中, b b b 是再平移参数(re-shift), g g g 是再缩放参数(re-scale)。将上一步得到的 x ^ \hat{x} x^ 进一步变换为
y = g ⋅ x ^ + b y=g\cdot \hat{x} +b y=gx^+b最终得到的数据符合均值为 b b b,方差为 g 2 g^2 g2 的分布。

其中,再平移参数和再缩放参数是可学习的,这使得Normalization层能够尊重底层的学习结果,从而保证模型的表达能力不会因为归一化而下降

标准的白化操作是独立同分布,通过Normalization后,变换为均值为 b b b,方差为 g 2 g^2 g2 的分布,这并不是严格的同分布,知识映射到了一个确定的区间范围

3. 常见的归一化方法

在上一节中,我们提出了Nomalization的通用公式:
h = f ( g ⋅ x − μ σ + b ) h =f(g\cdot \frac{x-\mu}{\sigma}+b) h=f(gσxμ+b)

首先,根据一个示意图来形象的表明BN、LN、IN和GN的区别,在图片中,HW是被合成的一个维度,这个是方便画出示意图,C和N各占一个维度。
在这里插入图片描述

3.1 Batch Nomalization

3.1.1 什么是 BN

BN的计算就是把每个通道的NHW单独拿出来归一化处理,其计算算法流程如下所示:

在这里插入图片描述

3.1.2 为什么使用 BN

为了加快网络收敛速度,解决网络的梯度消失与梯度爆炸问题

以sigmoid函数为例子,其函数图像如下所示

在这里插入图片描述
当x到了一定的大小,经过sigmoid函数的输出范围就很小了,如下所示

在这里插入图片描述

如果输入很大或者很小,那么梯度就会很小,梯度在反向传播中是网络权重学习的速率,就会出现下面问题

在这里插入图片描述
在深度网络中,如果网络的激活输出很大,其梯度就很小,学习速率就很慢。假设每层学习梯度都小于最大值0.25,网络有n层,因为链式求导的原因,第一层的梯度小于0.25的n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。

这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。梯度爆炸也是同理。

3.1.3 怎么使用BN

假设一个batch有N个样本,每个样本通道数为C,高为H,宽为W。在求均值和方差时,将在N、H、W上进行操作,从而保留C的维度。具体来说,就是把第1个样本的第1个通道,加上第2个样本的第1个通道,……,加上第N个样本的第1个通道,求平均,得到通道1的均值,对所有的通道都进行操作,得到所有通道的均值和方差。
公式为
μ n ( x ) = 1 N H W ∑ n = 1 N ∑ h = 1 H ∑ w = 1 W x n c h w \mu_n(x)=\frac{1}{NHW}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^Wx_{nchw} μn(x)=NHW1n=1Nh=1Hw=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值