没有标注怎么学?怎么知道学得好不好?
本课一问:没有标注怎么学?怎么知道学得好不好? L4 的 Transformer 是拿「原文 → 译文」这种成对数据训练的。可绝大多数文字只是文字,没有人给它们标过答案。
这一课先不碰:交叉熵这条曲线本身的形状(深度学习地基章);参数怎么更新(C5);数据怎么洗、怎么配(C7);怎么从「会续写」变成「会回答」(C12);困惑度的局限(C14)。
从已有出发
贯穿例句「小明 把 苹果 给了 小王」在这一课变成一串题:把它写两遍、错开一位,每一列就是「看前文,猜下一个词」(下面的动画)。
L1 定义了语言模型:给前文,输出下一个词的概率,loss 是平均的 −ln P。L2 到 L4 换了三代函数去算它,落到 Transformer。流水线最右端的「softmax 概率」,在训练时每个位置都会和真实的下一个 token 比一次:
先自己设计:每个任务都找人标注?
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
翻译要句对,分类要标好的类别,问答要写好的答案——每个任务一套标注、一个模型。
- 神经翻译的训练集:WMT’14 英法的 1,200 万句对(3.48 亿个法语词、3.04 亿个英语词),Sutskever et al. 2014 §3.1
- 换一个任务,前面的模型基本帮不上忙,从头再标、再训
标签不用找人写,文本自己就带着:任何一段文字,每个位置的「下一个词」就是这个位置的答案。先在海量无标注文本上训练「预测下一个词」(预训练),再用少量标注数据按任务微调——预训练阶段学到的语法、事实与常识,所有任务共用。
「先用语言模型目标预训练、再监督微调」最早见于 Dai & Le 2015 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条用 LSTM 做「预测下一个词」或序列自编码作为预训练步骤,微调后更稳定、泛化更好;在其文本分类任务上。 出处Dai & Le 2015 · arXiv 1511.01432 ↗需联网 ,不是 GPT-1。
改进:一句话就是一串题,开局的 loss 有标准答案
第一步:每个位置都是一道题。 同一句话写两遍、第二遍左移一位,上下对齐就是「前文 → 答案」:
训练时不必一道一道做:一段 T 个 token 的文本,一次前向同时给出 T 个位置的预测(这正是 L4「删掉循环」换来的并行)。前提是每个位置只准看它左边——不然答案就在眼前。这道规矩叫因果掩码,C3 兑现。
第二步:从 LSTM 到 GPT。 预训练 + 微调这条路的演进:
| 年份 | 工作 | 模型 | 做了什么 |
|---|---|---|---|
| 2015 | Dai & Le | LSTM | 用语言模型(或序列自编码)作为预训练步骤,微调后更稳定、泛化更好 |
| 2018 | ULMFiT(1801.06146)、ELMo(1802.05365) | LSTM | 语言模型预训练迁移到多种任务 |
| 2018 | GPT-1(OpenAI 报告) | 12 层 decoder-only Transformer,768 维,12 头 | 在 BooksCorpus(7,000 多本未出版的书)上预训练,token 级困惑度 18.4,再按任务微调 |
| 2019 | GPT-2 | 同一路线放大,词表 50,257 | 不微调,直接零样本做多种任务 |
| 2020 | GPT-3(2005.14165) | 175B | 在提示里给几个例子就能做新任务 |
GPT-1 的报告自己写着:最接近它的工作是 Dai et al. 与 Howard & Ruder(ULMFiT),区别在于它们用 LSTM,预测范围短;GPT-1 换成了 Transformer 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条原文:「最接近我们的工作……Dai et al. 与 Howard and Ruder 遵循这种方法……但它们使用 LSTM」;BooksCorpus 7,000 多本书;token 级困惑度 18.4。 出处GPT-1 报告 §2 与 §4.1 ↗需联网 。
常见误解:「预训练 + 微调是 GPT-1 首创的。」 用语言模型做预训练步骤首见于 Dai & Le 2015(LSTM),ULMFiT、ELMo 在 GPT-1 之前或同期也在做,GPT-1 报告自己把 Dai et al. 列为最接近的工作。GPT-1 的新意是:decoder-only 的 Transformer + 大规模无标注书籍语料 + 统一的微调方式。
2026 年的现代做法:目标一个字都没改。 所有主流开源 LLM 的预训练目标仍然是「下一个 token 的交叉熵」;改动全在目标之外:多预测几个 token 的辅助目标(C11 的岔路)、数据怎么排进训练(C7)、预训练之后的后训练(C12)。
第三步:怎么知道学得好不好。 loss 就是 L1 的那个平均 −ln P,只是现在由 Transformer 给出概率:
开局自检:loss 的起点有标准答案。 均匀猜时 −ln(1/V) = ln V,困惑度 PPL = eloss = V——「在 V 个 token 里犹豫」。锚点模型的词表下是 12.42;GPT-2 的词表 50,257 下是 10.82。所以一条训练曲线的第一个点就可以核对:
- 明显高于 ln V:初始的 logit 太大,模型一开始就「自信地错」(下面的实验台 ② 真抽样看);
- 明显低于 ln V:还没训练就比瞎猜好,要怀疑评估本身——例如标签没有错开一位、掩码漏了,模型能直接看到答案;
- 训练之后,还要和不用神经网络的基线比:均匀猜 → 只看词频的 unigram → L1 的 bigram。连 bigram 都比不过,说明网络没学到数数以外的东西。
常见误解:「loss 的起点无所谓,只看它往下走。」 起点有理论值 ln V。它是训练里第一个能对上的数字,也是最便宜的查错手段——初始化的尺度、标签是否错开一位、掩码是否正确,都能在第 0 步暴露出来。
常见误解:「困惑度越低,生成的文字就一定越好。」 困惑度只量「平均每个位置给真实答案多大把握」。它和长文理解、推理能力并不总是一致,C14 会拿证据讲。在这一课它是一把尺子:同一个验证集、同一个分词器之下,用来比较不同模型和基线。
为什么 decoder-only。 原版 Transformer 有编码器和解码器;预测下一个词只需要「看左边、猜右边」,解码器那一半(带因果掩码的自注意力)正好够用,于是 GPT 系只留了它。对照一下:BERT(Devlin et al. 2018,arXiv 1810.04805)用的是「遮住中间的词、两边都看」的目标,适合理解类任务,但不能直接从左到右生成——今天的生成式 LLM 都走 GPT 这条路。
极小真数字:ln V、随机 logit、我们自己的训练日志
试三件事: ① 在 ① 里切换词表:锚点 248,320 → 12.42;GPT-2 50,257 → 10.82;再自己填一个数,确认 PPL 永远等于 V。 ② 在 ② 里把 σ 从 0 拖到 3:σ = 0 时正好是 ln V;σ 越大,开局 loss 越高于 ln V,实测在抽样误差之内不超过 ln V + σ²/2 那条虚线(Jensen 不等式);在 ① 里自己填 2048 再拖到 3,看两者差出一截——V 小、σ 大时上界不再贴近。 ③ 在 ③ 里核对我们自己的模型:第 0 步的验证 loss 和 ln V 差多少?训练后的模型有没有低于 bigram 基线?鼠标在曲线上移动,看 loss 与 PPL 一起往下走。
🔍 为什么随机 logit 的 loss 不会超过 ln V + σ²/2
交叉熵 = logsumexp(z) − z答案。z答案 的期望是 0(所有 logit 同分布),所以平均交叉熵 = E[ln Σ ez]。ln 是凹函数,Jensen 不等式给出 E[ln Σ ez] ≤ ln E[Σ ez] = ln(V · eσ²/2) = ln V + σ²/2。V 越大、σ 越小,两边越接近。证据三问
| 问 | 本课的回答(以「预测下一个词」这个目标为例) |
|---|---|
| ① 它解决什么问题? | 标注稀缺,每个任务都要从头标、从头训 |
| ② 数学上为什么可能有效? | 链式法则:把每个位置的条件概率学准,就等于学会了整段文字的分布(L1 的第一个公式) 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条P(整句) = 逐位置条件概率之积。 出处待补 |
| ③ 实验上为什么被选中? | Dai & Le 与 GPT-1 显示预训练对下游任务有帮助,GPT-2、GPT-3 显示放大后不微调也能做任务 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条其任务上;没有定理保证。 出处Dai & Le 2015;GPT-1 2018 ↗需联网 |
本课每条结论的证据等级:
| 结论 | 证据等级 | 依据 |
|---|---|---|
| 均匀分布的交叉熵 = ln V,PPL = V | 可证明 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条−ln(1/V) = ln V;e^(ln V) = V。 出处待补 | 定义 |
| 随机 logit 的平均交叉熵 ≤ ln V + σ²/2 | 可证明 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条Jensen 不等式;实验台 ② 用抽样验证。 出处待补 | Jensen 不等式 |
| 一段 T 个 token 的文本给出 T 个免费标签 | 可证明 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条错开一位的计数。 出处待补 | 计数 |
| 语言模型预训练能帮助下游任务 | 实验验证 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条在其文本分类与 GPT-1 的 12 个任务上;没有定理保证。 出处Dai & Le 2015;GPT-1 2018 ↗需联网 | Dai & Le 2015;GPT-1 |
| decoder-only + 下一个 token 目标是生成式 LLM 的主流 | 实验验证 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条放大后出现少样本能力;是否「最好」没有证明。 出处GPT-3 · arXiv 2005.14165 ↗需联网 | GPT-2、GPT-3 及之后的开源模型 |
一句话
预训练的标签就是文本自己的下一个词;还没训练时的 loss 应该约等于 ln V。
先停在这里:记住「标签是下一个词,开局 loss ≈ ln V」,序章结束,进 C1。
再深一层:展开「为什么随机 logit 的 loss 不会超过 ln V + σ²/2」的 Dig,再在实验台 ③ 里核对我们自己的开局 loss。
下一个缺口
序章到这里讲完了两件事:终点为什么是「下一个 token 的概率」,中间为什么是注意力。可我们一直在说「词」——模型真正看到的是 token:锚点模型的词表有 248,320 行,它们既不是字也不是词。一句人类文字,怎么变成模型能算的数字? → C1 · 文字怎么变成数字
回到序章首页看本章的项目里程碑:训练目标与第一块仪表。
你可能会问
这一课还没有真实提问记录。先列几个最常见的:
- 只会猜下一个词,怎么就会回答问题了? 预训练只让它会续写;「会回答」要靠后训练(C12)。GPT-2、GPT-3 能零样本、少样本做任务,是把任务写成续写的样子。
- 预训练要多少数据? Qwen3 用了 36T token(Qwen3 技术报告;Qwen3.8 未披露)。该用多少、怎么洗、怎么配,是 C6 与 C7 的问题。
- 为什么我们的项目模型开局 loss 比 ln V 高一点? 输出层的 logit 不是严格的 0,实验台 ② 的 σ 就是在模拟这件事;差多少算正常,看实验台 ③ 的开局自检。