Learn AI · 模型硬功底(由内而外)
第 7 课 / 经典论文 P06  ·  阶段二:预训练范式(Radford et al., 2018)

GPT-1:
只学「接下一个词」
——你天天聊的 ChatGPT / Claude,血脉源头在这

上一课 BERT 走了「理解」这条岔路:换目标为完形填空、夺回双向。这一课走另一条岔路——GPT 偏偏守着「预测下一个词」这一个单向目标不放,结果走出了今天统治一切的路线。 它回答你一个用过千百次却没拆过的问题:为什么「一个词一个词往下接」这么笨的目标,能让模型顺手学会翻译、问答、推理、写代码?
BERT 换了目标去换双向;GPT 不换目标,赌的是另一件事:
「预测下一个词」表面只是接龙,但要把下一个词猜准,模型被逼着把语法、事实、常识、推理全学进去
通用能力,是「猜下一个词」这个任务的副产品——你上一轮刚拆过的那条暗线,这里推到极致。

一、立靶:同年对决,BERT 赢了,为什么最后是 GPT 统治?

GPT-1(2018 年 6 月)比 BERT(2018 年 10 月)早出几个月,但 BERT 一出,靠双向在 GLUE 榜上当场把 GPT-1 比下去。如果只看那一刻的分数,BERT 是赢家。可五年后回望,ChatGPT、Claude、Llama 几乎清一色 decoder-only——全是 GPT 这一支。BERT 系退守到 embedding/检索的角落。

立靶:当年的「输家」为什么赢了长线?

答案不在「谁分数高」,在哪个目标更通用、更能吃规模。 BERT 的完形填空擅长理解、但天生不会流畅生成(你上节学的:完形填空的人不擅长从头编长文)。 GPT 的「预测下一个词」既是理解的训练、又直接就是生成本身——这个目标后来被证明越放大越通吃(GPT-2 / GPT-3 一路验证)。这一课先看它的起点 GPT-1 怎么搭。

二、抽框架:GPT-1 的两段式(和 BERT 同构,但每一格都换了内容)

第一段:生成式预训练(pre-training)第二段:判别式微调(fine-tuning)
用什么数据海量无标注文本(BooksCorpus,7000 本书)少量有标注的下游任务数据
训练目标预测下一个词(标准语言模型,单向自回归)任务标签(分类/蕴含/相似度…)+ 一个辅助的「继续预测下一个词」正则项
架构12 层 decoder-only Transformer(带因果掩码的单向 self-attention)——预训练和微调同一个骨架
和 BERT 的「两段式」对齐着看,骨架一样、零件全换

预训练-微调这个范式,BERT 和 GPT 是共用的(都是「先海量无标注、再少量有标注」)。差别只在两格: ① 目标——BERT 完形填空(双向)vs GPT 接下一个词(单向); ② 架构——BERT encoder-only vs GPT decoder-only。 这又回到你拆透的那句:掩码开关定生死。GPT 的因果掩码挡住右边,正是「预测下一个词不能偷看答案」的物理实现。

三、暗线点题:通用能力=「猜下一个词」的副产品

你上一轮自检答对了「word2vec 词向量是副产品」。GPT 把这条暗线推到顶:它从头到尾只做「猜下一个词」一件事,却把整个语言能力当副产品学了出来。下面这个演示让你亲眼看到「猜准下一个词」到底逼模型学了什么

四、动手玩:要猜准这个空,模型被逼着学会了什么?

每句话都缺最后一个词。点一句,看「猜准它」究竟需要哪种能力——你会发现「接下一个词」根本不是死记,是被逼着学会语法、事实、常识、推理、情感。

点一个例子: 

看出来了吗:没有人单独教模型「语法/事实/推理」,是「把下一个词猜准」这个唯一目标,顺着把它们全逼了出来。这就是为什么一个看似简单的目标,撑起了今天所有通用大模型。

五、对照表(一):GPT-1 vs BERT —— 同年同范式,两条性格

维度GPT-1(本篇 P06)BERT(上篇 P05)
架构decoder-onlyencoder-only
方向 / 掩码单向(因果掩码挡右边)双向(无掩码)
预训练目标预测下一个词(接龙)MLM(完形填空)
当年 GLUE 分数开了范式,但被 BERT 反超更高(双向理解占优)
能否原生生成(生成是它的主场)不能
长线归宿通用大模型的主干(GPT/Claude/Llama)退守 embedding/检索

一句话记牢:BERT 当年赢分数,GPT 长线赢天下。差别的根,仍是那个被你拆透的「目标函数 → 单向/双向 → 性格」的因果链。

六、对照表(二):一个 decoder 怎么吃下不同任务?——输入变换

GPT-1 还没有「一句话提示就干活」的能力(那是 GPT-2/3 的事)。它微调时靠一个聪明的小把戏:把各种任务都改写成「一段连续的 token 序列」,喂给同一个 decoder,末尾接个小分类头。

任务怎么塞进一个序列
文本分类[起始] 文本 [抽取] → 读末位向量分类
蕴含判断[起始] 前提 [分隔] 假设 [抽取]
相似度两句话正反各拼一遍(顺序无关),结果相加
多选问答每个选项各拼一条序列,分别打分再 softmax

这个「把任务变成一段文本」的思路,就是日后「万物皆 text-to-text」(T5/P09)和你天天用的 prompt 的雏形。你写 prompt 把任务塞进一段话——和 GPT-1 干的是同一件事,只是它当年还要微调,你现在零样本就行。🔮

七、映射到你的项目

