首页 > 其他分享 >『NLP学习笔记』Transformer技术详细介绍

『NLP学习笔记』Transformer技术详细介绍

时间:2022-12-20 22:05:29浏览次数:70  
标签:NLP Transformer 位置 笔记 单词 向量 注意力 输入


Transformer技术详细介绍!

文章目录

  • ​​一. 整体结构图​​
  • ​​二. 输入部分​​
  • ​​2.1. 词向量​​
  • ​​2.2. 位置编码​​
  • ​​三. 注意力机制​​
  • ​​3.1. 注意力机制的本质​​
  • ​​3.2. 举例说明​​
  • ​​3.3. Transformer中的注意力​​
  • ​​四. 残差和layerNormal​​
  • ​​4.1. Layer Normalization​​
  • ​​五. 前馈神经网络​​
  • ​​六. Decoder​​
  • ​​6.1. 掩盖多头注意力机制​​
  • ​​6.2. 交互层​​
  • ​​七. 参考​​

一. 整体结构图

  • TRM在做一个什么事情?



『NLP学习笔记』Transformer技术详细介绍_深度学习

  • 细化



『NLP学习笔记』Transformer技术详细介绍_深度学习_02

  • 再细化



『NLP学习笔记』Transformer技术详细介绍_transformer_03

  • 原论文图



『NLP学习笔记』Transformer技术详细介绍_transformer_04

  • 单个Encoder可以分为如下3个部分



『NLP学习笔记』Transformer技术详细介绍_词向量_05

二. 输入部分

  • 首先说输入部分1. Embedding;2. 位置嵌入。 两者相加,如下图所示



『NLP学习笔记』Transformer技术详细介绍_深度学习_06

2.1. 词向量

  • 例如:下面的4个英文单词,经过Word2Vec分别得到的词向量长度是4。



『NLP学习笔记』Transformer技术详细介绍_transformer_07

  • 再比如 :输入是 ​​我爱你......12个字​​,我按字切分,每个字定义一个512维度的字向量(原论文就是512),对于字向量这里可以使用Word2Vec或者随机初始化 ​​[如果数据量非常大,这2个差别不大,可以忽略]​​。下面的词向量长度就是512。



『NLP学习笔记』Transformer技术详细介绍_深度学习_08

2.2. 位置编码

『NLP学习笔记』Transformer技术详细介绍_深度学习_09

  • 不同于RNN、CNN等模型,对于Transformer模型来说,位置编码的加入是必不可少的,因为纯粹的Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token。​​让研究人员绞尽脑汁的Transformer位置编码
  • 从RNN说下为什么需要位置编码,对于RNN的一个共识,但是很多人会忽略。RNN的参数U,输入参数W,隐层参数V,输出参数。这是一套参数,所有RNN的time steps都共享一套参数(例如有100个词,100个字都是一套参数)。为了更好的理解,按照时间线展开,比如输入我爱你。RNN这种展开的结构,天然的时序关系很符合的,先处理某些东西,后处理某些东西。但是对于Transformer来讲,看刚才的图,多头注意力机制那里,处理的时候是可以并行的,一句话所有单词可以同时处理。不是像RNN输入一个我等处理完我再处理爱…。Transformer是一起处理的,这样做增快了速度,但是忽略了单词之间的序列关系,或者说先后关系。
  • 所以Transformer相比于RNN就缺少了某种东西,告诉模型某些我是在前面的,你是在后面的,爱是在中间的。



『NLP学习笔记』Transformer技术详细介绍_词向量_10

  • 原论文位置编码公式:如何理解呢?pos单词或者字的位置 『NLP学习笔记』Transformer技术详细介绍_transformer_11 代表偶数位,『NLP学习笔记』Transformer技术详细介绍_transformer_12。它如果针对512个维度的位置编码(下图)。
    『NLP学习笔记』Transformer技术详细介绍_transformer_13 『NLP学习笔记』Transformer技术详细介绍_hive_14
  • 其中 pos表示某个词在句子序列中的实际位置,也可以理解为某个token『NLP学习笔记』Transformer技术详细介绍_自然语言处理_15 表示词向量的第 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_15『NLP学习笔记』Transformer技术详细介绍_hive_17是位置向量的维度
  • 由于 『NLP学习笔记』Transformer技术详细介绍_深度学习_18 以及 『NLP学习笔记』Transformer技术详细介绍_transformer_19,这表明位置 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_20 的向量可以表示成位置 『NLP学习笔记』Transformer技术详细介绍_hive_21 和位置 『NLP学习笔记』Transformer技术详细介绍_hive_22



