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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!