LayerNorm的理解

2023-12-13 16:19:07

前言

之前我一直以为层归一化在NLP中是对一个序列中每个token对应的向量一起加起来算一个均值和标准差,在我看到代码以后发现,这种理解大错特错了。

一、正确的理解是什么?

正确的应该是,在 Layer Normalization 中,对于每个样本中的每个 token 所对应的向量,都会计算其在最后一个维度上的均值和标准差。这意味着对于一个输入序列中的每个位置(token),都会进行独立的均值和标准差的计算
具体来说,对于输入张量 x(一般是个三维矩阵) 的每个样本,在最后一个维度上计算均值和标准差,然后使用这些均值和标准差对该样本的每个 token 所对应的向量进行归一化。这确保了在 Layer Normalization 中,每个 token 的向量都被独立地归一化,而不是整个序列共享一个均值和标准差。这有助于模型更灵活地适应不同位置的输入。

二、代码

1.引入库

代码如下(示例):

import torch.nn as nn

# 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)

2.关于nn.LayerNorm( )

官方文档

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, bias=True, device=None, dtype=None)
在这里插入图片描述
官方描述

文章来源:https://blog.csdn.net/zan1763921822/article/details/134876271
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。