分词是将输入文本拆分为更小、更易于处理的部分的过程,这些部分被称为 token。token 可以是一个词或一个子词。例如 “Data” 和 “visualization” 各对应一个唯一的 token,而 “empowers” 则被拆分为两个 token。完整的 token 词表在训练模型之前就已确定:GPT-2 的词表包含 50,257 个唯一 token。在将输入文本拆分为具有不同 ID 的 token 之后,我们就可以从嵌入层获取它们的向量表示。
GPT-2 (small) 将词表中的每个 token 表示为一个 768 维向量;向量的维度取决于具体模型。这些嵌入向量存储在一个形状为 (50,257, 768) 的矩阵中,包含约 3900 万个参数!这个庞大的矩阵让模型能够为每个 token 赋予语义含义——在语言中用法或含义相似的 token 会被放在这个高维空间中相近的位置,而不相似的 token 则相距较远。
嵌入层还会对每个 token 在输入提示中的位置信息进行编码。不同模型使用各种不同的位置编码方法。GPT-2 从头训练自己的位置编码矩阵,将其直接集成到训练过程中。
最后,我们将 token 编码与位置编码相加,得到最终的嵌入表示。这种组合表示既捕捉了 token 的语义含义,也捕捉了它们在输入序列中的位置。
Transformer 处理的核心在于 Transformer 块,它由多头自注意力和一个多层感知机层组成。大多数模型由多个这样的块依次堆叠而成。token 表示在层层传递中不断演化,从第一个块到最后一个块,使模型能够对每个 token 建立精细而复杂的理解。这种分层方法产生了输入的高阶表示。我们所研究的 GPT-2 (small) 模型由 12 个这样的块组成。
自注意力机制使模型能够捕捉序列中 token 之间的关系,从而让每个 token 的表示都受到其他 token 的影响。多个注意力头让模型可以从不同角度考虑这些关系;例如,一个注意力头可能捕捉短距离的句法关联,而另一个则追踪更广泛的语义上下文。在接下来的部分中,我们将逐步讲解多头自注意力是如何计算的。
每个 token 的嵌入向量会被转换为三个向量:Query(查询)、Key(键)和 Value(值)。这些向量是通过将输入嵌入矩阵分别与 Q、K、V 对应的可学习权重矩阵相乘得到的。这里有一个网页搜索的类比,可以帮助我们建立对这些矩阵背后原理的直觉:
利用这些 QKV 值,模型可以计算注意力分数,这些分数决定了在生成预测时每个 token 应获得多少关注。
Query、Key 和 Value 向量会被拆分到多个头中——以 GPT-2 (small) 为例,是拆分为 12 个头。每个头独立处理嵌入的一部分,捕捉不同的句法和语义关系。这种设计便于并行学习多样的语言特征,增强模型的表示能力。
在每个头中,我们执行带掩码的自注意力计算。这种机制允许模型在关注输入相关部分的同时,防止访问未来的 token,从而实现序列生成。
模型使用带掩码的自注意力分数,将其与 Value 矩阵相乘,得到自注意力机制的最终输出。GPT-2 有 12 个自注意力头,每个头捕捉 token 之间不同的关系。这些头的输出被拼接起来,并通过一个线性投影。
在多个自注意力头捕捉到输入 token 之间的多样关系之后,拼接后的输出会经过多层感知机层,以增强模型的表示能力。MLP 块由两个线性变换组成,中间夹有一个 GELU 激活函数。
第一个线性变换将输入的维度扩大四倍,从 768 扩展到 3072。这个扩展步骤让模型能够将 token 表示投影到更高维的空间中,在那里捕捉原始维度下可能看不到的更丰富、更复杂的模式。
第二个线性变换再将维度缩减回原始的 768。这个压缩步骤将表示还原到易于处理的规模,同时保留扩展步骤中引入的有用的非线性变换。
与跨 token 整合信息的自注意力机制不同,MLP 独立地处理各个 token,只是将每个 token 表示从一个空间映射到另一个空间,从而丰富模型的整体容量。
在输入经过所有 Transformer 块处理后,输出会经过最后一个线性层,为 token 预测做好准备。该层将最终表示投影到一个 50,257 维的空间中,词表中的每个 token 都有一个对应的值,称为 logit。任何 token 都可能成为下一个词,因此这一过程让我们可以简单地按照各 token 成为下一个词的可能性对它们进行排序。然后我们应用 softmax 函数,将 logits 转换为总和为 1 的概率分布。这样我们就可以根据可能性对下一个 token 进行采样。
最后一步是从这个分布中采样生成下一个 token。temperature(温度)超参数在这一过程中扮演着关键角色。从数学上讲,这是一个非常简单的操作:模型输出的 logits 只需除以 temperature:
此外,采样过程还可以使用 top-k 和 top-p 参数进一步精细化:
通过调节 temperature、top-k 和 top-p,你可以在确定性与多样性输出之间取得平衡,根据具体需求调整模型的行为。