Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

7.5 语言模型头

我们必须介绍的 Transformer 最后一个组件是 语言模型头(language modeling head)。这里的“头”是指把预训练 Transformer 模型应用于各种任务时,在基础 Transformer 架构顶端添加的额外神经网络结构。语言模型头就是执行语言建模所需的结构。

回顾一下,从第 3 章的简单 n 元模型到第 6 章的前馈模型,语言模型都是词语预测器。给定一段词语上下文,它们会为每个可能的下一个词赋予一个概率。例如,如果前面的上下文是 “Thanks for all the”,而我们想知道下一个词是 “fish” 的可能性,就会计算:

P(fishThanks  for  all  the)P (f i s h | T h a n k s\; f o r\; a l l\; t h e)

语言模型能够为每一个可能的下一个词赋予这样的条件概率,从而给出整个词表上的概率分布。第 3 章的 n 元语言模型根据某个词与前面 n1n - 1 个词共同出现的计数来计算其概率,因此上下文大小为 n1n - 1。对于 Transformer 语言模型,上下文大小就是 Transformer 上下文窗口的大小;正如前面所说,它可以从数十万词元一直扩展到数百万词元。

图 7.15 语言模型头:位于 Transformer 顶部的计算结构,它把最后一个 Transformer 层中词元 NN 的输出嵌入 hNL\mathbf { h } _ { N } ^ { L } 映射为词表 VV 中所有词上的概率分布。

语言模型头的任务是接收每个词元 i 在最终 Transformer 层的输出,并用它预测位置 i+1i + 1 上即将出现的词。在推理时,我们只需对最后一个词元 N 运行这个模型头,用它预测位置 N+1N + 1 上的下一个词。[3] 图 7.15 展示了如何完成这项任务:取最后一层最后一个词元的输出(形状为 [1×d][ 1 \times d ] 的 d 维输出嵌入),生成词表中所有词上的概率分布(我们会从中选取一个词来生成)。

图 7.15 中的第一个模块是线性层。它负责将最终块 L 在位置 N 上的输出词元嵌入 hNLh _ { N } ^ { L }(因此形状为 [1×d][ 1 \times d ]),投影为 逻辑值向量(logit vector),也称为分数向量;该向量会为词表 V 中的 V|V| 个候选词各给出一个分数。因此,logit 向量 u 的维度为 [1×V][ 1 \times | V | ]

这个线性层可以通过学习得到,但也很常见的做法是将其矩阵与嵌入矩阵 E\mathbf { E } 的转置绑定起来。回想一下,在 权重绑定(weight tying)中,我们让模型内两个不同矩阵使用同一组权重。因此,在 Transformer 的输入阶段,形状为 [V×d][ | V | \times d ] 的嵌入矩阵把词表上的独热向量(形状为 [1×V][ 1 \times | V | ])映射为嵌入(形状为 [1×d][ 1 \times d ])。随后,在语言模型头中,嵌入矩阵的转置 ET\mathbf { E } ^ { T }(形状为 [d×V][ d \times | V | ])执行反向映射:把嵌入(形状为 [1×d][ 1 \times d ])映射回词表上的向量(形状为 [1×V][ 1 \times | V | ])。在学习过程中,E\mathbf { E } 会经过优化,以同时做好这两种映射。因此,我们有时把转置矩阵 ET\mathbf { E } ^ { T } 称为 反嵌入层(unembedding layer),因为它执行的是这种反向映射。

softmax 层把 logits u 转换成词表上的概率 y。

u=hNLET(7.47)\mathbf {u} = \mathbf {h} _ {N} ^ {L} \mathbf {E} ^ {T}\tag{7.47}
y=softmax(u)(7.48)\mathbf {y} = \operatorname{softmax} (\mathbf {u})\tag{7.48}

我们可以利用这些概率做许多事情,例如为给定文本赋予概率。不过,最重要的用途是生成文本。下一节会介绍具体方法:反复从概率向量 y 中采样一个分量 yky _ { k },并生成索引为 k 的词。

图 7.16 一个 Transformer 语言模型(仅解码器模型):堆叠多个 Transformer 块,将输入词元 wiw _ { i } 映射为预测的下一词元 wi+1w _ { i + 1 }

图 7.16 展示了针对单个词元 i 的完整堆叠架构。请注意,每个 Transformer 层的输入 xix _ { i } ^ { \ell },都等于前一层的输出 hi1h _ { i } ^ { \ell - 1 }

结束之前还需要说明一个术语:你有时会看到,用于这种单向因果语言模型的 Transformer 被称为 仅解码器模型(decoder-only model)。这是因为,该模型大体相当于 Transformer 编码器—解码器模型的一半;第 13 章将介绍如何把完整的编码器—解码器模型用于机器翻译。(容易造成困惑的是,Transformer 最初提出时采用编码器—解码器架构;直到后来,人们才通过只使用原始架构中的解码器部分,确立了因果语言模型的标准范式。)

Footnotes
  1. 在训练时,语言模型头会在每个词元位置预测词语,而不只是最后一个位置。