Skip to content

01 LLM 理论基础

学习理念:从 GPT-1 到 ChatGPT 的演进路线上,每个模型的关键创新是什么?Transformer 内部每个组件(位置编码、注意力、FFN、归一化)的演进路线。不用记所有细节,重点是建立"什么技术解决了什么问题"的认知框架。

海外对标:OpenAI GPT 系列、Google Transformer、Meta LLaMA(SwiGLU/RMSNorm)、DeepSeek(MoE)

本节 AI 替代率:~85% | 人工干预率:~15%

角色能力范围
🤖 AI 擅长解释 GPT 各代差异、Transformer 组件原理、技术对比
👤 人类需理解"为什么"——RoPE 为什么优于绝对编码?GQA 为什么在效率和质量间取得平衡?

📌 来源说明:本节内容提取自原始笔记第1-2章(GPT演进 + Transformer架构演进),按模块重组,省略过渡性文字。

📖 阅读优先级

等级章节说明
🟡 理解即可一、GPT 演进了解三段范式即可
🟡 理解即可三、位置编码知道 RoPE 优于绝对编码即可
🔴 必须深入四、注意力 + KV CacheAgent 开发核心——决定上下文长度和显存
🟢 直接跳过五、FFN + 七、归一化模型架构师才需要
🟢 直接跳过六、MoE训练框架工程师才需要

一、GPT 系列演进

GPT发展历程总览

1.1 GPT-1(2018)

维度内容
架构Transformer Decoder-only(首次验证单向语言模型)
关键创新预训练 + 微调范式:先在大规模无标注语料上预训练,再在小规模标注数据上微调
位置编码可学习位置嵌入(Learned Positional Embedding)——模型自己学
参数1.17亿
数据BooksCorpus(约 8 亿词)
意义验证了 Decoder-only + 预训练范式的有效性

GPT-1架构图

1.2 GPT-2(2019)

维度内容
架构延续 Decoder-only
关键创新零样本(Zero-shot)泛化——无需微调,仅凭 prompt 即可完成任务
结构变化Pre-LayerNorm(从 PostNorm 改成 PreNorm,解决深层梯度不稳定)
参数15.42亿(≈GPT-1 的 10 倍)
数据WebText(40GB,800 万网页)
意义首次发现规模效应(Scaling Effect):参数越大性能越好

1.3 GPT-3(2020)

维度内容
架构Decoder-only,交替使用稠密 + 局部带状稀疏注意力
关键创新上下文学习(In-Context Learning)——通过输入中的示例即可学习,无需梯度更新
参数1750亿(GPT-2 的 100 倍)
数据570GB,约 3000 亿 token
意义规模扩展证明"大力出奇迹"

GPT-3架构示意

1.4 InstructGPT(2022)

维度内容
架构与 GPT-3 相同
关键创新三阶段训练范式——解决了 GPT-3 生成结果"不听话"的问题
三阶段SFT(监督微调,人工标注指令-回答对)→ RM(训练奖励模型,人工排序)→ RLHF(PPO 强化学习优化)
意义从"预测下一个词"升级为"理解和执行人类指令"——对齐(Alignment)

InstructGPT三阶段训练

1.5 ChatGPT(2022)

维度内容
架构与 InstructGPT 同技术路线
关键创新对话格式数据——多轮对话训练,强调上下文保持
能力连贯对话、错误修正、逻辑判断、安全防护
意义LLM 从研究走向全民应用

ChatGPT对话示意

1.6 三阶段训练范式(行业标准)

预训练(Pre-training) → 监督微调(SFT) → 对齐(Alignment)
    │                         │                    │
    ├ 海量无标注语料          ├ 人工指令-回答      ├ RLHF / DPO / ORPO
    ├ 自回归语言建模          ├ 指令理解能力       ├ 人类偏好对齐
    └ 通用语言能力            └ 任务执行能力       └ 安全 & 有用性

二、LLM 整体架构

LLM整体架构

