1. 背景

在机器翻译任务下,RNN、LSTM、GRU等序列模型在NLP中取得了巨大的成功,但是这些模型的训练是通常沿着输入和输出序列的符号位置进行计算的顺序计算,无法并行。

文中提出了名为Transformer的模型架构,完全依赖注意力机制(Attention Mechanisms),构建输入与输出间的依赖关系,并且能够并行计算,使得模型训练速度大大提高,能够在较短的训练时间内达到新的SOTA水平。

2. 模型架构

2.1 编码器(Encoder)与解码器(Decoder)

先放下具体的细节,从上图Transformer的模型架构中可以发现,模型被分为左右两块。

对于左侧的Encoder,实际是有\(N=6\)层相同的Encoder堆叠而成。这N层中,每层都有两个子层分别为:多头注意力层(Muti-Head Attention)前馈网络层(Feed Forward),两个子层都带有残差连接(Add)归一化层(Norm)

因此每一个子层的输出表示为:\({\rm LayerNorm}(x+{\rm SubLayer}(x))\),\(x\)表示输入,\({\rm SubLayer}(x)\)表示子层(多头注意力层或前馈网络层)的计算结果。

为了实现残差连接,所有子层、嵌入层还有最后的模型输出结果的维度\(d_{model}\)统一设置为\(512\)。

对于右侧的Decoder,同样有着\(N=6\)层相同的Decoder堆叠而成。从上至下看:

  • 第一层前馈网络层与Encoder部分一致;
  • 第二层多头注意力层,参与计算的数据由两部分(K、V)来自Encoder,这两部分的数据是N层的Encoder的运算结果,经过N层计算后输入Decoder,Encoder的这一运算结果会在N层Decoder的每一层多头注意力层参与计算;
  • 第三层是带掩码的多头注意力层,它通过对偏移的输出Embedding添加掩码,确保位置为\(i\)的预测仅依赖于\(i\)之前的数据。
  • Embedding:就是将现实的信息如文本、音频、图像转化为向量供模型使用,就像它的本意:嵌入进神经网络一样。嵌入层通常为模型的第一层,负责将现实信息转为向量。
  • Inputs和Outputs:以机器翻译任务:将中文翻译为English为例,Inputs就是“我是一只猫”,Outputs为“I am a cat”即训练的Label,而模型的输出应为模型预测的“我是一只猫”的翻译。
  • Outputs(shifted right):在图中,Outputs向右偏移了一位,这是因为在Outputs的第一位插入了Token(词元:文本中的基本单位也可称为“分词”),这个Token为翻译开始符一般为写为<Begin>。在本例中,偏移后的Outputs为“<Begin> I am a cat”,这样做的目的是为了让模型预测的第一个词为“我”,第二个词为“是”,以此类推。

2.2 注意力(Attention)

观察图一,Encoder和Decoder的多头注意力层(包括Decoder中带掩码的多头注意力层)的输入,都是由三部分组成:查询(Query)键(Key)值(Value),简称QKV。所谓的“注意力”便是由这三部分经过“注意力函数”计算得到。

关于Q、K、V,不需要太在意它们的名称,它们来自于输入\(X\)和对应的权重矩阵\(W\)的乘积结果,权重矩阵由训练得到:\(Q=XW^Q,\ K=XW^K,\ V=XW^V\)

2.2.1 缩放点积注意力(Scaled Dot-Product Attention)

文中,作者将Transformer中的注意力称为“缩放点积注意力”。输入的组成包括:\(d_k\)维的Q和K,以及\(d_v\)维的V。运算步骤如图2左侧所示:

  1. Q与K进行矩阵相乘(MatMul);
  2. 进行缩放(Scale),即除\(\sqrt{d_k}\);
  3. 添加掩码(Mask(opt.)),这一步针对Decoder中的Masked Multi-Head Attention层,文中添加掩码的方式是将需要添加掩码的部分设置为\(-\infty\);
  4. 通过Softmax函数计算得到权重;
  5. 将权重与V进行矩阵相乘。

之所以要进行缩放文中给出了解释:如果\(d_k\)过大,那么点积\(QK^T\)的值(magnitude)就会过大,导致Softmax函数过于陡峭(因为某一点过大)也就是方差过大。

假设\(q\)和\(k\)是均值为0、方差为1的独立随机变量,当维度为\(d_k\)时,它们的点积为\(q\cdot k=\sum^{d_k}_{i=1}q_ik_i\),它们的均值为0,方差为\(d_k\)。

这会导致梯度消失,为了避免这种情况需要通过第二步对点积结果进行缩放。

