Transformer模型详细解读(理论篇)

Transformer模型架构梳理

《Attention is all you need》是Google提出的一篇关于Attention应用实践的论文,论文中提出了基于Attention机制的Transformer模型,以及大量使用了多头注意力机制(Multi-Head),该模型已被广泛运用在机器翻译,问答系统,实体识别等NLP相关领域。Transformer模型总体框架如下图所示:
Transformer模型总架构

Encoder

Input Embedding

针对输入模型的自然语言文本,需要通过Embedding层将其映射成模型内部能够识别计算的词向量序列:
Embedding
例如输入自然语言文本:“My dog is cute and he likes playing”,通过文本分词(Tokenization)、建立字典映射(Build Dictionary)、序列向量化(Encoding)等一系列文本处理操作将其映射为n维的词向量序列[X1,X2,X3,X4,X5…]。

此时的词向量序列仅仅表示的是每个词的意思,但是实际应用过程中每个词在句子中的位置不同其所表达的具体意思是不一样的,因此,为了标识输入序列中的每个单词的位置,引入位置编码信息(Positional Encoding),同时,为了能够和文本词向量进行运算,也将其映射成n维的词向量,这样的位置编码词向量能够决定当前词的位置,或者说是句子中不同词之间的距离。

最后,将输入文本产生的词向量序列[X1,X2,X3,X4,X5…]与位置编码词向量[T1,T2,T3,T4,T5…]相加成新的词向量序列输入下一层。
加入位置编码Embedding

self-Attention

self-Attention是Transformer中所运用到的一种自注意力机制,将整个语境融入到每个词当中,帮助学习句子内部词的依赖关系,学习句子的内部结构。

例如输入文本:“The animal didn’t cross the street because it was too tired.”、“The animal didn’t cross the street because it was too narrow. “,当我们顺序阅读时很容易判断第一个句子中的"it"是指代前面的"animal”,而第二个句子中的"it"指代的是"street”,但是,当我们顺序输入该文本到模型时,它又该如何判断"it"指代的是什么呢?

因此,引入self-Attention的目的就是为了让模型能够了解到"it"与"animal"及"street"之间的关系。

self-Attention计算方法

(1)self-Attention的计算将引入Query、Key、Value三个向量,这三个向量分别是输入词向量与设定的Wq、Wk、Wv矩阵相乘的结果,对应的Wq、Wk、Wv矩阵是随机初始化,再通过模型学习不断优化的,其中Query向量代表是后续将要区查询计算的向量,Key向量表示后续将要被查询计算的向量,Value向量表示当前的实际特征。
Query、Key、Value向量
(2)将句子中的每一个词的Query向量分别与整个序列词的Key向量做内积计算,例如:针对第一个词X1:q1·k1、q1·k2、q1·k3…,内积越大则表示两个词之间的相关程度越大。
self-Attention计算步骤
如上图所示,用X1的对应的Query向量q1分别和X1、X2对应的Key向量进行内积,由得到的结果看出X1与其自己的内积结果值比与X2的内积结果值大,说明其与自身具有较强的相关性。

(3)将内积所得到的常数除以矩阵的维度开方,再通过softmax函数进行归一化处理,得到对应的分数,表示当前词与整个序列中每个词的相关性大小。
self-Attention计算步骤
(4)将每个词和序列中所有词计算计算得到的分数作为权值与每个词对应的Value向量进行加权累加计算,得到当前词的输出Z。
self-Attention计算步骤
(5)在实际的运用中,为了提高模型计算速率,常常是以矩阵的形式进行计算,模型通过训练优化Wq、Wk、Wv矩阵的权重参数,再通过softmax函数与Wv矩阵进行加权计算。
self-Attention矩阵形式
通过self-Attention机制,能够让模型学习到输入序列的每一个词与序列中所有词的关系,这就很好地解决了我们开始提出的问题,计算机也能够通过模型训练得知句子当中的指代词"it"是指代的哪一个词,如下图所示,图中颜色越深则表示词与词之间的关系越大。
模型预测关系

Multi-Headed Attention

根据上面的self-Attention计算,我们通过一组Query、Key、Value矩阵得到的是一组当前词的特征表达,为了提取多组特征表达,论文中引入了“多头注意力”机制,通过多组Query、Key、Value矩阵提取不同的特征,再将提取到的特征向量拼接起来得到最终的输出特征向量。
Multi-Headed Attention多头机制
Transformer模型中,运用了8组Query、Key、Value矩阵进行特征提取,得到了8个输入特征矩阵Z。
Multi-Headed Attention多头机制
我们将得到的的8个特征矩阵[Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7]拼接起来,得到一个维度较高的特征矩阵,再通过一个全连接层乘以降维矩阵Wo,得到我们需要的特征矩阵Z。
Multi-Headed Attention多头机制
以上就是Multi-Headed Attention多头注意力机制的全部设计流程,其总概要如下图所示:
Multi-Headed Attention多头机制
Multi-Headed Attention多头机制

多层堆叠

目前,我们已经实现了一层的self-Attention计算,一个self-Attention与全连接层组成了一个Encoder。
Encoder组成
通过Encoder计算输出的向量和开始输入向量保持了一致的格式,因此,我们仍然可以将Encoder的输出作为下一层Encoder的输入序列再次进行计算,如此多次堆叠Enocder层,不断提取特征向量,组成了Transformer模型的Encoder端。
Encoder部分

Layer normalization

由于经过多层self-Attention的特征提取,为了保留原有特征,保证经过Encoder输出的向量包含原有的特征,模型中设计了残差连接,将初始的输入向量不做任何变换与经过self-Attention计算的输出向量相加,再经过layer-normalization作为其输出向量。
残差连接及层归一化
至此,我们已经讲完了Transformer模型的Encoder部分,接下来让我们继续讲解Decoder部分以及他们是如何连接的。

Decoder

Masked Multi-Headed Attention

与Encoder中Attention不同的是Decoder中的Attention机制中加入了Mask机制,因为在Decoder中的Attention的输入是需要一个一个预测的,当前词只能与已预测出来的词进行self-Attention计算,而对于尚未预测出来的词,使用Mask机制隐藏。
Mask Attention机制

Encoder-Decoder Attention

Transformer模型的Encoder通过多层self-Attention的计算,将顶层输出的特征向量转换成K,V矩阵传递到Decoder部分,与Decoder中的Masked Multi-Headed Attention层的输出Q矩阵共同出入到Encode-Decode Attention中进行计算。
Encoder-Decoder Attention机制

Linear and Softmax Layer

最后我们再看一下输出层,也就是在Decode部分执行完成以后输出的特征词向量序列,我们如何通过Linear and Softmax Layer层将其转换成我们需要的词输出呢?

首先是Linear layer,Linear layer是一个简单的全连接神经网络,它将Decoder中Attention部分输出的特征向量序列映射成一个logits向量。假设我们的模型内置了10000个“输出词汇”,那么logits将有10000个单元格的大小,每个单元格都对应了唯一单词的分数。

接着将logits向量输入softmax层,将这些分数进行归一化处理转换成对应的概率,选择概率值最大的单元格对应的单词输出,这就是我们需要输出的词汇。
Linear and Softmax Layer输出层

Decoder总结

我们讲解了Transformer模型中的Decoder部分,主要是由Masked Multi-Headed Attention、Encoder-Decoder Multi-Headed Atention多层堆叠再加上Linear and Softmax Layer输出层组成。
Decoder解码器

总结

至此,我们讲解完了整个的Transformer模型,该模型中许多开创新的思想颠覆了以往传统的神经网络模型,在各种NLP运用中都取得了不错的成绩,使得自然语言处理问题有了很大的提升。

文章参考了较多的论文(图片来源)及相关视频链接:《Attention Is All You Need》《The Illustrated Transformer》https://www.bilibili.com/video/BV1NJ411o7u3

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Transformer模型是一种用于自然语言处理(NLP)的序列到序列模型,它不同于传统的循环神经网络(RNN)或卷积神经网络(CNN),而是使用了自注意力机制(self-attention mechanism)进行序列建模。 Transformer模型主要由两个部分组成:编码器(encoder)和解码器(decoder)。编码器将输入序列中的每个词向量输入模型,并生成一组新的表示,这些表示可以传递到解码器以生成输出序列。解码器使用编码器生成的表示来生成输出序列中的每个词。 自注意力机制是Transformer模型的核心,它允许模型关注输入序列中的不同部分,以便更好地建模序列之间的依赖关系。自注意力机制包括三个步骤:计算注意力权重、将权重应用于输入序列中的每个位置、并将加权的值相加以生成表示。 具体来说,给定一个输入序列,Transformer模型首先将每个输入词向量进行线性变换,以得到查询(query)、键(key)和值(value)向量。然后,模型计算查询向量和键向量之间的相似度,并将其归一化为概率分布,以得到每个位置的注意力权重。接着,模型将每个位置的值向量乘以对应位置的注意力权重,并将加权的值向量相加,以生成每个位置的表示向量。 Transformer模型的优点在于,它能够捕捉长距离依赖关系,因为它可以在计算自注意力时同时考虑整个输入序列。此外,它还可以并行计算,因为每个位置的表示向量可以独立地计算。 总之,Transformer模型是一种强大的序列建模工具,已经在许多NLP任务中取得了出色的表现,例如机器翻译、文本摘要和语言生成等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值