深度学习案例教程 教案7.8Batch_Normalization_使用比较.docx
08Batch_Normalization_使用比较
(p59)我们本节课来学习batchnormalization的使用比较。之前我们已经讲过batchnormalization,这个是神经网络中非常重要的一个操作,作为拓展知识,我们这里介绍一下batchnormalization的多种方式。
在深度学习中。有批内归一化,batchnormalization,简称BN。还有层内归一化。Layernormalization,简称LN,组内归化groupnormalization,简称GN,这些方法在模型训练中的效果和收敛速度都有所差异,
(p60)首先我们先来看一下这个批内归一化Batchnormalization。BN是最常用的归一化方法,对每个批次的输入进行归一化来控制内部协变量偏移。有效地加速模型的收敛速度,减少训练过程中的梯度消失和梯度爆炸的问题。在深度网络中应用广泛,被证明在许多任务上具有良好的效果
第二个,层内归一化(LayerNormalization,LN),LN是对每个样本在同一层内进行归一化,计算每个样本的均值和方差。相对于BN而言,更适用于循环神经网络具有变长输入序列的任务。在处理较短的序列数据时,能够更好地保持数据的顺序关系,在这方面具有一定的优势。
第三个,组内归一化(GroupNormalization,GN)GN将输入分成多个组,并对每个组进行归一化,每个组独立计算均值和方差。GN适用于小批量样本,也就是数量较少的情况,比如在较小的卷积层中使用。可以减少批量大小对归一化的影响。
那总的来说,不同的归一化方法在模型训练中的这个效果和收敛速度可能会有差异,选择合适的归一化方法,应考虑到这个数据分布,模型框架和任务特点这些因素,在实际应用中可以通过实验比较不同归一化的方法在目标任务上的效果,来选择最合适的方法使用。
(p61)下面我们来看一下BN方法的原理。
BatchNormalization(BN)是最早出现的,也通常是效果较好好的归一化方式。他的原理如下。首先他的使用对象是一个N*C*H*W尺寸的特征向量,包含N个样本,每个样本通道数为C,高为H,宽为W。对其求均值和方差时,将在N、H、W上操作,而保留通道C的维度。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道......加上第N个样本第1个通道,求平均,得到通道1的均值(注意是除以N×H×W而不是单纯除以N,最后得到的是一个代表这个batch第1个通道平均值的数字,而不是一个H×W的矩阵)。求通道1的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。
(p62)BatchNormalization的一个缺点是需要较大的batchsize才能合理训练数据的均值和方差,这导致内存很可能不够用,同时它也很难应用在训练数据长度不同的RNN模型上。相对而言,LayerNormalization(LN)的一个优势是不需要批训练,在单条数据内部就能归一化。对于N*C*H*W的样本,LN对每个样本的C、H、W维度上的数据求均值和标准差,保留N维度。
(p63)GroupNormalization(GN)适用于占用显存比较大的任务,例如图像分割。对这类任务,可能batchsize只能是个位数,再大显存就不够用了。而当batchsize是个位数时,BN的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN也是独立于batch的。GN计算均值和标准差时,把每一个样本特征向量的通道分成G组,每组将有C/G个通道,然后将这些通道中的元素求均值和标准差。各组通道的归一化参数是独立的。
(p64)下面我们来看一个批归一化例子。
这里的Classnet就是是一个神经网络搭建的类,里面我们可以看到,里面定义了3个全链接层,从784维到256维再到最后10个维度,其中每两个全链接层中都加入了批归一化层,bn,他的输入维度需要和上一步输出维度一致。
(p65)定义好网络之后,下一步进行前向传播,我们可以看到,数据的计算流动,第一步全链接层fc1,然后批归一化bn1,然后才激活函数relu,下面类似的流程。
(p66)好的,本节课就讲到这里,谢谢大家。