在构建 AI 模型 的旅程中,架构选择是至关重要的一步。它直接影响模型的性能、易用性和部署可行性。例如,拥有 70 亿参数的 LLaMA 2-7B 模型在运行和微调方面比拥有 1750 亿参数的 GPT-3 更为便捷。本文将深入探讨目前语言模型中最常用的架构:Transformer,理解其如何从 Seq2Seq 模型演进而来,以及其强大的 注意力机制 如何助力 大模型 实现卓越的性能。

从 Seq2Seq 到 Transformer:一次飞跃

Transformer 架构崭露头角之前,Seq2Seq (Sequence-to-Sequence) 模型是处理诸如翻译或摘要等任务的首选。2016 年,Google 通过将其应用于 Google Translate,Seq2Seq 模型声名鹊起,并在当时代表着一项巨大的进步。

Seq2Seq 模型的工作原理可以概括为以下两个主要组成部分:

  • 编码器 (Encoder): 逐个 Token 读取输入句子,并将其压缩成一个固定大小的向量(其“隐藏状态”)。
  • 解码器 (Decoder): 获取该隐藏状态,并逐个生成输出 Token,每次都会考虑已生成的内容。

Seq2Seq 模型通常使用循环神经网络 (RNN) 来逐步处理序列。这使得它们在处理序列任务方面非常强大,但也导致速度较慢且难以扩展。Transformer 的出现正是为了解决这些局限性。

Transformer 取代 Seq2Seq 的原因

Transformer 架构的诞生,是对 Seq2Seq 架构局限性的直接回应。虽然 Seq2Seq 模型在 2010 年代中期提高了机器翻译和摘要的效率,但它们存在两个主要的弱点,而 Transformer 旨在解决这些问题。

  1. 信息瓶颈:

    在原始 Seq2Seq 模型中,编码器在读取完输入后,会将所有信息压缩到一个单独的向量,即最终的隐藏状态。然后,解码器仅基于该向量以及已生成的内容来生成输出序列。

    这就像试图仅根据对刚读完的书的简短摘要来撰写一篇详细的文章。无论摘要多么出色,都很容易丢失关键信息,尤其是在处理较长或复杂的文本时。例如,在翻译一篇长篇小说时,如果编码器将所有信息压缩到一个向量中,解码器可能难以捕捉到小说中人物情感的细微变化。

    Transformer 通过使用 注意力机制 解决了这个问题。注意力机制 允许模型在生成单词时回顾整个输入(而不仅仅是最终状态)。它不必依赖于摘要,而是可以翻阅书中的任何一页并提取相关信息。

  2. 缓慢的逐步处理:

    Seq2Seq 模型使用 RNN,而 RNN 本质上是顺序的。它们一次读取一个 Token,并且每个步骤都依赖于上一步的输出。这意味着:

    • 输入 Token 逐个处理
    • 输出 Token 逐个生成

    这使得训练和推理速度变慢,尤其是在处理长序列时。这就像用打字机一次组装一个句子的一个字符。比如,翻译一段长篇演讲,RNN需要按照时间顺序逐字逐句地处理,耗时较长。

    Transformer 完全抛弃了 RNN。它一次处理整个输入序列,从而可以通过并行计算实现大幅加速。这不仅缩短了训练时间,而且还可以更好地利用 GPU。

注意力机制的力量

Transformer 的核心是 注意力机制,它可以帮助模型决定在生成每个单词时应该关注什么。

它的工作方式如下:

  • 查询 (Query, Q): 模型当前“寻找”的内容
  • 键 (Key, K): 每个 Token 提供的价值
  • 值 (Value, V): 每个 Token 实际包含的信息

模型将查询与每个键进行比较(使用点积)来评分每个 Token 的相关性。然后,它使用这些分数来权衡值,并生成特定于上下文的“摘要”,该摘要会针对其生成的每个单词进行动态调整。

例如,在翻译“The cat sat on the mat”这句话时,当模型生成“sat”的译文时,注意力机制 会让模型关注“cat”和“mat”,因为它需要知道是谁坐在什么上面。

一个好的类比:您正在编写摘要,并且在每个句子中,您可以翻阅书中的任何一页以查找有用的信息。这种灵活性赋予了 Transformer 如此强大的优势。

并行性 vs. 生成:一种混合过程

一个微妙的点:虽然 Transformer 可以一次性处理输入,但它们仍然一次生成一个输出 Token。对于像 GPT 这样的自回归语言模型尤其如此。

这就是推理分为两个阶段的原因:

  • 预填充 (Prefill): 模型处理完整的输入(并行化)
  • 解码 (Decode): 模型一次生成一个 Token,使用先前生成的 Token 作为上下文

