文章目录
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} }
B∈x1,x2⋯xm
step1 : 求
x
1
,
x
2
⋯
x
m
{x_{1},x_{2}\cdots x_{m} }
x1,x2⋯xm的均值
step2:求
x
1
,
x
2
⋯
x
m
{x_{1},x_{2}\cdots x_{m} }
x1,x2⋯xm的方差
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=H1∑Hi=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=H1∑i=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无关,不受其约束。