实践中,将多组Q打包为一个矩阵\(Q\),同理K和V也被打包为矩阵\(K\)和\(V\)。结合上述计算步骤,矩阵运算的结果可以表示为:

\[{\rm Attention}(Q,K,V)={\rm softmax}(\frac{QK^T}{\sqrt{d_k}})V \tag{1}
\]

2.2.2 多头注意力(Multi-Head Attention)

文中,在使用Attention函数前,还对Q、K、V分别进行\(d_k\)、\(d_k\)、\(d_v\)维的线性变换(Linear),如图2右侧从下往上的第一层所示。同时有\(h\)组这样的Q、K、V并行计算,每组得到\(d_v\)维的输出,这也是称为“多头”的原因。将这些输出连接并再进行一次线性变换(Linear)得到最后的输出。

多头注意力使得模型联合关注来自不同位置的信息,弥补单个Attention函数的局限。

\[{\rm MultiHead}(Q,K,V)={\rm Concat}({\rm head}_1,...,{\rm head}_h)W^O \\
{\rm head}_i={\rm Attention}(QW_i^Q,KW_i^K,VW_i^V)
\]

这里的线性变换参数矩阵:\(W_i^Q\in \mathbb{R}^{d_{model}\times d_k},W_i^K\in \mathbb{R}^{d_{model}\times d_k},W_i^V\in \mathbb{R}^{d_{model}\times d_v}\)

文中,\(h=8\)层注意力函数并行计算,其中变量的维度设置为:\(d_k=d_v=d_{model}/h=64\),由于每个头的维度减少,总的计算成本与之前的单个注意函数相似。

2.3 以位置为单元的前馈神经网络(Position-wise Feed-Forward Networks)

在每一层Encoder和Decoder中,都有一层全连接前馈神经网络,它分别作用于每个位置,进行相同的处理。它包含两个线性变换,中间包含着一层ReLU激活。

\[{\rm FFN}(x)=\max(0,xW_1+b_1)W_2+b_2\tag{2}
\]

不同位置的线性变换方式相同,但层与层之间的参数不同。通常是两个核为1的卷积层,它们输出输出的维度\(d_{model}=512\),中间的隐藏层维度\(d_{ff}=2048\)

线性层、感知机和前馈神经网络间的关系:一般来说单层的感知机就是一层线性层,而前馈神经网络则是一个更一般的概念,可以包含多个层,每个层可以有不同的结构和激活函数。

2.4 Embeddings与Softmax

与其他处理同一类问题的的模型相同,Transformer需要先用嵌入层(Embedding)将输入输出的词元转化为\(d_{model}=512\)维的向量。在Decoder中,使用线性变换和Softmax函数将模型的输出转化为预测的下一个词元的概率分布。两个嵌入层使用相同的权重矩阵,它们的权重还将乘以\(\sqrt{d_{model}}\)。

2.5 位置编码(Positional Encoding)

Transformer不含卷积和循环,但是序列的绝对位置和相对位置信息不可或缺,因此需要将位置编码添加到Encoder和Decoder的Embedding层之后,位置编码的维度同样是\(d_{model}\)(毕竟同一维度才能相加)。位置编码的计算方式有许多,文中采用了不同频率的余弦、正弦函数计算。

\[\begin{align*}
PE_{(pos,2i)} &= \sin(pos/10000^{2i/d_{model}}) \\
PE_{(pos,2i+1)} &= \cos(pos/10000^{2i/d_{model}})
\end{align*}
\]

其中,\(pos\)是位置,\(i\)表示维度(\(i\le d_{model}\))。每一个位置编码的维度都对应一个正弦曲线。波长范围为\([2\pi,20000\cdot\pi]\)的几何级数。使用这种编码方式的原因是:对于任何固定的偏移量\(k\),\(PE_{pos+k}\)可以表示为\(PE_{pos}\)的线性函数。因此,Transformer可以轻松地学习相对位置的偏移量。另外,这种位置编码方法在当模型遇到比训练时更长的序列也能有较好的表现。

3. 为什么是Attention

作者在使用Attention机制时,考虑了以下三个方面:

  1. 每一层的总计算复杂度;
  2. 能够用于并行计算的计算量;
  3. 网络中,向量依赖的路径长度。在机器翻译等序列任务中,这是一项关键。需要考虑当前位置的前向信号和后向信号在网络中的路径长度

第二点已经被多头注意力机制解决。对于第一点与第三点,文中提到在处理长度较大的序列任务时,可以限制注意力的范围,以序列中相应的输出范围为中心,设置大小为\(r\)的邻域,这时,循环层需要的\(O(n)\)的序列操作,在这里只需要\(O(n/r)\)。

