Layer Normalization是什么

层规范化(Layer Normalization)是一种在深度学习中常用的规范化技术,由 Jimmy Lei Ba 和 Jamie Ryan Kiros 等人于 2016 年提出。它的主要目的是帮助神经网络更快、更稳定地收敛。层规范化与其它规范化技术,如批量规范化(Batch Normalization)和组规范化(Group Normalization),有着相似的目的,但操作方式略有不同。

层规范化的工作原理如下:

  1. 操作对象:层规范化在单个样本的层级上进行操作,而非在批量(Batch)的层级。这意味着它对每个样本独立计算规范化参数(均值和标准差),而不是在整个批量的基础上。

  2. 计算方式:对于给定的样本,在其所有特征(或通道)上计算均值和标准差。然后,使用这些统计数据来规范化该样本的每个特征。

  3. 优点:层规范化特别适用于批量大小很小或变化较大的情况,因为它不依赖于批量大小。这使得它在处理诸如在线学习或强化学习等任务时非常有用,这些任务可能无法提供稳定的批量大小。

具体步骤

层规范化(Layer Normalization)对于给定样本的所有特征(或通道)进行规范化的具体步骤如下:

  1. 计算均值和标准差
    对于给定样本中的所有特征,计算这些特征的均值(mean)和标准差(standard deviation)。记均值为 μ \mu μ ,标准差为 σ \sigma σ。均值的计算公式为:
    μ = 1 N ∑ i = 1 N x i \mu = \frac{1}{N} \sum_{i=1}^{N} x_i μ=N1i=1Nxi
    其中, N N N 是特征的总数, x i x_i xi 是第 i i i 个特征的值。 标准差的计算公式为:
    σ = 1 N ∑ i = 1 N ( x i − μ ) 2 \sigma = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2} σ=N1i=1N(xiμ)2

  2. 规范化特征
    使用计算得到的均值和标准差来规范化每个特征。对于每个特征值 x i x_i xi,规范化公式为:
    x ^ i = x i − μ σ \hat{x}_i = \frac{x_i - \mu}{\sigma} x^i=σxiμ
    这里, x ^ i \hat{x}_i x^i 表示规范化后的特征值。

  3. 重新缩放和偏移
    通常,在规范化之后会引入两个可学习的参数:缩放因子(scale factor) γ \gamma γ 和偏移因子(shift factor) β \beta β。这两个参数允许模型学习规范化数据的最佳表示。重缩放和偏移后的公式为:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
    其中, y i y_i yi 是最终的输出特征值。

这个过程确保了每个样本的特征都具有大致相同的均值和方差,从而帮助神经网络更容易学习和快速收敛。在实际的深度学习模型中,这些步骤通常都是自动执行的,其中 γ \gamma γ β \beta β 是通过训练过程学习得到的。通过这种方式,层规范化可以提高网络对输入数据的规模和偏移的不变性,有助于改善模型在训练和泛化方面的表现。

层规范化在神经网络中的应用:

  • 稳定性和收敛速度:通过规范化输入数据,层规范化有助于减少内部协变量偏移(Internal Covariate Shift),从而加速训练过程并提高模型的稳定性。

  • 适用性广泛:层规范化广泛应用于各种网络结构,特别是在循环神经网络(RNNs)和变换器(Transformers)中非常有效。

使用层规范化(Layer Normalization)处理图像数据的一个例子可以是在深度学习模型,比如卷积神经网络(CNN)中,对图像进行分类处理的场景。假设我们有一个简单的CNN模型,我们可以在模型的一层或多层中应用层规范化。下面是一个简化的例子:

  1. 图像输入

    • 假设我们有一组彩色图像,每张图像的尺寸是 32x32 像素,有三个颜色通道(红、绿、蓝)。因此,每张图像的输入尺寸是 32x32x3。
  2. 构建卷积层

    • 图像首先通过一个或多个卷积层进行处理。卷积层会提取图像的特征,并生成多个特征图(feature maps)。
  3. 应用层规范化

    • 在卷积层之后,我们可以应用层规范化。层规范化会对每个特征图中的每个像素独立进行,计算特征图中所有像素的均值和标准差,并使用这些统计数据来规范化每个像素的值。
    • 通常,层规范化会在每个卷积层之后应用,尤其是在较深的网络中,这有助于防止梯度消失或爆炸的问题,使得模型训练更加稳定。
  4. 后续层

    • 经过层规范化后的特征图可以被传递到后续的层(如其他卷积层、池化层、全连接层)进行进一步的处理。
  5. 最终输出

    • 经过多层处理后,最终的输出可以是一个类别向量,用于图像分类任务。

在PyTorch中,可以使用torch.nn.LayerNorm来实现层规范化。例如,在一个卷积层之后添加层规范化可以这样写:

import torch.nn as nn

# 定义卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)

# 定义层规范化
# 假设特征图的尺寸为 [批量大小, 16, 32, 32],则需要对每个32x32的特征图进行规范化
layer_norm = nn.LayerNorm([32, 32])

# 在模型中使用
# x 是输入图像
x = conv_layer(x)
x = layer_norm(x)

在这个例子中,卷积层提取了输入图像的特征,然后通过层规范化进行规范化,以帮助模型更稳定和高效地学习。

一些个人感悟

为什么他会这么做呢,因为LN更多使用在NLP,其中都是词向量,一般不会数值差距特别巨大,数值差距特别巨大也就不用LN了
其实就算是归一化后,也不一定就符合正态分布,因为数据量没大到那个地步,但是总归是让数据尽可能适中,每一层的数值范围都比较适中,所以每一层的梯度也比较适中,这样每一层都可以得到差不多的训练幅度,不然梯度从最后一层传到第一层,累积很久会变很大或很小

  • 15
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值