从零开始理解大模型(一):一切从"猜下一个词"开始

欢迎阅读「从零开始理解大模型」系列 —— 本系列十篇文章,从"下一个词预测"到完整的大模型心智模型。每篇配可运行代码。
第一篇:一切从"猜下一个词"开始(本文) 第二篇:Token——大模型眼中的"字"长什么样 第三篇:向量与 Embedding——把文字变成数学 第四篇:Attention——大模型的"阅读理解"机制 第五篇:Transformer 全景——积木怎么搭成大厦 第六篇:训练——70 亿个参数是怎么"学"出来的 第七篇:推理——你按下回车后的这一秒发生了什么 第八篇:上下文窗口——大模型的"工作记忆" 第九篇:Scaling Law——为什么"大力出奇迹"有效 第十篇:从大模型到 Agent——下一个词预测如何长出手脚
作者:十一
你每天都在用大模型——写代码、问问题、翻译文章。但你有没有想过:它到底在"做"什么?
答案简单到令人意外:猜下一个词。
不是"理解",不是"思考",不是"推理"——就是给定前面的文字,预测下一个最可能出现的词。ChatGPT、Claude、DeepSeek,所有大模型的底层任务都是同一个:Next Token Prediction(下一个词预测)。
▍一、先说结论

一句话总结:大模型 = 一个把"猜下一个词"做到极致的概率机器。
▍二、你可以亲手体验的"下一个词预测"
打开手机输入法,输入"今天天气",看看联想栏——它会建议"真好""不错""怎么样"。这就是下一个词预测。输入法和大模型做的事情本质上相同,区别只在规模:

大模型是把输入法的思路推到了极致。参考信息更多、模型更大、预测更准,于是从"联想下一个词"变成了"生成完整文章"。
▍三、代码实验一:亲眼看"下一个词预测"
用 GPT-2(1.2 亿参数的小模型,和 GPT-4 架构完全相同)来演示。核心代码只有几行:
input_ids = tokenizer.encode("Thank you very", return_tensors="pt") # 文字 → token ID
logits = model(input_ids).logits[0, -1, :] # 模型输出 50257 个原始得分
probs = torch.softmax(logits, dim=0) # 得分 → 概率
next_token = torch.argmax(probs) # 选概率最高的
完整可运行代码见附件 predict.py[1],支持命令行传入任意文本。
* 本公众号AGENT魔方后台回复“大模型”,获取配套代码(持续更新)
运行结果
输入: 'Thank you very'
Token IDs: [10449, 345, 845]
模型预测后面最可能的 10 个词:
--------------------------------------------------
1. ' much' 99.2% █████████████████████████████████████████████████
2. ' very' 0.3%
3. ',' 0.3%
4. 'much' 0.1%
...
剩余 50247 个 token 共占: 0.1%
拼接后: 'Thank you very much'
99.2%——50257 个候选词里,模型把几乎全部概率都押在了 "much" 上。
50257 是怎么来的? 这是 GPT-2 的词表大小——模型认识的所有 "词"(准确说是 token)的数量。它通过 BPE 算法(第二篇详解)从训练数据中统计出来:50000 个高频子词 + 256 个基础字节 + 1 个特殊结束符 = 50257。不同模型的词表大小不同(LLaMA 是 32000,Qwen2 是 151936),但原理相同。模型每做一次预测,就是在自己的词表里给这些 token 逐个打分。
Softmax:得分变概率
模型输出的不是概率,而是 50257 个原始得分(叫 logits)。Softmax 函数把它们转换成加起来等于 1 的概率分布:
P(wᵢ) = e^(logitsᵢ) / Σⱼ e^(logitsⱼ)
效果是:得分高的被放大,得分低的被压缩。 "much" 的 logit 远高于其他词,Softmax 之后变成了 99.2% 的压倒性概率。这个函数在大模型里反复出现(Attention 的归一化也用它),后面的篇章会多次遇到。
试试别的输入:python predict.py "The capital of France is"——GPT-2 对这个问题没这么自信,"Paris" 只排第 5 位、概率约 3%。模型越大、预测越准——这是第九篇(Scaling Law)的主题。
▍四、代码实验二:逐词生成与 Temperature
上面只预测了一个词。把过程循环起来,就是完整的文本生成:
for step in range(max_tokens):
logits = model(input_ids).logits[0, -1, :]
probs = torch.softmax(logits / temperature, dim=0) # 先除以 T,再 Softmax
next_token = torch.multinomial(probs, 1) # 按概率随机采样
input_ids = torch.cat([input_ids, next_token], dim=1) # 拼接,继续下一轮
Temperature T 的作用写在公式里一目了然:
P(wᵢ) = e^(logitsᵢ / T) / Σⱼ e^(logitsⱼ / T)

