之前我在这篇语言模型(五)—— Seq2Seq、Attention、Transformer学习笔记中说过要对Transformer来一个抠细节的笔记,今天它来了。由于大部分内容在上文中已有过系统地介绍,本篇笔记将侧重点放在各个环节中一些重要的细节中,当然也会尽量按照主线流程来展开。欢迎食用。
全局视角
在语言模型(五)—— Seq2Seq、Attention、Transformer学习笔记中,我们已经看到过这样的全局视角,这里引述一小段过来,以便在接下来的探索中不迷失:
在Transformer中,我们仍然能够看见他其实也是由传统的Encoder-Decoder演化而来,还是以机器翻译为例,大致的结构图还是与之前一样,其中Encoders和Decoders 部分都是由6层Encoder或Decoder堆叠而成(也可以改的更多层):
基础版 Encoder = Self-Attention + FFN
每一个Encoder结构我们称之为一个Encoder Block。它的内部结构如下:

如语言模型(五)—— Seq2Seq、Attention、Transformer学习笔记中所讲,Encoder Block由Self-Attention和一个FFN组成。这里需要再次强调一下Self-Attention与传统Sequence to Sequence 中Attention(称之为Encoder-Decoder Attention)的不同:
Encoder-Decoder Attention中是由Decoder作为Query来Attention Encoder中的隐藏态,是一个序列对另一个序列的Attention;而Self-Attention则是在一个序列样本的上下文词之间相互的Attention。
比如说机器翻译中的指代问题,翻译以下句子时
“it”
能Self-Attention到"animal"
。而原先,可能只是”动物“
Attention到"animal"
。这便是最大的区别。”
The animal didn't cross the street because it was too tired