Normalization,LayerNormalization和BatchNormalization

2024-02-22 21:20

本文主要是介绍Normalization,LayerNormalization和BatchNormalization,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        假设我们的损失函数在空间中是一个曲面,这个曲面可以被我们人为的切出等高线,在采用梯度下降算法的时候,我们沿着梯度反方向迭代(梯度方向与等高线垂直),到最后我们会抵达上图曲面的最低点。

        在上面的两幅图中忽略坐标值,观察损失函数曲面在空间中的形状,把它们比作山坡,我们人在山顶,很明显左图下山的路一眼就能看清,右图下山的路需要边走边观察改变下山路线,一般的情况下左图是会比右图更快更容易到达山底的。

        如下图所示,两个损失函数在空间的曲面的等高线(同一尺度的等高线),很明显可以看出左图的损失函数在空间中比较崎岖(可以参考上面右边那副图投影下来的等高线)而右图的损失函数在空间中比较平滑(可以参考上面左边那副图投影下来的等高线)。根据梯度下降算法,右图也就是等高线呈现正圆形时能够有最少的迭代步数,就可以抵达最低点,因此收敛速度更快。等高线是椭圆形的,会有更多的迭代步数才能到达函数最低点,收敛变慢。当然,这里面还存在着是不是最低点的问题,在这里先不考虑。

        因此,我们知道我们的损失函数曲面应该要平滑不崎岖,即拥有正圆形的等高线。那么在什么样的情况下我们才能获得正圆形的等高线呢,又或者说是更接近正圆形的等高线呢?

为什么要做规范化?

        我们有一个简单的线性回归模型y = w_{1}*x_{1}+w_{2}*x_{2} ,我们的输入特征是 x_{1} 和 x_{2} ,我们的损失函数根据 y 变化而变化。如果模型的输入 x_{1} 的范围远远小于 x_{2} ,在 w_{1} 和 w_{2} 相同变化时,y 受到输入特征是 x_{1} 的影响会远小于 x_{2} ,进而损失函数受到输入特征是 x_{1} 的影响会远小于 x_{2} ,从而会产生椭圆形的损失函数曲面等高线。因此,在线性回归中若各个特征变量之间的取值范围差异较大,则会导致目标函数收敛速度慢等问题,需要对输入特征进行规范化,尽量避免形成椭圆形的等高线

        如果我们在上面的这个再加上一个激活函数,即 y = sigmoid(w_{1}*x_{1}+w_{2}*x_{2}) ,在激活函数接受到的值会对梯度存在很大的影响,会造成梯度消失的问题,因此,我们仍旧是需要做规范化,同时,规范化也有一定的抗过拟合作用,使训练过程更加平稳

