从0训练LLM · 现代大模型体系 阅读+实验 ≈ 35 分钟 页内实验 ×2
C0 序章:为什么是 Transformer + 预测下一个词 第 5 课

没有标注怎么学?怎么知道学得好不好?

自回归预训练与开局自检
文本自己就是标签:每个位置都是一道「猜下一个词」的题。还没训练时模型近似均匀地猜,loss 应该约等于 ln V——锚点模型的词表下是 12.42。这是训练曲线上第一个能核对的数字。

本课一问:没有标注怎么学?怎么知道学得好不好? L4 的 Transformer 是拿「原文 → 译文」这种成对数据训练的。可绝大多数文字只是文字,没有人给它们标过答案。

这一课先不碰:交叉熵这条曲线本身的形状(深度学习地基章);参数怎么更新(C5);数据怎么洗、怎么配(C7);怎么从「会续写」变成「会回答」(C12);困惑度的局限(C14)。

从已有出发

贯穿例句「小明 把 苹果 给了 小王」在这一课变成一串题:把它写两遍、错开一位,每一列就是「看前文,猜下一个词」(下面的动画)。

L1 定义了语言模型:给前文,输出下一个词的概率,loss 是平均的 −ln P。L2 到 L4 换了三代函数去算它,落到 Transformer。流水线最右端的「softmax 概率」,在训练时每个位置都会和真实的下一个 token 比一次:

从已有出发 · 累计数据流 点已学环节看形状与参数
解码层

先自己设计:每个任务都找人标注?

  1. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案每个任务人工标注、从零监督训练

翻译要句对,分类要标好的类别,问答要写好的答案——每个任务一套标注、一个模型。

  • 神经翻译的训练集:WMT’14 英法的 1,200 万句对(3.48 亿个法语词、3.04 亿个英语词),Sutskever et al. 2014 §3.1
  • 换一个任务,前面的模型基本帮不上忙,从头再标、再训

改进:一句话就是一串题,开局的 loss 有标准答案

第一步:每个位置都是一道题。 同一句话写两遍、第二遍左移一位,上下对齐就是「前文 → 答案」:

概念动画 · 标签从哪来
这一句 5 个词 → 4 道「下一个词」题,标签全是文字自己带的,没有一道是人标的。
我们的项目训练集 501,615 个 token → 501,614 个位置,每个位置都是一道题(项目实测,c0-prologue.json)。
对照:Qwen3 预训练用了 36T(36 万亿)个 token(Qwen3 技术报告;Qwen3.8 未披露)——同样全是免费标签。人工标注的一侧,Sutskever 2014 为了训练一个英译法模型用了 1,200 万个句对(原文 §3.1)。

训练时不必一道一道做:一段 T 个 token 的文本,一次前向同时给出 T 个位置的预测(这正是 L4「删掉循环」换来的并行)。前提是每个位置只准看它左边——不然答案就在眼前。这道规矩叫因果掩码,C3 兑现。

第二步:从 LSTM 到 GPT。 预训练 + 微调这条路的演进:

年份工作模型做了什么
2015Dai & LeLSTM用语言模型(或序列自编码)作为预训练步骤,微调后更稳定、泛化更好
2018ULMFiT(1801.06146)、ELMo(1802.05365)LSTM语言模型预训练迁移到多种任务
2018GPT-1(OpenAI 报告)12 层 decoder-only Transformer,768 维,12 头在 BooksCorpus(7,000 多本未出版的书)上预训练,token 级困惑度 18.4,再按任务微调
2019GPT-2同一路线放大,词表 50,257不微调,直接零样本做多种任务
2020GPT-3(2005.14165)175B在提示里给几个例子就能做新任务

GPT-1 的报告自己写着:最接近它的工作是 Dai et al. 与 Howard & Ruder(ULMFiT),区别在于它们用 LSTM,预测范围短;GPT-1 换成了 Transformer 。

⚠

常见误解:「预训练 + 微调是 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(下一个 token 的交叉熵)
= − Σt ln ∣
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
还没训练时,模型对 V 个 token 近似均匀地猜:p = 1/V,loss = ln V。锚点词表 V = 248,320,ln V = 12.42。

