7.5 语言模型头
我们必须介绍的 Transformer 最后一个组件是 语言模型头(language modeling head)。这里的“头”是指把预训练 Transformer 模型应用于各种任务时,在基础 Transformer 架构顶端添加的额外神经网络结构。语言模型头就是执行语言建模所需的结构。
回顾一下,从第 3 章的简单 n 元模型到第 6 章的前馈模型,语言模型都是词语预测器。给定一段词语上下文,它们会为每个可能的下一个词赋予一个概率。例如,如果前面的上下文是 “Thanks for all the”,而我们想知道下一个词是 “fish” 的可能性,就会计算:
语言模型能够为每一个可能的下一个词赋予这样的条件概率,从而给出整个词表上的概率分布。第 3 章的 n 元语言模型根据某个词与前面 个词共同出现的计数来计算其概率,因此上下文大小为 。对于 Transformer 语言模型,上下文大小就是 Transformer 上下文窗口的大小;正如前面所说,它可以从数十万词元一直扩展到数百万词元。

图 7.15 语言模型头:位于 Transformer 顶部的计算结构,它把最后一个 Transformer 层中词元 的输出嵌入 映射为词表 中所有词上的概率分布。
语言模型头的任务是接收每个词元 i 在最终 Transformer 层的输出,并用它预测位置 上即将出现的词。在推理时,我们只需对最后一个词元 N 运行这个模型头,用它预测位置 上的下一个词。[3] 图 7.15 展示了如何完成这项任务:取最后一层最后一个词元的输出(形状为 的 d 维输出嵌入),生成词表中所有词上的概率分布(我们会从中选取一个词来生成)。
图 7.15 中的第一个模块是线性层。它负责将最终块 L 在位置 N 上的输出词元嵌入 (因此形状为 ),投影为 逻辑值向量(logit vector),也称为分数向量;该向量会为词表 V 中的 个候选词各给出一个分数。因此,logit 向量 u 的维度为 。
这个线性层可以通过学习得到,但也很常见的做法是将其矩阵与嵌入矩阵 的转置绑定起来。回想一下,在 权重绑定(weight tying)中,我们让模型内两个不同矩阵使用同一组权重。因此,在 Transformer 的输入阶段,形状为 的嵌入矩阵把词表上的独热向量(形状为 )映射为嵌入(形状为 )。随后,在语言模型头中,嵌入矩阵的转置 (形状为 )执行反向映射:把嵌入(形状为 )映射回词表上的向量(形状为 )。在学习过程中, 会经过优化,以同时做好这两种映射。因此,我们有时把转置矩阵 称为 反嵌入层(unembedding layer),因为它执行的是这种反向映射。
softmax 层把 logits u 转换成词表上的概率 y。
我们可以利用这些概率做许多事情,例如为给定文本赋予概率。不过,最重要的用途是生成文本。下一节会介绍具体方法:反复从概率向量 y 中采样一个分量 ,并生成索引为 k 的词。

图 7.16 一个 Transformer 语言模型(仅解码器模型):堆叠多个 Transformer 块,将输入词元 映射为预测的下一词元 。
图 7.16 展示了针对单个词元 i 的完整堆叠架构。请注意,每个 Transformer 层的输入 ,都等于前一层的输出 。
结束之前还需要说明一个术语:你有时会看到,用于这种单向因果语言模型的 Transformer 被称为 仅解码器模型(decoder-only model)。这是因为,该模型大体相当于 Transformer 编码器—解码器模型的一半;第 13 章将介绍如何把完整的编码器—解码器模型用于机器翻译。(容易造成困惑的是,Transformer 最初提出时采用编码器—解码器架构;直到后来,人们才通过只使用原始架构中的解码器部分,确立了因果语言模型的标准范式。)
在训练时,语言模型头会在每个词元位置预测词语,而不只是最后一个位置。