@ickma2311: 高效AI 第12讲:Transformer 与 LLM 本讲不仅介绍 LLM 的工作原理,还深入讲解其底层构建模块……

X AI KOLs Timeline 论文

摘要

一门高效AI课程的第12讲笔记,涵盖 Transformer 与 LLM 基础知识,包括多头注意力机制、位置编码、KV 缓存,以及模型架构与推理效率之间的关联。内容阐释了 Transformer 中的设计选择如何影响内存占用、延迟表现和硬件效率。

高效AI 第12讲:Transformer 与 LLM 本讲不仅介绍 LLM 的工作原理,还深入讲解其底层构建模块:多头注意力机制、位置编码、Transformer 变体以及 KV 缓存。LLM 并非依赖某一个单一技巧,而是一系列设计选择的叠加——架构与效率在其中紧密相连。我的笔记:https://ickma2311.github.io/ML/HW-SW-codesign/efficient-ai-lecture-12-transformer-and-llm.html…
查看原文 导出为 Word 导出为 PDF
查看缓存全文

缓存时间: 2026/05/09 09:46

Transformer 与大语言模型 – ∇ ickma.dev

来源:https://ickma2311.github.io/ML/HW-SW-codesign/efficient-ai-lecture-12-transformer-and-llm.html 本讲将 transformer 模块与现代大语言模型背后的系统问题紧密相连。

transformer 不仅是一种 NLP 架构,它更是一个设计空间——在这个空间中,模型质量、内存占用、推理延迟和硬件效率紧密耦合。

核心思想是:

大语言模型的效率,既取决于模型计算什么,也取决于运行时必须记住什么。

自注意力、位置编码、前馈层和 KV 缓存的设计,共同决定了部署语言模型的代价。

Transformer 基础

在 transformer 出现之前,常见的序列模型存在明显局限。

RNN 对 token 进行顺序处理。它能对顺序建模,但难以捕捉长程依赖,且难以在序列长度维度上实现并行化。

CNN 具有更好的并行性,但除非网络足够深或采用特殊的空洞卷积结构,其感受野是局部的,这会限制长程上下文建模能力。

transformer 通过将注意力作为核心的序列混合操作,改变了这一默认范式。

分词(Tokenization)

分词器将原始文本映射为 token。

根据分词器词表的不同,一个单词可能映射为一个 token、多个子词 token,甚至只是某个 token 的一部分。

这一点很重要,因为模型直接看到的不是单词,而是 token ID,再由 token ID 映射为向量。

词嵌入(Embeddings)

词嵌入将每个 token ID 映射为一个连续向量。

该向量是模型对该 token 的初始表示。后续各层通过在 token 之间和特征维度之间混合信息,不断变换这些向量。

自注意力(Self-Attention)

自注意力将 token 嵌入投影为三个矩阵:

  • 查询 (Q)
  • 键 (K)
  • 值 (V)

注意力运算为:

[ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V. ]

得分矩阵 (QK^T) 衡量每个 token 对其他 token 的关注程度。softmax 将这些得分转换为注意力权重,再与 (V) 相乘,得到新的 token 表示。

一个直观的类比是搜索:

  • 查询:我在寻找什么
  • 键:每个条目对外宣称自己是什么
  • 值:我实际检索到的内容

计算代价不可忽视。对长度为 (n) 的序列做完整注意力,需要构造 (n \times n) 的注意力矩阵,因此注意力的计算复杂度与序列长度呈平方关系。

多头注意力(Multi-Head Attention)

多头注意力并行运行多个注意力分支。

每个头可以学习不同的关联关系:

  • 句法
  • 局部上下文
  • 长程依赖
  • 实体关系
  • 位置模式

各头的输出被合并,使模型能从多个角度解读同一序列。

注意力掩码(Attention Masking)

掩码定义了哪些 token 可以关注哪些 token。

两种常见情形:

  • 全局注意力:每个 token 可以看到所有 token
  • 因果注意力:每个 token 只能看到当前及之前的 token

因果掩码对 GPT 等自回归语言模型至关重要,因为模型在预测下一个 token 时不能看到未来的 token。

前馈网络(Feed-Forward Network)

注意力负责在 token 之间混合信息,但 transformer 模块还需要对每个 token 进行非线性特征变换。

这一功能由前馈网络承担:

[ FFN(x)=\max(0,xW_1+b_1)W_2+b_2. ]

现代大语言模型通常使用 GELU、SwiGLU 或其他门控前馈设计,而非简单的 ReLU MLP。

层归一化(Layer Normalization)

层归一化在特征维度上对每个 token 的表示进行归一化:

[ y= \frac{x-\mathbb{E}[x]}{\sqrt{\mathrm{Var}[x]+\epsilon}}\gamma+\beta. ]

它能稳定训练过程,并允许模型通过 (\gamma) 和 (\beta) 学习缩放和平移。

位置编码(Positional Encoding)

自注意力本身无法感知 token 的顺序。除非加入位置信息,否则它看到的只是一组 token 向量。

原始 transformer 使用正弦位置编码:

[ p_t^{(i)} = \begin{cases} \sin(\omega_k t), & i = 2k \ \cos(\omega_k t), & i = 2k + 1 \end{cases} ]