开局自检:loss 的起点有标准答案。 均匀猜时 −ln(1/V) = ln V,困惑度 PPL = eloss = V——「在 V 个 token 里犹豫」。锚点模型的词表下是 12.42;GPT-2 的词表 50,257 下是 10.82。所以一条训练曲线的第一个点就可以核对:

⚠

常见误解:「loss 的起点无所谓,只看它往下走。」 起点有理论值 ln V。它是训练里第一个能对上的数字,也是最便宜的查错手段——初始化的尺度、标签是否错开一位、掩码是否正确,都能在第 0 步暴露出来。

⚠

常见误解:「困惑度越低,生成的文字就一定越好。」 困惑度只量「平均每个位置给真实答案多大把握」。它和长文理解、推理能力并不总是一致,C14 会拿证据讲。在这一课它是一把尺子:同一个验证集、同一个分词器之下,用来比较不同模型和基线。

为什么 decoder-only。 原版 Transformer 有编码器和解码器;预测下一个词只需要「看左边、猜右边」,解码器那一半(带因果掩码的自注意力)正好够用,于是 GPT 系只留了它。对照一下:BERT(Devlin et al. 2018,arXiv 1810.04805)用的是「遮住中间的词、两边都看」的目标,适合理解类任务,但不能直接从左到右生成——今天的生成式 LLM 都走 GPT 这条路。

极小真数字:ln V、随机 logit、我们自己的训练日志

计算器 + 浏览器内抽样 + 项目真实日志回放
① 还没训练时,loss 应该是多少?
词表大小 V
② 初始化不够「平」会怎样?(浏览器里真抽样)
● 实测(抽样) – – 上界 ln V + σ²/2 ··· ln V
③ 我们自己的模型:开局对不对,学到了没有(项目真实日志)
🎯

试三件事: ① 在 ① 里切换词表:锚点 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 越大、σ 越小,两边越接近。这也是初始化要小的原因之一:我们项目的权重初始化标准差是 0.02(04-实践项目 runs/baseline 的 config),开局的分布接近均匀,loss 从 ln V 附近起步。

证据三问

问本课的回答(以「预测下一个词」这个目标为例)
① 它解决什么问题?标注稀缺,每个任务都要从头标、从头训
② 数学上为什么可能有效?链式法则:把每个位置的条件概率学准,就等于学会了整段文字的分布(L1 的第一个公式)
③ 实验上为什么被选中?Dai & Le 与 GPT-1 显示预训练对下游任务有帮助,GPT-2、GPT-3 显示放大后不微调也能做任务

本课每条结论的证据等级:

结论证据等级依据
均匀分布的交叉熵 = ln V,PPL = V可证明 定义
随机 logit 的平均交叉熵 ≤ ln V + σ²/2可证明 Jensen 不等式
一段 T 个 token 的文本给出 T 个免费标签可证明 计数
语言模型预训练能帮助下游任务实验验证 Dai & Le 2015;GPT-1
decoder-only + 下一个 token 目标是生成式 LLM 的主流实验验证 GPT-2、GPT-3 及之后的开源模型

一句话

📌

预训练的标签就是文本自己的下一个词;还没训练时的 loss 应该约等于 ln V。

🚦

先停在这里:记住「标签是下一个词,开局 loss ≈ ln V」,序章结束,进 C1。
再深一层:展开「为什么随机 logit 的 loss 不会超过 ln V + σ²/2」的 Dig,再在实验台 ③ 里核对我们自己的开局 loss。

下一个缺口

序章到这里讲完了两件事:终点为什么是「下一个 token 的概率」,中间为什么是注意力。可我们一直在说「词」——模型真正看到的是 token:锚点模型的词表有 248,320 行,它们既不是字也不是词。一句人类文字,怎么变成模型能算的数字? → C1 · 文字怎么变成数字

回到序章首页看本章的项目里程碑:训练目标与第一块仪表。

你可能会问

这一课还没有真实提问记录。先列几个最常见的: