- 本次论文精读的主要内容是解析Transformer架构。
- 强烈建议先弄懂这篇博文:http://t.csdn.cn/VdJpK
- 主要的序列转录模型是基于复杂的循环或卷积神经网络,其中包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构,Transformer,完全基于注意力机制,完全免除了循环和卷积结构。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具有并行性,需要的训练时间也大大减少。我们的模型在WMT 2014英语-德语翻译任务中达到了28.4 BLEU,比现有的最佳结果(包括以前报告集合)提高了超过2 BLEU。在WMT 2014英语到法语的翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的单模型最先进的BLEU评分41.0,这只是文献中最好模型训练成本的一小部分。
- BLEU score:机器翻译的一种衡量标准。
- 在这项工作中,我们提出了Transformer,这是第一个完全基于注意力的序列转录模型,用多头自注意力取代了编码器-解码器架构中最常用的循环层。
- 对于翻译任务,Transformer的训练速度比基于循环层或卷积层的架构快得多。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们都达到了一个新的艺术境界(state of the art)。在前一项任务中,我们最好的模型甚至优于所有以前报告的集合。
- 我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的受限注意力机制,以有效地处理大量输入和输出,如图像、音频和视频。使生成不那么连续是我们的另一个研究目标。(作者的预见性,从现在看来,的确如此!)
- 作者首先“痛批”了循环神经网络存在并行性较差的问题,也指出之前的工作都是注意力机制与循环网络结合使用的。
- 而在这项工作中,我们提出了Transformer,这是一种避免循环结构的模型架构,完全依赖于注意力机制来绘制输入和输出之间的全局依赖关系。Transformer允许明显更高的并行化,可以达到翻译质量的新水平。
Self-attention,有时也称为内部注意力,是一种将单个序列的不同位置联系起来的注意力机制,以便计算序列的表示,应用广泛。
端到端memory network基于循环注意力机制,而不是序列对齐的循环,在简单语言问题回答和语言建模任务中表现良好。
然而,据我们所知,Transformer是第一个完全依靠自注意力来计算输入和输出表示的转录模型,而不使用序列对齐的RNN或卷积网络。
Self-attention的详细解释请看这篇博客:http://t.csdn.cn/cCQhr
Seq2seq是具有 encoder-decoder的网络架构。
Transformer也遵循这种总体架构,如下图所示,这看起来很复杂,左边是Encoder,右边是Decoder。
首先我们来分析Transformer中的Encoder,如下图所示。
- 首先,我们把输入的Inputs进行Input Embedding生成input vector。
- 然后加上由Positional Encoding生成的Positional vector(提供位置信息)作为Multi-Head Attention的输入。
Multi-Head Attention是为了学习不同类型的相关性,结构如上图所示,和卷积网络中多通道处理类似。
- 如上图所示,经过Self-attention处理后,首先进行一个残差连接的操作,然后进行一个Layer Normalization。
- 再经过一个fully connected feed-forward network,也就是个MLP啦,然后相似的进行一个残差连接的操作,然后进行一个Layer Normalization。
- 论文中的Add & Norm就是残差连接和Layer Normalization。
- 当然像Encoder这样的block or layer可以重复堆叠,原论文用了6个相同的layer进行堆叠,Decoder也是如此。
我们以语音识别为例,分析Decoder是如何产生输出的。
- 我们通常使用一个特殊的token和Encoder的输出作为Decoder的输入,这个token就是BOS(begin of sentence),表示我们要开始预测了。
- 经过Decoder以及softmax,我们就可以得到第一个预测结果。
- 得到第一个预测结果之后,我们把它也加入到Decoder的输入中,用来预测下一个结果,这就是自回归(Autoregressive),也就是说把上一轮的预测结果加入到原始的输入中构成下一轮预测的输入。如此反复,直到预测完成。如下图所示,下一轮预测的输入中就包含了上一轮预测得到的“机”。
再举一个例子加深理解吧,预测的第二结果是“器”,这样下一轮预测就会把“器”加入输入行列之中了。如下图所示。
- 我们先忽略来自Encoder的输入,观察发现在Decoder的结构中有一个特殊的Masked Self-attention。
- 因为Decoder的输出是一个一个产生的,所以如下图所示,在计算b2时,不再像一般的Self-attention一样考虑a1、a2、a3、a4,而是只考虑已有的结果a1、a2,因为a3、a4并不存在啊,是由待预测生成的哦。
- 总的来说,当前的预测只考虑预测之前的input vector之间的attention score。所以也就是Masked。
- sentence的长度怎么确定呢,我们可以弄一个特殊的标志代表预测终止,就像EOS(end of sentence)。
- 否则,模型就会never stop,一直“说”下去。
说完了encoder和decoder,接下来我们看看他俩是怎么“互动”的。
如下图所示,encoder的输出提供k、v,decoder提供q计算注意力得分。
如此反复,下图是第二个字的预测过程。
- 模型训练的目的是minimize cross entropy ,即最小化输出与Ground truth之间的交叉熵。
- Teancher Forcing:using the ground truth as input.
- 模型的评估指标是:BLEU score
- 为了避免模型在预测的过程中有“一步错,步步错”的现象,因为Transformer是一个一个预测的,我们可以使用Scheduled Sampling,故意给模型一些错误信息学习,使模型尽量不会出现“一步错,步步错”的结果哈~