LayerNorm的理解

前言

之前我一直以为层归一化在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)
在这里插入图片描述
官方描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值