Skip to content

LLM 如何工作?

学习目标:理解 Transformer 架构和注意力机制的核心原理

预计时间:90 分钟

难度等级:⭐⭐⭐⭐☆


核心问题:机器如何理解语言?

在深入技术细节之前,先理解一个根本问题:计算机只懂数字,不懂文字,那么 LLM 如何处理人类语言?

关键洞察

LLM 的本质是一个巨大的数学函数:

输入文本 → 转换为数字 → 数学运算 → 转换回文本

整个过程分为三个阶段:

  1. 输入处理:文本转换为数字表示
  2. 核心计算:Transformer 架构处理
  3. 输出生成:数字转换回文本

第一阶段:输入处理

步骤 1:分词(Tokenization)

分词器将文本切分为模型能处理的最小单元(Token)。

分词示例

输入:"Transformer 是强大的模型"

可能的分词结果:

  • ["Transform", "er", "是", "强大", "的", "模型"]
  • 每个词被分配一个唯一的数字 ID

分词策略:

  • 字符级:每个字符作为一个 token(简单但效率低)
  • 词级:每个词作为一个 token(效率高但词表大)
  • 子词级:介于两者之间(GPT、BERT 都采用此方案)

步骤 2:词嵌入(Word Embedding)

将 Token ID 转换为高维向量表示:

Token ID → 向量
"Transformer" → [0.12, -0.54, 0.88, ..., 0.33]

                    典型维度:768, 1024, 4096...

为什么需要嵌入?

  • 数字 ID 只是符号,没有语义
  • 向量表示能捕获词的语义和关系
  • 例如:"国王" - "男人" + "女人" ≈ "女王"

步骤 3:位置编码(Positional Encoding)

Transformer 是并行处理所有输入的,需要显式注入位置信息。

输入: "我 爱 AI"
嵌入: [v1, v2, v3]

问题:模型无法区分顺序!
"我 爱 AI" vs "AI 爱 我" - 嵌入相同

解决:添加位置编码
[v1 + p1, v2 + p2, v3 + p3]
技术细节:正弦位置编码

原始 Transformer 使用正弦和余弦函数: $$PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d})$$ $$PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d})$$

现代模型(如 LLaMA)使用旋转位置编码(RoPE),效果更好。


第二阶段:核心架构 - Transformer

Transformer 整体架构

┌─────────────────────────────────────────────────┐
│           Transformer 架构                       │
├───────────────────┬─────────────────────────────┤
│    Encoder        │        Decoder             │
│  (编码器)         │       (解码器)             │
│                   │                            │
│  ┌─────────────┐ │  ┌─────────────────────┐   │
│  │ Self-Attn  │ │  │  Masked Self-Attn   │   │
│  └─────────────┘ │  └─────────────────────┘   │
│         ↓         │           ↓                 │
│  ┌─────────────┐ │  ┌─────────────────────┐   │
│  │    FFN     │ │  │ Cross-Attn (可选)   │   │
│  └─────────────┘ │  └─────────────────────┘   │
│         ↓         │           ↓                 │
│  ┌─────────────┐ │  ┌─────────────────────┐   │
│  │  × N 层    │ │  │        FFN          │   │
│  └─────────────┘ │  └─────────────────────┘   │
│                   │           ↓                 │
│                   │  ┌─────────────────────┐   │
│                   │  │      × N 层         │   │
│                   │  └─────────────────────┘   │
└───────────────────┴─────────────────────────────┘

关键区别:

  • 仅 Decoder 模型(GPT 系列):擅长文本生成
  • 仅 Encoder 模型(BERT 系列):擅长理解任务
  • Encoder-Decoder 模型(T5):擅长翻译

核心组件 1:自注意力机制(Self-Attention)

这是 Transformer 的核心创新!

通俗理解:注意力就是"相关性"

想象你在读这句话:

"小因为生病了没来上学"

当理解"他"时,你的注意力会自动关联到"小明"。 注意力机制就是让模型学会这种"关注重点"的能力。

注意力机制的三要素

  1. Query(查询 Q):当前词的查询向量
  2. Key(键 K):所有词的键向量
  3. Value(值 V):所有词的值向量
比喻:图书馆查询系统
  • Query:你想要查找的书名
  • Key:图书馆里所有书的分类号
  • Value:书架上的实际书籍

过程:

  1. 用 Query 匹配所有 Key,得到相关性分数
  2. 用分数加权求和 Value
  3. 得到最终结果

注意力计算过程

python
# 伪代码
def attention(Q, K, V):
    # 1. 计算相关性分数
    scores = Q @ K.T  # 矩阵乘法

    # 2. 缩放(防止数值过大)
    scores = scores / sqrt(d_k)

    # 3. 转换为概率分布
    attention_weights = softmax(scores)

    # 4. 加权求和
    output = attention_weights @ V

    return output
注意力可视化示例

句子:"The cat sat on the mat"

处理 "cat" 时的注意力分布:

  • The: 0.05
  • cat: 0.40 ← 关注自己
  • sat: 0.30
  • on: 0.15
  • the: 0.05
  • mat: 0.05

模型学会了 "cat" 与 "sat"(动作)和 "mat"(位置)的关联!

核心组件 2:多头注意力(Multi-Head Attention)

单头注意力只能关注一种关系模式,多头允许模型同时关注多种关系。

为什么需要多头?

类比人类阅读:

  • 第 1 头:关注语法结构(主谓宾)
  • 第 2 头:关注语义关联(同义词)
  • 第 3 头:关注指代关系(代词指代)
  • 第 4 头:关注长距离依赖 ...

每头"看"问题的角度不同!

计算过程:

输入 X

