文章目录
3.6.8 什么是批归一化(Batch Normalization)
3.6.12 Weight Normalization 和 Batch Normalization比较
3.6.13 Batch Normalization在什么时候用比较合适
3.5 Batch Size
3.5.1 为什么需要 Batch size
Batch的选择,首先决定的是下降的方向。
如果数据集比较小,可采用全数据集的形式,好处是:
- 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
- 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。
对于更大的数据集,假如采用全数据集的形式,坏处是:
- 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
- 以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来的RMSProp的妥协方案。
3.5.2 Batch Size 值的选择
假如每次只训练一个样本,即Batch Size=1。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元、非线性网络,在局部依然近似是抛物面。此时,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
既然Batch Size为全数据集或者Batch Size=1都有各自缺点,可不可以选择一个适中的Batch Size值呢?
此时,可采用批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,那么用一半(甚至少得多)的数据训练算出来的梯度与用全部数据训练出来的梯度几乎是一样的。
3.5.3 在合理范围内,增大Batch Size有何好处
- 内存利用率提高了,大矩阵乘法的并行化效率提高。
- 跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
- 在一定范围内,一般来说Batch Size越大,其确定的下降方向越准,引起训练震荡越小。
3.5.4 盲目增大 Batch Size有何坏处
- 内存利用率提高了,但是内存容量可能撑不住了。
- 跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显的更加缓慢。
- Batch Size增大到一定程度,其确定的下降方向已经基本不再变化。
3.5.5 调节Batch Size对训练效果影响到底如何
- Batch Size太小,模型表现效果极其糟糕(error飙升)。
- 随着Batch Size增大,处理相同数据量的速度越快。
- 随着Batch Size增大,达到相同精度所需要的epoch数量越来越多。
- 由于上述两种因素的矛盾,Batch Size增大到某个时候,达到时间上的最优。
- 由于最终收敛精度会陷入不同的局部极值,因此Batch Size增大到某些时候,达到最终收敛精度上的最优。
3.6 归一化
3.6.1 归一化含义
归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。
无论是为了建模还是为了计算,首先基本度量单位要统一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所有经常要对样本是输出归一化处理。
归一化是统一在0-1之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。
另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。
3.6.2 为什么要归一化
- 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。
- 为了程序运行时收敛加快。
- 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
- 避免神经元饱和。啥意思?就是当神经元的激活在接近0或者1时会饱和,在这些区域,梯度几乎为0,这样,在反向传播过程中,局部梯度就会接近0,这会有效地“杀死”梯度。
- 保证输出数据中数值小的不被吞食。
3.6.3 为什么归一化能提高求解最优解速度
上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。
当使用梯度下降法寻求最优解时,很有可能走“之字形”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。
因此如果机器学习模型使用梯度下降法求解最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。
3.6.4 3D图解未归一化
例子:
假设的范围在,而的范围在,梯度每次都前进1单位,那么在的方向上每次相当于前进了,而在上只相当于!某种意义上来说,在上前进的步长更小一些,而在搜素过程中会比“走”的更快。
这样会导致,在搜素过程中更偏向于的方向。走出了“L”形状,或者成为“之”字形。
3.6.5 归一化有哪些类型
1. 线性归一化
适用范围:比较适用在数值比较集中的情况。
缺点:如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。
2. 标准差标准化
含义:经过处理的数据符合标准正态分布,即均值为0,标准差为1,其中为所有样本数据的均值,为所有样本数据的标准差。
3. 非线性归一化
适用范围:经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括、指数、正切等。
3.6.6 局部响应归一化作用
LRN是一种提高深度学习准确度的技术方法。LRN一般是在激活、池化函数后的一种方法。
在AlexNet中,提出了LRN层,对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
3.6.7 理解局部响应归一化
局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其公式如下:
其中,
1. :表示卷积层(包括卷积操作和池化操作)后的输出结果,是一个四维数组[batch,height,width,channel]。
- batch:批次数(每一批为一张图片)。
- height:图片高度。
- width:图片宽度。
- channel:通道数。可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数,或理解为处理后的图片深度。
2. 表示在这个输出结构中的一个位置,可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第张图的第个通道下的高度为b宽度为c的点。
3. :论文公式中的表示通道数(channel)。
4. 分别表示函数中的 input,depth_radius,bias。参数 都是超参数,一般设置 。
5. 叠加的方向是沿着通道方向的,即每个点值的平方和是沿着 中的第 3 维 channel 方向的,也就是一个点同方向的前面 个通道(最小为第 个通道)和后 个通道(最大为第 个通道)的点的平方和(共 个点)。而函数的英文注解中也说明了把 input 当成是 个 3 维的矩阵,说白了就是把 input 的通道数当作 3 维矩阵的个数,叠加的方向也是在通道方向。
简单的示意图如下:
3.6.8 什么是批归一化(Batch Normalization)
以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是 肯定的。
这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。
3.6.9 批归一化(BN)算法的优点
- 减少人为选择参数。在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则项约束参数;
- 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择较小的学习率,算法也能够快速训练收敛;
- 可以不再使用局部响应归一化。BN本身就是归一化网络(局部响应归一化在AlexNet网络中存在);
- 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高1%的精度);
- 减少梯度消失,加快收敛速度,提高训练精度。
3.6.10 批归一化(BN)算法流程
下面给出BN算法在训练时的过程
输入:上一层输出结果,学习参数
算法流程:
1. 计算上一层输入数据的均值
其中,是此次训练样本 batch 的大小。
2. 计算上一层输出数据的标准差
3. 归一化处理,得到
其中,是为了避免分母为0而加进去的接近于0的很小值。
4. 重构,对经过上面归一化处理得到的数据进行重构,得到
其中,为可学习参数。
注:上述是BN的训练过程,但是当在投入使用时,往往只是输入一个样本,没有所谓的均值和标准差。此时,均值是计算所有batch 值的平均值得到,标准差采用每个batch的无偏估计得到。
3.6.11 批归一化和群组归一化比较
名称 | 特点 |
---|---|
批量归一化(Batch Normalization,以下简称 BN) | 可让各种网络并行训练。但是,批量维度进行归一化会带来一些问题——批量统计估算不准确导致批量变小时,BN 的误差会迅速增加。在训练大型网络和将特征转移到计算机视觉任务中(包括检测、分割和视频),内存消耗限制了只能使用小批量的 BN。 |
群组归一化 Group Normalization (简称 GN) | GN 将通道分成组,并在每组内计算归一化的均值和方差。GN 的计算与批量大小无关,并且其准确度在各种批量大小下都很稳定。 |
比较 | 在 ImageNet 上训练的 ResNet-50上,GN 使用批量大小为 2 时的错误率比 BN 的错误率低 10.6% ;当使用典型的批量时,GN 与 BN 相当,并且优于其他标归一化变体。而且,GN 可以自然地从预训练迁移到微调。 在进行 COCO 中的目标检测和分割以及 Kinetics 中的视频分类比赛中,GN 可以胜过其竞争对手,表明 GN 可以在各种任务中有效地取代强大的 BN。 |
3.6.12 Weight Normalization 和 Batch Normalization比较
Weight Normalization 和 Batch Normalization 都属于参数重写(Reparameterization)的方法,只是采用的方式不同。
Weight Normalization 是对网络权值进行 normalization,因此也称为 Weight Normalization;
Batch Normalization 是对网络某一层输入数据进行 normalization。
Weight Normalization相比Batch Normalization有以下三点优势:
- Weight Normalization 通过重写深度学习网络的权重W的方式来加速深度学习网络参数收敛,没有引入 minbatch 的依赖,适用于 RNN(LSTM)网络(Batch Normalization 不能直接用于RNN,进行 normalization 操作,原因在于:1) RNN 处理的 Sequence 是变长的;2) RNN 是基于 time step 计算,如果直接使用 Batch Normalization 处理,需要保存每个 time step 下,mini btach 的均值和方差,效率低且占内存)。
- Batch Normalization 基于一个 mini batch 的数据计算均值和方差,而不是基于整个 Training set 来做,相当于进行梯度计算式引入噪声。因此,Batch Normalization 不适用于对噪声敏感的强化学习、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 对通过标量 和向量 对权重 进行重写,重写向量 是固定的,因此,基于 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪声。
- 不需要额外的存储空间来保存 mini batch 的均值和方差,同时实现 Weight Normalization 时,对深度学习网络进行正向信号传播和反向梯度计算带来的额外计算开销也很小。因此,要比采用 Batch Normalization 进行 normalization 操作时,速度快。 但是 Weight Normalization 不具备 Batch Normalization 把网络每一层的输出 Y 固定在一个变化范围的作用。因此,采用 Weight Normalization 进行 Normalization 时需要特别注意参数初始值的选择。
3.6.13 Batch Normalization在什么时候用比较合适
在CNN中,BN应作用在非线性映射前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。
BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。