评价此页

LayerNorm#

class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, bias=True, device=None, dtype=None)[source]#

对输入的 mini-batch 应用 Layer Normalization。

此层实现了论文 Layer Normalization 中描述的操作

y=xE[x]Var[x]+ϵγ+βy = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta

均值和标准差是在最后 D 维上计算的,其中 Dnormalized_shape 的维度。例如,如果 normalized_shape(3, 5) (二维形状),则均值和标准差在输入的最后 2 维上计算 (即 input.mean((-2, -1)))。 如果 elementwise_affineTrue,则 γ\gammaβ\betanormalized_shape 的可学习仿射变换参数。方差通过有偏估计量计算,等同于 torch.var(input, unbiased=False)

注意

与 Batch Normalization 和 Instance Normalization 不同,后两者在 affine 选项下为每个整个通道/平面应用标量缩放和偏差,而 Layer Normalization 在 elementwise_affine 选项下应用逐元素缩放和偏差。

此层在训练和评估模式下均使用从输入数据计算出的统计信息。

参数
  • normalized_shape (intlisttorch.Size) –

    输入的形状,预期输入的大小为

    [×normalized_shape[0]×normalized_shape[1]××normalized_shape[1]][* \times \text{normalized\_shape}[0] \times \text{normalized\_shape}[1] \times \ldots \times \text{normalized\_shape}[-1]]

    如果使用单个整数,它将被视为一个单例列表,并且此模块将在期望具有该特定大小的最后一个维度上进行归一化。

  • eps (float) – 添加到分母的一个值,用于数值稳定性。默认值:1e-5

  • elementwise_affinebool)– 一个布尔值,如果设置为 True,则此模块将具有可学习的每个元素仿射参数,这些参数初始化为 1(对于权重)和 0(对于偏置)。默认值:True

  • biasbool)– 如果设置为 False,则该层将不会学习加性偏置(仅在 elementwise_affine 设置为 True 时有效)。默认值:True

变量
  • weight – 模块的可学习权重,形状为 normalized_shape\text{normalized\_shape},当 elementwise_affine 设置为 True 时。值初始化为 1。

  • bias – 模块的可学习偏置,形状为 normalized_shape\text{normalized\_shape},当 elementwise_affine 设置为 True 时。值初始化为 0。

形状
  • 输入: (N,)(N, *)

  • 输出: (N,)(N, *) (与输入形状相同)

示例

>>> # NLP Example
>>> batch, sentence_length, embedding_dim = 20, 5, 10
>>> embedding = torch.randn(batch, sentence_length, embedding_dim)
>>> layer_norm = nn.LayerNorm(embedding_dim)
>>> # Activate module
>>> layer_norm(embedding)
>>>
>>> # Image Example
>>> N, C, H, W = 20, 5, 10, 10
>>> input = torch.randn(N, C, H, W)
>>> # Normalize over the last three dimensions (i.e. the channel and spatial dimensions)
>>> # as shown in the image below
>>> layer_norm = nn.LayerNorm([C, H, W])
>>> output = layer_norm(input)
../_images/layer_norm.jpg