首页 > 其他分享 >Transformer中为什么是layer norm不是batch norm

Transformer中为什么是layer norm不是batch norm

时间:2024-11-05 17:16:14浏览次数:3  
标签:Transformer 01 00 批次 layer 归一化 0.0000 句子 norm

讨论一下为什么transformer中用layer norm

前序知识:常见的归一化层的工作原理 常见的norm

之前已经讲过各个常见的归一化层了,不了解的可以去看看这篇文章。

首先咱们得了解在NLP中,如果输入的几个句子不是等长的,需要使用Padding技术或者Truncation技术来使句子等长。因此对于短文本来说,为了对齐长句子,剩下的位置会被填充零向量,即 [0, 0, 0, ..., 0]。它对应的vector可能是这样用“0值”padding后的结果

x=[[0.341,0.4014,-0.52], [0,0,0], [0,0,0]]

因此对于文本来说,这些embedding是没有意义的。

Transformer 中选择使用 Layer Normalization(LN)而非 Batch Normalization(BN)的原因有以下几点:

1. 根本差异

BN 对一个批次中维度进行归一化,这意味着在 NLP 模型中,同一批次中的句子不同 token 的特征被归一化到相同的分布。然而,批次中的 token 可能是填充位或无意义的片段,因此,对它们进行统一归一化会影响有意义的特征。相比之下,Layer Normalization 只对每个样本的特征维度进行归一化,使每个句子内部的特征分布稳定,而不受其他样本影响。

2. 适用于mini batch和变长序列

在 NLP 任务中,批次大小往往较小,特别是动态的 RNN 或 BERT 等模型中,句子长度不一致会导致批次的缩小。小批次情况下,BN 的效果会变差,因为它依赖批次内的统计信息。LN 独立于批次大小,适合小批次、变长序列等场景,因此更加稳定。

3. 隐藏层维度的归一化

Layer Normalization 更关注单个样本中不同特征之间的分布一致性,而在 NLP 任务中,我们希望同一句话的分布稳定。BN 通过对同一特征在批次内归一化,适合图像等任务,但对 NLP 中变动较大的语言特征来说,LN 的效果更合适。

4. 正则化效果

Layer Normalization 也能提供正则化效果,尤其在小批次和 RNN 中表现更好,使模型收敛更稳定,适用于 Transformer 中的多头注意力和自注意力机制

举例说明

假如我们有2个句子,每个句子分别有3个单词,每个单词的维度是4

X = \begin{bmatrix} \begin{bmatrix} 0.5 & -1.2 & 0.3 & 2.4 \\ 1.0& 1.0 & 1.0 & 1.0 \\ 2.0 & 2.0 & 2.0 & 2.0 \\ \end{bmatrix} \\[20pt] \begin{bmatrix} 1.3 & -0.7 & 2.2 & -0.1 \\ 0.4 & -0.5 & 1.0 & -1.4 \\ 0.2 & 1.7 & -0.9 & 1.8 \\ \end{bmatrix} \end{bmatrix}

对数据使用层归一化计算时,层归一化只会作用在行上也就是每个单词的维度上。

其中句子的大小(2)与序列长度(3)这两个维度都不会对norm有影响

所以这个会执行6次LN

输出结果如下

if __name__ == '__main__':

    x = torch.tensor([
    [
        [0.5, -1.2, 0.3, 2.4],
        [1.0,1.0,1.0,1.0],
        [2.0,2.0,2.0,2.0],
    ],
    [
        [1.3, -0.7, 2.2, -0.1],
        [0.4, -0.5, 1.0, -1.4],
        [0.2, 1.7, -0.9, 1.8]
    ]
])
    LN = nn.LayerNorm(normalized_shape=4)
    print(LN(x))
    
# 输出如下
# tensor([[[-4.6614e-08, -1.3295e+00, -1.5641e-01,  1.4859e+00],
#          [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00],
#          [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00]],
# 
#         [[ 5.4776e-01, -1.2051e+00,  1.3365e+00, -6.7923e-01],
#          [ 5.7735e-01, -4.1239e-01,  1.2372e+00, -1.4021e+00],
#          [-4.4632e-01,  8.9264e-01, -1.4282e+00,  9.8190e-01]]],
#        grad_fn=<NativeLayerNormBackward0>)

结果表明单词和单词直接不会有任何影响