完整可运行代码见附件 generate.py[2],默认跑三组 Temperature 对比实验。
* 本公众号AGENT魔方后台回复“大模型”,获取配套代码(持续更新)
运行结果示例
Temperature = 0.3(保守):
'The meaning of life is to be found in the way we live.'
← 每步选的词概率 10%-30%,几乎每次结果一样
Temperature = 1.5(奔放):
'The meaning of life is pretty complicated, especially when you realize how small we are.'
← 每步选的词概率不到 1%,每次结果不同
生成 = 循环预测。 你在 ChatGPT 里看到的"打字机效果"不是动画——那就是模型真实的工作方式,一个 token 一个 token 地生成。每步都是同一个操作:算 logits → Softmax → 选 token → 拼上去 → 继续。
▍五、一个颠覆直觉的事实
预测下一个词就能写文章、做翻译、解数学题?
是的。当你把"预测"做到足够好,很多能力会自动涌现:
翻译:输入 "Translate to French: The cat is on the mat →",模型预测 "Le"、"chat"……在预测中完成了翻译。
数学:输入 "127 + 385 =",模型预测 "5"、"1"、"2"——在预测中完成了计算。
代码:输入 "def sort_list(",模型依次预测参数、函数体……
这些能力不是专门训练出来的——它们是"预测下一个词"的副产品。 模型在训练时读过大量翻译文本、数学题、代码,"学"到了:在特定格式的输入后面应该接什么。
这个洞察是理解整个系列的地基:大模型的一切能力,都是"预测下一个词"在不同场景下的表现。
▍六、从"预测"到"对话"
你问大模型问题时,它明明在"回答"——这和"预测下一个词"有什么关系?
看看模型实际看到的输入:
<|system|>你是一个有帮助的助手。<|end|>
<|user|>法国的首都是哪里?<|end|>
<|assistant|>
模型的任务就是预测<|assistant|>后面应该接什么词:"法"、"国"、"的"、"首"、"都"、"是"、"巴"、"黎"、"。"
"回答问题"不是一种独立的能力。 它只是"预测下一个词"在对话格式下的表现。模型训练时见过海量"问 → 答"文本,所以看到问题格式的输入时,预测出来的词自然构成了回答。
如果你读过「从零开始理解 Agent」系列,你会记得 Agent 的核心是一个循环——LLM 预测 → 工具调用 → 结果反馈 → LLM 继续预测。Agent 的每一个决策——用哪个工具、传什么参数、什么时候停止——都是一次"猜下一个词"。
▍七、所有大模型都一样吗?
GPT-4、Claude、DeepSeek、Llama……底层真的都是"预测下一个词"?
是的。差别不在"做什么",而在"做得多好":

但底层任务完全相同:给定前文,预测下一个 token。这就像所有汽车都是"燃烧燃料推动活塞"——但法拉利和五菱宏光体验天差地别,差别在工程细节。
▍八、这个系列要讲什么
这篇建立了最核心的直觉:大模型 = 预测下一个词。但留下了很多问题:
"文字怎么变成数字?" —— tokenizer.encode 做了什么?→ 第二篇:Token
"模型内部怎么算的?" —— model(input_ids) 里发生了什么?50257 个 logits 怎么来的?→ 第三~五篇:向量、Attention、Transformer
"参数怎么学出来的?" —— 模型凭什么知道 "Thank you very" 后面接 "much"?→ 第六篇:训练
"为什么生成有快有慢?" —— 第一个 token 等得久?KV Cache?→ 第七篇:推理
每篇解开一个黑盒,到第十篇结束时,你会拥有大模型"从输入到输出"的完整心智模型。
▍九、结语
大模型不神秘。
它做的事情和你手机输入法一模一样——预测下一个词。只不过,当这个"预测"被推到极致——参数够多、数据够大、训练够久——涌现出来的东西,看起来像是在"思考"。
All models are wrong, but some are useful. — George E. P. Box
所有模型都是"错"的——它不是真的在理解语言。但足够好的预测,就是足够好的近似。
下一篇,我们打开第一个黑盒:模型看到的不是"文字",而是"token"。
本文配套代码:predict.py[1](单步预测)、generate.py[2](逐词生成 + Temperature 对比)。需要 Python 3.8+、transformers、torch。

公众号后台回复“大模型”
获取本系列文章配套代码(持续更新)
「从零开始理解大模型」是「从零开始理解 Agent」的姊妹系列。Agent 系列讲"四肢"——怎么通过工具和循环做事。本系列讲"大脑"——内部怎么运转。建议对照阅读。
[2] generate.py: https://github.com/GitHubxsy/nanoAgent/blob/claude/organize-teaching-materials-4hnRP/llm-from-scratch/generate.py
- 点赞
- 收藏
- 关注作者
评论(0)