博客阅读:图解Transformer(The Illustrated Transformer)
原文链接:https://jalammar.github.io/illustrated-transformer/
作者:Jay Alammar
目录
- 博客阅读:图解Transformer(The Illustrated Transformer)
前言
在之前的文章中,Attention成了深度学习模型中无处不在的方法,它是种帮助提升NMT(Neural Machine Translation) 的翻译效果的思想。在本篇博客中,我们解析下Transformer,该模型扩展Attention来加速训练,并且在特定任务上 transformer 表现比 Google NMT 模型还要好。然而,其最大的好处是可并行。实际上谷歌云推荐将Transformer作为云TPU的推导模型。现在我们将Transformer拆解开来看看它是如何工作的。
Transformer是在"Attention is All You Need"中提出的,其中的TF应用是Tensor2Tensor的子模块。哈佛的NLP团队专门制作了对应的PyTorch的指南说明。本文旨在简化难度,一步一步地解释其中的概念,希望有助于初学者更容易地理解。
Transformer 是一种基于 encoder-decoder 结构的模型:
在 Encoder 中,
- Input 经过 Embedding 后,进行 Positional Encoding
- 然后是 Multi-head Attention
- 再进行 Position-wise Feed Forward
- 每个子层之间做残差连接
在 Decoder 中,
- 如上图所示,也经过 Positional Encoding,Multi-head attention 和 FFN,子层之间也要做残差连接
- 但比 Encoder 多了一个 Masked Multi-head attention
- 最后要经过 Linear 和 Softmax 层,输出概率
1.整体结构(A High-Level Look)
我们先将整个模型视为黑盒,比如在机器翻译中,接收一种语言的句子作为输入,然后将其翻译成其他语言输出。
细看下,其中由编码组件、解码组件和它们之间的连接层组成。
编码组件是六层编码器首位相连堆砌而成,解码组件也是六层解码器堆成的。
编码器是完全结构相同的,但是并不共享参数,每一个编码器都可以拆解成以下两个字部分。
编码器的输入首先流过一个self-attention层,该层帮助编码器能够看到输入序列中的其他单词当它编码某个词时。后面,我们会细看self-attention的内部结构。
self-attention的输出流向一个前向网络,每个输入位置对应的前向网络是独立互不干扰的。
解码器同样也有这些子层,但是在两个子层间增加了attention层,该层有助于解码器能够关注到输入句子的相关部分,与 seq2seq model 的Attention作用相似。
图的引入(Bringing The Tensors Into the Picture)
现在,我们解析下模型最主要的组件,从vectors/Tensor开始,然后是它们如何流经各个组件们并输出的。
正如NLP应用的常见例子,先将输入单词使用embedding algorithm转成向量。