Transformer 模型是一种自然语言处理模型,它通过在序列上进行转换来完成任务,例如翻译、问答、摘要、分类等。这类模型通常使用注意力机制来聚焦输入序列中的特定单词或短语,从而更好地理解和处理文本。
Transformer模型在《Attention is all you need》论文中提出这篇论文主要亮点在于:
- 1、不同于以往主流机器翻译使用基于RNN的seq2seq模型框架,该论文用attention机制代替了RNN搭建了整个模型框架。
- 2、提出了多头注意力(Multi-headed attention)机制方法,在编码器和解码器中大量的使用了多头自注意力机制(Multi-headed self-attention)。
- 3、在WMT2014语料中的英德和英法任务上取得了先进结果,并且训练速度比主流模型更快。
我们先把Transformer想象成一个黑匣子,在机器翻译的领域中,这个黑匣子的功能就是输入一种语言然后将它翻译成其他语言。如下图:
实际上Transformer是由两部分构成分别是编码器和解码器,在整个模型中,编码器由6个block组成,解码器由6个block组成。编码器的输出则作为解码器的输入。
Transformer结构
Transformer的整体结构
Attention
Attention模型并不只是盲目地将输出的第一个单词与输入的第一个词对齐。Attention机制的本质来自于人类视觉注意力机制。人们在看东西的时候一般不会从到头看到尾全部都看,往往只会根据需求观察注意特定的一部分,就是一种权重参数的分配机制,目标是协助模型捕捉重要信息。即给定一组<key,value>,以及一个目标(查询)向量query,attention机制就是通过计算query与每一组key的相似性,得到每个key的权重系数,再通过对value加权求和,得到最终attention数值。
Self-Attention
Self-Attention,这是Transformer的核心内容,主要目的是计算query与Key之间的相似度,为每个输入的向量学习一个权重。具体流程如下图所示:
-
如上文,将输入单词转化成嵌入向量;
-
根据嵌入向量得到 q ,k,v 三个向量;
-
为每个向量计算一个score: score=q*k ;
-
为了梯度的稳定,Transformer使用了score归一化,即除以 sqrt(dk)=8 (论文中使用key向量的维度是64维,其平方根=8,这样可以使得训练过程中具有更稳定的梯度。);
-
对score施以softmax激活函数,使得最后的列表和为1;这个softmax的分数决定了当前单词在每个句子中每个单词位置的表示程度。很明显,当前单词对应句子中此单词所在位置的softmax的分数最高,但是,有时候attention机制也能关注到此单词外的其他单词,这很有用。
-
softmax点乘Value值 v ,得到加权的每个输入向量的评分 v ;相当于保存对当前词的关注度不变的情况下,降低对不相关词的关注。
-
相加之后得到最终的输出结果;这会在此位置产生self-attention层的输出(对于第一个单词)。
<math xmlns="http://www.w3.org/1998/Math/MathML"> A t t e n t i o n = s o f t m a x ( Q ∗ K / D k ½) ∗ V Attention = softmax(Q * K /Dk ½) * V </math>Attention=softmax(Q∗K/Dk½)∗V
Muti-Attention
Multi-Head Attention相当于 h 个不同的self-attention的集成(ensemble)。结构如下图所示:
唯一需要注意的是,由于残差链接的特殊需要,这里的输出要保持与输入一样的维度,所以将每个Self-Attention得到的结果按列进行拼接,得到W0。最后进行一层全连接层,将其映射为最终的输出结果Z。
Positional Enconding
在Attention中,对于一个句子中各个词语的顺序不改变计算结果,具体来说,就是词语的顺序并不能影响Attention的计算结果,这与我们所理解的翻译不符,所以需要一个绝对的位置信息,来表示单词在句子中的位置,其具体计算公式如下:
...未完待续