← 返回目录 模块 6 / 8

6.1 Transformer 架构深度解析

核心架构

定义与概述

Transformer 是一种完全基于注意力机制(Attention Mechanism)的深度学习架构,由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中首次提出。其核心设计彻底摒弃了此前 NLP 领域中占主导地位的 RNN 和 CNN 结构,转而采用自注意力(Self-Attention)机制来建模序列中任意两个位置之间的依赖关系。

Transformer 架构经历了三大变体的演进:Encoder-only、Decoder-only 和 Encoder-Decoder。不同的变体适应不同的任务类型,而它们共享的核心模块包括 Embedding Layer、Multi-Head Attention、FFN、残差连接和 LayerNorm。

6.1.2 Encoder-only 架构(BERT 系列)

Encoder-only 架构仅使用 Transformer 的编码器部分,最典型的代表是 BERT(Bidirectional Encoder Representations from Transformers)。编码器由多层堆叠的 Transformer 块组成,每层包含一个双向 Self-Attention 子层和一个 FFN 子层。

双向自注意力

与 Decoder 中的因果注意力不同,Encoder 的 Self-Attention 是双向的:每个 token 可以 attend 到序列中的所有其他 token(包括前后方向)。这允许模型捕捉完整的上下文信息:

Attention(Q, K, V) = softmax(Q K^T / sqrt(d_k)) V

这里没有任何因果掩码(causal mask),Attention Score 矩阵是一个完整的 n x n 矩阵,每个位置 i 可以 attend 到所有位置 j ∈ [1, n]。

掩码语言建模(Masked Language Model, MLM)

BERT 的预训练目标是在输入中随机 Mask 掉 15% 的 token,然后让模型预测这些被掩码的原始 token:

输入:  [CLS] 我 [MASK] 喜欢 [MASK] 猫 [SEP]
目标: 预测被掩码的位置 → "很", "这"

MLM 的损失函数为:

L_MLM = - sum_{i ∈ M} log P(x_i | x_{masked})

其中 M 是被掩码的位置集合。由于每个 token 的预测可以并行计算(不依赖之前位置的输出),Encoder-only 模型的训练效率很高。

架构特性

  • 输入表示:Token Embeddings + Segment Embeddings + Position Embeddings
  • 特殊 Token:[CLS](序列开始/分类)、[SEP](分隔符)、[MASK](掩码)、[PAD](填充)
  • 注意力类型:全双向(Full Bidirectional),无因果掩码
  • 典型模型:BERT、RoBERTa、ALBERT、DeBERTa、ERNIE

适用场景

Encoder-only 模型主要用于需要理解而非生成的任务:

任务类型具体应用代表模型
文本分类情感分析、垃圾邮件检测BERT-base
序列标注NER、POS TaggingBERT-base
语义匹配句子对相似度判断RoBERTa
嵌入/检索生成句子/Token 级向量BERT/GTE/E5
QA(抽取式)从文中定位答案BERT-large

6.1.3 Decoder-only 架构(GPT 系列)

Decoder-only 架构仅使用 Transformer 的解码器部分,是当前大语言模型(GPT、LLaMA、Mistral、DeepSeek)的主流范式。每个 Decoder 块包含一个因果自注意力(Causal Self-Attention)子层和一个 FFN 子层。

因果自注意力

因果自注意力通过因果掩码确保每个位置只能 attend 到自身及之前的 token:

Attention(Q, K, V) = softmax(Q K^T / sqrt(d_k) + M) V

其中 M 是下三角掩码矩阵:

M_{i,j} = 0, if j ≤ i
M_{i,j} = -inf, if j > i

自回归生成

