LLM 学习系列(2 / 5)
1. Transformer:从 ID 到下一个 Token 的分数
Transformer 是一种以 Attention(注意力机制)为核心、用于处理序列数据的神经网络架构。 它将输入 Token 的向量序列转换为包含上下文信息的向量序列,最初由 2017 年的论文 Attention Is All You Need 提出。
Transformer 是架构名称,不限定具体任务或训练目标。BERT、T5 和 GPT 都基于 Transformer,但分别使用了不同的架构形式和训练目标。
贯穿全篇的例子
本篇沿用 分词篇 的同一个任务:输入
小猫跑了一天,它很,预测下一个 Token。
- 输入:教学切分为
小猫 · 跑 · 了 · 一天 · , · 它 · 很,ID 为[10, 11, 12, 13, 14, 15, 16],按需在前面加 BOS(ID1)。- 追踪对象:最后一个输入 Token
很的向量。它会逐层吸收前文信息,从一个只表示「很」的向量,变成一个包含「小猫经历了一天奔跑、接下来要描述状态」的上下文向量。- 输出:LM Head(语言模型输出头)根据
很的最终向量,为整个词表打分。假设训练好的模型给累(ID17)较高分,推理程序再选择它。本文先拆解组件,再在第 6 节按执行顺序组合成 Block(重复堆叠的网络模块)。切分、ID、向量和概率都是教学示意;自然语言对特征的描述,不代表实测发现了某个专门负责「疲劳」的维度。
1.1 核心结构
以现代 Decoder-only LLM 为例,其数据流通常为:
一个典型 Transformer Block 包含:
- Self-Attention:让每个 Token 根据其他可见 Token 的信息更新自身表示。
- Feed-Forward Network(FFN):对每个位置的表示进行非线性变换。
- Residual Connection(残差连接):保留原始信息并改善深层网络的梯度传播。
- Normalization(归一化):稳定中间表示和训练过程。
- Position Information(位置信息):补充 Attention 本身不具备的序列顺序信息。
不同模型可能采用 Pre-Norm 或 Post-Norm、LayerNorm 或 RMSNorm,以及不同的 Attention、FFN 和位置编码变体,但整体职责相同。
1.2 Decoder-only(仅解码器架构)
Decoder-only 是只使用 Transformer Decoder 风格的 Block,将输入与已生成内容放在同一个序列中,并通过 Causal Self-Attention 预测下一个 Token 的模型架构。
「Decoder-only」来自原始 Transformer 的 Encoder-Decoder 架构。在原始架构中:
- Encoder(编码器) 使用双向 Self-Attention 编码完整源序列。
- Decoder(解码器) 使用 Causal Self-Attention 读取已生成的目标 Token,并通过 Cross-Attention 读取 Encoder 输出。
这里的 Self-Attention(自注意力) 从同一条序列取查询与被查询的信息;Cross-Attention(交叉注意力) 则用一条序列查询另一条序列。Causal(因果) 限定只读当前位置及左侧位置;双向注意力允许读取左右两侧。具体掩码计算放在 推理篇。
典型的 Decoder-only 语言模型不再设置独立 Encoder,也移除了用于读取 Encoder 输出的 Cross-Attention。Prompt(本次给模型的初始输入)和输出历史被统一为一条 Token 序列,由同一组 Block 处理:
例子推进 · Decoder-only 规定信息边界
输入前缀是
小猫跑了一天,它很。处理最后一个 Token很时,Causal Self-Attention 可以读取它自己及左侧所有 Token,因此能利用小猫、跑了一天等信息;演示中的后续 Token累尚未输入。即使在训练时把完整句子放进数组,因果掩码也会挡住很右侧的位置。
三种常见 Transformer 架构的区别是:
| 架构 | 主要注意力方式 | 典型用途 | 代表模型 |
|---|---|---|---|
| Encoder-only | 双向 Self-Attention | 文本理解、分类、Embedding | BERT |
| Encoder-Decoder | Encoder 双向 Self-Attention;Decoder Causal Self-Attention 与 Cross-Attention | 翻译、摘要、序列转换 | T5、原始 Transformer |
| Decoder-only | Causal Self-Attention | 文本生成、对话、代码生成 | GPT、LLaMA、Qwen |
现代生成式 LLM 常采用 Decoder-only,主要原因包括:
- 与自回归目标直接匹配:模型始终根据已有 Token 预测下一个 Token。
- 任务接口统一:问答、翻译、摘要和代码生成都可以表示为序列续写。
- 训练数据形式统一:普通文本不需要成对的源序列与目标序列,即可用于下一 Token 预测。
- 架构相对简单:只需扩展一种 Block,不需要维护独立 Encoder 和 Encoder-Decoder Cross-Attention。
Warning
「Decoder-only」中的 Decoder 是 Transformer 架构分类,不是 Tokenizer 的 Decode 或 Detokenization。它也不是原始 Transformer Decoder 的原样保留:典型文本 Decoder-only LLM 没有独立 Encoder,因此通常不包含 Encoder-Decoder Cross-Attention。
2. Token Embedding(词元嵌入):查出初始向量
向量(Vector) 是一列或一行数字,例如 [0.2, -0.1, 0.4] 是 3 维向量。矩阵(Matrix) 是按行列排列的数字表。模型用大量这样的数值运算来构造文本表示;向量维度通常不能逐一翻译成自然语言标签。
Tokenizer 输出的 Token ID 只是词表索引,不能把编号大小当作语义。Embedding 层维护一个形状为 的可训练矩阵 ,其中 是词表大小, 是每个 Token 的表示维度。位置 的输入 ID 为 时,查表得到:
表示隐藏向量,即网络内部的中间结果;上标 表示还没有经过 Transformer Block。它也属于激活值(Activation),会随输入改变;矩阵 属于参数(Parameter),普通推理时固定。
例子推进 · ID
16变成很的向量模型用
16查出 。如果为展示只画 3 维,它可能是[0.2, -0.1, 0.4];真实模型可能有几千维。此时
很的向量不含本句前文。同一个 Token 在不同句子中查到相同的初始向量,之后才由 Block 根据上下文逐层加工。7 个普通 Token 会得到形状为 的向量表;若加上 BOS,则是 。
3. Self-Attention(自注意力):从上下文收集信息
Self-Attention 让序列中的每个 Token 根据可见位置的相关性聚合信息。将各位置向量按行排成矩阵 ,分别乘以三组可训练矩阵,得到 Query、Key 和 Value:
注意力计算为:
其中:
- Query(Q):当前位置需要查询什么信息。
- Key(K):各位置通过什么特征被匹配。
- Value(V):匹配后实际聚合的信息。
- Mask(M):控制当前位置允许关注哪些位置;自回归模型使用 Causal Mask 屏蔽未来 Token。
「Self」表示 Q、K、V 都从同一条序列的当前层表示生成,不是表示一个 Token 只能关注自己。这里的 Softmax 对每个 Query 对应的那一行分数分别计算。
投影 在这里就是「乘一个矩阵,把向量变成另一种表示」。 表示矩阵转置, 计算各 Query 与各 Key 的点积(对应分量相乘后求和); 是每个 Key 的维度,除以 用于控制分数尺度。最后乘 ,就是按权重把 Value 向量加起来。
本节的 表示 Value 矩阵,不是第 2 节的词表大小;字母相同,含义取决于所在公式。
3.1 Softmax(从分数到权重)
Softmax 是把一组任意实数分数转换为一组非负、总和为 1 的权重的函数。 对一组分数 ,第 个分数对应的权重为:
Softmax 做了三件事:
- 通过指数函数 把每个分数变成正数。
- 用所有指数值之和进行归一化,使结果总和等于 1。
- 保留分数的大小顺序:分数越大,权重越高;两项权重之比为 。
其中 , 表示把所有项加起来,下标 表示当前关心的那一项。
例如,在贯穿案例中,为了单独演示计算,暂时只比较 很 对 跑、一天、小猫 三个位置的注意力分数。假设分数为 [2, 1, 0],经过 Softmax 后约为 [0.67, 0.24, 0.09]。模型随后用这些权重对三个位置的 Value 做加权求和:跑 获得约 67% 的权重,小猫 获得约 9%。
Note
Softmax 输出在数值形式上类似概率分布,但在 Self-Attention 中更准确地称为注意力权重:它表示当前 Query 应从各个 Value 聚合多少信息,并不直接等于模型对某个 Token 的最终预测概率。
例子推进 · Attention:让
很从前文收集信息在第一层中,
很从初始表示出发,按相关性从可见 Token 的 Value 中聚合信息;后续层的输入已经含有前几层写入的上下文:
很的 Query 用于查找「当前位置接下来需要哪些上下文」。小猫、跑、一天、它等位置的 Key 用于与这个 Query 计算匹配分数。- Softmax 把分数转换为总和为 1 的注意力权重。
很按这些权重聚合各位置的 Value,得到包含上下文的新向量。如果改为对全部可见位置分配权重,可以假设另一组示意结果如下(与上面只比较三个位置的演示分开):
很关注的 Token注意力权重 提供的信息 小猫0.20 当前描述对象是有生命主体 跑0.28 主体经历了消耗性动作 一天0.22 动作持续时间较长 它0.18 当前状态描述指回小猫 其他 Token 0.12 语法、标点等辅助信息 经过加权聚合,
很不再只是孤立的程度副词,其向量中已经融入「小猫长时间奔跑、现在要描述它的状态」的信息。这就是 Token 之间通过 Self-Attention 交换信息。Note
上述 Query、Key 和 Value 的自然语言含义都是教学简化。真实模型中的特征分布在高维向量中,单个维度或单个 Attention Head 通常不能被稳定解释为某一种明确语义。
3.2 Multi-Head Attention(多头注意力)
前面的公式只画出一个 Head(注意力头)。多头注意力并行计算多组 Q/K/V,每组在自己的表示空间里聚合信息,再把结果拼接并通过输出矩阵 混合,回到模型维度 。
例子推进 · 从多个角度处理前文
很可以通过不同头聚合不同组合的信息,例如有的计算更关注跑和一天,有的更关注它与前文主体的关联。头的分工由训练形成,并没有预先指定的「语法头」或「疲劳头」。
第 7 节再解释多个 Query 头如何共享 Key/Value,以减少推理时的缓存。
3.3 Position Information(位置信息)
位置信息让模型更直接地利用 Token 的顺序和相对距离。 纯粹的全可见 Self-Attention 若没有位置信息,把输入重新排列,输出也只会跟着重排;它自身没有编码位置的机制。
| 方式 | 核心思路 | 代表实现 |
|---|---|---|
| 绝对位置编码 | 为位置生成向量,加到 Token Embedding 上 | 原始 Transformer、BERT、GPT-2 |
| 相对位置编码 | 在注意力中加入位置差相关的信息 | Transformer-XL、T5 |
| RoPE(Rotary Position Embedding,旋转位置编码) | 按位置旋转 Query 和 Key,使点积包含相对位置关系 | LLaMA、Qwen 的多种模型 |
例子推进 · 让
很利用相对距离
小猫跑了一天,它很中,很与它相邻,与小猫相隔更远。采用 RoPE 时,各层 Attention 根据位置旋转 Q/K,使匹配分数受这些距离影响;并不是先把一个位置向量加进所有 Embedding。
因果掩码本身也会提供部分顺序线索,因此不能断言「没有显式位置编码就完全无法区分顺序」。位置编码为模型提供的是更直接、可利用的位置结构。
4. FFN(前馈网络):加工每个位置的表示
FFN 是对序列中每个 Token 的向量独立进行非线性变换的网络。
Self-Attention 负责让 Token 之间交换信息,而 FFN 负责对单个 Token 已经聚合到的信息做进一步加工。它对每个位置施加相同的变换,位置之间不通过 FFN 交互,因此常被称为 Position-wise(逐位置) 前馈网络。
经典 FFN 由两层线性变换和一个激活函数组成:
这里沿用行向量写法,、 是权重矩阵,、 是偏置(额外相加的参数)。 是激活函数,例如 ReLU 会把负数置为 0,保留正数。它引入非线性,使多层网络不只是一次大矩阵乘法。
经典 FFN 的中间维度常为 ,先升维、再降回 。现代模型也常用 SwiGLU 这样的门控变体:额外计算一条分支,控制哪些信息通过;它不能简单视为上式里替换一个 ,实际还有不同的矩阵结构和中间维度。
Note
FFN 与 Self-Attention 互补:Attention 在 Token 之间混合信息,FFN 在每个 Token 内部加工信息。许多 Transformer LLM 的大部分参数集中在 FFN。
例子推进 · FFN:加工
很已经收集到的信息经过 Self-Attention,
很的向量已经混入小猫、跑、一天等位置的信息,但这个结果仍主要是多个 Value 的加权组合。FFN 随后只处理很这个位置:
- 将
很的向量升到更高维,展开更多可组合的特征。- 激活函数 引入非线性,使某些特征组合增强、另一些受到抑制。
- 将结果降回模型维度,输出进一步加工后的
很向量。直观上,这一步可能增强「有生命主体 + 长时间奔跑 + 接下来描述状态」这组特征,使
累比无关候选词更符合当前语境。Note
「增强某种特征」是教学直觉。真实模型的特征通常分布在多个维度上,一个维度也可能参与表示多个特征。
关键在于 逐位置独立:小猫、跑、一天、它、很 的向量都会分别经过同一个 FFN,但彼此不在 FFN 内交互。加工 很 时,FFN 不会再次读取其他位置;它处理的是 Attention 已经写入 很 向量的上下文信息。
于是分工变得清晰:Self-Attention 决定「从哪些 Token 收集信息」,FFN 决定「如何消化这些信息」。二者在每个 Block 中交替进行,逐层堆叠,模型才能构建出越来越抽象的表示。
Note
图中的两个 FFN 框其实是同一个 FFN、同一组参数 、,只是分别作用于不同位置,而非两个不同的网络。「提炼特征」是对 FFN 作用的直观描述,用于建立直觉,并非它内部机制的精确刻画。
5. 残差与归一化:让深层计算更稳定
Attention 和 FFN 负责主要变换,残差连接与归一化则决定这些变换如何接入整条信息流。
5.1 Residual Connection(残差连接)
残差连接把模块的输入直接加到模块的输出上。
其中 是 Self-Attention 或 FFN 等子模块。它主要解决深层网络难以训练的问题:
- 改善梯度传播:输入有一条不经过子模块 的直连路径,有助于训练更深的网络。
- 学习增量:模块只需学习「在输入基础上补充什么」,而不必从零重建整个输入。
Note
梯度 描述损失对参数或中间数值的局部敏感程度,反向传播 是计算梯度的方法,详见 训练篇。标量残差的导数是 ,直连项为 ;但两条路径仍可能抵消,不能保证总梯度永不消失或爆炸。普通生成推理不需要反向传播。
例子推进 · 残差:在
很的原表示上叠加修正假设 FFN 为
很算出了一份「更像疲惫状态描述」的增量 。残差连接不会用这份增量覆盖原向量,而是把它加回原来的很:
当增量较小时,原表示仍能直接传到下一步,每层可以在已有表示上修正。不过,加法也可能抵消原有分量,残差并不保证所有语义完整保留。
Note
残差让
很的表示等于「原始表示 + 每层增量」。堆叠几十层后,模型是在同一份表示流上不断叠加修正,而不是每层重新构造一份表示,这正是深层 Transformer 能稳定训练的关键之一。
5.2 Normalization(归一化)
Normalization 把向量的数值尺度调整到较稳定的范围,以稳定训练并加速收敛。
神经网络中间层的数值分布会随训练不断漂移,尺度过大或过小都会导致训练不稳定。归一化在每一层重新校准数值范围。它涉及两个相互独立的问题:
- 用什么算法归一化:常见有 LayerNorm 与 RMSNorm。
- 归一化放在什么位置:即 Pre-Norm 与 Post-Norm。
5.2.1 LayerNorm
对每个 Token 向量在特征维度上减去均值、除以标准差,再做可学习的缩放与平移:
其中 、 是该向量所有分量的均值和方差,、 是可学习的缩放和偏移参数; 表示对应分量相乘, 是避免分母为 0 的小正数。它调整的是同一个 Token 向量内部的分量,不是把整个句子的词混在一起求平均。
5.2.2 RMSNorm
只用向量的均方根(Root Mean Square)进行缩放,不减去均值、不使用偏移:
RMSNorm 比 LayerNorm 计算量更小,在大规模模型(如 LLaMA 系列)中被广泛采用。
| 对比项 | LayerNorm | RMSNorm |
|---|---|---|
| 是否减均值 | 是 | 否 |
| 可学习参数 | 、 | 仅 |
| 计算量 | 较大 | 较小 |
| 典型使用 | 原始 Transformer、BERT、GPT-2 | LLaMA、Qwen 等现代 LLM |
5.2.3 Pre-Norm 与 Post-Norm
Pre-Norm 与 Post-Norm 描述归一化相对于子模块和残差相加的位置。 它与上面选用哪种归一化算法是两个独立维度:既可以 Pre-Norm + RMSNorm,也可以 Post-Norm + LayerNorm。
- Post-Norm:原始 Transformer 采用,先残差相加再归一化。深层堆叠时通常更需要谨慎设置初始化和学习率。
- Pre-Norm:先归一化再进入子模块,残差路径保持「干净」的恒等直连,梯度更稳定,因此现代深层 LLM 大多采用 Pre-Norm。
例子推进 · 归一化:稳定
很的数值尺度
很的向量经过多轮 Attention、FFN 和残差相加后,不同分量的数值尺度可能逐渐失衡。Normalization 会在每次进入子模块前(Pre-Norm)或离开子模块后(Post-Norm)重新校准尺度,使后续矩阵运算处于稳定范围。归一化的职责是校准向量的数值尺度,不是决定应该关注哪个 Token,也不是重新执行语义推理。可以把它理解为把信号调整到下一层更容易稳定处理的范围。
6. 组合成 Transformer Block:走完一次前向
上述组件按固定方式组合成一个 Transformer Block,再堆叠多层。以现代常见的 Pre-Norm 结构为例:
一个 Block 内部:Self-Attention 负责 Token 间信息交换,FFN 负责单 Token 信息加工,Residual Connection 与 Normalization 有助于深层网络稳定训练。绝对位置编码通常在进入第一层 Block 前加到 Embedding 上;RoPE 则在每层 Attention 内作用于 Query 和 Key。不同 Block 通常拥有各自的参数,不是把同一组权重反复使用。
例子推进 · 一个 Block 如何更新
很以常见的 Pre-Norm Block 为例,
很在一层中依次经历:
- 第一次 Norm:稳定输入向量的数值尺度。
- Self-Attention:结合位置信息,从
小猫、跑、一天、它等可见位置收集信息。- 第一次残差相加:保留本层输入,同时写入 Attention 带来的上下文增量。
- 第二次 Norm:再次校准数值尺度。
- FFN:在
很这个位置内部非线性加工已经聚合的上下文。- 第二次残差相加:保留 FFN 之前的表示,同时叠加新特征。
一个 Block 只完成一次局部更新。几十层 Block 依次堆叠后,
很的表示才会逐渐包含足以支持下一 Token 预测的复杂上下文。
6.1 LM Head:从隐藏向量到词表分数
LM Head(Language Modeling Head,语言模型输出头)是把 Transformer 的隐藏向量转换为词表分数的输出层。 之所以叫「Head」,是因为它接在 Transformer 主干网络末端,负责产生语言建模任务所需的输出;LM 则表示它服务于「预测下一个 Token」这个任务。
假设模型隐藏维度为 、词表大小为 ,那么 LM Head 会把一个 维隐藏向量投影成 个分数。所有 Transformer Block 处理完后,模型取最后一个输入位置(本例是 很)的最终隐藏向量 ,经过最终归一化和 LM Head:
其中 的形状为 , 是可选偏置,输出向量 中的每个数字都对应词表里的一个 Token。一些模型会把这个输出矩阵与输入 Embedding 共享权重。
Logit 是 Softmax 之前的原始分数。 它可以是任意实数,不要求位于 0~1,所有 Logit 的总和也不需要等于 1。Logit 越大,只表示模型当前越倾向于对应 Token;它本身还不是概率。
对整组 Logits 使用 Softmax 后,才得到总和为 1 的下一个 Token 概率分布:
整个输出过程可以概括为:
Note
LM Head 只负责打分,Softmax 负责把分数转换成概率,解码策略才负责根据概率选出 Token。贪心、Temperature、Top-k、Top-p 等选择方法属于 推理篇 的范畴。
例子推进 · 输出:把
很的最终表示变成累经过多层 Block 后,
很的最终向量已经融合了「小猫长时间奔跑、接下来描述状态」的信息。LM Head 不直接输出汉字,而是给词表中的每个 Token 打分。下面是一组示意结果:
候选 Token Softmax 后的示意概率 累0.60困0.20饿0.10其他 Token 合计 0.10若使用贪心策略,选择最大概率项
累,输出的是 ID17。若使用采样,则也可能选到其他 Token。这里的 Softmax 作用于整个词表的 Logits,得到下一 Token 的预测概率;Self-Attention 中的 Softmax 作用于各位置的注意力分数,得到信息聚合权重。
Note
推理时通常只需要最后一个位置的 Logits 来选择下一个 Token;训练时则会保留序列中每个位置的 Logits,同时计算各位置预测下一个 Token 的损失。
7. 进阶:现代架构变体
到这里已经可以跟完一次前向计算。本节解释模型介绍中常见的 MoE、GQA 等名字;首次阅读也可以先进入第 8 节。
上面是标准 Decoder-only Block。现代大模型很少原样堆叠它,而是在不改变「Attention + FFN + 残差 + 归一化」骨架的前提下,主要沿两个部件演化:
- FFN 方向 → MoE:把稠密 FFN 换成多个稀疏专家,扩大参数量而不成比例增加计算。
- Attention 方向 → KV 共享或压缩:减少 Key/Value 的存储,降低 KV Cache(保存历史 Key/Value 的缓存) 开销,详见 推理篇。
7.1 MoE(Mixture of Experts,混合专家)
标准 Block 里,每个 Token 都被送进同一个 FFN。MoE 把这个 FFN 换成 个并列的专家(Expert)FFN,外加一个路由器(Router) 决定每个 Token 交给哪几个专家:
核心是稀疏激活:每个 Token 只使用部分专家(如 256 选 8)。这里的「专家」是可训练的子网络,不是预先命名的医学、数学等知识库;有些设计还包含每个 Token 都会使用的共享专家。这样可以增加总参数量,而不按同一比例增加每 Token 的计算量:
| 对比项 | 稠密 FFN(Dense) | MoE(稀疏) |
|---|---|---|
| FFN 结构 | 单个 FFN | 个专家 FFN + 路由器 |
| 每个 Token | 过唯一的 FFN | 只过被选中的 Top-K 个专家 |
| FFN 总参数量 | 较小 | 随专家数增长,提供更多可训练容量 |
| 每 Token 的 FFN 激活参数 | 使用整个 FFN | 主要使用被选中的专家;有些设计另含共享专家 |
| 代表模型 | GPT-3、LLaMA(稠密) | Mixtral 8x7B、DeepSeek-V3、Qwen-MoE |
Note
Top-K 表示选择分数最高的 K 个专家,此处的 K 不是 Attention 的 Key。总参数量反映模型需要存储多少参数;每 Token 的激活参数量只是估算计算量的一项依据。不能把两者直接等同于「知道多少知识」和「实际运行多快」,速度还受通信、内存读取与调度影响。
Warning
稀疏激活节省的是每个 Token 的部分计算,所有专家权重仍需存储。高吞吐部署通常让权重分布在多张卡的显存中,也可以卸载到其他存储层,但会增加传输成本。路由不均衡还需要负载均衡机制,例如辅助损失或动态调整路由偏置,不是所有模型都采用同一种损失。
7.2 Attention 变体:共享或压缩 KV
推理时,在常规 KV 缓存布局下,需要为每个 KV 头保存 Key 和 Value。在层数、长度、头维度和精度相同时,KV 头越少,缓存越小:
| 方案 | 全称 | Query 头 : KV 头 | KV Cache | 核心取舍 |
|---|---|---|---|---|
| MHA | Multi-Head Attention | 相对最大 | 每个 Query 头有独立 KV | |
| MQA | Multi-Query Attention | 相对最小 | 全部 Query 头共享一组 KV | |
| GQA | Grouped-Query Attention | , | 介于两者之间 | 每组 Query 头共享 KV |
| MLA | Multi-head Latent Attention | 不用此比例概括 | 依实现而定 | 缓存压缩表示,不能直接套前三者的头数比较 |
其他条件相同,MQA 的常规 KV Cache 约为 MHA 的 ,GQA 则约为 。共享程度会影响表示能力,但模型质量还取决于训练,不能据此给出固定排名。
MLA 用较小的潜向量(Latent,即内部压缩表示) 承载 KV 信息,缓存还可能包含单独的位置相关部分。它的存储结构与简单减少 KV 头数不同。
Note
这一节正是 LLM_3_Inference 中 KV Cache 显存公式里 (每层 KV 头数)的来源:从 MHA 到 GQA 再到 MQA, 依次减小,KV Cache 也随之线性变小。架构篇解释它们是什么、怎么共享,推理篇解释它们为何能省显存。
贯穿例子 · 换成现代变体后,主线没有改变
对
小猫跑了一天,它很来说,现代变体改变的是 Block 内部的实现,而不是输入与输出:
- 使用 MoE 时,
很到达 FFN 环节后,Router 只把它送给少数几个专家;其他 Token 可以被路由到不同专家。- 使用 GQA / MQA / MLA 时,
很仍通过 Query 从前文聚合信息,只是多个 Query Head 共享或压缩了 Key/Value,从而减少 KV Cache。无论采用哪种变体,输出仍是
很的新隐藏向量,最终由 LM Head 打分、词表 Softmax 转换为概率。它们调整的是容量、计算量或显存,仍沿用「逐层加工上下文 → 预测下一个 Token」这条主线。
8. 从一次前向走向连续生成
自回归建模要求预测 时只能依赖 。训练数据会将输入与预测目标错开一个位置:表示输入 的隐藏位置负责预测 。Decoder-only Transformer 再通过 Causal Mask(因果掩码) 屏蔽未来位置,使每个隐藏位置只能读取当前及此前的输入 Token,因此预测目标不会泄漏给模型。
Transformer 适合大规模自回归语言模型,主要有四个原因:
- 能够建模长距离依赖:任意两个允许互相可见的位置可以通过 Attention 直接交互。
- 训练可以并行:完整训练序列已知时,Causal Mask 可以一次计算所有位置的下一个 Token 预测。
- 扩展规律清晰:堆叠统一的 Block,便于扩大参数量、数据量和计算量。
- 推理结果可复用:历史 Token 的 Key 和 Value 可以存入 KV Cache,减少自回归生成中的重复计算。
贯穿例子 · 从一次预测进入下一次预测
模型根据
小猫跑了一天,它很生成累后,会把累追加到序列末尾,形成小猫跑了一天,它很累。下一轮再以累的位置为末尾,重复「Embedding → 多层 Transformer Block → 最终 Norm → LM Head → 词表 Softmax」,继续预测下一个 Token。至此,整个前向链路已经串起来:Token ID 决定初始向量,位置信息提供顺序,Attention 收集上下文,FFN 加工特征,残差与归一化维持深层信息流,多层 Block 逐步形成上下文表示,LM Head 和 Softmax 最终给出
累的概率。
Warning
Transformer 架构本身不规定必须使用单向或双向 Attention。是否满足自回归约束,取决于 Attention Mask、输入与目标的排列方式以及训练目标。