购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4.3 归一化方法

为取得较理想的输出结果,一般希望机器学习中输入模型的数据能满足独立同分布的假设条件。但是对于神经网络而言,层级的网络结构使底层的参数更新对高层的输入分布产生很大的影响,故很难满足该假设条件。对此,研究者在神经网络中引入了归一化(Normalization)方法,实际上是通过采取不同的变换方式使各层的输入数据近似满足独立同分布假设条件,并将各层输出限制在一定的范围。

1.什么是Normalization

Normalization是统计学中的一个概念,被称为归一化或规范化。它并不是一个完全定义好的数学操作(如加、减、乘、除),通常是指将数据进行偏移和尺度缩放,是数据预处理中非常常见的操作,如将不同度量单位进行归一化以便进行后续的分析。

简单来说,归一化是指将数据约束到固定的分布范围,如常见的8位数字图像,其像素值分布在0~255,或者在用浮点数表达时分布在0~1。

在数字图像处理领域,有一个很常见的线性对比度拉伸操作。

式中, x min x max 分别是灰度最小值和最大值,这个操作可以将图像的像素归一化到0~1,通常可以增强前背景的对比效果。

更加复杂的归一化,可能是将某个分布归一化到另一个分布,如直方图均衡。直方图均衡通过图像的灰度值分布,即通过图像直方图来对图像进行对比度调整,可以增强局部的对比度。

假设 r k 表示第 k 级灰度, n k 表示图像中第 k 级灰度所对应的像素个数, n 表示图像像素总数,首先计算归一化后的直方图,得到式(2.30)。

