·阅读摘要:
本文于2017年6月发布,属于Transformer模型的开山之作,地位不言而喻。Transformer是继于MLP、RNN、CNN模型的又一大模型,且解决了RNN应用于长输入乏力的情况,随后提出的BERT、GPT都是基于Transformer。本文主要基于机器翻译任务来讲述Transformer,近年的论文证明其在图像、文本、音频、视频都可广泛应用。
·参考文献:
[1] Attention Is All You Need
论文链接:https://arxiv.org/abs/1706.03762
在文本分类领域中,主要使用Transformer模型的Encoder模型。Decoder属于生成模型,我们不用,但是也要认真拜读。
[0] 阅读本论文需要前置知识:
编码器-解码器(encoder-decoder) ⭐对于理解这篇文章非常重要
注意力机制(Attention) ⭐深入理解,会为神经网络任务提供一个思路
多层感知机(MLP)
残差连接(residual connection) ⭐为神经网络任务提供一个优化方法
LN与BN ⭐不同的正则化策略
位置编码(positional encoding) ⭐为文本编码提供新思路
由于本篇文章为论文阅读笔记,前置知识的介绍写在另外一篇博客:神经网络】MLP 编码器-解码器 注意力机制 残差连接。
[1] 摘要
比较好的序列转换模型都是基于CNN或RNN,然后使用注意力机制连接编码器和解码器。此论文提出了一种只使用注意力机制的简单模型,取名叫做Transformer,实验表明此模型的实验效果与泛化能力都很好。
【注一】:序列转换叫做Sequence-to-Sequence,机器翻译就是典型的S2S任务。
[2] 引言
1、RNN是前一个状态的输出放到下一个状态的输入中,序列性妨碍训练中的 并行 ,尤其是当序列越长的时候。
2、之后注意力机制开始被使用,在不考虑输入或输出序列距离的情况下对相关性进行建模,但都是结合RNN来做的。
3、Transformer,避免递归,完全依赖注意力机制来绘制输入和输出之间的相关性,支持并行训练。
【注二】:叙述逻辑环环相扣。主要说Transformer的并行能力。
[3] 相关工作
使用CNN想要关联起来较远位置的输入需要“卷”很多步,需要线性复杂度或者对数复杂度,Transformer可以在O ( 1 ) O(1)O(1)内关联两个任意位置的输入之间的相关性。
代价是降低了分辨率,Transformer使用了多头注意力(Multi-Head Attention)抵消了这一影响。
【注三】分辨率可理解为CNN的卷积核,Transformer类比到卷积层上就是卷积核的宽度为序列长度,这样丢失了精度,Transformer使用Multi-Head Attention(类比到CNN的多通道)弥补。
[4] 模型结构
论文提出的Transformer模型组合使用了:编码器-解码器结构、注意力机制(点积注意力机制、多头注意力机制、自注意力机制)、前馈神经网络、嵌入层、softmax、位置编码。
[4.1] 编码器
上图中,左边由N个层堆叠起来构成编码器。每个层有2个子层。
第一个子层是多头自注意力(Multi-Head Attention)层。随后使用了残差连接(residual connection)和层正则化(Layer Normalization)。
第二个子层是MLP层。随后使用了残差连接(residual connection)和层正则化(Layer Normalization)。
【注四】Layer Normalization与Batch Normalization不一样,下图源自李沐大神的视频。对于embedding层的三维输出(batch、seq、feature),Layer Normalization是黄色笔画的横着切,这样会把一个句子作为一个单位进行均值为0、方差为1的操作;比Batch Normalization蓝色笔画的效果要好。
[4.2] 解码器
解码器比编码器多了一个mask multi-head attention层。这是因为解码器需要有自回归性,解码器的输出是一个一个输出的,每次的输出要作为输入再进入解码器。这一层就是为了实现这一功能,让第t个时刻的输出只看前t-1个时刻的输入。
【注五】这里不理解。输出既然是一个一个产生,那么在t时刻输出再作为输入,直接拿过来用就好了,即使想用t+1时刻后的数据,应当还未生成啊?
[4.3] 注意力层【按比例点积注意力、自注意力、多头注意力】
按比例点积注意力(Scaled Dot-Product Attention)
这是Transformer模型中,实现注意力机制的基础模型,模型图如下:
自注意力(self-Attention)
非常好理解,就是自己算和自己的相关性,表现为Q,K,V都等于文本的embedding向量。
多头注意力(Multi-Head Attention)
把输入映射成h个低维的向量,然后经过按比例点积注意力(Scaled Dot-Product
Attention) 层后,再聚合成高维的向量。其中“映射”的操作,靠Linear神经网络完成,这样就拥有了可学习的参数。模型如下:
多头注意力可以类比到卷积神经网络的多通道。
[4.4] Feed Foward层
与RNN模型作对比,如下:
在RNN中,MLP是用来抽取句子的特征的,RNN需要前面时刻的输出,作为现在时刻的输入,具有序列性。
在Transformer中,MLP是对每个词(token / word)进行分别提取。因为词向量经过多头注意力层之后,每个词的向量已经对全局信息进行了抓取。
[4.5] 位置编码(positional encoding)层
到目前为止,模型对文本的序列性还没有提取。文章提出了一种简单的方法:
其中,pos为单词的Index,也就是seq_len中的索引,i为embedding_dim词向量的索引,d是embedding_dim值。
算出对应的位置编码后,我们直接加上原来的embedding层向量即可
文中提到使用了学习过的位置嵌入,发现与使用正弦余弦函数效果几乎相同。