批量归一化(Batch Normalization)

1.概述

在神经网络的训练中,我们有很多的参数如学习率、权重衰减系数等,我们使用随机梯度下降法等时,往往需要对这些参数不断调整,这将会花费我们大量的时间。这种情况下使用批量归一化能很好地解决这种问题。

批量归一化即通过归一化、缩放及平移使得数据变为满足或近似高斯形式的分布。我们知道在神经网络训练开始前,这是因为神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这就引导我们对数据做一个归一化的预处理使之满足相同的分布。总的来说,批量归一化就是解决训练过程中中间层数据分布发生改变的状况。
与激活函数层、卷积层、全连接层、池化层一样,BN(Batch Normalization)也属于网络的一层

2.网络层的前向传导过程

批量归一化(Batch Normalization)_第1张图片
批量归一化(Batch Normalization)_第2张图片
这里γ与β是可学习重构参数,当时,可以恢复出原始的某一层所学到的特征(极端情况,一般不会出现)。

在实战中,网络一旦训练完毕,参数都是固定的,这个时候即使每批训练样本进入网络,批量归一化层(BN)的均值与标准差也不会发生改变,这些数值可以用来作为测试样本中的均值和标准差。
测试阶段的均值和标准差为:
在这里插入图片描述
即对于均值来说直接计算所有batch u值的平均值;然后对于标准偏差采用每个batch σB的无偏估计。
最后测试阶段,BN的使用公式就是:
在这里插入图片描述
Δ:BN可以应用于一个神经网络的任何神经元上,BN通常可以置于全连接层、卷积层或激活函数层的前面,非线性层的后面:批量归一化(Batch Normalization)_第3张图片
在置于激活函数层后面时,使得激活函数层从z=g(Wu+b)变为z=g(BN(Wu+b)),而偏置参数b经过BN层后其实是没有用的,最后也会被均值归一化(当然BN层后面还有个β参数作为偏置项),所以激活函数层变为了z=g(BN(Wu))

3.BN的作用

(1)改进了整个网络的梯度流
(2)提升网络的鲁棒性,能在更广范围的学习率和不同的初始值下工作(学习率衰减速度会很快,使得收敛很快(就算学习率很小,也比以前的收敛速度快))
(3)改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求(不用再去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性)
(4)再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层)

4.BN的局限性

(1)batchsize足够大的时候才能合理的估计数据的均值和方差,使用BN效果才好
(2)对于有些像素级图片生成任务来说,BN效果不佳
(3)RNN等动态网络使用BN效果不佳且使用起来不方便(RNN可能输入的样本大小不一致,而BN需要所有样本大小一致)

5.网络学习步骤

(1)数据预处理(零均值)
(2)选择网络结构
(3)进行前向传播检查Loss是否合理(不含正则项的10类的Loss约为2.3,加正则项Loss会提高)
(4)使用小数据开始训练(不加正则项看能否降Loss为0)
(5)使用全部数据,小的正则化训练,尝试不同的学习率
Ⅰ、Loss不下降或下降的很慢=>学习率设置的小了
Ⅱ、Loss为NaN=>网络发生爆炸,学习率设置得太大了
Δ:学习率的范围大概为0.001~0.00001
批量归一化(Batch Normalization)_第4张图片

6.超参数的选择

使用交叉验证策略选择超参数:训练集上训练,验证集上验证
批量归一化(Batch Normalization)_第5张图片
验证数据集与训练数据的准确率相差过大,表明可能过拟合了,可以尝试增大正则项;准确率没有差距,没有过拟合,可以增加模型容量。
随机采样较网格采样在寻找合适的超参数时更优,因为网格采样只会对一组超参数的固定值采样,随机采样更加真实
批量归一化(Batch Normalization)_第6张图片

7.归一化操作的对比

假设特征图维度为NWHC,N为batch数目,W为特征图宽度,H为特征图高度,C为特征图通道数
(1)批量归一化(Batch Normalization/BN)
批量归一化(Batch Normalization)_第7张图片
批量归一化(Batch Normalization)_第8张图片
BN的意义即求N
HW个数的平均值与方差,最终得到C个均值与方差
(2)层归一化(Layer Normalization/LN)
批量归一化(Batch Normalization)_第9张图片批量归一化(Batch Normalization)_第10张图片
LN的特征层意义即求C
HW个数的平均值与方差,最终得到N个均值与方差
(3)实例归一化(Instance Normalization/IN)
批量归一化(Batch Normalization)_第11张图片批量归一化(Batch Normalization)_第12张图片
IN的意义即求H
W个数的平均值与方差,最终得到NC个平均值与方差
(4)组归一化(Group Normalization/GN)
假设特征图维度为N
WHC,将通道C分为C/G个组,则批量归一化(Batch Normalization)_第13张图片
GN的意义即求GWH个数的平均值与方差,最终得到N*C/G个平均值与方差
Δ:归一化操作示意图:批量归一化(Batch Normalization)_第14张图片
Δ:使用建议:
(1)batchsize大于16建议使用BN,小于16优先考虑GN
(2)对于RNN等时序模型,有时候输入样本长度不相同,不能使用BN,这时候可以使用LN
(3)对于图像生成以及风格迁移类应用,推荐使用IN

参考链接:
https://blog.csdn.net/qq_41853758/article/details/82930944
https://blog.csdn.net/shuzfan/article/details/50723877

你可能感兴趣的:(计算机视觉)