0.引言
在深入学习Transformer之前,先来学习一下这个模型的开篇之作。
Transformer模型最初是由Vaswani等人于2017年提出,主要应用于机器翻译任务。在机器翻译中,存在着长距离的依赖关系,即一个单词可能与句子中较远位置的单词存在关联。传统的循环神经网络(RNN)和长短时记忆网络(LSTM)在处理这种长距离依赖关系时可能遇到梯度消失或梯度爆炸的问题。
由于Transformer中引入了自注意力机制,可以同时考虑输入序列中所有的位置信息,而无需依赖于顺序处理,使得其在捕捉长距离依赖关系时有较好的表现效果。故而在之后的发展中在NLP中大显身手。后续学者又将这一模型引入到CV领域中。
1.What is Transformer
如上图所示为Transformer用于机器翻译时候的结构。可见,Transformer由6个Encoder(编码)和6个Decoder(解码)结构组成。
2.How it runs
①输入转化
Transformer 中单词的输入表示 x由单词 Embedding 和位置 Embedding 相加得到。
1.内容 Embedding
单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。
2. 位置 Embedding
Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息。Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:
故而,我们现在可以表述出Transformer的输入形式如下图所示。
②输入Encoder
将得到的单词表示向量矩阵传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C。单词向量矩阵用 X(n×d)表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。
③输入Decoder
将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
上Decoder 接收了 Encoder 的编码矩阵 C,然后首先输入一个翻译开始符 "<Begin>",预测第一个单词 "I";然后输入翻译开始符 "<Begin>" 和单词 "I",预测单词 "have",以此类推。
3.What does it contain
①self—attention
1.在计算self—attention时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V 正是通过 Self-Attention 的输入进行线性变换得到的。
2.Self-Attention 的输入用矩阵 X进行表示,则可以使用线性变阵矩阵 WQ, WK, WV 计算得到 Q, K, V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。
3.得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:
公式中计算Q乘以K的转置得到一个n*n的矩阵。表示单词之间的关系程度。
得到 QKT 之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1。得到 Softmax 矩阵之后可以和 V相乘,得到最终的输出 Z。
②Multi-Head Attention
多头自注意力机制其实就是多个self—attention组合而成,
从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入 X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵 Z。得到h和输出矩阵后,Multi-Head Attention将所有的Zconcat到一起,然后传入到一个linear层,得到最后的输出Z.
参考文献: