斯坦福大学 CS146S 课程笔记(0)

从 LLM 的数学基础、架构到三阶段训练流程,快速掌握大语言模型的核心工作原理。

这门课的第一讲从 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):——简洁、正确、可用的代码。


推理模型是什么?

还有更高级的训练阶段,用于增强推理能力:

名字里通常带 "-think" 的就是推理模型,比如 GPT-o1、Claude 的思考模式。


实战中的优势和局限

强项

局限

问题详情
幻觉生成不存在或过时的 API,可以通过稳健的上下文工程缓解
上下文窗口限制标称 100K-200K tokens,但并非所有 token 都"生而平等"
延迟从几秒到几分钟不等,需要合理规划任务
成本输入 $1-3 / 百万 tokens,输出 $10+ / 百万 tokens(顶级模型)

幻觉问题在公开代码语料较少的编程语言里更严重。上下文窗口虽然标称很大,实际有效利用率有差异。


小结

这五张 slides 讲了:

  1. 数学基础:LLM 是自回归的下一 token 预测模型
  2. 架构:Tokenization → Embedding → Transformer → 概率输出
  3. 训练三阶段:预训练 → 监督微调 → RLHF 偏好调优
  4. 进阶训练:推理模型 + 模型规模参考
  5. 实战应用:代码能力强大,但需注意幻觉、上下文、延迟和成本