即使输出生成是顺序的,但总的来说,Transformer 模型仍然比基于 RNN 的模型快得多,而且研究人员也在不断优化这一部分。例如,通过使用更高效的解码算法,可以进一步提高 大模型 的推理速度。

Transformer 的内部运作:从单词到向量,再到理解

现在我们知道 Transformer 一次性处理输入并一次生成一个输出 Token,让我们深入了解模型处理句子时幕后发生的事情。

假设您输入一个简单的问题:“你好吗?”

这对我们来说很简单。但是模型如何将这个文本字符串转换成它可以使用的东西呢?

步骤 1:您的文本被分解为 Token

在进行任何数学运算之前,模型会将这个句子分成 Token,即小的文本块。根据所使用的 Tokenizer,这可能是:

["你好", " 吗", "?"]

现在您有 3 个 Token。

步骤 2:Token 变成数字

每个 Token 都被映射到模型词汇表中的 ID:

["你好", " 吗", "?"] → [1234, 567, 89]

这些 ID 只是查找键。它们还没有任何意义。

步骤 3:数字变成向量(Token 嵌入)

该模型有一个巨大的表,称为嵌入矩阵,在训练期间学习。此表中的每一行代表一个 Token,不是用定义,而是用捕获其在上下文中含义的数字列表。

例如,在 LLaMA 2-7B 中,每个 Token 都被映射到一个包含 4096 个数字的向量。因此,在此步骤之后,您的 3 个 Token 变成 3 个向量,每个向量长 4096 个值。这些 4096 维的向量可以理解为在 大模型 理解的语义空间中的坐标。

步骤 4:这些向量变成查询、键和值

这是事情变得更有趣的地方。

对于每个 Token 嵌入(例如“你好”的嵌入),模型想要了解:

  • 这个 Token 正在寻找什么(查询)
  • 它可以为其他人提供什么(键)
  • 它实际携带的信息(值)

为了弄清楚这一点,模型应用三个不同的学习矩阵:

  • 一个用于查询:W_Q
  • 一个用于键:W_K
  • 一个用于值:W_V

每个都是 4096 × 4096 矩阵。

因此,对于每个 4096 维的 Token 嵌入,我们现在得到:

  • Query = Token 嵌入 × W_Q
  • Key = Token 嵌入 × W_K
  • Value = Token 嵌入 × W_V

每个操作的输出都是另一个 4096 维向量,但它们都不同,因为它们是由不同的矩阵塑造的。

等等……什么是“学习矩阵”?

将 W_Q、W_K 和 W_V 视为模型经过训练后使用的过滤器或镜头。

在训练的最初阶段,这些矩阵是随机的。但是,随着模型看到越来越多的文本示例,它会逐渐调整它们,以便它们帮助模型更好地预测下一个单词。到训练结束时,这些矩阵充满了结构,捕捉了深刻的语言模式。

例如,W_Q 可能会学习识别疑问词,W_K 可能会学习识别名词,W_V 可能会学习提取动词的含义。

因此,当您问“你好吗?”时,模型不仅仅是随机猜测。它正在使用这些经过训练的转换将每个单词转换为特定的查询、键和值,它可以用来理解您的句子并生成响应。

Transformer 的未来

Transformer 架构自诞生以来,已经取得了显著的进步。例如,出现了诸如 Sparse Transformer、Longformer 等变体,以解决处理长序列的问题。此外,研究人员还在探索使用 Transformer 架构来处理图像、音频和视频等非文本数据。

Transformer 架构已经成为 大模型 的基石,并且在未来几年内将继续发挥重要作用。随着计算能力的不断提高和算法的不断创新,我们可以期待 Transformer 模型在各种应用中取得更大的突破。例如,在医疗领域,Transformer 模型可以用于分析医学图像,辅助医生进行诊断。在金融领域,Transformer 模型可以用于预测股票市场趋势,帮助投资者做出明智的决策。

总结:从单词到向量,再到理解

我们从一个简单的问题开始了这段旅程:“你好吗?” 并解开了 Transformer 模型如何在幕后解释它。从 Token 化到 4096 维嵌入,再到将每个 Token 塑造为查询、键和值的学习矩阵,每一步都揭示了在生成单个单词之前发生了多少结构和学习。

使 Transformer 如此强大的不仅仅是它们的规模,还在于它们如何并行思考,动态地决定输入的哪些部分最重要,同时一次生成一个连贯的语言 Token。而在这优雅的输出背后,隐藏着深刻的数学、架构和学习行为。理解 Transformer 的架构和运作方式,对于深入掌握 大模型 的能力至关重要。 只有理解了这些底层机制,我们才能更好地利用 大模型 解决实际问题,并推动 AI 模型 领域的进一步发展。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注