你工作里的东西其实就是这篇论文的什么
ChatGPT / Claude 一个 token 一个 token 往外蹦就是 GPT-1 的「预测下一个词」自回归生成,原封不动放大了上万倍。你在第 1 课学的生成流水线,正是这条线的成品。
你写 prompt 把任务「描述成一段话」喂给模型GPT-1 的输入变换的直系后代——把任务塞进一段连续 token。区别只是它要微调、你不用。
「为什么大模型啥都会,又没人专门教它」因为通用能力是「猜下一个词」的副产品。猜准海量文本的下一个词,被迫把语法/事实/推理全学了。
你做 LLM-as-judge / prompt 自动调优时,模型「凭语感」打分那份语感正是预训练「猜下一个词」副产品里的分布感——它知道「像不像人写的」,因为它就是按人写的分布训出来的。

八、检索练习(关掉上文,凭记忆答)

1. GPT-1 的预训练目标是什么?
2. 同年对决 BERT 分数更高,为什么最后是 GPT 这条路统治?
3. GPT 为什么没人专门教,却学会了翻译、推理、写代码?

九、常见问题 FAQ

把这一课接到你真实工作上的几个关键问。点开看答。

「预测下一个词」这么简单,凭什么能学出推理能力?不会只是背语料吗?

关键在「猜准」的门槛有多高。在海量、多样的真实文本上,想把下一个词的概率压低损失,死记是不够的——同样的开头后面能接的词千变万化,唯一能稳定降损失的办法是真的抓住背后的规律:语法约束、世界事实、因果常识、甚至简单推理。

举例:「3 加 5 等于 ___」,背语料背不全所有算式,但学会加法就能稳定答对。于是「为了把下一个词猜得更准」这个压力,逼模型把能压缩损失的规律都内化。这就是「压缩即理解」——预测得越好,说明世界模型越准。🔮

GPT-1 和你天天用的 ChatGPT,中间差了什么?

骨架同源(decoder-only + 预测下一个词),但中间隔着三级跳,每一跳都是后面的课

阶段关键变化
GPT-1(本课)立范式:生成式预训练 + 微调,但每个任务还要微调
GPT-2(P07)放大规模,发现不微调、靠提示也能干活的苗头
GPT-3(P08)in-context learning / few-shot——你 prompt 工程的理论根
ChatGPT再加 指令微调 + RLHF(对齐人类偏好,后面课会讲)

所以你用的 Claude,是「GPT-1 的目标 + 巨大规模 + 对齐」的合成体。底层那个「猜下一个词」,从 2018 到今天一字未改。🔮

微调时那个「辅助的继续预测下一个词」是干嘛的?

微调时 GPT-1 不只优化任务标签,还顺带保留一部分「预测下一个词」的损失作为辅助项。作用有二:① 防止灾难性遗忘——别为了一个小任务把预训练学的通用能力忘光;② 当正则化,让微调更稳、泛化更好。

这对你有迁移价值:在专门目标上微调时,掺一点原始的通用目标,能稳住别让模型「学窄」——和你调 LLM 时担心「过拟到某种风格」是同一个直觉。

为什么 decoder 用因果掩码(causal mask)就等于「单向」?

self-attention 默认是「全看」的:每个位置能看到序列里所有位置、左右通吃——这就是双向(BERT 吃的红利)。因果掩码做的唯一一件事,是把「右边」的注意力权重强行抹成 0(设为 -∞,softmax 后变 0),让「谁能看谁」的方格表变成一个下三角:词 3 永远只能看到词 1、2、3,物理上够不着词 4 及以后。

为什么必须这样?训练目标是「用前面的词预测下一个词」。不挡右边,模型预测词 4 时就能直接看到词 4 本身——那是抄答案,loss 瞬间归零,啥也学不到。因果掩码=「预测下一个词不能偷看答案」的物理实现,强制信息只能从左往右流 ⇒ 这就是单向 / 自回归。

一句话:双向 vs 单向不是两种模型,是同一个 self-attention 加不加那张下三角掩码的区别——掩码开关定生死。这也是为什么 Claude 只会一个 token 一个 token 往外蹦:因果掩码决定了它天生「看左边、猜右边」,生成必须自回归地一步步来。

GPT-1 的「输入变换」和我天天写的 prompt 到底差在哪?

血脉相同、机制不同。本质都是「把任务塞进一段连续 token 序列」喂给同一个 decoder,差别在「怎么让模型知道要它干嘛」:

维度GPT-1 输入变换(2018)你写 prompt(今天)
怎么表达任务特殊分隔符拼结构:[起始] 前提 [分隔] 假设 [抽取]自然语言描述任务
模型怎么响应必须微调(改权重 + 接分类头)不改任何权重,零样本/少样本直接出
谁适配谁改模型去吃任务改输入去够模型

核心差别一句话:GPT-1 是「改模型吃任务」,你写 prompt 是「改输入够模型」。能从前者跳到后者,靠的不是机制变聪明,而是规模——这正是 P08 GPT-3 的 in-context learning,你 prompt 工程的理论根。你写的每条 prompt,都是 GPT-1「把任务塞进序列」的直系后代。🔮

本课主源

读原典:Radford et al. — Improving Language Understanding by Generative Pre-Training(GPT-1, 2018)

建立直觉首选:Jay Alammar — The Illustrated GPT-2(图解 decoder-only 与自回归生成,同样适用于 GPT-1 直觉)。

下一篇 P07 GPT-2:把这条路「放大」——参数和数据一起加码,世界第一次看到「不微调、光靠提示就能干活」的苗头。规模,开始变成魔法。

我是你的老师,随时提问。 比如:「『压缩即理解』到底什么意思?」「为什么 decoder 用因果掩码就等于单向?」 「GPT-1 的输入变换和我写 prompt 到底差在哪?」——别带着模糊往下走。

参考:
Radford et al., Improving Language Understanding by Generative Pre-Training, 2018;Alammar, The Illustrated GPT-2.