这门课的第一讲从 LLM 的底层原理讲起。如果你之前对 LLM 的理解停留在"用就完了",这几张 slides 能帮你建立一个更完整的认知。
LLM 到底在做什么?
一句话:预测下一个 token。
数学上长这样:
$P(x_1, x_2, \ldots, x_T) = \prod_{t=1}^{T} P(x_t | x_1, x_2, \ldots, x_{t-1})$
翻译成人话就是:生成一个完整序列的概率 = 每一步预测下一个 token 概率的连乘。每个 token 的生成都依赖于之前所有的 token。
举个例子:
P(write, a, for, loop, for, idx, in, range...)
= P(range | write, a, for, loop, for, idx, in)
× P(in | write, a, for, loop, for, idx)
× ...
× P(a | write)
× P(write)
这就是为什么"上下文长度"在 LLM 里这么重要——模型需要"看到"之前所有 token 才能预测下一个。
架构长什么样?
从下往上看:
1. Tokenization(分词)
输入 a, for, loop, for,用固定词汇表把文本切成 tokens。
2. Embedding Layer(嵌入层)
每个 token 变成一个固定维度的数值向量,通常 1000-3000 维。
3. Transformer Layers
12 到 96+ 层不等,核心是自注意力机制,来自 Vaswani 2017 年那篇"Attention is All You Need"。
4. 概率分布输出
最后输出所有可能 token 的概率分布。比如 the: 0.3, idx: 0.6, cat: 0.1。选概率最高的,或者按概率采样。
怎么训练的?
现代 LLM 基本走这三步:
Stage 1:自监督预训练
目标是让模型学会语言的基本概念。
数据规模:1000 亿到万亿级别 tokens。来源包括 Common Crawl(网页数据)、Wikipedia、StackExchange、公开 GitHub 仓库。
这个阶段出来的模型,你跟它说"Write a for loop",它可能回"that could be used in a piece of code"——只能输出不完整的描述。
Stage 2:监督微调
目标是教会模型遵循指令。
用高质量的"提示-响应"配对来训练,比如"What is the capital of Croatia?" → "Zagreb is the capital"。规模大概数万到数十万对。
这个阶段出来的模型,你说"Write a for loop",它能回"ok here's a for loop..."——能响应了但不够好。
Stage 3:偏好调优 (RLHF)
目标是让输出更符合人类偏好——有帮助、正确、易读。
方法是收集同一提示的多个输出,让人类标注哪个更好,训练奖励模型来预测人类偏好。规模同样是数万到数十万人工标注对比。
这个阶段出来的模型,你说"Write a for loop",它直接给你 for idx in range(10):——简洁、正确、可用的代码。
推理模型是什么?
还有更高级的训练阶段,用于增强推理能力:
- 用 chain-of-thought 推理轨迹进行扩展训练
- 学习调用外部工具
- 收集人类对推理步骤的偏好
- 用强化学习学习评估推理轨迹、回溯等
名字里通常带 "-think" 的就是推理模型,比如 GPT-o1、Claude 的思考模式。
实战中的优势和局限
强项:
- 专家级代码补全
- 代码理解
- 代码修复
局限:
| 问题 | 详情 |
|---|---|
| 幻觉 | 生成不存在或过时的 API,可以通过稳健的上下文工程缓解 |
| 上下文窗口限制 | 标称 100K-200K tokens,但并非所有 token 都"生而平等" |
| 延迟 | 从几秒到几分钟不等,需要合理规划任务 |
| 成本 | 输入 $1-3 / 百万 tokens,输出 $10+ / 百万 tokens(顶级模型) |
幻觉问题在公开代码语料较少的编程语言里更严重。上下文窗口虽然标称很大,实际有效利用率有差异。
小结
这五张 slides 讲了:
- 数学基础:LLM 是自回归的下一 token 预测模型
- 架构:Tokenization → Embedding → Transformer → 概率输出
- 训练三阶段:预训练 → 监督微调 → RLHF 偏好调优
- 进阶训练:推理模型 + 模型规模参考
- 实战应用:代码能力强大,但需注意幻觉、上下文、延迟和成本