transformer架构解析

transformer架构解析

文章目录

  • transformer架构解析
    • 模型背景:
    • 模型结构
      • 整体框架
      • Encoder编码器
        • **Self Attention**
          • 计算自注意力的步骤:
        • MultiHead-Attention
        • 残差链接
      • Decoder解码器
        • Softmax层

论文: 原文

模型背景:

由Google于2017年提出,用于解决RNN结构模型在处理长序列会有遗忘、以及不能通过并行计算来进行加速的问题,transformer采用了一种Attention机制,通过堆叠Encoder-Decoder结构,不需要像RNN顺序计算,让模型充分发挥了并行计算的能力,对时间序列更好的建模,在机器翻译中取得了BLEU值的新高。也同时开辟了transformer横扫NLP领域的新纪元。

模型结构

整体框架

transformer架构解析_第1张图片
上图即transformer结构图,左侧为编码器Encoder,右侧是解码器Decoder,多次堆叠形成了Transformer结构。

Encoder编码器

transformer架构解析_第2张图片
Encoder编码器结构中:

  • Multi-Head Attention多头注意力机制
  • Feed Forward前馈网络层

Self Attention

Multi-Head Attention由多个self attention组成,所谓的自注意力机制是指让模型更加关注序列中的某个或某些元素,从而更好地编码。
原文中的attention模块如下:
transformer架构解析_第3张图片
其中的Q(查询向量),K(键向量),V(值向量)满足计算:
在这里插入图片描述

计算自注意力的步骤:
  • 从每个编码器的输入向量X(单词的词向量)中生成三个向量
    对每个单词X,创造查询向量(Q)、键向量(K)和值向量(V),三个向量通过输入X经过三个不同的权重矩阵相乘计算得来。
    transformer架构解析_第4张图片
    X 1 与 W Q 相 乘 得 到 q 1 , X1与W^Q相乘得到q_1, X1WQq1即该输入的查询向量,以此类推,最终得到输入序列的查询向量、键向量和值向量。

  • 计算得分
    打分输入单词的键向量与查询向量经点积计算得到分数,从而决定编码输入的单词在句子中的重要性。如果是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。
    transformer架构解析_第5张图片

  • 将分数除以8,再由softmax传递结果
    将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。
    softmax分数决定了每个单词对当下位置的贡献。transformer架构解析_第6张图片

  • 每个值向量乘以softmax分数
    关注语义上相关的单词,并弱化不相关的单词。

  • 对加权值向量求和
    在编码某个单词时,将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到。然后即得到自注意力层在该位置的输出。
    transformer架构解析_第7张图片

MultiHead-Attention

多头注意力机制是合并多个自注意力机制的结果。
transformer架构解析_第8张图片
操作步骤:

  • 将输入数据X分别输入进8个自注意力模块
  • 分别计算出每个自注意力模块的结果Z0, Z1, Z2…Z7
  • 将各个自注意力模块结果Zi拼成一个大矩阵Z
  • 经过一层全连接层,得到最终的输出 最后多头注意力的表现类似如下
    transformer架构解析_第9张图片

残差链接

在每个编码器的子层(self-attention, ffnn)周围都有一个残差链接
transformer架构解析_第10张图片
再带上紧随其后的layerNorm层,整体的Encoder结构如下:
transformer架构解析_第11张图片

Decoder解码器

Encoder的输出作为Decoder的输入,将最后一层的Zn去乘新的W^K 和 W^V权重矩阵得到K,V矩阵作为解码器的输入。
transformer架构解析_第12张图片
Decoder结构和Encoder结构类似,从Encoder输出的向量K和V,用于解码器中的“encoder-decoder”层,使得解码器关注于输入在序列中的位置。在解码器中,self-attention层只允许关注输出序列中的较早位置。这是通过在自我注意计算中的softmax步骤之前屏蔽未来位置(将它们设置为-inf)来完成的。 “编码器-解码器注意力”层的工作方式与多头自我注意类似,只是它从其下方的层创建其查询矩阵,并从编码器堆栈的输出中获取键和值矩阵。

Softmax层

Decoder最后输出的是个实数向量,而softmax可以将浮点数变成要输出的单词。
首先,linear线性变换层,即全连接神经网络层,将解码组件投射到logits的向量里,得到对应的单词分数;之后,softmax层会将分数变为概率,概率最高的单词被选中并作为该时间步的输出。
transformer架构解析_第13张图片
参考:
https://blog.csdn.net/longxinchen_ml/article/details/86533005?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_utm_term~default-4-86533005-blog-126261479.pc_relevant_recovery_v2&spm=1001.2101.3001.4242.3&utm_relevant_index=7

https://jalammar.github.io/illustrated-transformer/

https://mp.weixin.qq.com/s/kjLFPyTb7pal7oorX3ejkw

你可能感兴趣的:(Transformer,深度学习,自然语言处理,transformer)