您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
transformer模型详解
 
作者:谷歌大脑团队
  16852  次浏览      16
 2019-10-12
 
编辑推荐:

本文主要讲解了抛弃之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用Attention。希望对您的学习有所帮助。
本文来自网络,由火龙果软件刘琛编辑推荐

论文综述:

Attention Is All You Need这篇论文主要介绍了一种新的机器翻译模型,该模型开创性的使用了很多全新的计算模式和模型结构。综合分析了现有的主流的nlp翻译模型的即基于CNN的可并行对其文本翻译和基于RNN的LSTM门控长短期记忆时序翻译模型,总结了两个模型的优缺点并在此基础上提出了基于自注意力机制的翻译模型transformer,transformer模型没有使用CNN和RNN的方法和模块,开创性的将注意力机制作为编解码器的核心构建执行翻译操作。

最终该模型在统一语言数据集下取得了最佳的bleu值,取得了翻译模型中的最优结果。transformer模型的提出不仅仅提升了现阶段机器翻译的准确率,还为自然语言处理的其他领域贡献了全新的解决方案,基于transformer模型的encoder结构创造出了nlp领域基于文本预处理模型的一大神器BERT模型。基于BERT模型自然于亚处理的其他方面也取得了长足的进步。

自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型。传统的基于RNN的Seq2Seq模型难以处理长序列的句子,无法实现并行,并且面临对齐的问题。但是依旧收到一些潜在问题的制约,神经网络需要能够将源语句的所有必要信息压缩成固定长度的向量。这可能使得神经网络难以应付长时间的句子,特别是那些比训练语料库中的句子更长的句子;每个时间步的输出需要依赖于前面时间步的输出,这使得模型没有办法并行,效率低;仍然面临对齐问题。

再然后CNN由计算机视觉也被引入到deep NLP中,CNN不能直接用于处理变长的序列样本但可以实现并行计算。完全基于CNN的Seq2Seq模型虽然可以并行实现,但非常占内存,很多的trick,大数据量上参数调整并不容易。

本篇文章创新点在于抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用Attention。文章的主要目的在于减少计算量和提高并行效率的同时不损害最终的实验结果。

主要内容:

attention机制的基本概念:

attention的定义:

Attention用于计算"相关程度",例如在翻译过程中,不同的英文对中文的依赖程度不同,Attention通常可以进行如下描述,表示为将query(Q)和key-value pairs映射到输出上,其中query、每个key、每个value都是向量,输出是V中所有values的加权,其中权重是由Query和每个key计算出来的,计算方法分为三步:

第一步:计算比较Q和K的相似度,用f来表示:

第二步:将得到的相似度进行Softmax操作,进行归一化:

第三步:针对计算出来的权重,对V中所有的values进行加权求和计算,得到Attention向量:

在本模型中Q和K的函数计算是使用点积的方式,也可以使用相加联结等针对向量的操作,在这里使用点积在遇到大规模的向量时运算的效率会比采用相加注意力机制高,但点积操作会使得算法的空间效率高,当面对大规模向量的时候会除以一个附加项来放缩运算结果这样可以极大程度上提升收敛速度。

上图展示了计算attention的基本过程,其中的mask操作针对与decoder的self-attention机制,由于在生成阶段所以这里的attention计算只能算当前单词之前的值,不能够额外的计算之后的attention的值,其他的运算都是基于QKV三个向量。

数据预处理:

在自然语言处理中为了运算和表示的方便这里会引入词编码体系word embedding,一般采用word2vec模型,经过这个模型各种语言的单词将会转码为一个固定长度的向量,并且相似或有关联的单词会非常的接近。如下图的例子所示:

可以看到数字集中在一起。这里的可视化词向量经过了降维,在本身维度下整个单词体系的划分会表现的更加完美。

将词编码输入模型,模型首先通过线性变化转化出3个向量也就是之前说的QKV向量,接下来完成上述attention机制的运算后将结果与V向量加权求和,得到这个单词基于整个句子其他单词的attention向量。

Multi-Head Attention

Multi-Head Attention就是把Scaled Dot-Product Attention的过程做H次,然后把输出Z合起来。论文中,它的结构图如下:

其结构就是将QKV向量经过线性变化转化为不同的向量,将多次点积attention并行同时计算,将结果联结为一个矩阵。其目的是为了尽可能多的去表征句子的语义关系,学习到尽可能多的语义表达,其操作的过程有些类似于卷积操作,是特征提取的一种方式。

Transformer模型的结构:

2.1、Position Embedding位置编码:

由于模型没有使用卷积操作和基于时序的RNN模型,所以模型无法学习到句子的序列关系,这将使得这个模型只是一个词袋,单词在句子中的位置并不会对attention计算的结果产生任何影响。为了在模型中增加位置编码的信息,引入了位置编码机制。