其中

[ \omega_k = \frac{1}{10000^{2k/d}}. ]

模型由此同时获得 token 的语义信息和位置信息。

Transformer 设计变体

transformer 模型在编码器与解码器模块的使用方式、位置表示方式以及推理内存优化方面各有不同。

编码器-解码器(Encoder-Decoder)

原始 transformer 采用编码器-解码器结构。

编码器读取输入序列,解码器在生成输出序列时,同时关注已生成的 token 和编码器的输出。

T5 以统一的文本到文本(text-to-text)方式使用这一结构:所有任务均表示为文本输入和文本输出。

仅编码器(Encoder-Only)

BERT 是仅有编码器的 transformer。

它专为表示学习和判别式任务而设计,预训练目标包括:

  • 掩码语言模型
  • 下一句预测

由于编码器可利用双向上下文,BERT 在分类、检索和 token 级标注等任务上表现出色。

仅解码器(Decoder-Only)

GPT 系列模型是仅有解码器的 transformer。

其预训练目标是下一个 token 预测:

[ L(u)=\sum_i \log P(u_i \mid u_{i-k}, \dots, u_{i-1}; \Theta). ]

这一目标使仅解码器模型天然适合文本生成,同时也支持零样本和少样本提示——任务通过上下文中的示例指定,而无需更新模型参数。

绝对位置嵌入与相对位置嵌入

绝对位置嵌入将位置信息直接加到 token 嵌入上。

相对方法则根据 token 之间的距离影响注意力得分。这种方式在序列长度或相对模式未在训练中直接出现时,通常具有更好的泛化能力。

两种重要的现代变体:

  • RoPE:根据位置对查询和键的维度进行旋转
  • ALiBi:直接在注意力得分中加入与距离相关的偏置

这些方法将位置信息融入注意力机制,而不仅仅体现在输入向量中。

KV 缓存优化

在自回归解码过程中,模型每次生成一个 token。

对于每个新 token,我们只需要新的查询向量,但仍需要所有先前 token 的键和值。这些存储的键和值就是 KV 缓存。

KV 缓存的大小与以下因素成正比:

[ \text{批大小} \times \text{层数} \times \text{头数} \times \text{头维度} \times \text{序列长度} \times 2 \times \text{精度}. ]

因子 2 来自同时存储 (K) 和 (V)。

这可能成为推理的主要瓶颈。对于长上下文,即使模型权重固定不变,KV 缓存的内存占用也可能主导部署成本。

多查询注意力和分组查询注意力可降低这一代价:

  • 多头注意力:每个查询头都有独立的键头和值头
  • 多查询注意力:多个查询头共享同一组键/值头
  • 分组查询注意力:查询头被分为若干组,组内共享键/值头

分组查询注意力是一种实用的折中方案:它在降低 KV 缓存内存的同时,保留了多头注意力大部分的模型质量。

改进前馈网络

前馈网络占据了 transformer 计算量的很大一部分。

现代大语言模型通常以 GLU 或 SwiGLU 等门控变体替代简单的 FFN。门控机制使模型能够以更强的表达能力控制哪些特征通过该模块。

大语言模型(LLMs)

大语言模型将 transformer 方案扩展到更大的参数规模和训练数据集。

现代大语言模型时代呈现出几个典型规律:

  • 扩大参数规模可能产生新的能力
  • 训练数据规模必须随模型规模同步扩大
  • 推理内存成为头等约束
  • 架构细节直接影响部署成本
  • 提示(prompting)支持零样本和少样本适配

GPT-3 使上下文学习(in-context learning)成为核心理念:模型不必针对每个任务进行微调,而是可以通过提示中的示例推断任务意图。

后续大语言模型进一步完善了架构:

  • Llama 采用了 RMSNorm、RoPE、SwiGLU 以及后来的分组查询注意力等设计
  • Mistral 使用滑动窗口注意力提升长上下文效率
  • Chinchilla 风格的扩展定律强调:如果数据规模不随参数量同步增长,许多大模型实际上处于训练不足的状态

这告诉我们,大语言模型的进步不仅仅是“把模型做大“,更在于选择合适的架构、数据规模、内存布局和推理策略。

多模态大语言模型

多模态大语言模型将语言模型的接口扩展到图像及其他模态。

讲座中提到的两个例子:

  • Flamingo 将视觉特征映射为固定数量的视觉 token,并通过门控交叉注意力注入到冻结的语言模型中。
  • PaLM-E 将视觉 token 直接送入语言模型。

共同思路是将非文本输入转换为 token 或类 token 的表示,以便 transformer 处理。

这使 transformer 成为通用的序列处理骨干,而不仅仅是文本模型。

核心总结

transformer 架构有两个层面。

在模型层面,注意力、分词、位置编码、前馈网络以及编码器/解码器结构决定了模型能够表示什么。

在系统层面,注意力复杂度、KV 缓存大小、查询/键/值的共享方式以及上下文长度决定了模型能否被高效部署。

对我而言,这堂课让大语言模型呈现出一种模型与系统协同设计的问题:架构选择会直接转化为推理阶段的内存与延迟代价。

相似文章