对于8位的图像, L =256,此时 p(r k 表示灰度级为 r k 的像素所占总像素的比例。对一幅正常曝光的自然图像,其直方图应该尽可能覆盖所有灰度级甚至具有相对均匀的分布,但在很多情况下,因为曝光过度或欠曝,不可能具有均匀分布。直方图均衡化正是让一个分布从随机分布变换到[0,1]均匀分布的变换,它的变换步骤如下。

(1)计算累积概率分布,cdp (r k 表示灰度为0~ r k 的像素的概率,可知它是单调递增的,cdp (L -1 )= 1。

(2)创建一个均匀分布,将累计概率分布转换到图像的像素值范围,变换关系为

式中,round表示取整操作,因为cdp (r k )∈ (0,1),所以 T(r k )∈ (0,255)。

(3)反向映射,变换后新的像素灰度值 y 与原始的像素灰度值 x 的变换关系为

可以看出,经过变换后,原始的灰度会被映射到(0,255),而且是一个均匀分布。在很多时候,直方图均衡可以用于增强局部的对比度而不影响整体的对比度,当图像对比度较低时很有用。

上述这两种常见的归一化方法,都是数字图像处理领域非常常用的,虽然在深度学习中不再人工设计这样的变换来增强数据的辨识度,但在网络内部实际上会进行功能类似的操作以实现特征的学习。

零均值归一化也是一个常见的归一化方法,称为标准化方法,它用每个变量值与其平均值之差除以该变量的标准差,如式(2.34)所示,经过处理后的数据符合均值为0、标准差为1的标准正态分布。

机器学习中的很多问题都基于正态分布的假设,这是更加常用的归一化方法。

2.Batch Normalization

一般采用批梯度下降法对深度学习模型进行优化,这种方法把数据分为若干组,按组来更新参数,一组中的数据共同决定了本次梯度的方向,从而减少了下降时的随机性。另外,因为批的样本数与整个数据集相比小了很多,这种方法的计算量也下降了很多。

Batch Normalization(BN) [12] 中的Batch指批量数据,即每次优化时的样本数目,通常BN层用在卷积层后,用于重新调整数据分布。

假设神经网络某层一个Batch的输入为 X= [ x 1 x 2 ,…, x n ],其中 x i 代表一个样本, n 为Batch的大小。首先,求得Mini-batch中元素的均值:

接下来,求取Mini-batch的方差:

这样就可以对每个元素进行归一化,如式(2.37)所示,其中 ε 是防止分母为0的一个常数。

最后进行尺度缩放和偏移操作,这样可以变换回原始的分布,实现恒等变换。恒等变换可以补偿网络的非线性表达能力损失,因为经过标准化之后,偏移量丢失了。具体的表达如式(2.38),其中, y i 就是网络的最终输出。

从某种意义上来说, γ β 代表的其实是输入数据分布的方差和偏移。对于没有BN层的网络,这两个值与前一层网络带来的非线性性质有关,而经过变换后,其就与前一层无关了,变成了当前层的一个学习参数,这更有利于优化且不会降低网络的能力。

CNN的各个特征维度之间,即通道之间是分别进行BN计算的。如果输出的Blob大小为( N C H W ),那么在每层归一化就是基于 N × H × W 个数值进行求平均及方差的操作。

BN带来了两个好处:①减轻了对初始值的依赖;②训练更快,可以使用更高的学习速率。

尽管BN层实践效果非常好,但有一定的缺陷。BN依赖Batch的大小,当Batch值很小时,计算的均值和方差不稳定。研究表明,当使用ResNet系列模型在ImageNet数据集上训练时,当Batch从16降到8时,其开始有非常明显的性能下降,在训练过程中计算的均值和方差不准确,而在测试时使用的就是在训练过程中保持下来的均值和方差,这个特性导致BN不适合以下的几种场景。

(1)Batch非常小。可以是训练资源有限无法应用较大的Batch的场景,也可以是在线学习等使用单例进行模型参数更新的场景。

(2)RNN。因为它是一个动态的网络结构,同一个Batch中训练实例有长有短,导致每个时间步长必须维持各自的统计量,这使BN不能正确使用。在RNN中,对BN进行改进也非常困难。

另外,对于某些像素级的图片生成任务,如GAN图片生成和风格化,也会受Batch值的影响,不过BN层的应用也有利于这类模型的收敛。

BN用每个Batch的均值和方差来代替整体训练集的均值和方差,这要求Batch必须从各类中均匀采样,当Batch值较小时很难满足这一要求。针对BN依赖Batch的这个问题,BN的提出者对其进行了改进,即增加了一个仿射变换,提出了Batch Renormalization [13] ,它在用每个Batch的均值和方差来代替整体训练集的均值和方差之后,再通过一个线性变换来逼近数据的真实分布,具体变换如下。

式中,参数 r d 就是仿射变换参数,它们本身是通过式(2.40)进行计算的。

式中, σ μ 都是通过滑动平均的方法进行更新的:

所以 r d 是一个与样本有关的参数,当通过这样的变换进行学习时,这两个参数在训练时并不参与学习。在实际使用时,先使用BN将网络训练到一个相对稳定的移动平均值,再使用Batch Renormalization进行训练。

3.BN的变种

BN虽然应用广泛,但在实际应用时,需要计算并保存该层神经网络Batch的均值和方差等信息。其对于一个深度固定的神经网络(如DNN、CNN)非常适用,但对于深度不固定的RNN而言,在不同的时态下需要保存不同的静态特征,导致存在一个特殊序列比其他序列长很多,这样训练时计算会很麻烦。

BN各个通道之间是独立进行计算的,如果抛弃对Batch的依赖,也就是让每个样本在它的所有通道中进行Normalization,就得到了Layer Normalization(LN)。与BN仅针对单个通道不同,LN考虑神经网络中一层的信息,其计算该层输入的均值和方差作为规范化标准,对该层的所有输入进行同一个规范化操作,且不受Mini-batch的均值和方差的影响,可用于Mini-batch较小时的场景、动态网络结构和RNN。此外,由于无须保存Mini-batch的均值和方差,其节省了存储空间。LN中同一层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差。

如果输出的Blob大小为( N C H W ),那么在每一层进行LN就是基于 C × H × W 个数值进行求平均及方差的操作。因为根据不同的通道进行了归一化,所以对于相似度相差较大的特征,LN会降低模型的表示能力,在此情况下,选择BN方法更优。

LN将同一个网络层的所有神经元作为统计范围,Instance Normalization(IN)则将CNN中同一卷积层中的每个通道作为自己的统计范围。假如一个网络层的通道数为1,则两者是等价的。

如果输出的Blob大小为( N C H W ),那么在每一层进行的IN就是基于 H × W 个数值进行求平均及方差的操作。对于风格化类的图像应用,IN通常能取得更好的结果。

Group Normalization(GN) [14] 是LN和IN的中间体,它将通道进行分组,然后在每个组内做归一化。

如果输出的Blob大小为( N C H W ),将通道分为 G 个组,那么GN就是基于 G × H × W 个数值进行求平均及方差的操作。

除了以上方法,还有通用版本Generalized Batch Normalization、对硬件更加友好的L1-Norm Batch Normalization等,读者可自行学习。

BN等方法属于特征规范化,而Weight Normalization则将参数进行规范化,即其将权重向量分解为权重大小和方向两部分,不依赖输入数据的分布,故可应用于Mini-batch较小的情景及动态网络结构。

4.归一化方法的自动搜索

在每个网络层中都使用同样的归一化,这是最优的配置吗?显然不是,因为在实际应用中,每个问题都有它最合适的归一化操作。例如,对于RNN等时序模型,有时同一个Batch内部的训练实例长度不一(句子长度不同),在不同的时态下需要保存不同的统计量,此时无法正确使用BN,只能使用LN;对于图像生成及风格迁移类应用,使用IN更加合适;对于Batch比较小的情况下,GN是一个替换的方案。

Switchable Normalization [15] 研究的便是如何让不同的网络层学习到最适合该层的归一化机制,方法是在包含各类归一化方法的池中进行选择,然后用精度进行比较择优,最终在任务中自适应地学习出最佳配置,从而使模型对批处理大小更加不敏感。具体结果是,当批处理越小时,BN越不稳定,其对应权重系数越小,IN和LN的权重系数则越大;反之,BN的权重系数越大。

5.归一化有效性问题

归一化机制及其在深度学习中的有效性至今仍然是一个非常开放的问题,相关的理论研究一直都有,目前有以下几个主要观点。

(1)BN调整了数据的分布,不考虑激活函数,它让每一层的输出归一化到了均值为0、方差为1的分布,这保证了梯度的有效性,缓解了Internal Covariate Shift(ICS)问题。

(2)文献[16]指出,BN有效是因为使用BN层之后可以使用更大的学习速率,从而跳出不好的局部极值,增强泛化能力,作者做了大量的实验来验证这个观点。

(3)文献[17]的研究认为,BN有效的根本原因不在于调整了分布,因为即使是在BN层后模拟出存在Internal Covariate Shift(ICS)特性的数据,也仍然可以取得好的结果。其指出,BN有效的根本原因是平滑了损失平面,如同Z-score标准化对孤立点的分布进行更平滑的调整。

总之,归一化是非常有效的数据预处理和提高深度学习模型泛化能力的策略,值得读者思考。 ajbmNnm7kWnmdIovwzqTZ/FvS6KPRR5zJald2kKPEyOjpawxivvB3PXy1/bnQxTE

点击中间区域
呼出菜单
上一章
目录
下一章
×