Transformer
Transformer 是一种 Seq2seq 模型,即 input a sequence, output a sequence. 应用包括语音识别(输入语音,输出文本)、机器翻译(输入一种语言文本,输出另一种语言文本)、语言翻译(输入一种语言的语音,输出是另一种语言的文本,如字幕)、语音合成(输入一种语言文本,输出另一种语言的语音)、聊天机器人(对话)等,这些都可以看作 QA(Question & Answering)问题,都可以使用 Seq2seq 模型解决。
Seq2seq
一般的 Seq2seq 模型的一般框架
1 | input sequence -> Encoder -> Decoder -> output sequence |
如 Transformer 就是该模型的一种。李宏毅老师的课件:Transformer
Self-attention
self-attention 中文是自注意力,它对于输入的向量输出相同数量的向量。
如上图所示,
这里,
而
其实,Self-attention 能够利用矩阵简洁表示如下,这也是其并行化计算的原因
这里
在实际使用中,常常采用 multi-head self-attention,如下图所示
与上面的 self-attention 类似,先通过
那计算
注意,这里只需要计算相同头(如
最后,
这样,就从
CNN 和 Self-attention 的关系:On The Relationship Between Self-attention And Convolutional Layers
Encoder
输入一排向量,输出另一排同样长度的向量。在 Transformer 中的 Encoder 里用的是 Self-attention.
BERT 是仅仅使用 Transformer 的 Encoder 构建起来的。
Encoder 是由
Decoder
输入是 Encoder 的输出向量和一个 special token (标识开始 BEGIN)。
GPT-2, GPT-3 是仅仅使用 Transformer 的 Decoder 构建起来的,属于 Unsupervised Pre-training model。 在 300 billion tokens of text 上训练得到,它的目标(能够做)Predict the next word.
Decoder 与 Encoder 的区别是调整为 masked multi-head attention,并在中间增加 cross attention,引入 encoder 的信息。而 masked multi-head attention 是因为后面的单词或向量还未得到,不能像 encoder 里的 multi-head attention 那样使用全面的向量的信息,只能使用已经得到的向量的信息。
在 cross attention 中,对于 decoder 中 masked multi-head attenion 得到的每一个
这里映射
代码实现
TensorFlow: tensor2tensor
pyTorch: The Annotated Transformer