LLM 课程文档
Transformer 架构
并获得增强的文档体验
开始使用
Transformer 架构
在前面的章节中,我们介绍了通用的 Transformer 架构,并探讨了这些模型如何解决各种任务。现在,让我们仔细看看 Transformer 模型的三种主要架构变体,并了解何时使用每一种。然后,我们研究了这些架构如何应用于不同的语言任务。
在本节中,我们将更深入地探讨 Transformer 模型的三种主要架构变体,并了解何时使用每一种。
请记住,大多数 Transformer 模型使用以下三种架构之一:仅编码器 (encoder-only)、仅解码器 (decoder-only) 或编码器-解码器 (encoder-decoder,又称 sequence-to-sequence)。了解这些差异将帮助您为特定任务选择合适的模型。
编码器模型
编码器模型仅使用 Transformer 模型的编码器部分。在每个阶段,注意力层可以访问初始句子中的所有单词。这些模型通常被描述为具有“双向”注意力,并且通常被称为自编码模型。
这些模型的预训练通常围绕以某种方式破坏给定的句子(例如,通过掩盖其中的随机单词),并让模型找到或重建初始句子。
编码器模型最适合需要理解整个句子的任务,例如句子分类、命名实体识别(以及更普遍的词语分类)和抽取式问答。
正如我们在《🤗 Transformers 如何解决任务》中所看到的,像 BERT 这样的编码器模型擅长理解文本,因为它们可以双向地查看整个上下文。这使得它们非常适合那些理解整个输入非常重要的任务。
这类模型的代表包括:
解码器模型
解码器模型仅使用 Transformer 模型的解码器部分。在每个阶段,对于给定的单词,注意力层只能访问句子中位于它之前的单词。这些模型通常被称为自回归模型。
解码器模型的预训练通常围绕着预测句子中的下一个单词。
这些模型最适合涉及文本生成的任务。
像 GPT 这样的解码器模型旨在通过一次预测一个 token 来生成文本。正如我们在《🤗 Transformers 如何解决任务》中探讨的那样,它们只能看到之前的 token,这使它们非常适合创造性文本生成,但不太适合需要双向理解的任务。
这类模型的代表包括:
现代大型语言模型 (LLM)
大多数现代大型语言模型 (LLM) 使用仅解码器架构。这些模型在过去几年中在规模和能力上都取得了显著增长,一些最大的模型包含了数千亿个参数。
现代 LLM 通常分两个阶段进行训练:
- 预训练:模型在海量文本数据上学习预测下一个 token。
- 指令微调:对模型进行微调,以使其遵循指令并生成有用的响应。
这种方法使得模型能够在广泛的主题和任务上理解和生成类似人类的文本。
现代 LLM 的关键能力
基于现代解码器的 LLM 展现了令人印象深刻的能力:
能力 | 描述 | 示例 |
---|---|---|
文本生成 | 创建连贯且与上下文相关的文本 | 撰写文章、故事或电子邮件 |
摘要 | 将长文档压缩成较短的版本 | 创建报告的执行摘要 |
翻译 | 在不同语言之间转换文本 | 将英语翻译成西班牙语 |
问答 | 为事实性问题提供答案 | “法国的首都是哪里?” |
代码生成 | 编写或补全代码片段 | 根据描述创建函数 |
推理 | 逐步解决问题 | 解决数学问题或逻辑谜题 |
少样本学习(Few-shot learning) | 从提示中的几个例子中学习 | 在仅看到 2-3 个例子后进行文本分类 |
您可以通过 Hub 上的模型仓库页面直接在浏览器中体验基于解码器的 LLM。这是一个使用经典 GPT-2(OpenAI 最好的开源模型!)的例子。
序列到序列模型
编码器-解码器模型(也称为序列到序列模型)使用 Transformer 架构的两个部分。在每个阶段,编码器的注意力层可以访问初始句子中的所有单词,而解码器的注意力层只能访问输入中位于给定单词之前的单词。
这些模型的预训练可以有多种形式,但通常涉及重建一个被以某种方式破坏的句子(例如,通过掩盖随机单词)。T5 模型的预训练包括将随机的文本片段(可能包含多个单词)替换为单个特殊的掩码 token,然后任务是预测该掩码 token 所替代的文本。
序列到序列模型最适合围绕根据给定输入生成新句子的任务,例如摘要、翻译或生成式问答。
正如我们在《🤗 Transformers 如何解决任务》中所看到的,像 BART 和 T5 这样的编码器-解码器模型结合了两种架构的优点。编码器提供了对输入的深度双向理解,而解码器则生成适当的输出文本。这使得它们非常适合将一个序列转换为另一个序列的任务,如翻译或摘要。
实际应用
序列到序列模型擅长于需要将一种形式的文本转换为另一种形式同时保留其含义的任务。一些实际应用包括:
应用 | 描述 | 示例模型 |
---|---|---|
机器翻译 | 在不同语言之间转换文本 | Marian, T5 |
文本摘要 | 为长文本创建简洁的摘要 | BART, T5 |
数据到文本生成 | 将结构化数据转换为自然语言 | T5 |
语法纠错 | 修正文本中的语法错误 | T5 |
问答 | 根据上下文生成答案 | BART, T5 |
这是一个用于翻译的序列到序列模型的交互式演示:
这类模型的代表包括:
选择正确的架构
当处理特定的 NLP 任务时,您如何决定使用哪种架构?这里有一个快速指南:
任务 | 建议架构 | 示例 |
---|---|---|
文本分类(情感、主题) | 编码器 | BERT, RoBERTa |
文本生成(创意写作) | 解码器 | GPT, LLaMA |
翻译 | 编码器-解码器 | T5, BART |
摘要 | 编码器-解码器 | BART, T5 |
命名实体识别 | 编码器 | BERT, RoBERTa |
问答(抽取式) | 编码器 | BERT, RoBERTa |
问答(生成式) | 编码器-解码器或解码器 | T5, GPT |
对话式 AI | 解码器 | GPT, LLaMA |
当不确定使用哪个模型时,请考虑:
- 您的任务需要什么样的理解?(双向还是单向)
- 您是要生成新文本还是分析现有文本?
- 您是否需要将一个序列转换为另一个序列?
这些问题的答案将引导您选择正确的架构。
LLM 的演进
大型语言模型近年来发展迅速,每一代都在能力上带来了显著的提升。
注意力机制
大多数 Transformer 模型使用全注意力,即注意力矩阵是方阵。当您处理长文本时,这可能成为一个巨大的计算瓶颈。Longformer 和 Reformer 模型试图提高效率,并使用注意力矩阵的稀疏版本来加速训练。
标准注意力机制的计算复杂度为 O(n²),其中 n 是序列长度。这对于非常长的序列来说会成为问题。下面介绍的专门注意力机制有助于解决这一局限性。
LSH 注意力
Reformer 使用 LSH 注意力。在 softmax(QK^t) 中,只有 QK^t 矩阵中最大的元素(在 softmax 维度上)才会产生有用的贡献。因此,对于 Q 中的每个查询 q,我们只需考虑 K 中与 q 相近的键 k。哈希函数用于确定 q 和 k 是否相近。注意力掩码被修改以掩盖当前 token(除了第一个位置),因为它会产生相等的查询和键(因此彼此非常相似)。由于哈希可能有些随机,实践中会使用多个哈希函数(由 n_rounds 参数确定),然后将它们的结果平均。
局部注意力
Longformer 使用局部注意力:通常,局部上下文(例如,左右各两个 token 是什么?)足以对给定的 token 采取行动。此外,通过堆叠具有小窗口的注意力层,最后一层将具有比窗口内 token 更大的感受野,从而能够构建整个句子的表示。
一些预先选择的输入 token 也会被赋予全局注意力:对于这少数几个 token,注意力矩阵可以访问所有 token,并且这个过程是对称的:所有其他 token 都可以访问这些特定的 token(除了它们局部窗口中的 token)。这在论文的图 2d 中有所展示,下面是一个示例注意力掩码:

使用这些参数较少的注意力矩阵,可以使模型能够处理具有更长序列长度的输入。
轴向位置编码
Reformer 使用轴向位置编码:在传统的 Transformer 模型中,位置编码 E 是一个大小为x,的矩阵,其中 l 是序列长度,d 是隐藏状态的维度。如果你处理非常长的文本,这个矩阵可能会非常大,并占用过多的 GPU 空间。为了缓解这个问题,轴向位置编码将这个大矩阵 E 分解为两个较小的矩阵 E1 和 E2,维度分别为和,使得和(由于长度是相乘的关系,最终会小得多)。时间步在 E 中的嵌入是通过连接 E1 中时间步的嵌入和 E2 中的嵌入得到的。
结论
在本节中,我们探讨了三种主要的 Transformer 架构和一些专门的注意力机制。理解这些架构差异对于为您的特定 NLP 任务选择合适的模型至关重要。
随着课程的推进,您将亲身体验这些不同的架构,并学习如何根据您的特定需求对它们进行微调。在下一节中,我们将探讨这些模型中存在的一些局限性和偏见,您在部署它们时应该意识到这些问题。
< > 在 GitHub 上更新