Attention is all you need -- 阅读笔记

        这篇文章是2017年发表在NIPS会议上的论文,也是Transformer的开山之作。最先应用是在NLP领域的机器翻译任务上,由于其简单的结构、强悍的表现,经过几年的发展,越来越多的领域开始使用基于Transformer的深度学习网络。下面是我自己的一点学习笔记,记录下来方便以后复习。(中间有很多是在原文的基础上进行翻译的,有不准确的地方希望大家见谅,也希望大家不吝指正)

论文链接:Attention is All you Need (nips.cc)

模型代码:https://github.com/ tensorflow/tensor2tensor(代码链接在原文的第7个章节)

Abstract

        目前主流(2017年以前)主流的序列转换模型基于复杂的循环或卷积神经网络,其中包含编码器和解码器。性能表现最好的模型还通过使用注意力机制将编码器和解码器连接起来。我们提出一种新的简单的网络架构——Transformer,仅仅使用注意力机制,完全抛弃了循环和卷积结构。在两个机器学习任务上的实验表明,这些模型在质量上优于其他模型,同时具有更强的并行性更少的训练时间。我们的模型在2014年的WMT中英语转法语的翻译任务中达到了28.4的BLEU分数,比现有的最好的结果提高了2BLEU分数。在WMT 2014英法翻译任务中,我们的模型在8个gpu上进行3.5天的训练后,建立了新的单模型最先进的BLEU得分为41.8,这只是文献中最佳模型训练成本的一小部分。我们通过将Transformer成功地应用于具有大量和有限训练数据的英语选区解析,证明了Transformer可以很好地推广到其他任务。

Introduction

        在引言这一部分,作者介绍的很简单,主要是说明了传统的循环模型在处理序列数据时的缺点以及Transformer在处理序列数据的优点。

        循环模型的缺点:循环模型在处理序列时根据输入和输出序列的符号位置进行运算,根据时间序列一步一步的进行运算,每一步的隐藏状态h_t都是上一步隐藏状态h_{t-1}和位置信息的函数。简单来说,就是循环模型每进行一步都需要对上一步计算完成,这样影响了序列信息处理的并行性,也因此产生了一个问题:无法解决长时依赖。

        Transformer的优点:Transformer完全基于注意力机制,构建了一种多头注意力机制(Multi-Head Attention)层,注意力机制在允许建模依赖性,不考虑元素在序列中的距离,即可以实现全局的依赖检测,解决了传统循环模型的长时依赖问题。

Model Architecture

        下图是Transformer的架构图,包含两个部分:Encoder和Decoder。

Attention is all you need -- 阅读笔记_第1张图片 图1 Transformer的结构图

        上图中的Encoder和Decoder旁边都有一个N\times的标记,这个N代表的是Encoder和Decoder块的个数,原文中给的是N=6,即Encoder和Decoder以完全相同的方式堆叠6次。

Encoder

        首先是Encoder Block。它的输入是一个一个的单词,使用Input Embedding将输入词向量转换成一维的词向量表示(这里不做过多解释了,本身不是做NLP方向的,读这篇文章是为了了解Transformer的基本结构)。经过Embedding后,为输入向量添加位置编码(Positional Encoding),在原文中,使用sincos函数进行位置编码,公式如下所示:

PE_{(pos,2i)}=sin(pos/10000^{2i/model})

PE_{(pos,2i+1)}=cos(pos/10000^{2i/model})

其中i表示维度,pos表示位置。也就是说,位置编码的每个维度都对应一个正弦信号(这一段是直接翻译的)。

        进入到Transformer的Encoder模块,从图中可以看到,它主要有两个子层:Multi-Head Attention和Feed Forward层,辅以Layer Norm以及残差网络的跳跃连接。其中,最核心的是文章中使用了多头注意力(Multi-Head Attention)机制。

Dot-Product Attention

        多头注意力机制是将单个注意力层(Head)经过堆叠得到的,在Transformer中,这里借计算机视觉中关于Transformer中Self-Attention解释的一张图片进行说明。假设将输入序列X经过Input Embedding转换成维度为n*d的向量集合(x_1,x_2,...,x_n),其中n表示序列中元素的个数,d表示每一个元素经过Embedding后的向量长度。自注意的目标是通过编码每个实体的全局上下文信息来捕获n个实体之间的交互关系。为了得到n个元素之间的关系

Attention is all you need -- 阅读笔记_第2张图片

 

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