┌────────────────────────────────┐
│  Head 1: Attention(X) → O1     │
│  Head 2: Attention(X) → O2     │
│  Head 3: Attention(X) → O3     │
│  ...                           │
│  Head 8: Attention(X) → O8     │
└────────────────────────────────┘

拼接 [O1, O2, ..., O8]

线性变换 → 最终输出

典型配置:

  • GPT-3:96 个头
  • LLaMA 2:40-80 个头
  • GPT-4:估计 100+ 个头

核心组件 3:前馈神经网络(Feed-Forward Network)

每个位置独立进行的非线性变换:

FFN(x) = Activation(xW1 + b1)W2 + b2

作用

  • 注意力机制:融合上下文信息
  • FFN:对每个位置进行"思考"和转换
  • 类比:注意力 = "收集信息",FFN = "处理信息"

典型结构:

输入维度 d_model = 768

扩展到 4 倍: 768 → 3072

激活函数(GeLU / ReLU / SwiGLU)

压缩回原维度: 3072 → 768

核心组件 4:层归一化与残差连接

这两个技术确保深度网络能够稳定训练。

残差连接(Residual Connection)

输出 = x + Sublayer(x)

作用:缓解梯度消失

允许梯度直接流过,避免在深层网络中消失。 类比:给信息"搭了一座桥",不必层层传递。

层归一化(Layer Normalization)

输出 = LayerNorm(x + Sublayer(x))

作用:

  • 稳定训练过程
  • 加速收敛
  • 提高模型稳定性

现代实践(如 GPT-2/LLaMA):Pre-LN

输出 = x + Sublayer(LayerNorm(x))  # 先归一化

第三阶段:输出生成

概率分布预测

模型最后一层输出词汇表大小的 logits:

输入: "今天天气"
模型输出: [logits]

         Softmax

概率分布:
    "好": 0.45
    "不错": 0.25
    "很差": 0.15
    "真": 0.10
    ...

解码策略

如何从概率分布中选择下一个词?

1. 贪婪解码(Greedy Decoding)

python
next_token = argmax(probabilities)
  • 优点:快
  • 缺点:可能陷入次优解
  • 保留 top-k 个候选序列
  • 平衡多样性和质量

3. 采样(Sampling)

python
next_token = sample(probabilities, temperature=0.7)

Temperature 参数

  • 低温度(0.1-0.3):确定性高,输出保守
  • 中温度(0.7-1.0):平衡多样性和质量
  • 高温度(1.5-2.0):多样性高,但可能混乱

完整前向传播示例

让我们追踪一个简单的例子:

输入: "AI 将"

1. 分词:
   ["AI", "将"] → [42, 128]

2. 嵌入 + 位置编码:
   [v42 + p0, v128 + p1]

3. Transformer 处理(N 层):
   每层:
   - 多头自注意力
   - 残差连接 + 层归一化
   - 前馈网络
   - 残差连接 + 层归一化

4. 输出 logits:
   [-1.2, 3.4, 0.8, ..., -0.5]  # 词汇表大小

         Softmax

5. 概率分布:
   "改变": 0.35
   "革命": 0.25
   "是": 0.20
   ...

6. 采样: "改变"

7. 循环生成直到结束符

训练过程:模型如何学习?

预训练目标:下一个词预测

训练数据: "我爱学习 AI"

输入:  "我爱学习"
目标:  "AI"

损失函数: CrossEntropy(predicted, actual)
优化:  反向传播更新参数

规模:

  • 训练数据:万亿级 tokens
  • 参数更新:数百万次迭代
  • 硬件:数千个 GPU

训练技巧

  1. 梯度累积:模拟大 batch size
  2. 混合精度训练:FP16/BF16 加速
  3. 模型并行:超大模型分片到多 GPU
  4. 数据并行:相同模型复制到多 GPU

为什么 Transformer 如此强大?

1. 并行化

RNN:
t0 → t1 → t2 → t3 → t4  (顺序处理)

Transformer:
t0, t1, t2, t3, t4  (并行处理)

2. 长距离依赖

句子: "小明... (100 个词后) ...他"

RNN:信息逐渐衰减
Transformer:直接注意力连接!

3. 可扩展性

性能 = f(参数量, 数据量, 算力)

Transformer 的Scaling Laws特别好:
增加规模 → 性能持续提升

可视化理解

注意力可视化示例

访问 BertViz 可以看到:

  • 不同层关注不同的语言现象
  • 低层:语法、词法
  • 高层:语义、长距离依赖

嵌入空间可视化

使用 t-SNE 降维后可以看到:

  • 语义相似的词聚集在一起
  • 不同语言但语义相同的词靠近

思考题

检验你的理解

  1. 为什么需要位置编码?

  2. 多头注意力的"多头"有什么作用?如果只有单头会怎样?

  3. Transformer 相比 RNN 的主要优势是什么?

  4. 访问 BertViz 或类似工具,观察不同层的注意力模式,记录你的发现。


本节小结

通过本节学习,你应该掌握了:

输入处理

  • 分词、嵌入、位置编码

Transformer 核心

  • 自注意力机制
  • 多头注意力
  • 前馈网络
  • 层归一化与残差连接

输出生成

  • 概率分布预测
  • 解码策略

训练过程

  • 下一个词预测
  • 大规模训练技巧

核心优势

  • 并行化、长距离依赖、可扩展性

下一步:在下一节中,我们将对比分析主流大模型的特点和适用场景。


← 返回模块目录 | 继续学习:主流大模型介绍 →


[^1]: Vaswani et al., "Attention Is All You Need", NeurIPS 2017 [^2]: "The Illustrated Transformer", Jay Alammar, 2018 [^3]: "Visualizing A Neural Machine Translation Model", Harvard NLP

最近更新

基于 Apache 2.0 许可发布