这就是最根本原因!

思考题:

看实验中的数据有两行是完全一样的数据,他们归一化后的结果都是0,请问如何来分辨出原始激活值的特征差异呢???

评论区回答

标签:Transformer,01,00,批次,layer,归一化,0.0000,句子,norm
From: https://blog.csdn.net/wlxsp/article/details/143451177

相关文章

  • PCIe系列专题之二:2.0 Transaction layer事务层概述
    一、故事前传上回我们对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:PCIe技术概述;二、事务层概述......
  • SATA系列专题之二《2.2 Link layer链路层加扰/解扰/CRC解析》
    文章目录系列文章目录前言一、故事前传二、SATALinkLayer加扰/解扰解析二、SATALinkLayerCRC解析总结 前言一、故事前传我们之前说到Link layer的结构,linklayer的作用大致可以包括以下几点:Frame flowcontrolCRC的生成与检测对数据与控制字符......
  • SATA系列专题之二《2.3 Link layer链路层 Frame结构以及Primitive基元解析》
    文章目录系列文章目录前言一、故事前传二、Frame结构解析二、Primitive基元解析总结 前言  一、故事前传我们之前说到Linklayer的结构,linklayer的作用大致可以包括以下几点:FrameflowcontrolCRC的生成与检测(已解析,详细见历史文章)对数据与控制......
  • SATA系列专题之三《3.0 Transport Layer传输层概述》
    系列文章目录文章目录前言一、故事前传二、SATATransportLayer传输层概述总结 前言 一、故事前传在之前的文章中,我们有提到SATA主要包括:应用层(ApplicationLayer),传输层(TransportLayer),链路层(LinkLayer)以及物理层(PhysicalLayer),SATA结构如下图:......
  • SATA系列专题之三:3.2 Transport Layer传输层FIS Retry机制解析
    一、故事前传在之前的文章中,已经解析了SATA协议的部分相关内容。较为详细解释请见之前的文章:1,浅析SATAPhysicalLayer物理层OOB信号;2,SATALinklayer链路层解析2.0-2.3;3,SATATransportlayer链路层解析3.0-3.1;我们这里主要解析TransportlayerFISRetry机制相关内容。......
  • SATA系列专题之三:3.3 Transport Layer传输层Flow Control机制解析
    一、故事前传在之前的文章中,已经解析了SATA协议的部分相关内容。较为详细解释请见之前的文章:1,浅析SATAPhysicalLayer物理层OOB信号;2,SATALinklayer链路层解析2.0-2.3;3,SATATransportlayer链路层解析3.0-3.2;我们这里主要解析TransportlayerFlowControl机制相关内容......
  • SATA系列专题之一《1.0 Physical Layer物理层OOB信号》
    文章目录前言一、SATA物理层概述二、OOB(OutofBand)信号解析三、实例解析总结前言一、SATA物理层概述说OOB之前,首先得了解一下SATA结构以及物理层的含义。SATA主要包括:应用层(ApplicationLayer), 传输层(TransportLayer),链路层(LinkLayer)、物理层(P......
  • 细嗦Transformer(三):准备训练,讲解及代码实现优化器、学习率调整策略、正则化和KL散度损
    文章目录关注我:细嗦大模型批处理对象/BatchesandMasking训练循环主函数/TrainingLoop优化器/Optimizer学习率调整策略/Learningrateadjustmentstrategy样例测试正则化/RegularizationLabelsmoothing标签平滑KL散度损失样例测试Github完整代码----求......
  • 冲一区!双重分解+粒子群优化+深度学习多元时序预测!CEEMDAN-Kmeans-VMD-PSO-Transformer
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现CEEMDAN-Kmeans-VMD-PSO-Transformer融合K均值聚类的数据双重分解+粒子群优化+Transformer多元时间序列预测(完整源码和数据)运行环境Matlab2023b及以上。2.CEEMDAN分解,计算样本......
  • MarianCG: a code generation transformermodel inspired by machine translation
    全文总结本文介绍了MarianCG,一种基于Transformer架构的代码生成模型,灵感来源于机器翻译技术。研究背景背景介绍: 这篇文章的研究背景是代码生成,即从自然语言描述生成可执行的代码。代码生成工具的准确性和优化工具的提高可以帮助提高编程工具的生产力。API的应用使得软件开......