输入层                      Transformer Block × N                  输出层
┌──────────┐    ┌──────────────────────────────────────┐    ┌──────────┐
│ Token    │    │  ┌──────────┐  ┌──────────┐          │    │ Linear   │
│ Embedding│ →  │  │ Attention│ →│   FFN    │ ... →   │ →  │ Project  │
│ +        │    │  │(MHA/GQA) │  │(SwiGLU)  │          │    │ + Softmax│
│ Position │    │  └──────────┘  └──────────┘          │    └──────────┘
└──────────┘    └──────────────────────────────────────┘

Transformer Block结构


三、位置编码演进

3.1 正余弦位置编码(Sinusoidal)

  • 公式:固定函数生成,PE(pos, 2i) = sin(pos/10000^(2i/d))PE(pos, 2i+1) = cos(...)
  • 特点:无需训练、可外推(推理时可处理更长序列)、隐含相对位置信息
  • 缺陷:实际注意力计算中,可学习参数矩阵 W 会破坏正余弦的结构优势

3.2 可学习位置编码(Learned)

  • 特点:为每个位置分配一个独立可训练向量,由数据驱动学习
  • 优点:灵活性高,训练简单
  • 缺陷无法外推(超出最大序列长度的位置无嵌入)、参数量线性增长

3.3 旋转位置编码(RoPE)🔥 当前主流

由国内研究者苏剑林提出,直接作用于 q 和 k 向量:

核心思想:将 q/k 按维度两两分组,每组视为一个二维向量,施加与位置相关的旋转。

数学原理(简化版):

位置 m 的 q 向量的第 j 对二维子向量 → 旋转 m × θ_j 度
位置 n 的 k 向量的第 j 对二维子向量 → 旋转 n × θ_j 度

注意力得分中的第 j 对子向量贡献:
    <q_m^(j), k_n^(j)> → 旋转后仅依赖 (m - n),即相对位置差

三大优势

  • 显式编码相对位置——注意力得分天然依赖 m - n
  • 零参数且训练稳定——固定旋转矩阵,不随训练破坏几何性质
  • 更容易外推——数学结构不依赖训练长度

RoPE位置编码


四、注意力机制演进

4.1 MHA(Multi-Head Attention)——原始方案

MHA示意图

每个注意力头独立维护自己的 Q、K、V:

python
self.W_query = nn.Linear(d_in, d_out, bias=qkv_bias)  # 每个头一套
self.W_key   = nn.Linear(d_in, d_out, bias=qkv_bias)
self.W_value = nn.Linear(d_in, d_out, bias=qkv_bias)

问题:推理时 KV Cache 中每个头都缓存独立的 K/V,缓存量 = n_layers × n_heads × seq_len × head_dim。模型越大,缓存越大。

4.2 KV Cache —— 推理加速关键

🔥 P0 必须理解:自回归生成时,如果不缓存,每生成一个 token 都要重新计算所有历史 token 的 K/V。KV Cache 把历史 K/V 存下来,只算当前 token。

KV Cache加速示意

python
# Prefill 阶段:计算 prompt 所有 token 的 K/V 并缓存
logits = model(prompt, use_cache=True)  # cache_k, cache_v 被填充

# Decode 阶段:每次只输入新的 token,拼接缓存
for _ in range(max_new_tokens):
    logits = model(next_token, use_cache=True)  # 自动追加到 cache

4.3 MQA(Multi-Query Attention)—— 共享 K/V

核心:所有注意力头共享同一套 K 和 V,只有 Q 独立。

MHA vs MQA对比

MHA:   Head 0: Q₀ K₀ V₀   | Head 1: Q₁ K₁ V₁   | ... | Head n: Qₙ Kₙ Vₙ
MQA:   Head 0: Q₀ K V     | Head 1: Q₁ K V     | ... | Head n: Qₙ K V
        (K/V 共享,缓存量降到 1/n)
  • ✅ KV Cache 降至 MHA 的 1/n
  • ⚠️ 精度略有损失(共享 K/V 限制了头的表达能力)

MQA结构

4.4 GQA(Group-Query Attention)🔥 当前主流