Decoder-only 模型通过自回归(Autoregressive)方式生成文本:在每一步 t,模型基于已生成的所有 token x_{

P(x) = ∏_{t=1}^T P(x_t | x_{

在推理时,KV Cache 机制将之前计算过的 Key 和 Value 缓存起来,使每步 Decode 的计算量从 O(n²) 降至 O(n)。

架构特性

  • 输入表示:仅 Token Embeddings + Position Embeddings(无 Segment Embeddings)
  • 注意力类型:因果自注意力(Causal Self-Attention)
  • 预训练目标:Next Token Prediction(NTP)/ Causal LM
  • 生成方式:自回归(逐 token 生成)
  • 典型模型:GPT-2/3/4、LLaMA-1/2/3、Mistral、DeepSeek-V2/V3、Qwen

Decoder-only 成为主流的原因

  1. 通用性:自回归生成可以覆盖几乎所有 NLP 任务(生成、分类、QA、翻译等)
  2. 规模化:实验证明 Decoder-only 架构在 scaling law 下表现最佳
  3. 推理效率:KV Cache 和 PagedAttention 等优化技术专门针对因果注意力设计
  4. 统一训练:统一使用 NTP 目标,不需要 MLM 的 mask-then-predict 复杂调度

6.1.4 Encoder-Decoder 架构(T5, BART)

Encoder-Decoder(也称 Seq2Seq)架构同时包含编码器和解码器,专注于序列到序列的转换任务。一个独立的编码器处理输入序列,产生上下文表示;解码器基于这些表示和之前已生成的 token 自回归地生成输出序列。

交叉注意力(Cross-Attention)

Encoder-Decoder 与 Decoder-only 的核心差异在于交叉注意力。在解码器的每个块中,除了因果自注意力外,还有一个额外的交叉注意力子层,让解码器关注编码器的输出:

CrossAttention(Q_dec, K_enc, V_enc) = softmax(Q_dec K_enc^T / sqrt(d_k)) V_enc

完整的 Decoder 块前向流程:

1. x = SelfAttention(CausalMask(x_norm)) + x      # 因果自注意力
2. x = CrossAttention(x, EncoderOutput) + x        # 交叉注意力
3. x = FFN(x_norm) + x                             # FFN

架构对比:三种 Attention

注意力类型Query 来源Key/Value 来源掩码
Encoder Self-Attention编码器输入编码器输入无(全双向)
Decoder Self-Attention解码器输入解码器输入因果掩码
Decoder Cross-Attention解码器输入编码器输出无

典型模型

模型编码器解码器预训练目标发布日期
T5Encoder (bi-directional)Decoder (causal)Span Corruption2019
BARTEncoder (bi-directional)Decoder (causal)Denoising AE2019
mT5Encoder (bi-directional)Decoder (causal)Span Corruption2020
Flan-T5T5 + Instruction Tuning—多任务微调2022

T5 的 Span Corruption 目标:随机选择输入中的若干个连续 token 片段,每个片段用一个哨兵 token(如 <extra_id_0>)替代,解码器需要生成这些被掩码的片段。

适用场景

  • 机器翻译:Encoder 读源语言,Decoder 生成目标语言
  • 文本摘要:Encoder 读长文本,Decoder 生成摘要
  • 语音识别:Encoder 处理声学特征,Decoder 输出文本
  • 语法纠错:Encoder 读含错句子,Decoder 生成正确句子

6.1.5 核心模块详解

所有 Transformer 变体共享以下四个核心模块:

(1)Embedding Layer

将离散的 token ID 映射到连续向量空间:

Embedding(x) = W_e @ one_hot(x)

其中 W_e ∈ R^{V × d_model} 是嵌入矩阵,V 是词汇表大小。Embedding 层的参数占总模型参数的比例随 V 增大而增大,在 V=100K、d_model=4096 时约占 8 亿参数。

Token Embedding + Position Embedding + Segment Embedding(BERT 风格):

input = TokenEmbedding(token_ids)
       + PositionEmbedding(position_ids)
       + SegmentEmbedding(segment_ids)  # 可选,仅部分模型使用

Token Embedding + RoPE(LLaMA 风格):位置信息通过 RoPE 注入 Q/K 向量,不作为加法嵌入到输入中。

(2)Multi-Head Attention

将 d_model 维度的输入投影到 h 个独立的"头",每个头在 d_k = d_model / h 维子空间上计算注意力,然后将所有头的结果拼接后投影回 d_model:

head_i = Attention(Q W_i^Q, K W_i^K, V W_i^V)
MultiHead(Q, K, V) = Concat(head_1, ..., head_h) W^O

其中 W_i^Q, W_i^K, W_i^V ∈ R^{d_model × d_k}, W^O ∈ R^{h·d_v × d_model}。

vLLM 的 Attention Backend(如 FlashAttention、FlashInfer)在实现中通常将 Q/K/V 的投影融合为单个矩阵乘法以减少内存访问。

(3)Feed-Forward Network(FFN)

FFN 作用于每个位置独立(position-wise),由两个线性变换和一个激活函数组成:

标准 FFN(ReLU/GELU):

FFN(x) = Activation(x W_1 + b_1) W_2 + b_2

门控 FFN(SwiGLU/GeGLU):

FFN(x) = [Activation(x W_gate) ⊙ (x W_up)] W_down

其中 W_1 ∈ R^{d_model × d_ff}(扩展到 4×),W_2 ∈ R^{d_ff × d_model}(投影回)。门控变体引入第三个权重矩阵 W_gate,通常 d_ff 缩小到约 8/3 × d_model 以保持参数量相近。

(4)残差连接 + LayerNorm

残差连接提供梯度高速公路,使深层网络训练稳定:

Post-Norm: x_{l+1} = LayerNorm(x_l + Sublayer(x_l))
Pre-Norm: x_{l+1} = x_l + Sublayer(LayerNorm(x_l))

现代模型几乎全部使用 Pre-Norm 架构。

6.1.6 三种变体的适用场景对比

维度Encoder-only (BERT)Decoder-only (GPT)Encoder-Decoder (T5)
注意力模式全双向因果(单向)双向编码 + 因果解码
计算复杂度O(n²) 训练O(n²) 训练 / O(n) 推理O(n²) 编码 + O(m²) 解码
推理方式一次前向自回归逐 token 生成编码一次 + 自回归生成
预训练目标MLM + NSPNext Token PredictionSpan Corruption / Denoising
训练效率高(可并行预测所有位置)中(需要预测每个位置)较低(编码器-解码器双组件)
生成能力无(需额外解码头)原生支持原生支持
理解能力极强(双向上下文)强很强
典型参数量110M-340M(BERT)7B-671B(GPT/LLaMA)220M-11B(T5)
代表模型BERT, RoBERTa, DeBERTaGPT-4, LLaMA-3, DeepSeek-V3, MistralT5, BART, mT5, Flan-T5
在 vLLM 生态角色Embedding/Reranker 模型文本生成核心部分翻译/摘要模型
最佳任务分类、NER、嵌入、检索对话、代码、创作、推理翻译、摘要、格式转换

6.2 位置编码(Positional Encoding)

架构组件

为什么需要位置编码

Transformer 的 Self-Attention 具有置换不变性(Permutation Invariance):打乱输入 token 的顺序不会改变注意力输出。然而自然语言是有顺序的,必须向模型中注入位置信息。位置编码的核心目标是让模型知道"token 出现在序列中的哪个位置"。

6.2.2 绝对位置编码(Sinusoidal)

原始 Transformer(Vaswani et al., 2017)提出使用固定频率的正弦和余弦函数生成位置编码,不需要学习参数:

PE(pos, 2i) = sin(pos / 10000^{2i/d_model})
PE(pos, 2i+1) = cos(pos / 10000^{2i/d_model})

其中 pos 是位置索引,i 是维度索引(0 ≤ i < d_model/2)。

核心性质

  1. 每个位置有唯一编码:不同 pos 产生不同的 PE 向量
  2. 频率随维度递减:低维度编码高频信息(相邻位置差异大),高维度编码低频信息(长距离变化小)
  3. 相对位置可线性表达:PE(pos+k) 可以表示为 PE(pos) 的线性变换,这使模型理论上能通过自注意力学习相对位置关系

Sinusoidal 编码直接加到输入 Embedding 上:

input = TokenEmbedding(token_ids) + PositionalEncoding(positions)

6.2.3 可学习位置编码(Learned)

BERT 和 GPT 系列使用可学习的 Position Embedding 矩阵 P ∈ R^{max_seq_len × d_model},其中的每一行是一个可训练的参数向量:

input = TokenEmbedding(token_ids) + P[position_ids]

优点:模型可以根据任务数据自动学习最佳的位置表示。缺点:最大序列长度受限于 max_seq_len,超出部分无法处理(需插值或截断)。

6.2.4 RoPE(Rotary Position Embedding)

RoPE 由 Su 等人在 2021 年提出,被 LLaMA、Mistral、Qwen、DeepSeek 等主流模型采用。与加法式位置编码不同,RoPE 通过旋转 Q/K 向量注入位置信息。

数学推导

对于 d 维度的 Q/K 向量,RoPE 将其分成 d/2 个二维子空间对,每对应用独立的旋转:

R_{Θ,m} = block_diag(R(mθ_1), R(mθ_2), ..., R(mθ_{d/2}))

其中每个旋转矩阵为:

R(θ) = [[cos θ, -sin θ],
[sin θ, cos θ]]

旋转频率按几何级数递减:

θ_i = 10000^{-2(i-1)/d}, i = 1, 2, ..., d/2

对于位置 m 的 Query 向量和位置 n 的 Key 向量:

q_m' = R_{Θ,m} · q_m
k_n' = R_{Θ,n} · k_n

相对位置编码的关键性质

旋转后的 Q 和 K 点积只依赖于相对位置差 m - n:

q_m'^T · k_n' = (R_{Θ,m} q_m)^T · (R_{Θ,n} k_n)
= q_m^T · R_{Θ,-m} · R_{Θ,n} · k_n
= q_m^T · R_{Θ,n-m} · k_n

由于 R_{Θ,m} 是正交矩阵,R_{Θ,m}^T = R_{Θ,-m},最终结果只与 n - m 有关,绝对位置 m 和 n 被消去。

RoPE 在 Attention 中的融合

在实际实现中,RoPE 在 Q/K 投影之后、Attention Score 计算之前应用:

# 伪代码:RoPE 的核心计算
def apply_rotary(x, cos, sin):
    # x: [batch, seq, num_heads, head_dim]
    # cos, sin: [seq, head_dim]
    x_rotated = x * cos + rotate_half(x) * sin
    return x_rotated

# rotate_half: 将 x 的后半部分取负并交换位置
# 即 (x1, x2) → (-x2, x1),等价于旋转 90 度

LLaMA 系列为何使用 RoPE

  1. 相对位置建模:天然编码相对距离,模型更容易捕捉长距离依赖
  2. 外推能力:配合 NTK-aware scaling 或 YaRN 等技术,RoPE 可以扩展到训练时未见过的序列长度
  3. 兼容性:与 FlashAttention 等优化 Kernel 的集成非常自然(只需在 Q/K 上预先旋转)

长上下文扩展技术

技术原理效果
Position Interpolation (PI)位置索引 m 缩放为 m/s稳定的 4× 扩展,短距离精度损失
NTK-aware Scaling修改 base 频率调整高频分量更好的外推,保持短距离性能
YaRN温度缩放 + 频率修改最佳扩展效果,LLaMA-2 已验证
DeepSeek Yarn引入 mscale 动态调整温度DeepSeek 系列专用

6.2.5 ALiBi(Attention with Linear Biases)

ALiBi 由 Press 等人在 2021 年提出,是一种无需学习参数的位置编码方案。与修改 Q/K 向量或添加位置嵌入不同,ALiBi 直接在 Attention Score 上添加一个基于相对距离的线性负偏置:

score(i, j) = (q_i · k_j) / sqrt(d_k) - m_h · |i - j|

其中 m_h 是第 h 个注意力头的固定斜率,不经过学习:

m_h = 2^{-h}, h = 1, 2, ..., num_heads

不同头使用不同斜率,使不同头关注不同尺度的位置信息(大斜率的头对短距离更敏感)。

与 RoPE 的完整对比

特性RoPEALiBi
位置注入方式旋转 Q/K 向量在 Attention Score 上加偏置
额外参数无无
外推能力好(需扩展技术)极佳(天然支持,可 train short test long)
实现复杂度中等极简(只需加一个偏置矩阵)
FlashAttention 集成天然兼容需要在 Kernel 内计算偏置
短距离建模精细(旋转保留了相对关系)粗粒(线性惩罚)
主流采用LLaMA, Mistral, Qwen, DeepSeekBLOOM, MPT
理论优雅性高(旋转正交变换)低(启发式偏置)

6.2.6 各方法优缺点对比

方法是否可学习是否偏置是否相对外推能力参数量代表模型
Sinusoidal否加性隐含好0原始 Transformer
Learned是加性否差(需截断)O(max_seq_len × d)BERT, GPT-2
RoPE否乘性(旋转)是好(需扩展)0LLaMA, Mistral, Qwen
ALiBi否Attention Score是极佳0BLOOM, MPT

6.3 激活函数(Activation Functions)

架构组件

6.3.1 ReLU(Rectified Linear Unit)

原始的 Transformer 使用 ReLU 作为 FFN 的激活函数:

ReLU(x) = max(0, x)

特性

  • 稀疏激活:当 x < 0 时输出为 0,引入稀疏性
  • 计算简单:只需一次比较操作,无需指数或三角函数
  • 梯度非饱和:当 x > 0 时梯度恒为 1,缓解梯度消失

死亡 ReLU 问题(Dying ReLU)

当某个神经元在训练过程中权重更新后对所有输入都输出负值时,该神经元将永远输出 0,梯度也为 0,从此不再更新。在大模型中,ReLU 的死亡比例可能高达 10-40%,浪费了模型容量。

6.3.2 GELU(Gaussian Error Linear Unit)

GELU 是 BERT 等早期 Transformer 模型采用的激活函数,定义为输入与标准正态分布累积分布函数的乘积:

GELU(x) = x · Φ(x)
= x · (1/2) [1 + erf(x / sqrt(2))]

其中 Φ(x) 是标准正态分布的 CDF,erf 是误差函数。

实践中的近似计算

由于精确计算 erf 开销较大,使用 tanh 近似:

GELU(x) ≈ 0.5x (1 + tanh[sqrt(2/π) (x + 0.044715x³)])

GELU 的优势

  1. 处处可微:没有 ReLU 在 x=0 处的硬拐点,梯度流动更平滑
  2. 概率解释:GELU(x) = x · P(X ≤ x),X ~ N(0,1),可以理解为"输入的随机 dropout 期望"
  3. 非零负值:对于较小的负值,GELU 仍保留非零输出,保留更多信息
  4. 实验结果:在 BERT/GPT-3 等模型的实验研究中,GELU 一致优于 ReLU

6.3.3 SwiGLU / SiLU

Swish / SiLU 定义

Swish(也称 SiLU, Sigmoid Linear Unit)由 Google 在 2017 年提出:

Swish(x) = x · σ(x)

其中 σ(x) = 1/(1+e^{-x}) 是 sigmoid 函数。

GLU(Gated Linear Unit)

GLU 由 Dauphin 等在 2017 年提出,核心思想是不再对单一路径应用激活函数,而是通过两个线性投影的逐元素乘法实现门控:

GLU(x) = (x W_1 + b_1) ⊗ σ(x W_2 + b_2)

门控路径 σ(x W_2) 控制信息流的通过量。

SwiGLU 的完整定义

SwiGLU 将 GLU 中的 sigmoid 替换为 Swish:

SwiGLU(x) = Swish(x W_gate) ⊗ (x W_up)
= [x W_gate · σ(x W_gate)] ⊗ (x W_up)

最终输出再经过下投影:

FFN_swiglu(x) = SwiGLU(x) · W_down

其中 W_gate, W_up ∈ R^{d_model × d_ff}, W_down ∈ R^{d_ff × d_model}。

LLaMA 为什么使用 SwiGLU

  1. 更强的表达能力:门控机制可以"学习性地选择"哪些信息通过,而非应用固定的非线性变换
  2. 更好的训练动态:经验表明 SwiGLU 在 deep Transformer 中的训练损失更低
  3. 参数量与效果权衡:SwiGLU 有三个权重矩阵(gate/up/down),比标准 FFN(两个)多 50% 参数。为保持总参数量一致,d_ff 从标准 4×d_model 缩小到约 (8/3)×d_model

vLLM 中 SwiGLU 的融合实现:

class SiluAndMul(CustomOp):
    """SwiGLU 的融合实现。
    输入 x 被预先拼接为 [gate_proj(x), up_proj(x)],
    x[..., :d] 是门控路径,x[..., d:] 是上投影路径。
    """
    @staticmethod
    def forward_native(x: torch.Tensor) -> torch.Tensor:
        d = x.shape[-1] // 2
        return F.silu(x[..., :d]) * x[..., d:]

6.3.4 GeGLU

GeGLU 是另一种 GLU 变体,使用 GELU 代替 Swish:

GeGLU(x) = GELU(x W_gate) ⊗ (x W_up)

GeGLU 在编码器模型(如 BERT 风格模型)中较为常见,而 SwiGLU 在解码器-only 的 LLM 中更为流行。

6.3.5 FFN 层激活函数的演进路线

ReLU (2017, Transformer)
  │
  ├──→ GELU (2018, BERT/GPT-3)
  │       │
  │       └──→ GeGLU (2020, T5 v1.1): GELU + 门控
  │
  └──→ Swish/SiLU (2017)
          │
          └──→ SwiGLU (2020, LLaMA/PaLM): Swish + 门控

6.3.6 各激活函数对比

属性ReLUGELUSwish/SiLUSwiGLUGeGLU
公式max(0,x)x·Φ(x)x·σ(x)[x·σ(x)]·upGELU·up
是否门控否否否是(3 个权重矩阵)是(3 个权重矩阵)
计算开销O(1)O(d)(含 erf)O(d)O(3d²)O(3d²)
平滑性非光滑光滑光滑光滑光滑
负值输出0非零负值非零负值由门控控制由门控控制
代表模型原始 TransformerBERT, GPT-3—LLaMA, Mistral, PaLMT5 v1.1
训练损失(实验)基线低 0.5-1%低 0.3-0.5%最低与 SwiGLU 接近

6.4 归一化(Normalization)

架构组件

6.4.1 LayerNorm(层归一化)

Layer Normalization(LayerNorm)由 Ba 等人在 2016 年提出,对同一样本的所有特征进行归一化。与 Batch Normalization 对不同样本的同一特征归一化不同,LayerNorm 不受 batch size 影响,特别适合 NLP 中的变长序列。

给定输入 x ∈ R^{d_model},LayerNorm 的计算为:

LayerNorm(x) = γ ⊙ (x - μ) / sqrt(σ² + ε) + β

其中:

  • μ = (1/d_model) ∑ x_i:输入特征的均值
  • σ² = (1/d_model) ∑ (x_i - μ)²:输入特征的方差
  • ε:很小的常数(如 10⁻⁶),防止除零
  • γ, β ∈ R^{d_model}:可学习的缩放和偏移参数

核心作用

  1. 稳定激活分布:防止层与层之间激活值的尺度爆炸或消失
  2. 加速收敛:归一化后的输入具有更稳定的梯度
  3. 降低对初始化的敏感性:减少参数初始化对训练结果的影响

6.4.2 RMSNorm(均方根归一化)

RMSNorm 由 Zhang 和 Sennrich 在 2019 年提出,是 LayerNorm 的简化变体。与 LayerNorm 同时减去均值并除以标准差不同,RMSNorm 仅除以 RMS(均方根),不计算也不减去均值:

RMSNorm(x) = γ ⊙ x / RMS(x)

RMS(x) = sqrt((1/d_model) ∑ x_i² + ε)

相比 LayerNorm 的差异

  1. 计算效率:省去了均值计算,减少约一半的统计量计算。在大模型中(数百层 × 大量 token),节省显著
  2. 理论等价性:在深层网络中,激活值均值往往接近零,减去均值的收益有限
  3. 更少的参数:只有缩放参数 γ,没有偏移参数 β

vLLM 中 RMSNorm 的实现:

class RMSNorm(CustomOp):
    """Root mean square normalization."""
    def __init__(self, hidden_size: int, eps: float = 1e-6):
        self.hidden_size = hidden_size
        self.variance_epsilon = eps
        self.weight = nn.Parameter(torch.ones(hidden_size))

    def forward_native(self, x: torch.Tensor):
        return ir.ops.rms_norm(x, self.weight.data, self.variance_epsilon)

6.4.3 Pre-norm vs Post-norm

Post-norm(后归一化)

原始 Transformer 采用 Post-norm:归一化放在子层之后:

x_{l+1} = LayerNorm(x_l + Attention(x_l))
x_{l+1} = LayerNorm(x_l + FFN(x_l))

问题:训练初期,残差路径 x_l 和子层输出 Attention(x_l) 的尺度可能差异巨大,归一化后的梯度不稳定,需要精心设计的 warmup 策略。

Pre-norm(前归一化)

现代 LLM(LLaMA、GPT-3)普遍采用 Pre-norm:归一化放在子层之前:

x_{l+1} = x_l + Attention(LayerNorm(x_l))
x_{l+1} = x_l + FFN(LayerNorm(x_l))

优势:

  • 训练稳定性:子层输入已归一化,避免梯度爆炸
  • 无需复杂学习率调度:可省去或缩短 warmup 阶段
  • 支持更深网络:实验证明 Pre-norm 能支持数百层 Transformer

潜在缺点:归一化在残差路径之前,深层中各层对最终输出的贡献可能趋于均等,削弱了深层表示的"层次性"。但实践中这一缺点被训练稳定性的大幅提升所抵消。

6.4.4 各归一化方法对比

维度LayerNormRMSNormPost-normPre-norm
归一化方式(x-μ)/σx/RMS(x)子层后归一化子层前归一化
统计量计算均值 + 方差均方根同 LayerNorm/RMSNorm同 LayerNorm/RMSNorm
可学习参数γ, β(2个)γ(1个)取决于使用 LN 或 RMS取决于使用 LN 或 RMS
计算开销O(2d)O(d)与归一化方法相同与归一化方法相同
训练稳定性稳定稳定较差(需 warmup)稳定(无需 warmup)
代表模型BERT, T5LLaMA, Mistral, Qwen原始 TransformerGPT-3, LLaMA, DeepSeek
实现复杂度标准简化标准标准

6.5 混合专家模型(Mixture of Experts, MoE)

架构变体

定义与概述

MoE(混合专家模型)是一种神经网络架构范式,核心思想是条件计算(Conditional Computation):不是为每个输入激活全部参数,而是根据输入内容动态选择并激活一部分"专家"子网络。MoE 概念最早由 Jacobs 等人在 1991 年提出,在 LLM 时代由 DeepSeek、Mixtral 等模型发扬光大。

MoE 的核心优势:

  • 参数扩展:在推理成本不显著增加的情况下大幅增加总参数量
  • 专业化学习:不同专家可学习不同输入模式
  • 计算效率:活跃参数量远小于总参数量

MoE 层结构

在标准 Transformer 中,FFN 层是密集的(所有参数参与计算)。在 Sparse MoE 中,FFN 被替换为 N 个并行的专家网络 E₁, ..., E_N,每个专家是一个小型 FFN。

输入 Token x
    │
    v
[Router/Gating Network]  →  计算每个专家的分数
    │
    v
[Top-K Selection]  ←  选择分数最高的 K 个专家
    │
    v
[E₁] [E₂] ... [Eₙ]  (N 个专家 FFN,大部分不激活)
  │    │         │
  v    v         v
[Weighted Sum]  =  Σ g_i · E_i(x)  对选中的 K 个专家加权求和
    │
    v
  输出

Router/Gating Network

路由网络是 MoE 的核心组件,负责决定每个 token 应该分配给哪些专家:

h(x) = x · W_g + b_g # 线性投影到 N 维
g_i(x) = softmax(h(x))_i # Softmax 归一化

其中 W_g ∈ R^{d_model × N}, N 是专家数量。

Top-K Routing

对于每个 token,选择门控值最高的 K 个专家:

𝒯(x) = TopK({g₁(x), ..., g_N(x)}, K)

对选中的专家门控值重新归一化:

g'_i(x) = g_i(x) / Σ_{j∈𝒯(x)} g_j(x), for i ∈ 𝒯(x)

最终输出为选中专家输出的加权和:

y = Σ_{i∈𝒯(x)} g'_i(x) · E_i(x)

Top-1 vs Top-K 对比:

属性Top-1 (K=1)Top-K (K=2/4)
实现复杂度简单中等
表达力受限(仅一个专家)强(多专家融合)
负载均衡困难(专家竞争激烈)更容易
通信开销低高(K 越大越高)
典型使用早期 MoEMixtral 8x7B (K=2), DeepSeek-V3 (K=8)

Load Balancing Loss(负载均衡损失)

负载不均衡问题

如果没有约束,路由网络倾向于将所有 token 分配给少数"受欢迎"的专家,导致:

  • 专家崩溃:大部分专家退化,少数专家承担所有工作
  • 计算效率下降:有效利用的参数很少
  • 训练不稳定:梯度集中在少数路径上

辅助损失函数

Importance Loss(重要性损失):鼓励每个专家接收相似的总门控值:

L_importance = N · Σ_{i=1}^N (1/B · Σ_{x∈batch} g_i(x))²

Load Loss(负载损失):鼓励每个专家处理相似数量的 token:

L_load = N · Σ_{i=1}^N (1/B · Σ_{x∈batch} 𝟙[i ∈ TopK(x)])²

总损失:L_total = L_task + α · L_aux,α 通常取 0.01。

Expert Choice Routing

核心思想

由 Google 在 2022 年提出,反转路由方向:让专家选择 token,而非 token 选择专家。

数学描述

对于专家 i,从 batch 中选择 token 集合:

𝒮_i = TopC({g_i(x₁), ..., g_i(x_B)}, C)

其中 C 是每个专家的容量(capacity)。

优缺点

属性Token-ChoiceExpert-Choice
负载均衡需辅助损失 + Capacity Factor天然完美均衡
Token Dropping可能(超容量时丢弃)可能(未被任何专家选中时)
实现复杂度较低较高
通信模式不可预测可预测(固定大小)
典型使用Mixtral, DeepSeek部分 Google 研究模型

DeepSeek-V2/V3 的 MoE 架构

共享专家 + 路由专家的混合设计

DeepSeek-V3(671B 总参数,37B 活跃参数)采用了创新的 MoE 设计:

  • 共享专家(N_s 个):所有 token 都会经过这些专家,学习通用语言表示
  • 路由专家(N_r 个):每个 token 通过 Top-K 路由选择 K_r 个

这种设计保证了基础语言能力的稳定性(共享专家),同时保留了多样化的语义模式学习(路由专家)。

无辅助损失的负载均衡

DeepSeek-V3 提出了无需辅助损失的动态负载均衡方法:

  • 动态监测每个专家的负载
  • 对过载专家在路由分数上加动态偏置(抑制选择)
  • 对欠载专家加反向偏置(鼓励选择)
  • 偏置根据实时统计量调整,不通过梯度学习

MLA(Multi-Head Latent Attention)+ MoE 组合

DeepSeek 的另一创新是将 MLA 与 MoE 结合。MLA 通过低秩压缩降低 KV Cache 存储量:

c_t^KV = W_DKV · h_t # 压缩到低维潜在空间
k_t^h = W_UK_h · c_t^KV, v_t^h = W_UV_h · c_t^KV # 解压缩到每个头

推理时只缓存 c_t^KV(低维),而非完整的 K 和 V,大幅减少显存占用。

MoE 在推理中的挑战

挑战原因vLLM 解决方案
显存占用增加需要加载所有专家参数Expert Parallelism(EP)将专家分布到不同 GPU
通信开销All-to-all 通信传输中间激活Fused MoE Kernel 减少通信次数
负载不均衡某些 GPU 上专家过载EPLB(Expert Parallel Load Balancing)
Kernel 效率低稀疏激活模式利用率低于密集 GEMMFused MoE CUDA Kernel,Monolithic/Modular 实现

在 vLLM 中,MoE 通过 vllm/model_executor/layers/fused_moe/ 目录下的融合 Kernel 实现,支持 Monolithic 和 Modular 两种执行策略。

Dense vs MoE 对比

模型架构总参数量活跃参数量推理 FLOPs/token
LLaMA-2 70BDense70B70B~140B
Mixtral 8x7BMoE (8 experts, Top-2)47B~13B~26B
Mixtral 8x22BMoE (8 experts, Top-2)141B~39B~78B
DeepSeek-V2MoE236B21B~42B
DeepSeek-V3MoE (256 experts, Top-8)671B37B~74B

MoE 以与密集模型相当的推理 FLOPs 实现了更大的总参数量,这意味着更高的知识容量和更强的模型能力。

6.6 状态空间模型(SSM / Mamba)

架构变体

定义与概述

State Space Model(SSM,状态空间模型)源于控制工程,用于描述动态系统。在深度学习领域,SSM 被重新引入作为 Transformer 的替代架构,解决 O(n²) 计算复杂度在超长序列上的瓶颈问题。

Mamba 由 Gu 和 Dao 在 2023 年提出,通过选择性状态空间(Selective State Space)在保持线性 O(n) 复杂度的同时实现与 Transformer 相媲美的建模能力。Mamba-2(2024)通过状态空间对偶性(SSD)统一了 SSM 和 Attention 的理论框架。

6.6.2 S4(Structured State Space)

连续时间状态空间模型

经典的连续 SSM 由两个方程定义:

h'(t) = A · h(t) + B · x(t) # 状态方程
y(t) = C · h(t) + D · x(t) # 输出方程

其中:

  • x(t) ∈ R:输入信号(标量)
  • h(t) ∈ R^N:隐藏状态向量(N 是状态维度)
  • y(t) ∈ R:输出信号(标量)
  • A ∈ R^{N×N}:状态转移矩阵
  • B ∈ R^{N×1}, C ∈ R^{1×N}:输入/输出投影矩阵
  • D ∈ R:跳跃连接(通常设为 0)

离散化(Zero-Order Hold)

使用零阶保持(ZOH)将连续 SSM 离散化:

h_k = bar_A · h_{k-1} + bar_B · x_k
y_k = C · h_k

bar_A = exp(Δ · A)
bar_B = (ΔA)^{-1}(exp(ΔA) - I) · ΔB

HiPPO 初始化

S4 使用 HiPPO(High-order Polynomial Projection Operators)理论初始化 A 矩阵,使隐藏状态编码输入历史的压缩表示。HiPPO 矩阵是特定下三角矩阵,其特征值具有负实部,确保系统稳定性。

S4 的三种等价计算模式

模式公式复杂度用途
循环模式(Recurrent)h_k = bar_A h_{k-1} + bar_B x_kO(nN)推理(高效,固定状态)
卷积模式(Convolutional)y = K * x, K = (C·B, C·Ā·B, ...)O(n log n)训练(并行)
连续模式(Continuous)保持连续参数,按需离散化—非均匀采样

这种三模式等价性是 S4 的理论基石:训练用卷积(并行),推理用循环(高效)。

6.6.3 S6 / Mamba 的选择性状态空间

LTI 的局限

S4 是线性时不变(LTI)系统:A, B, C 对所有时间步固定。这导致 SSM 无法根据内容选择性记忆或遗忘——在"选择性复制"和"归纳头"等合成任务上,LTI SSM 表现远逊于 Transformer。

选择性机制(S6)

Mamba 的核心创新:让参数 B, C 和步长 Δ 依赖于输入 x:

Δ_k = softplus(Linear_Δ(x_k))
B_k = Linear_B(x_k)
C_k = Linear_C(x_k)

然后使用动态参数离散化和状态更新:

bar_A_k = exp(Δ_k · A)
bar_B_k = Δ_k · B_k
h_k = bar_A_k ⊙ h_{k-1} + bar_B_k · x_k
y_k = C_k · h_k

关键变化:

  • Δ_k 决定"关注当前输入还是依赖历史"。Δ 大 → 更关注当前输入;Δ 小 → 更依赖历史记忆
  • B_k 决定"当前输入如何影响状态"
  • C_k 决定"从状态中提取什么信息产生输出"

硬件感知的并行扫描

选择性 SSM 打破了 LTI 假设(无法使用卷积模式),Mamba 的第二个贡献是硬件感知的并行扫描算法:

  1. 并行扫描:状态更新 h_k = bar_A_k h_{k-1} + B_k x_k 可通过分治策略在 O(log n) 并行步内完成
  2. Kernel Fusion:将输入投影、离散化、选择性扫描、输出投影融合为单个 CUDA Kernel
  3. 重计算:反向传播时重新计算中间状态,避免从 HBM 读取大量中间结果

6.6.4 Mamba-2 的状态空间对偶性(SSD)

核心发现

Mamba-2 发现:SSM 和 Attention 之间存在深刻的数学对偶性。

对于标量结构化 SSM(A_t 是标量),序列变换等价于:

SSM 形式(循环):

h_t = a_t h_{t-1} + b_t x_t, y_t = c_t · h_t

Attention 形式(矩阵乘法):

y = (L ⊙ C · B^T) · x

其中 L 是下三角矩阵(元素为衰减因子的累积乘积)。这种形式与因果线性注意力几乎相同:

Y = (L ⊙ Q · K^T) · V

将 (C, B, X) 映射为 (Q, K, V),两者完全等价。

Mamba-1 vs Mamba-2

特性Mamba-1 (S6)Mamba-2 (SSD)
A 结构对角矩阵(每维度独立)标量乘单位阵(所有维度共享)
头维度P=1(每通道独立 SSM)P>1(类似 MHA,如 64/128)
状态维度 N较小(通常 16)较大(64-256)
训练方式并行扫描块分解(混合 SSM + Attention)
训练速度较慢(非 GEMM 友好)快(大量矩阵乘法)
推理速度快快

SSD 块分解算法

Mamba-2 的 SSD 算法结合 SSM 和 Attention 的优点:

  1. 将序列分成若干块(chunk)
  2. 块内使用 Attention 形式(矩阵乘法),利用 GPU GEMM 效率
  3. 块间用 SSM 形式传递状态,保持线性复杂度

6.6.5 SSM 与 Transformer 的对比

维度Transformer AttentionMamba/SSM
训练时间复杂度O(n²d)O(ndN)
推理时间复杂度(每步)O(nd)(KV Cache)O(dN)(固定)
训练空间复杂度O(n²)(注意力矩阵)O(nN)
推理空间复杂度O(nd)(线性增长)O(Nd)(固定)
序列长度扩展性二次增长,受限线性增长,可扩展
短序列(n<2K)效率高(高度优化)中
超长序列(n>128K)不可行可行
生态成熟度极高发展中

6.6.6 注意力机制 vs 状态空间模型的本质差异

本质属性AttentionSSM (Mamba)
建模方式内容寻址(content-based addressing)状态压缩(state compression)
记忆机制显式存储所有历史(KV Cache 线性增长)隐式压缩到固定状态(状态大小恒定)
信息检索精确匹配(softmax 后权重显式)压缩重建(从状态中提取)
上下文窗口理论上无限制,但受内存限制理论上无限制,状态固定
信息损失无(保留全部历史)有(压缩到有限状态有信息损失)
硬件友好性低(内存带宽瓶颈在长序列时严重)高(状态小,读带宽需求低)
并行度序列维度完全并行序列维度需扫描(但可并行化)

本质差异的核心是:Attention 不压缩任何信息(使用所有历史 token 的精确表示),而 SSM 将历史压缩到固定大小的状态中。这使 SSM 具有线性的时间和空间复杂度,但代价是信息压缩带来的表达精度损失。选择性机制(S6)通过让模型自行决定压缩哪些信息来弥补这一缺陷。

6.7 Tokenization(分词器)

基础组件

定义与概述

Tokenization 是将原始文本转换为模型可处理的数值表示(token IDs)的过程。它是 LLM 流水线的第一步,直接影响模型的词汇表大小、序列长度、多语言能力和上下文窗口利用率。

6.7.2 BPE(Byte Pair Encoding)

训练算法

BPE 从字符/字节级开始,迭代合并最频繁的相邻 token 对,逐步构建子词词汇表:

  1. 初始化:词汇表 = 256 个单字节 token
  2. 统计相邻 token 对 (t_i, t_{i+1}) 的出现频率
  3. 找到频率最高的 pair:(t_a, t_b) = arg max count(t_i, t_j)
  4. 创建新 token t_new = t_a + t_b,加入词汇表,分配新 ID
  5. 在所有文本中将 (t_a, t_b) 替换为 t_new
  6. 记录合并规则 (t_a, t_b) → t_new
  7. 重复步骤 2-6 直到词汇表达到目标大小

编码(推理时)

按合并规则优先级(先学到的优先级高)从字节序列自底向上合并:

def encode(self, text):
    tokens = list(bytearray(text, "utf-8"))
    symbols = [self.vocab[id_num] for id_num in tokens]
    while True:
        pairs = zip(symbols, symbols[1:])
        # 找到优先级最高的 pair
        bigram = min(pairs, key=lambda p: self.bpe_ranks.get(p, inf))
        if bigram not in self.bpe_ranks:
            break
        # 合并所有出现
        symbols = merge(symbols, bigram)
    return [self.inverse_vocab[sym] for sym in symbols]

6.7.3 SentencePiece

特点

SentencePiece 是 Google 开发的分词库,将空格视为普通字符(用 ▁ U+2581 表示),因此:

  • 不需要预先的空格分词
  • 可端到端地从原始文本学习
  • 对无明确词边界的语言(中文、日文)更友好

Unigram Language Model 模式

Unigram 算法的核心思路:从大型初始子词集合出发,迭代删除对似然贡献最小的子词。

训练(EM 算法):

  1. 初始化:提取所有频繁字符序列作为初始词汇表(数十万个)
  2. E-step:对于每个句子,找到所有可能的分割方式,计算每种分割的概率
  3. M-step:根据期望分割统计重新估计每个子词的概率
  4. 剪枝:删除对似然贡献最小的子词,逐步减小词汇表到目标大小

编码:使用维特比算法(Viterbi)找到概率最高的分割路径。

6.7.4 BBPE(Byte-level BPE)

BBPE 从字节级而非字符级开始。由于 UTF-8 中任何字符最多由 4 个字节表示,初始词汇表固定为 256 个字节值,完全与语言无关。

英文 "hello" → UTF-8 字节: [104, 101, 108, 108, 111]
中文 "你"   → UTF-8 字节: [228, 189, 160]

优势与劣势

特性标准 BPE(字符级)BBPE(字节级)
初始词汇表语言相关(数万 Unicode 字符)固定 256 字节
语言无关性否是
OOV(词表外)有无(任何 UTF-8 文本可编码)
序列长度较短对非拉丁语言较长
代表模型早期 NMT 模型GPT-2/3/4, LLaMA-3

6.7.5 tiktoken

tiktoken 是 OpenAI 开发的高性能 BPE tokenizer,使用 Rust 实现核心算法:

import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")  # GPT-4 tokenizer
tokens = encoding.encode("Hello world!")
# tokens: [9906, 1917, 0]

核心优化:Rust 的快速哈希表 + 正则表达式预处理将文本分成可合并的块,实现高效批量编码。

6.7.6 特殊 Token

特殊 Token作用使用模型
<s> / [BOS]标记序列开始LLaMA, BERT
</s> / [EOS]标记序列结束,触发停止生成LLaMA, GPT
[PAD]填充变长序列到固定长度BERT, T5
[MASK]掩码语言建模中的被预测位置BERT 系列
[UNK]未知字符(BBPE 中不需要)传统 tokenizer
<|im_start|> / <|im_end|>对话角色标记Qwen
[INST] / [/INST]指令标记LLaMA-2 Chat
<|endoftext|>序列分隔GPT 系列

6.7.7 Vocabulary Size 的影响

词汇表大小嵌入参数量(d=4096)序列长度效率多语言公平性代表模型
32,000~2.6 亿较短差(非拉丁语言 token 数多)LLaMA-2
50,257~4.1 亿中等中等GPT-2, GPT-3
100,256~8.2 亿较高效较好GPT-4 (cl100k_base)
128,256~10.5 亿高效较好LLaMA-3
151,936~12.4 亿高效中文优化Qwen-2
199,997~16.4 亿最高效优秀GPT-4o (o200k_base)

趋势:新一代模型倾向于更大的词汇表(100K+),以支持更多语言和更高效的编码(减少每个词的 token 数)。

BPE vs Unigram vs BBPE 对比

维度BPEUnigramBBPE
训练方向从小到大(合并)从大到小(删除)同 BPE
编码方式贪婪合并Viterbi 最优路径同 BPE
基础单元字符字符字节
空格处理需预处理原生支持需预处理
语言无关性差中等极好
多语言性能差好好
典型模型GPT 系列 (via tiktoken)T5, LLaMA-2GPT-2/3/4, LLaMA-3

6.8 推理引擎对比

生态

6.8.1 vLLM

定位:高吞吐 LLM 推理引擎,行业事实标准。

核心创新:

  • PagedAttention:分页式 KV Cache 管理,内存利用率从 20-40% 提升至 95%+
  • Continuous Batching:迭代级调度,GPU 几乎始终保持满载
  • Chunked Prefill:长 Prefill 分块与 Decode 交错,降低 ITL 抖动
  • Prefix Caching:Block Hash 内容寻址,多轮对话和 RAG 场景收益显著

优势:社区最活跃(GitHub 50K+ stars)、支持模型最广泛(HuggingFace 生态)、多 GPU 扩展性好(TP/PP/EP)、支持量化(FP8/INT4/AWQ/GPTQ)、V1 架构重构后性能大幅提升。

6.8.2 TGI(Text Generation Inference)

定位:HuggingFace 生态的 LLM 推理服务器。

核心特性:

  • Safetensors 安全加载
  • FlashAttention 集成
  • 支持 GPTQ/AWQ/BitsAndBytes 量化
  • OpenAI 兼容 API

与 vLLM 对比:

维度TGIvLLM
核心创新HuggingFace 生态集成PagedAttention
易用性高(HF 生态无缝)中等
吞吐量高更高
多模态较好中等
部署方式Docker 为主Python 库 / 服务

6.8.3 TensorRT-LLM

定位:NVIDIA 官方 LLM 推理优化框架,在 NVIDIA GPU 上榨取最大性能。

核心优化:

  • Kernel Fusion:将多个小算子融合为单个 CUDA Kernel
  • Plugin 系统:预优化的 FMHA、GptAttentionPlugin 等
  • FP8/INT8/INT4 量化:TensorRT Model Optimizer 原生支持
  • Inflight Batching:NVIDIA 版 Continuous Batching

优势与局限:

优势局限
极致性能(NVIDIA GPU 最高吞吐)仅支持 NVIDIA GPU
生产级稳定性编译时间长(数分钟到数小时)
Triton Inference Server 无缝集成灵活性低(新模型需写 Plugin)
Hopper FP8 Transformer Engine 原生支持部分组件闭源

6.8.4 SGLang

定位:结构化 LLM 推理框架,引入编程语言概念控制生成过程。

核心创新:

  • RadixAttention:基于 Radix Tree 的 KV Cache 管理和前缀复用,比 vLLM 的 Prefix Caching 更高效
  • Structured Generation:原生支持正则 / CFG 约束输出
  • Zero-overhead CPU Scheduler:将调度开销从 GPU 步循环中移除

与 vLLM 对比:

维度SGLangvLLM
核心创新RadixAttention + Structured Generation DSLPagedAttention
编程模型结构化编程语言传统 API
前缀复用自动、高效(Radix Tree)需显式开启
多轮对话原生优化支持
结构化输出原生支持通过外部工具
社区规模较小(增长迅速)行业最大

6.8.5 llama.cpp

定位:纯 C/C++ LLM 推理实现,不依赖 PyTorch/CUDA。

核心特性:

  • GGUF 格式:自包含模型文件,支持多种量化级别
  • CPU 推理优化:AVX/AVX2/AVX-512/NEON SIMD 指令 + 多线程
  • Metal / Vulkan / SYCL:支持 Apple Silicon、跨平台 GPU 和 Intel GPU

常用 GGUF 量化级别:

量化类型每权重位数7B 模型大小质量损失
F161613 GB无
Q8_086.7 GB极小
Q5_K_M5.54.5 GB小
Q4_K_M4.53.8 GB中等
Q3_K_M3.53.0 GB明显
Q2_K2.52.2 GB显著

6.8.6 综合对比

引擎最佳场景吞吐量延迟易用性硬件支持社区活跃度是否开源
vLLM高吞吐生产服务、多租户极高低中NVIDIA/AMD/Intel/XPU最活跃 (50K+ ⭐)完全开源
TGIHuggingFace 生态集成高低高NVIDIA/Intel活跃开源
TensorRT-LLMNVIDIA GPU 极致性能最高最低低NVIDIA only高 (NVIDIA 维护)部分开源
SGLang多轮对话、结构化生成高低中NVIDIA/AMD增长迅速开源
llama.cpp本地/边缘推理、CPU低高高CPU/GPU/Metal/Vulkan极活跃开源

6.8.7 选型建议

需求场景推荐引擎理由
生产环境高吞吐 API 服务vLLM社区最活跃,PagedAttention 内存效率最高,支持模型最广
NVIDIA GPU 极致性能TensorRT-LLMKernel Fusion + FP8 + Inflight Batching 组合性能最优
快速原型、HF 生态TGI一键 docker 部署,与 HF Hub 无缝集成
多轮对话 / Agent 系统SGLangRadixAttention 自动前缀复用,结构化生成原生支持
本地隐私推理 / 边缘设备llama.cppCPU/手机均可运行,GGUF 量化灵活,数据不出本地
AMD / Intel / 国产 GPUvLLM硬件支持最广泛,社区驱动适配
需要 JSON / 结构化输出SGLang / vLLM+OutlinesSGLang 原生支持,vLLM 通过 Guidance/Outlines 实现
学术研究 / 快速实验vLLM / llama.cppvLLM Python API 灵活,llama.cpp 无需 GPU

模块六概念依赖关系

全景
graph TD
    T[Transformer 架构] --> PE[位置编码: RoPE/ALiBi]
    T --> AF[激活函数: GELU/SwiGLU]
    T --> NM[归一化: LayerNorm/RMSNorm]
    NM --> PN[Pre-norm/Post-norm]
    MoE[MoE 混合专家模型] --> T
    MoE --> NM
    MoE --> AF
    MoE --> TK[Tokenization]
    SSM[SSM/Mamba] --> T
    TK --> ALL[所有模型的前置条件]
    IE[推理引擎] --> T
    IE --> PE
    IE --> AF
    IE --> NM
    IE --> MoE
    IE --> SSM
    IE --> TK
        

本模块共覆盖 8 个大节、40+ 个核心概念,与 vLLM 推理优化相关的底层 AI 基础知识至此全部接入。