【深度学习】batch normalization和layer normalization区别

简介: “独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等问题。一般在模型训练之前,需要对数据做归一化。为了解决ICS问题,即internal covarivate shift(内部协变量漂移)问题,即数据分布会发生变化,对下一层网络的学习带来困难。

零、基础知识铺垫

“独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等问题。


一般在模型训练之前,需要对数据做归一化。为了解决ICS问题,即internal covarivate shift(内部协变量漂移)问题,即数据分布会发生变化,对下一层网络的学习带来困难。


在深度神经网络中,层与层相互之间是存在直接或间接影响的,某一层的微小变动就可能导致其他层的“剧烈震荡”,导致相应网络层落入饱和区【sigma函数中当x<-6或x>6时,梯度值接近0,BP过程中低层神经网络梯度消失】,导致模型的训练困难,这种现象称为“Internal Covariate Shift”。为了减小这种层与层之间的影响,学者们考虑从直观的数据分布上进行处理,将批量数据标准化到~N(0,1)分布,使得每层的输入数据分布范围可控。


一、batch normalization

batch normalization是对一批样本的同一纬度特征做归一化。如下图我们想根据这个batch中的三种特征(身高、体重、年龄)数据进行预测性别,首先我们进行归一化处理,如果是Batch normalization操作则是对每一列特征进行归一化,如下图求一列身高的平均值。

image.png

BN特点:强行将数据转为均值为0,方差为1的正态分布,使得数据分布一致,并且避免梯度消失。而梯度变大意味着学习收敛速度快,能够提高训练速度。


设batch_size为m,网络在向前传播时,网络 中每个神经元都有m个输出,BN就是将每个神经元的m个输出进行归一化处理,看到BN原论文中的伪代码:

image.png

即有两个步骤:


标准化:求得均值为0,方差为1的标准正态分布x ˉ i \bar{x}_{i}

x

ˉ

 

i

尺度变换和偏移:获得新的分布y i y_iy

i

。均值为β \betaβ,方差为γ \gammaγ(其中偏移β \betaβ和尺度变换γ \gammaγ为需要学习的参数)。该过程有利于数据分布和权重的互相协调。

特别的,令γ \gammaγ = 1,β \betaβ = 0 等价于只有标准化过程;令 γ \gammaγ = σ \sigmaσ , β \betaβ = μ \muμ 等价于没有添加BN层


二、layer normalization

而layer normalization是对单个样本的所有维度特征做归一化。如下表中,如果是Layer normalization则是对每一行(该条数据)的所有特征数据求均值。

image.png


三、应用场景

3.1 两者的区别

从操作上看:BN是对同一个batch内的所有数据的同一个特征数据进行操作;而LN是对同一个样本进行操作。

从特征维度上看:BN中,特征维度数=均值or方差的个数;LN中,一个batch中有batch_size个均值和方差。

image.png

如在NLP中上图的C、N、H,W含义:

N:N句话,即batchsize;

C:一句话的长度,即seqlen;

H,W:词向量维度embedding dim。


3.2 BN和LN的关系

BN 和 LN 都可以比较好的抑制梯度消失和梯度爆炸的情况。BN不适合RNN、transformer等序列网络,不适合文本长度不定和batchsize较小的情况,适合于CV中的CNN等网络;

而LN适合用于NLP中的RNN、transformer等网络,因为sequence的长度可能是不一致的。

栗子:如果把一批文本组成一个batch,BN就是对每句话的第一个词进行操作,BN针对每个位置进行缩放就不符合NLP的规律了。

3.3 小结

(1)经过BN的归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。

(2)归一化技术就是让每一层的分布稳定下来,让后面的层能在前面层的基础上“安心学习”。BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来(但是BN没有解决ISC问题)。LayerNorm则是通过对Hidden size这个维度归一。


相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习和强化学习有什么区别呢
【10月更文挑战第23天】深度学习和强化学习有什么区别呢
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】30. 神经网络中批量归一化层(batch normalization)的作用及其Pytorch实现
【从零开始学习深度学习】30. 神经网络中批量归一化层(batch normalization)的作用及其Pytorch实现
|
2月前
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习之间的区别
机器学习和深度学习在实际应用中各有优势和局限性。机器学习适用于一些数据量较小、问题相对简单、对模型解释性要求较高的场景;而深度学习则在处理大规模、复杂的数据和任务时表现出色,但需要更多的计算资源和数据,并且模型的解释性较差。在实际应用中,需要根据具体的问题和需求,结合两者的优势,选择合适的方法来解决问题。
87 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
浅谈机器学习与深度学习的区别
浅谈机器学习与深度学习的区别
71 0
|
4月前
|
机器学习/深度学习 人工智能 算法
【语音识别算法】深度学习语音识别算法与传统语音识别算法的区别、对比及联系
深度学习语音识别算法与传统语音识别算法在理论基础、实现方式、性能表现等方面存在显著区别,同时也有一些联系。下面将从几个方面详细比较这两种方法,并给出应用实例和代码示例
55 4
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
158 1
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习框架:Pytorch与Keras的区别与使用方法
深度学习框架:Pytorch与Keras的区别与使用方法
|
4月前
|
机器学习/深度学习 存储 PyTorch
【深度学习】Pytorch面试题:什么是 PyTorch?PyTorch 的基本要素是什么?Conv1d、Conv2d 和 Conv3d 有什么区别?
关于PyTorch面试题的总结,包括PyTorch的定义、基本要素、张量概念、抽象级别、张量与矩阵的区别、不同损失函数的作用以及Conv1d、Conv2d和Conv3d的区别和反向传播的解释。
297 2
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 一文看懂人工智能、机器学习、深度学习是什么、有什么区别!
**摘要:** 了解AI、ML和DL的旅程。AI是模拟人类智能的科学,ML是其分支,让机器从数据中学习。DL是ML的深化,利用多层神经网络处理复杂数据。AI应用广泛,包括医疗诊断、金融服务、自动驾驶等。ML助力个性化推荐和疾病预测。DL推动计算机视觉和自然语言处理的进步。从基础到实践,这些技术正改变我们的生活。想要深入学习,可参考《人工智能:一种现代的方法》和《深度学习》。一起探索智能的乐趣!
199 1
算法金 | 一文看懂人工智能、机器学习、深度学习是什么、有什么区别!
|
6月前
|
机器学习/深度学习 自然语言处理 算法
机器学习和深度学习的区别
机器学习和深度学习的区别
135 1