目录
简介
这篇博客的主要内容是对谷歌提出的transformer 进行论文解读,包含算法复杂度的分析。对应的论文是 “Attention is all you need", 链接如下 https://arxiv.org/pdf/1706.03762.pdf 。
选择这篇论文的原因有三点。
1. 这篇论文达到了 new the state-of-the-art result, 应该是现在做神经翻译里最好的BLUE结果。
2. 这篇文章提出的算法另辟蹊径,没有采取大热的RNN/LSTM/GRU的结构,而是使用attention layer 和全连接层,达到了较好的效果,并且解决了 RNN/LSTM/GRU 里的long dependency problem 。
3. 这篇文章的算法解决了传统RNN 训练并行度的问题,并降低了计算复杂度。
接下来会按照 "Attention is all you need" 论文中的逻辑, 逐个模块介绍, 希望能对大家有所帮助。原文写在我的笔记上。
https://shimo.im/docs/gmRW4WV2mjoXzKA1/
模型结构
Fig.1 The transformer architecture
上面这个Fig.1 就是谷歌提出的transformer 的架构。这其中左半部分是 encoder 右半部分是 decoder.
Encoder: 这里面有 N=6 个 一样的layers, 每一层包含了两个sub-layers. 第一个sub-layer 就是多头注意力层(multi-head attention layer) 然后是一个简单的全连接层。 这里还有一个残差连接 (residual connection), 在这个基础上, 还有一个layer norm. 这里的注意力层会在下文详细解释。
Decoder: 这里同样是有六个一样的Layer是,但是这里的layer 和encoder 不一样, 这里的layer 包含了三个sub-layers, 其中有 一个self-attention layer, encoder-decoder attention layer 最后是一个全连接层。 前两个sub-layer 都是基于multi-head attention layer. 这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。 比如训练时, 第一个单词是不能参考第二个单词的生成结果的。 Masking就会把这个信息变成0, 用来保证预测位置 i 的信息只能基于比 i 小的