BN和LN

        LN不考虑batch,它是对同一个feature同一个example里面不同的dimension之间做规范化;

        BN需要考虑batch,它是对不同的feature不同的batch的同一个dimension之间做规范化。

        所以BN抹平了不同特征之间的大小关系,而保留了不同样本之间的大小关系。这样,如果具体任务依赖于不同样本之间的关系,BN更有效,尤其是在CV领域,例如不同图片样本进行分类,不同样本之间的大小关系得以保留。

        LN抹平了不同样本之间的大小关系,而保留了不同特征之间的大小关系。所以,LN更适合NLP领域的任务,其中,一个样本的特征实际上就是不同词嵌入维度,通过LN可以保留特征之间的这种时序关系。

        并且在NLP任务中,每个样本之间的差异较大,序列是不定长的,长度不同的序列原则上属于不同的统计对象,所以很难得到稳定的统计量,而得不到稳定的统计量,具体可以参考 PowerNorm: Rethinking Batch Normalization in Transformers(https://arxiv.org/abs/2003.07845)


 

这篇关于Normalization,LayerNormalization和BatchNormalization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736540

相关文章

Layer Normalization论文解读

基本信息 作者JL Badoi发表时间2016期刊NIPS网址https://arxiv.org/abs/1607.06450v1 研究背景 1. What’s known 既往研究已证实 batch Normalization对属于同一个Batch中的数据长度要求是相同的,不适合处理序列型的数据。因此它在NLP领域的RNN上效果并不显著,但在CV领域的CNN上效果显著。 2. What’s

神经网络训练不起来怎么办(五)| Batch Normalization

Ⅰ,领域背景 训练困境:当 input feature 在不同 dimension 上差距很大的时候,会产生一个非常崎岖的 error surface(误差平面)。这种崎岖多变的误差平面容易导致训练陷入以下的几个困境。 收敛困难:在崎岖的误差表面上,梯度下降等优化算法很容易陷入局部最小值或者鞍点,并且很难继续优化。这会导致模型无法收敛到全局最优解,训练过程变得非常困难。训练速度变慢:由于优化算

深度学习中的Normalization模型

深度学习中的Normalization模型 本文转载自张俊林的知乎专栏[https://zhuanlan.zhihu.com/p/43200897],谢谢大佬的分享。 Batch Normalization(简称BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具应用在了各种场合。BN大法虽然好,但是也存在一些局限和问题,诸如当Batc

基于医学图像配准软件 ANTs(Advanced Normalization Tools)提取脑图像数值并与临床量表计算相关

前言: 神经影像学与临床评估的结合正在革新我们对神经精神疾病的理解。本博客聚焦于如何利用先进的医学图像配准软件ANTs(Advanced Normalization Tools)提取脑图像数值,并将其与临床量表进行相关性分析。 目录   一、准备掩模(Mask) 二、准备T-value map T-map 和 Z-map的转化 比较同一结果的T-map和Zmap 三、提取Mask

Layer Normalization(层归一化)里的可学习的参数

参考pyttorch官方文档: LayerNorm — PyTorch 2.4 documentation 在深度学习模型中,层归一化(Layer Normalization, 简称LN)是一种常用的技术,用于稳定和加速神经网络的训练。层归一化通过对单个样本内的所有激活进行归一化,使得训练过程更加稳定。 关于层归一化是否可训练,其实层归一化中确实包含可训练的参数。具体来说,层归一化会对激活值

深度学习中的Normalization模型(二)

上次我们主要介绍了Batch Normalization,今天接下去介绍其他的正则化方法。 四.Layer Normalization、Instance Normalization及Group Normalization 4.1 Layer Normalization 为了能够在只有当前一个训练实例的情形下,也能找到一个合理的统计范围,一个最直接的想法是:MLP的同一隐层自己包含了若干神经元

深度学习中的Normalization模型(一)

之前一直在做CV相关的工作,一直在用cnn,cnn中有个特别常用的东西叫做归一化,归一化的方法也有很多,用法也各不相同,发现一篇整理的很好的文章,给大家分享一下,文章图文并茂,有原理也有例子,文章有点长,分两次给大家分享,但是这个时间花的很值得,相信大家一定会有收获的。 以下为干货! Batch Normalization(简称BN)自从提出之后,因为效果特别好,很快被作为深度学习的标准工具

BatchNormalization和Layer Normalization解析

Batch Normalization 是google团队2015年提出的,能够加速网络的收敛并提升准确率 1.Batch Normalization原理 图像预处理过程中通常会对图像进行标准化处理,能够加速网络的收敛,如下图所示,对于Conv1来说输入的就是满足某一分布的特征矩阵,但对于Conv2而言输入的feature map就不一定满足某一分布规律了(注意这里所说满足某一分布规律并不是

caffe中BatchNorm层和Scale层实现批量归一化(batch-normalization)注意事项

caffe中实现批量归一化(batch-normalization)需要借助两个层:BatchNorm 和 Scale  BatchNorm实现的是归一化  Scale实现的是平移和缩放  在实现的时候要注意的是由于Scale需要实现平移功能,所以要把bias_term项设为true  另外,实现BatchNorm的时候需要注意一下参数use_global_stats,在训练的时候设为false,

归一化(Normalization)与标准化(Standardization)

在机器学习和数据挖掘中,经常会听到两个名词:归一化(Normalization)与标准化(Standardization)。它们具体是什么?带来什么益处?具体怎么用?本文来具体讨论这些问题。 一、是什么 1. 归一化 常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间,变换函数为: x′=x−minmax−min x′=x−minmax−min 其中 min