核心:在 MHA 和 MQA 之间折中——将 Query 头分组,每组内共享 K/V:

GQA结构

GQA (n_kv_groups=2, n_heads=8):
Group 0: Head 0-3: Q₀₋₃ K₀ V₀   | Group 1: Head 4-7: Q₄₋₇ K₁ V₁

GQA分组结构

python
# Query:每个头独立(全量)
self.W_query = nn.Linear(d_in, num_heads * head_dim)
# Key/Value:每组共享(缩至 num_kv_groups * head_dim)
self.W_key   = nn.Linear(d_in, num_kv_groups * head_dim)
self.W_value = nn.Linear(d_in, num_kv_groups * head_dim)

# 前向时,将 K/V repeat 到每组内的所有头
keys = keys.repeat_interleave(self.group_size, dim=1)  # 复制到各组

注意力头分组示意

现已被 LLaMA、Qwen、DeepSeek 等主流模型采用。


五、FFN 与激活函数演进

ReLU ─→ GELU ─→ SiLU/Swish ─→ GLU → SwiGLU(当前标准)
│         │         │             │
硬截断    平滑      sigmoid加权   门控双分支
死神经元  稳定梯度  与GELU相近    SiLU门控= SwiGLU

ReLU曲线GELU曲线SiLU曲线

SwiGLU(当前主流)

GLU门控结构

python
class FeedForward(nn.Module):
    def __init__(self, cfg):
        self.fc1 = nn.Linear(cfg["emb_dim"], cfg["hidden_dim"])
        self.fc2 = nn.Linear(cfg["emb_dim"], cfg["hidden_dim"])  # 门控分支
        self.fc3 = nn.Linear(cfg["hidden_dim"], cfg["emb_dim"])

    def forward(self, x):
        return self.fc3(nn.functional.silu(self.fc1(x)) * self.fc2(x))
        #                        └── 主分支 ──┘   └── 门控 ──┘

结构:主分支 × 门控分支(GELU/SiLU 作为门控函数)


六、MoE(混合专家模型)

核心思想:多个并行的 FFN 专家 + 路由器(Router),每次只激活 Top-k 个专家。

MoE工作原理

                Router
    ┌─────────────┼─────────────┐
    ↓             ↓             ↓
  Expert 1      Expert 2      Expert 3 (非激活)
    ↓             ↓
    └─────────────┘
   加权求和 → 输出

MoE专家路由

三大优势

  • 高容量低计算——总参数量大,但每次只算 k/n 的专家
  • 专家分工——不同 token 路由到不同专家,自动形成功能分化
  • 天然可扩展——专家可分布到不同设备上并行

七、归一化与残差连接

Post Norm vs Pre Norm对比

RMSNorm(当前主流)

去掉 LayerNorm 的均值标准化,只基于均方根缩放:

python
class RMSNorm(nn.Module):
    def forward(self, x):
        variance = x.pow(2).mean(dim=-1, keepdim=True)
        return x * torch.rsqrt(variance + self.eps) * self.scale

归一化放置位置演进

Post Norm(原始Transformer):残差后归一化——破坏恒等梯度路径 ❌
Pre  Norm(当前标准):      残差前归一化——保留恒等梯度路径 ✅

Pre Norm结构


八、技术栈健康度

技术健康度说明
Transformer🔥 巅峰LLM 基础架构事实标准
RoPE🔥 巅峰位置编码标准方案
GQA🔥 巅峰注意力效率方案标准
SwiGLU🔥 巅峰FFN 激活函数标准
RMSNorm + PreNorm🔥 巅峰归一化标准方案
MoE🔥 巅峰高效扩展方案(DeepSeek/Mixtral)
MHA🟢 稳定小模型可用,大模型已被 GQA 替代
ReLU💀 淘汰大模型中已不用

九、本阶段文件索引

优先级文件路径
🔥 P000_gpt2_model_structure.py3.代码/fine_tune_proj/00_gpt2_model_structure.py
🔥 P001_qwen3_model_structure.py3.代码/fine_tune_proj/01_qwen3_model_structure.py

OPC 超级个体实战指南