『NLP学习笔记』Transformer技术详细介绍_transformer_23

  • 得到上面的位置编码之后: 我们将位置编码512维度和词向量512维度或者字向量512维度相加,得到的结果作为最终Transformer的输入。



『NLP学习笔记』Transformer技术详细介绍_词向量_24

  • 这里还想引申一下为什么位置嵌入会有用, 公式2可以利用三角函数的性质得到公式3。注意看公式3,我们依第1行为例,比如pos位置代表我,pos+k代表你,k代表爱。也就是我爱你中的你可以用pos我和k爱两者线性组合起来,这样的线性组合意味着位置向量中蕴含了相对位置信息。但还有一个注意的点,这种相对位置信息会在注意力机制那里消失



『NLP学习笔记』Transformer技术详细介绍_自然语言处理_25

三. 注意力机制

3.1. 注意力机制的本质



『NLP学习笔记』Transformer技术详细介绍_transformer_26

  • Transformer原论文中注意力机制的公式
    『NLP学习笔记』Transformer技术详细介绍_词向量_27
  • 其中 『NLP学习笔记』Transformer技术详细介绍_transformer_28 是3个矩阵(向量),首先 『NLP学习笔记』Transformer技术详细介绍_深度学习_29 先做一个点乘,softmax经过之后得到的是一个相似度的向量,再乘以『NLP学习笔记』Transformer技术详细介绍_词向量_30

3.2. 举例说明

  • 举例子说明: 首先query和key做点乘(这里说一下为什么做点乘,其实做相似度计算有3种方式:点乘、MLP多层网络、余弦相似度)。单独说一下点乘,它反应的是一个向量在另一个向量上投影的长度,『NLP学习笔记』Transformer技术详细介绍_词向量_31也就是两个向量越相似它的点乘结果就越大
  • 这里例子中婴儿和左上、左下、右上、右下点乘之后,要判断是婴儿和这4个区域哪一个点乘结果越大,说明越相似,就是越关注。



『NLP学习笔记』Transformer技术详细介绍_自然语言处理_32

  • NLP中的例子: 这里输入的Query是爱,输入的是我不爱你4个key1、key2、key3、key4向量,Value1、Value2、Value3、Value4是对应的向量。



『NLP学习笔记』Transformer技术详细介绍_词向量_33

  • 具体如下:首先计算query爱和我、不、爱、你4个key向量计算F函数(就是刚才说的3种相似性方法,这里是点乘)、得到结果s1、s2、s3、s4,然后做一个softmax函数归一化,得到a1、a2、a3、a4,它们结果是相似度,比如0.7、0.1、0.1、0.1,结果相加为1。
  • 注意看value上面的箭头,先和a相乘,再相加一起得到attention value。



『NLP学习笔记』Transformer技术详细介绍_hive_34

