@ickma2311: 高效AI 第12讲:Transformer 与 LLM 本讲不仅介绍 LLM 的工作原理,还深入讲解其底层构建模块……
摘要
一门高效AI课程的第12讲笔记,涵盖 Transformer 与 LLM 基础知识,包括多头注意力机制、位置编码、KV 缓存,以及模型架构与推理效率之间的关联。内容阐释了 Transformer 中的设计选择如何影响内存占用、延迟表现和硬件效率。
查看缓存全文
缓存时间: 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 缓存大小、查询/键/值的共享方式以及上下文长度决定了模型能否被高效部署。
对我而言,这堂课让大语言模型呈现出一种模型与系统协同设计的问题:架构选择会直接转化为推理阶段的内存与延迟代价。
相似文章
@ickma2311:CMU 高级 NLP:强化学习 我一直好奇 RL 如何作用于大模型,而这门 CMU 课程让我豁然开朗……
CMU 高级 NLP 课程讲清了强化学习如何优化整个输出的奖励(正确性、有用性、安全性),而非预训练/微调阶段的下一个 token 预测。
@phosphenq:Andrej Karpathy 这段 2 小时视频,比今年你刷过的所有 AI 教程加起来还管用
OpenAI 联合创始人 Andrej Karpathy 发布了一段 2 小时教学视频,承诺让观众大幅提升大语言模型的实战能力。
@hardmaru: 人脑极其高效,因为它只激活特定思维所需的神经元。现代LLM…
本文介绍了TwELL和Hybrid稀疏格式,配合自定义CUDA内核,有效利用LLM中的非结构化稀疏性,在H100 GPU上实现了训练和推理速度提升超过20%,同时降低了能耗和内存使用。
@_vmlops: 大语言模型文本生成的端到端推理管线——模拟面试指南 https://drive.google.com/file/d/1eDqEtWWtIe…
本指南解释了大语言模型的端到端推理管线,作为理解文本生成的模拟面试资源。
Mem0:利用可扩展的长期记忆构建生产就绪的 AI 智能体
Mem0 引入了一种基于图表示的可扩展内存中心架构,旨在提升大语言模型(LLM)在长期对话中的连贯性,在显著降低延迟和 Token 成本的同时,性能优于现有的记忆系统。