这里每个分词的position embedding向量维度也是 , 然后将原本的input embedding和position embedding加起来组成最终的embedding作为encoder/decoder的输入。其中position embedding计算公式如下:

公式中 pos 表示位置index, i 表示dimension index。

Position Embedding本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google选择前述的位置向量公式的一个重要原因是,由于我们有:

这表明位置p+k的向量可以表示成位置p的向量的线性变换,这提供了表达相对位置信息的可能性。

2.2、Position-wise Feed-forward Networks前馈网络全连接

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出:

其中每一层的参数都不同。

2.3、Encoder编码器

编码器在transformer模型中一共6层,其中每层有两个子层。

第一个子层是multi-head self-attention mechanism,用来计算输入的self-attention。

第二个子层是简单的全连接网络。在每个sub-layer我们都模型了残差网络,每个sub-layer的输出都是:

2.4、Decoder解码器

解码器在transformer模型中也是6层,但解码器有三个子层:

第一个是Masked multi-head self-attention,也是计算输入的self-attention,但是因为是生成过程,因此在时刻 i 的时候,大于 i 的时刻都没有结果,只有小于 i 的时刻有结果,因此需要做Mask

第二个sub-layer是全连接网络,与Encoder相同

第三个sub-layer是对encoder的输入进行attention计算。

同时Decoder中的self-attention层需要进行修改,因为只能获取到当前时刻之前的输入,因此只对时刻 t 之前的时刻输入进行attention计算,这也称为Mask操作。

2.5、The Final Linear and Softmax Layer全连接输出层

将Decoder的堆栈输出作为输入,从底部开始,最终进行word预测。

实验结果与结论:

总体而言transformer模型在各项数据集上都取得了及其出色的结果,bleu值都创造了新的记录。就模型而言,transformer及其出色的解决了了长距离依赖。

可以看出自注意力机制学到了make...more difficult这个短语。

可以看到自注意力机制很好的学习到了句子的语义关系和语法结构。

总结与分析

这篇论文主要介绍了基于自注意力机制的transformer机器翻译模型。这个模型最大的特点在与新颖的模型结构和前卫的运算技巧,将attention机制运用到了极致。在人脑翻译的过程中也是基于词意、词性以及句子的结构来翻译。由此可以发现attention机制和人脑的翻译过程非常的类型。我们在浏览一个待翻译的句子时虽然要顺序阅读,但整个句子的所有单词都在我们的掌控之中,甚至有些时候我们可以忽略一些结构找到句子的主干成分。那么基于这个特征RNN的翻译过程由于过于依赖前一个单词以及LSTM对于过长句子的信息丢失就显得并不符合人的生理特征。

虽然transformer在翻译上表现十分抢眼但它是非图灵完备的,在很多简单的字符处理领域并没有一些简单的基础模型表现出色,例如字符串的复制等操作。但谷歌大脑团队针对这个问题提出了升级版的transformer模型Universal Transformer。Universal Transformer 和 Transformer 一样地一次同时处理所有的符号,但 Universal Transformer 接下来会根据自我注意力机制对每个符号的解释做数次并行的循环处理修饰。Universal Transformer 中时间并行的循环机制不仅比 RNN 中使用的串行循环速度更快,也让 Universal Transformer 比标准的前馈 Transformer 更加强大。Universal Transformer又将翻译质量bleu提升了0.9也就是提升了50%。

Transformer模型的提出不仅仅为机器翻译创造了刚好的解决方案基于encoder模块的堆叠谷歌大脑团队又提出了一种全新的文本预处理模型BERT。以BERT模型为预处理模型设计出的11个模型在nlp的11个领域全部刷新了最佳的成绩。可见transformer是一个开创性的模型。

项目测试

针对transformer模型的项目源码我进行了基本的测试。正值一个正在进行的离线翻译的项目,我基于transformer跑出了一些模型并对模型进行了剪枝量化压缩等操作并完成了安卓端移值。测试的过程中我发现transform模型非常依赖良好的训练数据集。

测试时的正确率走势

最终得到的ckpt模型与我转换的pb模型。

transformer模型的项目结构图(TensorBoard查看的)

   
16852 次浏览       16
相关文章

基于图卷积网络的图深度学习
自动驾驶中的3D目标检测
工业机器人控制系统架构介绍
项目实战:如何构建知识图谱
 
相关文档

5G人工智能物联网的典型应用
深度学习在自动驾驶中的应用
图神经网络在交叉学科领域的应用研究
无人机系统原理
相关课程

人工智能、机器学习&TensorFlow
机器人软件开发技术
人工智能,机器学习和深度学习
图像处理算法方法与实践