揭秘大模型:从原理到实战
上QQ阅读APP看书,第一时间看更新

2.3.1 Transformer的模型结构

Transformer是谷歌在2017年的论文“Attention is all you need”[3]中提出的,用于自然语言处理的各项任务,现在是谷歌云的张量处理单元(tensor processing unit,TPU)推荐的参考模型,也是OpenAI GPT系列大模型的基本结构。Transformer是一种强大的模型,能够完成并行处理、提取特征、优化机器翻译等任务。

Transformer是一种能够完成机器翻译任务的模型,它可以把一种语言转换成另一种语言。如果不考虑Transformer的内部结构,只看它的输入和输出,那么它的结构可以用图2-7来表示。

图2-7 将法文翻译成英文

打开Transformer的黑盒,就可以看到Transformer是由多个编码器(encoder)和解码器(decoder)堆叠而成的,如图2-8所示。可以看到左边是由多层编码器构成的,右边是由多层解码器构成的。

图2-8 Transformer由多个编码器和解码器构成

继续将编码器和解码器拆开,可以看到完整的Transformer结构,如图2-9所示。编码器包含一个多头注意力(multi-head attention)层,它由多个自注意力(self-attention)单元组成。解码器则包含两个多头注意力层,一个用于编码器-解码器的注意力,另一个用于自注意力。在每个多头自注意力层的上方,还有一个加法和归一化(add & norm)层,加法表示使用残差连接来防止网络退化,归一化表示使用层归一化来对每一层的激活值进行规范化。

图2-9 完整的Transformer结构

图2-8只给出了解码器的目标输出,没有显示解码器的目标输入。而图2-9则同时显示了目标输入(嵌入层的输入)和目标输出(Softmax层的输出),这是为了统一训练和预测的过程。在模型训练时,目标输入是已知的翻译结果(比如将法文翻译成英文时的目标是英文),而在模型训练完成后进行预测时,目标输入的第一个词是特殊的开始标记(如<|im_start|>)。关于这个过程的更多细节,将在2.3.5节中详细介绍。

为了能够让读者更好地理解Transformer的模型原理,在接下来的内容中,将用具体的代码来实现它。我们使用的是TensorFlow 2.0框架。

代码清单2-1 导入TensorFlow 2.0

    from __future__ import absolute_import, division, print_function
    import tensorflow_datasets as tfds
    import tensorflow as tf
    import tensorflow.keras.layers as layers
    import time
    import numpy as np
    import matplotlib.pyplot as plt

下面用一个简单的例子来说明Transformer的基本工作流程。我们还是使用前面的例子,把法文的“Je suis étudiant”翻译成英文。

(1)得到输入句子中每个单词的向量表示x,它是由词嵌入(word embedding)向量和位置嵌入(position embedding)向量相加而得到的。

(2)把输入句子的词嵌入矩阵X作为编码器的输入,经过N层编码器的处理,得到了句子中每个单词的编码信息矩阵C,如图2-10所示。矩阵X的维度是n × d,其中n是单词的个数,d是词嵌入的维度。

图2-10 编码器的处理过程

(3)把编码器输出的编码矩阵C作为解码器的输入,解码器根据编码矩阵C和已经翻译过的单词来生成下一个单词,如图2-11所示。

图2-11 经过解码器后的输出

从图2-11可知,解码器首先从编码器获取编码矩阵,并以“<Begin>”作为起始符,预测出第一个单词“I”;然后将“<Begin>”和“I”作为输入,预测出第二个单词“am”。以此类推,生成完整的句子。这就是Transformer的基本工作流程,下面详细介绍其中的各个组成部分。