3.3. Transformer中的注意力

  • 比如现在Thinking和Machines两个词,对应的向量是 『NLP学习笔记』Transformer技术详细介绍_深度学习_35『NLP学习笔记』Transformer技术详细介绍_自然语言处理_36,当然是加上位置编码之后的向量(4维)。如何获取到 『NLP学习笔记』Transformer技术详细介绍_词向量_37
  • 『NLP学习笔记』Transformer技术详细介绍_深度学习_38 乘以一个『NLP学习笔记』Transformer技术详细介绍_自然语言处理_39 的矩阵得到 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_40『NLP学习笔记』Transformer技术详细介绍_深度学习_38 乘以一个『NLP学习笔记』Transformer技术详细介绍_深度学习_42 的矩阵得到 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_43『NLP学习笔记』Transformer技术详细介绍_深度学习_38 以一个『NLP学习笔记』Transformer技术详细介绍_hive_45 的矩阵得到 『NLP学习笔记』Transformer技术详细介绍_深度学习_46
    『NLP学习笔记』Transformer技术详细介绍_自然语言处理_47 其中每个词的Embedding 的维度为『NLP学习笔记』Transformer技术详细介绍_自然语言处理_48(也就是这里的4),每个注意力头的输出维度为『NLP学习笔记』Transformer技术详细介绍_词向量_49(也就是这里的3)。
  • 同理:使用的是同一套参数,相应的 『NLP学习笔记』Transformer技术详细介绍_transformer_50
    『NLP学习笔记』Transformer技术详细介绍_transformer_51
  • 为了并行化处理 用矩阵 『NLP学习笔记』Transformer技术详细介绍_词向量_52 表示向量 『NLP学习笔记』Transformer技术详细介绍_深度学习_53 按行组成的矩阵,维度是 『NLP学习笔记』Transformer技术详细介绍_transformer_54(下图中 『NLP学习笔记』Transformer技术详细介绍_词向量_55)。
    『NLP学习笔记』Transformer技术详细介绍_深度学习_56



『NLP学习笔记』Transformer技术详细介绍_深度学习_57

  • 在上述变换基础上进行如下计算,得到输入中 每个词和自身及其他词之间的关系权重
    『NLP学习笔记』Transformer技术详细介绍_hive_58
  • 计算相似度,得到attention值。 得到 『NLP学习笔记』Transformer技术详细介绍_词向量_59 这3个矩阵之后,计算 『NLP学习笔记』Transformer技术详细介绍_transformer_60 的相似性,得到score,然后除以 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_61(为什么要除以它呢?『NLP学习笔记』Transformer技术详细介绍_自然语言处理_62 相乘之后得到的值非常大,值很大的情况下,softmax在反向传播的过程中梯度很小,容易发生梯度消失的现象。除以『NLP学习笔记』Transformer技术详细介绍_hive_63)



『NLP学习笔记』Transformer技术详细介绍_词向量_64

  • 因此有 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_65,该矩阵表示输入数据中每个词和自身及其他词的关系权重,每一行的得分之和为1。基于该得分即可得到,每个词在当前上下文下的新的向量表示,公式如下:
    『NLP学习笔记』Transformer技术详细介绍_词向量_66
  • 得到向量 『NLP学习笔记』Transformer技术详细介绍_hive_67 向量之后,它会被送到Encoder的下一个模块,即前馈神经网络这个全连接有2层,第一层的激活函数是ReLU,第二层是一个线性激活函数,可以表示为:
    『NLP学习笔记』Transformer技术详细介绍_transformer_68



『NLP学习笔记』Transformer技术详细介绍_transformer_69

  • 实际操作中使用矩阵的运算,方便并行,计算速度更快! 还有一个细节点,在实际操作叫多头,这里我们只用了一套参数『NLP学习笔记』Transformer技术详细介绍_自然语言处理_39『NLP学习笔记』Transformer技术详细介绍_深度学习_42『NLP学习笔记』Transformer技术详细介绍_hive_45。多头其实就是用了多套参数,分别得到各自的『NLP学习笔记』Transformer技术详细介绍_hive_73,如下图2,多了一套参数。 可以这样理解,多头注意力机制相当于把原始信息打到不同的空间(不一套参数)。



『NLP学习笔记』Transformer技术详细介绍_transformer_74

  • 多个头就会有多个输出,最后需要合在一起输出,如下面是2个头。



『NLP学习笔记』Transformer技术详细介绍_词向量_75

  • 多头注意力机制: 相当于 『NLP学习笔记』Transformer技术详细介绍_hive_76 个不同的自注意力的集成(ensemble)(如上图中2个,下图中8个),在这里我们以 『NLP学习笔记』Transformer技术详细介绍_词向量_77 举例说明。多头注意力机制的输出分成3步
  • ① 将数据 『NLP学习笔记』Transformer技术详细介绍_词向量_52 分别输入到下图所示的8个自注意力的中,得到8个加权后的特征矩阵 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_79