参考文献

  1. Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems 30 (2017).
  2. 一文读懂Embedding的概念,以及它和深度学习的关系
  3. Transformer模型详解(图解最完整版)
  4. Transformer 1. Attention中的Q,K,V是什么
  5. 1*1的卷积层是怎么实现维度变换的?

详细了解Transformer:Attention Is All You Need的更多相关文章

  1. Transformer —— attention is all you need

    https://www.cnblogs.com/rucwxb/p/10277217.html Transformer -- attention is all you need Transformer模 ...

  2. Attention & Transformer

    Attention & Transformer seq2seq; attention; self-attention; transformer; 1 注意力机制在NLP上的发展 Seq2Seq ...

  3. Transformer解析与tensorflow代码解读

    本文是针对谷歌Transformer模型的解读,根据我自己的理解顺序记录的. 另外,针对Kyubyong实现的tensorflow代码进行解读,代码地址https://github.com/Kyuby ...

  4. 【转载】图解Transformer(完整版)!

    在学习深度学习过程中很多讲的不够细致,这个讲的真的是透彻了,转载过来的,希望更多人看到(转自-张贤同学-公众号). 前言 本文翻译自 http://jalammar.github.io/illustr ...

  5. Paper Reading - Attention Is All You Need ( NIPS 2017 ) ★

    Link of the Paper: https://arxiv.org/abs/1706.03762 Motivation: The inherently sequential nature of ...

  6. [NLP] REFORMER: THE EFFICIENT TRANSFORMER

    1.现状 (1) 模型层数加深 (2) 模型参数量变大 (3) 难以训练 (4) 难以fine-tune 2. 单层参数量和占用内存分析 层 参数设置 参数量与占用内存 1 layer 0.5Bill ...

  7. 王树森Transformer学习笔记

    目录 Transformer Attention结构 Self-Attention结构 Multi-head Self-Attention BERT:Bidirectional Encoder Rep ...

  8. 学一学Transfomer

    017年,Google发表论文<Attention is All You Need>,提出经典网络结构Transformer,全部采用Attention结构的方式,代替了传统的Encode ...

  9. CVPR2020|3D-VID:基于LiDar Video信息的3D目标检测框架

    作者:蒋天园 Date:2020-04-18 来源:3D-VID:基于LiDar Video信息的3D目标检测框架|CVPR2020 Brief paper地址:https://arxiv.org/p ...

  10. Deformable 可变形的DETR

    Deformable 可变形的DETR This repository is an official implementation of the paper Deformable DETR: Defo ...

随机推荐

  1. Codeforces Round #713 (Div. 3) Person Editorial

    补题链接:Here 1512A - Spy Detected! 题意:找到唯一不同数的下标 复制数组然后比较 \(a_1\) int main() { ios_base::sync_with_stdi ...

  2. SpringCloud学习 系列十、服务熔断与降级(1-简介)

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...

  3. <vue 路由 5、动态路由-标签上传递参数>

    一.效果 在about页面点击"我的",路径里传入了参数zhangsan,在"我的"页面里接收传递过来的张三并展现出来.注:标签中传递参数写法 二.代码结构 注 ...

  4. 1 Englishi 词根

    1 ab  离去,相反, 不 (负能量的) abnormal abuse 2 anti  反对,相反 antiwar antiaging antiforeign antinoise 3 co-/col ...

  5. vue3常用 Composition API

    1.拉开序幕的setup 理解:Vue3.0中一个新的配置项,值为一个函数. setup是所有Composition API(组合API)" 表演的舞台 ". 组件中所用到的:数据 ...

  6. location对象的方法

    location.assign() 跟href一样,可以跳转页面(也称为重定向页面). location.replace() 替换当前页面,因为不记录历史,所以不能后退页面. location.rel ...

  7. echart自定义主题

    echart默认以canvas展示,放大会模糊,可以使用svg格式.

  8. OpenShift image registry 概述

    0. 前言 docker 镜像管理之 overlay2 最佳实践 中介绍了 image 的底层逻辑联合文件系统和分层结构. image 存储在 registry 中,对于不同平台使用 registry ...

  9. Mysql 中 not in 的查询优化

    本文为博主原创,转载请注明出处: 最近做性能优化时,通过开启 MySQL 的慢日志查询配置,发现 有一条慢sql,在这里记录下分析和优化的过程. 该慢 sql 如下: select id from f ...

  10. C# WPF:快把文件从桌面拖进我的窗体来!

    首发公众号:Dotnet9 作者:沙漠之尽头的狼 日期:202-11-27 一.本文开始之前 上传文件时,一般是提供一个上传按钮,点击上传,弹出文件(或者目录选择对话框),选择文件(或者目录)后,从对 ...