摘要:最普遍的变换是线性变换,即和均将规范化应用于输入的特征数据,而则另辟蹊径,将规范化应用于线性变换函数的权重,这就是名称的来源。他们不处理权重向量,也不处理特征数据向量,就改了一下线性变换的函数其中是和的夹角。
“ 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Batch Normalization 大法自 2015 年由Google 提出之后,就成为深度学习必备之神器。自 BN 之后, Layer Norm / Weight Norm / Cosine Norm 等也横空出世。本文从 Normalization 的背景讲起,用一个公式概括 Normalization 的基本思想与通用框架,将各大主流方法一一对号入座进行深入的对比分析,并从参数和数据的伸缩不变性的角度探讨 Normalization 有效的深层原因。”
本文是该系列的第二篇。
03、主流 Normalization 方法梳理
在上一节中,我们提炼了 Normalization 的通用公式:
对照于这一公式,我们来梳理主流的四种规范化方法。
3.1 Batch Normalization —— 纵向规范化
Batch Normalization 于2015年由 Google 提出,开 Normalization 之先河。其规范化针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元 x_i 的均值和方差,因而称为 Batch Normalization。
其中 M 是 mini-batch 的大小。
按上图所示,相对于一层神经元的水平排列,BN 可以看做一种纵向的规范化。由于 BN 是针对单个维度定义的,因此标准公式中的计算均为 element-wise 的。
BN 独立地规范化每一个输入维度 x_i ,但规范化的参数是一个 mini-batch 的一阶统计量和二阶统计量。这就要求 每一个 mini-batch 的统计量是整体统计量的近似估计,或者说每一个 mini-batch 彼此之间,以及和整体数据,都应该是近似同分布的。分布差距较小的 mini-batch 可以看做是为规范化操作和模型训练引入了噪声,可以增加模型的鲁棒性;但如果每个 mini-batch的原始分布差别很大,那么不同 mini-batch 的数据将会进行不一样的数据变换,这就增加了模型训练的难度。
因此,BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。
另外,由于 BN 需要在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量,因此不适用于 动态的网络结构 和 RNN 网络。不过,也有研究者专门提出了适用于 RNN 的 BN 使用方法,这里先不展开了。
3.2 Layer Normalization —— 横向规范化
层规范化就是针对 BN 的上述不足而提出的。与 BN 不同,LN 是一种横向的规范化,如图所示。它综合考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。
其中 i 枚举了该层所有的输入神经元。对应到标准公式中,四大参数 μ, σ , b, g均为标量(BN中是向量),所有输入共享一个规范化变换。
LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。
但是,BN 的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN 对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么 LN 的处理可能会降低模型的表达能力。
3.3 Weight Normalization —— 参数规范化
前面我们讲的模型框架
中,经过规范化之后的 y 作为输入送到下一个神经元,应用以 w 为参数的f_w() 函数定义的变换。最普遍的变换是线性变换,即
BN 和 LN 均将规范化应用于输入的特征数据 x ,而 WN 则另辟蹊径,将规范化应用于线性变换函数的权重 w ,这就是 WN 名称的来源。
具体而言,WN 提出的方案是,将权重向量 w 分解为向量方向 v 和向量模 g 两部分:
其中 v 是与 g 同维度的向量, ||v||是欧式范数,因此 v / ||v|| 是单位向量,决定了 w 的方向;g 是标量,决定了 w 的长度。由于 ||w|| = |g| ,因此这一权重分解的方式将权重向量的欧氏范数进行了固定,从而实现了正则化的效果。
乍一看,这一方法似乎脱离了我们前文所讲的通用框架?
并没有。其实从最终实现的效果来看,异曲同工。我们来推导一下看。
对照一下前述框架:
我们只需令:
就完美地对号入座了!
回忆一下,BN 和 LN 是用输入的特征数据的方差对输入数据进行 scale,而 WN 则是用 神经元的权重的欧氏范式对输入数据进行 scale。虽然在原始方法中分别进行的是特征数据规范化和参数的规范化,但本质上都实现了对数据的规范化,只是用于 scale 的参数来源不同。
另外,我们看到这里的规范化只是对数据进行了 scale,而没有进行 shift,因为我们简单地令 μ = 0. 但事实上,这里留下了与 BN 或者 LN 相结合的余地——那就是利用 BN 或者 LN 的方法来计算输入数据的均值 μ。
WN 的规范化不直接使用输入数据的统计量,因此避免了 BN 过于依赖 mini-batch 的不足,以及 LN 每层转换器的限制,同时也可以用于动态网络结构。
3.4 Cosine Normalization —— 余弦规范化
Normalization 还能怎么做?
我们再来看看神经元的经典变换
对输入数据 x 的变换已经做过了,横着来是 LN,纵着来是 BN。
对模型参数 w 的变换也已经做过了,就是 WN。
好像没啥可做的了。
然而天才的研究员们盯上了中间的那个点,对,就是 ·
他们说,我们要对数据进行规范化的原因,是数据经过神经网络的计算之后可能会变得很大,导致数据分布的方差爆炸,而这一问题的根源就是我们的计算方式——点积,权重向量 w 和 特征数据向量 x 的点积。向量点积是无界(unbounded)的啊!
那怎么办呢?我们知道向量点积是衡量两个向量相似度的方法之一。哪还有没有其他的相似度衡量方法呢?有啊,很多啊!夹角余弦就是其中之一啊!而且关键的是,夹角余弦是有确定界的啊,[-1, 1] 的取值范围,多么的美好!仿佛看到了新的世界!
于是,Cosine Normalization 就出世了。他们不处理权重向量 w ,也不处理特征数据向量 x ,就改了一下线性变换的函数:
其中 θ 是 w 和 x 的夹角。然后就没有然后了,所有的数据就都是 [-1, 1] 区间范围之内的了!
不过,回过头来看,CN 与 WN 还是很相似的。我们看到上式中,分子还是 w 和 x 的内积,而分母则可以看做用 w 和 x 二者的模之积进行规范化。对比一下 WN 的公式:
一定程度上可以理解为,WN 用 权重的模 ||v|| 对输入向量进行 scale,而 CN 在此基础上用输入向量的模 ||x|| 对输入向量进行了进一步的 scale.
CN 通过用余弦计算代替内积计算实现了规范化,但成也萧何败萧何。原始的内积计算,其几何意义是 输入向量在权重向量上的投影,既包含 二者的夹角信息,也包含 两个向量的scale信息。去掉scale信息,可能导致表达能力的下降,因此也引起了一些争议和讨论。具体效果如何,可能需要在特定的场景下深入实验。
现在,BN, LN, WN 和 CN 之间的来龙去脉是不是清楚多了?
04、Normalization 为什么会有效
我们以下面这个简化的神经网络为例来分析。
4.1 Normalization 的权重伸缩不变性
权重伸缩不变性(weight scale invariance)指的是,当权重 W 按照常量 λ 进行伸缩时,得到的规范化后的值保持不变,即:
其中 W" = λW 。
上述规范化方法均有这一性质,这是因为,当权重 W 伸缩时,对应的均值和标准差均等比例伸缩,分子分母相抵。
权重伸缩不变性可以有效地提高反向传播的效率。由于
因此,权重的伸缩变化不会影响反向梯度的 Jacobian 矩阵,因此也就对反向传播没有影响,避免了反向传播时因为权重过大或过小导致的梯度消失或梯度爆炸问题,从而加速了神经网络的训练。
权重伸缩不变性还具有参数正则化的效果,可以使用更高的学习率。由于
因此,下层的权重值越大,其梯度就越小。这样,参数的变化就越稳定,相当于实现了参数正则化的效果,避免参数的大幅震荡,提高网络的泛化性能。进而可以使用更高的学习率,提高学习速度。
4.2 Normalization 的数据伸缩不变性
数据伸缩不变性(data scale invariance)指的是,当数据 x 按照常量 λ 进行伸缩时,得到的规范化后的值保持不变,即:
其中 x" = λx 。
数据伸缩不变性仅对 BN、LN 和 CN 成立。因为这三者对输入数据进行规范化,因此当数据进行常量伸缩时,其均值和方差都会相应变化,分子分母互相抵消。而 WN 不具有这一性质。
数据伸缩不变性可以有效地减少梯度弥散,简化对学习率的选择。
对于某一层神经元而言,展开可得
每一层神经元的输出依赖于底下各层的计算结果。如果没有正则化,当下层输入发生伸缩变化时,经过层层传递,可能会导致数据发生剧烈的膨胀或者弥散,从而也导致了反向计算时的梯度爆炸或梯度弥散。
加入 Normalization 之后,不论底层的数据如何变化,对于某一层神经元 而言,其输入 x_l 永远保持标准的分布,这就使得高层的训练更加简单。从梯度的计算公式来看:
数据的伸缩变化也不会影响到对该层的权重参数更新,使得训练过程更加鲁棒,简化了对学习率的选择。
参考文献[1] Sergey Ioffe and Christian Szegedy. Accelerating Deep Network Training by Reducing Internal Covariate Shift.(https://arxiv.org/abs/1502.03167 )
[2] Jimmy L. Ba, Jamie R. Kiros, Geoffrey E. Hinton. [1607.06450] Layer Normalization.(https://arxiv.org/abs/1607.06450 )
[3] Tim Salimans, Diederik P. Kingma. A Simple Reparameterization to Accelerate Training of Deep Neural Networks.(https://arxiv.org/abs/1602.07868 )
[4] Chunjie Luo, Jianfeng Zhan, Lei Wang, Qiang Yang. Using Cosine Similarity Instead of Dot Product in Neural Networks.(https://arxiv.org/abs/1702.05870 )
[5] Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deep Learning.(http://www.deeplearningbook.org/ )欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/4737.html
摘要:如果不一致,那么就出现了新的机器学习问题,如等。要解决独立同分布的问题,理论正确的方法就是对每一层的数据都进行白化操作。变换为均值为方差为的分布,也并不是严格的同分布,只是映射到了一个确定的区间范围而已。 深度神经网络模型训练之难众所周知,其中一个重要的现象就是 Internal Covariate Shift. Batch Normalization 大法自 2015 年由Google ...
摘要:但是其仍然存在一些问题,而新提出的解决了式归一化对依赖的影响。上面三节分别介绍了的问题,以及的工作方式,本节将介绍的原因。作者基于此,提出了组归一化的方式,且效果表明,显著优于等。 前言Face book AI research(FAIR)吴育昕-何恺明联合推出重磅新作Group Normalization(GN),提出使用Group Normalization 替代深度学习里程碑式的工作B...
摘要:为了解决这个问题出现了批量归一化的算法,他对每一层的输入进行归一化,保证每层的输入数据分布是稳定的,从而加速训练批量归一化归一化批,一批样本输入,,个样本与激活函数层卷积层全连接层池化层一样,批量归一化也属于网络的一层,简称。 【DL-CV】数据预处理&权重初始化【DL-CV】正则化,Dropout 先来交代一下背景:在网络训练的过程中,参数的更新会导致网络的各层输入数据的分布不断变化...
阅读 1397·2021-09-22 16:04
阅读 2773·2019-08-30 15:44
阅读 858·2019-08-30 15:43
阅读 751·2019-08-29 15:24
阅读 1794·2019-08-29 14:07
阅读 1112·2019-08-29 12:30
阅读 1669·2019-08-29 11:15
阅读 2727·2019-08-28 18:08