『NLP学习笔记』Transformer技术详细介绍_自然语言处理_80

  • ② 将8个『NLP学习笔记』Transformer技术详细介绍_自然语言处理_79 按列拼成一个大的特征矩阵 『NLP学习笔记』Transformer技术详细介绍_词向量_82,可以看下面第二个图;



『NLP学习笔记』Transformer技术详细介绍_词向量_83

  • ③ 特征矩阵经过 一层全连接 后得到最终输出 『NLP学习笔记』Transformer技术详细介绍_transformer_84,其中『NLP学习笔记』Transformer技术详细介绍_transformer_85



『NLP学习笔记』Transformer技术详细介绍_transformer_86

  • 具体多头注意力机制全过程如下:



『NLP学习笔记』Transformer技术详细介绍_transformer_87

  • 注意: 同self-attention一样,multi-head attention也加入了short-cut机制

四. 残差和layerNormal

  • 首先说一下 残差和LayerNormal 大致情况。首先看输入 『NLP学习笔记』Transformer技术详细介绍_hive_88『NLP学习笔记』Transformer技术详细介绍_词向量_89 代表词向量,然后碰到位置编码进行对位相加,得到新的 『NLP学习笔记』Transformer技术详细介绍_hive_88『NLP学习笔记』Transformer技术详细介绍_词向量_89,然后经过self-attention层得到输出结果 『NLP学习笔记』Transformer技术详细介绍_transformer_92『NLP学习笔记』Transformer技术详细介绍_自然语言处理_93,现在将 『NLP学习笔记』Transformer技术详细介绍_transformer_92『NLP学习笔记』Transformer技术详细介绍_自然语言处理_93 变为一个矩阵 『NLP学习笔记』Transformer技术详细介绍_transformer_96,将原始输入直接拿过来变为 『NLP学习笔记』Transformer技术详细介绍_hive_97,然后和 『NLP学习笔记』Transformer技术详细介绍_hive_67



『NLP学习笔记』Transformer技术详细介绍_hive_99

4.1. Layer Normalization

  • 经典的面试题:为什么这里使用Layer Normalization而不是Batch Normalization?
  • NLP中所有任务不止Transformer,大家很少用BN,基本都用LN操作。
  • 说一下BN操作,特征处理的时候Feature scaling就是为了消除量纲的影响,使模型收敛的更快。​​李宏毅老师课件链接​



『NLP学习笔记』Transformer技术详细介绍_hive_100

  • BN理解的重点在于:针对整个batch中的样本同一纬度进行处理。 下图中 『NLP学习笔记』Transformer技术详细介绍_hive_101
  • 所以做BN的时候很容易理解,但是如果BN用在NLP中有一个很大的问题。



『NLP学习笔记』Transformer技术详细介绍_自然语言处理_102

  • BN的优点:
  • 第一个就是可以解决内部协变量偏移。
  • 第二个优点就是缓解了梯度饱和问题(如果使用sigmoid激活函数的话),加快收敛。
  • BN的缺点:
  • 第一个,batch_size较小的时候,效果差(这个batch中计算出来的均值和方差不能代表全部数据的均值和方差)。
  • 第二个,缺点就是 BN 在RNN中效果比较差。这一点和第一点原因很类似,不过我单挑出来说。
  • 第二个的例子:一个batch长度为10,前9个样本的句子长度是5个单词,1个样本的句子长度是20个单词,那么我再输入的时候,前5个单词的均值和方差可以用10个样本计算出来,但是第6个单词到第20个单词的均值和方差怎么计算呢?前9个没有,只有最后一个有。回到了第一个问题中batch很小的时候,效果很差,这就是BN在RNN中效果不好的原因。RNN的输入是动态的。



『NLP学习笔记』Transformer技术详细介绍_hive_103

  • 为什么使用layer-norm? 比如还是上面例子,最后1个句子是20个单词,LN做的就是针对这20个单词进行缩放,去做它的均值和方差。而BN做的是针对第一1行单词做方差,第2行单词做方差。
  • 理解:为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果。
  • 看下面这张图:同一个位置的做均值和方差,比如我和今做方差,ai和天做方差,默认假设我和今代表同样的语义信息,ai和天代表同样的语音信息。大家想想是不是这样,看上面的图BN的时候,身高做方差,体重做方差,都是代表相同的语音信息。而LN做的是针对所有单词我爱中国共产党所有单词做均值和方差,它的假设是我爱中国共产党在同一个语义信息里也可以这样理解,在获取我爱中国共产党这个句向量的时候,一个常规的做法是做加权词向量,加权词向量基本假设认为我爱中国共产党这句话中的所有词是在一个语义信息里面的,所以才认为是可以理解的。



『NLP学习笔记』Transformer技术详细介绍_transformer_104

五. 前馈神经网络

  • 前馈神经网络就是这个图中最上面的,这里是两层的全连接,然后再过一个残差和Normalization。以上所有的都是Encoder的过程。
  • 如果我们可视化向量、layer-norm以及前馈神经网络操作,将如下所示:



『NLP学习笔记』Transformer技术详细介绍_深度学习_105

  • 在解码器中也是如此,假设两层编码器+两层解码器组成Transformer,其结构如下:



『NLP学习笔记』Transformer技术详细介绍_transformer_106

  • 注意(下面也有介绍,这里强调一下):在解码器中,Transformer block比编码器中多了个Encoder-Decoder Attention。在Encoder-Decoder Attention中,『NLP学习笔记』Transformer技术详细介绍_自然语言处理_107 来自于解码器的上一个输出, 『NLP学习笔记』Transformer技术详细介绍_hive_108『NLP学习笔记』Transformer技术详细介绍_词向量_30

六. Decoder

  • 现在我们已经了解了编码器侧的大部分概念,也基本了解了解码器的工作方式,下面看下他们是如何共同工作的。
  • 编码器从输入序列的处理开始,最后的编码器的输出被转换为 『NLP学习笔记』Transformer技术详细介绍_深度学习_110『NLP学习笔记』Transformer技术详细介绍_hive_111,它俩被每个解码器的"Encoder-Decoder Atttention"层来使用,帮助解码器集中于输入序列的合适位置。看上一节中的图



  • 下面的步骤一直重复直到一个特殊符号出现表示解码器完成了翻译输出。每一步的输出被喂到下一个解码器中。正如编码器的输入所做的处理,对解码器的输入增加位置向量。



  • 下面是Decoder部分,重点讲解一下1(掩盖多头注意力机制)和2(交互层,比encoder多了1层)两部分。



『NLP学习笔记』Transformer技术详细介绍_hive_112

6.1. 掩盖多头注意力机制

  • 由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 『NLP学习笔记』Transformer技术详细介绍_hive_113 个特征向量时,我们只能看到第 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_114 及其之前的解码结果,论文中把这种情况下的注意力机制叫做 掩盖多头注意力机制(masked multi-head attention)
  • 从代码层面上讲,需要对当前单词和之后的单词做mask,都抹掉,不让看到。
  • 为什么需要mask?举例:看下面S代表输入的开始start,真正的句子的I love you now。



『NLP学习笔记』Transformer技术详细介绍_深度学习_115

  • 『NLP学习笔记』Transformer技术详细介绍_transformer_116 输入,输出 『NLP学习笔记』Transformer技术详细介绍_词向量_117,然后做一个teacher for thing,把 『NLP学习笔记』Transformer技术详细介绍_词向量_117 作为下一个时刻的输入得到 『NLP学习笔记』Transformer技术详细介绍_transformer_119,依次,…,这是一个机器翻译的过程。 为什么需要mask? 输入 『NLP学习笔记』Transformer技术详细介绍_hive_120 的时候,输出的是 『NLP学习笔记』Transformer技术详细介绍_transformer_121,如果decoder的输入是没有mask,只是经过和Encoder一样的,那么从 Start 的 『NLP学习笔记』Transformer技术详细介绍_transformer_116



『NLP学习笔记』Transformer技术详细介绍_hive_123

6.2. 交互层

  • 从图中可以看到这是一个典型的多头注意力机制,是怎么操作的呢?看下图:所有encoder输出和每一个Decoder做交互。



『NLP学习笔记』Transformer技术详细介绍_词向量_124

  • 具体交互操作看下图:比如现在有2个encoder,输出的这个值得到 『NLP学习笔记』Transformer技术详细介绍_hive_125,一定要注意Encoder生成的是 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_126 矩阵,Decoder生成的是 『NLP学习笔记』Transformer技术详细介绍_transformer_127,多头注意力机制一定有 『NLP学习笔记』Transformer技术详细介绍_transformer_28 三个矩阵,在交互的时候利用 『NLP学习笔记』Transformer技术详细介绍_transformer_28



『NLP学习笔记』Transformer技术详细介绍_自然语言处理_130

  • 再简单梳理一下整个过程,虚线代表 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_126 矩阵的输出,看下面这条在第一个decoder中在做多头注意力机制的时候,和Decoder中的 『NLP学习笔记』Transformer技术详细介绍_自然语言处理_107



『NLP学习笔记』Transformer技术详细介绍_transformer_106

七. 参考


标签:NLP,Transformer,位置,笔记,单词,向量,注意力,输入
From: https://blog.51cto.com/u_15866474/5956842

相关文章

  • 『NLP学习笔记』BERT技术详细介绍
    BERT技术详细介绍文章目录​​一.BERT整体模型架构​​​​1.1.Attention机制​​​​1.2.基础架构-Transformer中的Encoder​​​​1.3.BERT输入的三部分​​​​二.......
  • 『论文笔记』基于度量学习的行人重识别方法中损失函数总结!
    基于度量学习的行人重识别方法中损失函数总结!文章目录​​一、对比损失(Contrasiveloss)​​​​二、三元组损失(Tripletloss)​​​​三、改进三元组损失(Improvedtripl......
  • JS学习笔记9_JSON
    1.JSON概述JavaScriptObjectNatation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式P.S.一点小历史:JSON之父是道格拉斯,《JavaScript语言精粹》的作者,创造JSO......
  • .net core 5,6,7【多线程笔记】取消令牌(CancellationToken)
    介绍在使用C#异步的场景,多多少少会接触到CancellationTokenSource。它和取消异步任务相关的,CancellationToken就是它生产出来的。演示任务取消执行回调vartokenSource......
  • FreeSWITCH学习笔记:XML配置文件
    本文更新于2022-12-20,使用FreeSWITCH1.10.7。目录加载顺序autoload_configs/autoload_configs/acl.conf.xmlautoload_configs/callcenter.conf.xmlautoload_configs/cdr_......
  • Java学习笔记1
    1.注释​ 注释是对代码的解释和说明文字。Java中的注释分为三种:单行注释://这是单行注释文字多行注释:/*这是多行注释文字这是多行注释文字这是多行注释文字......
  • es6模块化随笔记
    默认导出与默认导入默认导出的语法:exportdefault默认导出的成员每个模块中只允许使用唯一的一次exportdefault默认导入的语法:import接收名称from‘模块标识符’......
  • 线段树复习笔记——综合应用(吉司机线段树)
    线段树的综合应用接下来,以洛谷P6242【模板】线段树3(超级毒瘤)为例,来看一下线段树的综合应用。先来看一下此题题意,很熟悉的题面:题目描述给出一个长度为\(n\)的数列......
  • HP笔记本无法休眠问题,或者黑屏后无法唤醒,在windows10(win10)系统下
    1可以找找其他的博文里面关于离开模式的设置修改注册表关闭HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlSessionManagerPowerAwayModeEnabled键值:0,关闭1,开......
  • UE4学习笔记26——【UI】UI动画和暂停游戏
    P68.UI动画和暂停游戏P68(需要包含第一人称射击模板) 新建一个文件夹(WJJ2119P68),在此文件夹中,右键“用户界面——控件蓝图”,重命名为“Pause”,然后打开此控件蓝图;左......