归一化+++

1、BN

1.BN的计算就是把每个通道的NHW单独拿出来归一化处理
2.针对每个channel我们都有一组γ,β,所以可学习的参数为2*C

1.1BN解决的问题:

第一个就是可以解决内部协变量偏移,简单来说训练过程中,各层分布不同,增大了学习难度,BN缓解了这个问题。当然后来也有论文证明BN有作用和这个没关系,而是可以使损失平面更加的平滑,从而加快收敛速度。

第二个优点就是缓解了梯度饱和问题(如果使用sigmoid这种含有饱和区间的激活函数的话),加快收敛。

(1)Internal Covariate Shift(内部协变量移位)
深度学习的话尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果,但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift(内部协变量移位)
Internal Covariate Shift:
google在论文Batch Normal 中提出来的,其主要描述的是:训练深度网络的时候经常发生训练困难的问题,因为,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了)
(2)Covariate Shift(协变量移位)

描述的输入数据分布不一致的现象(即训练和测试的分布不一致),对数据做归一化当然可以加快训练速度,能对数据做去相关性,突出它们之间的分布相对差异就更好了。Batchnormal做到了,前文已说过,Batchnormal是归一化的一种手段,极限来说,这种方式会减小图像之间的绝对差异,突出相对差异,加快训练速度。 所以说,并不是在深度学习的所有领域都可以使用Batchnormal。

1.2bn的参数

缩放变量 γ \gamma γ
平移变量 β \beta β
在训练的时候,这两个参数也参加训练,训练方式同卷积,链式求导
可以认为这两个参数用来学习恢复出原始网络所要学习的特征分布。 γ \gamma γ为方差, β \beta β为期望

1.3BN的前传

输入: B ∈ x 1 , x 2 ⋯ x m B\in {x_{1},x_{2}\cdots x_{m} } Bx1,x2xm
step1 : 求 x 1 , x 2 ⋯ x m {x_{1},x_{2}\cdots x_{m} } x1,x2xm的均值
step2:求 x 1 , x 2 ⋯ x m {x_{1},x_{2}\cdots x_{m} } x1,x2xm的方差
step3:由均值与方差对 x i x_{i} xi正则化
step4:由缩放系数与平移变量获取最终的值, y i ← γ ∗ x ^ + β y_{i}\gets\gamma*\hat{x}+\beta yiγx^+β

在这里插入图片描述

1.4BN的参数的训练

保存每个batchsize的 γ , β \gamma,\beta γ,β最后统计每层BN的γ与β各自的和除以图片数量得到平均直,并对其做无偏估计直作为每一层的E[x]与Var[x]。

1.5BN的缺点:

第一个,batch_size较小的时候,效果差。

第二个, BN 在RNN中效果比较差。因为RNN的输入动态,所以每个样本长度不一样,比如 batch_size 为10,也就是我有10个样本,其中9个样本长度为5,第10个样本长度为20。那么问题来了,前五个单词的均值和方差都可以在这个batch中求出来从而模型真实均值和方差。但是第6个单词到20个单词怎么办?如果只用这一个样本进行模型的话,不就是回到了第一点,batch太小,导致效果很差。

第三个,训练集和测试集的均值和方差相差比较大,那么训练集的均值和方差就不能很好的反应你测试数据特性,效果就会差。

2、LN

1.LN的计算就是把每个CHW单独拿出来归一化处理,不受batchsize 的影响

2.1LN和BN的区别

LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。

所以,LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。

2.2LN的前传

step1 : 计算均值 μ l = 1 H ∑ H i = 1 a i \mu^{l}=\frac{1}{H}\sum_{H}^{i=1} a_i μl=H1Hi=1ai
step2:计算方差: σ i = 1 H ∑ i = 1 H ( a i l − μ l ) 2 \sigma _i=\sqrt{\frac{1}{H}\sum_{i=1}^{H}(a^{l}_{i}-\mu ^l)^2 } σi=H1i=1H(ailμl)2
step3:由均值与方差对 x i x_{i} xi正则化
step4:由缩放系数与平移变量获取最终的值, y i ← γ ∗ x ^ + β y_{i}\gets\gamma*\hat{x}+\beta yiγx^+β

3、IN(可以理解为batch=1的BN)

对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。

3.1IN前传

在这里插入图片描述

4、GN

主要是针对Batch Normalization对小batchsize效果差,GN将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值,这样与batchsize无关,不受其约束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值