1. 引言:那份聪明又笨的反差
它帮你写诗、总结周报、改代码,可你让它算 3 位数乘法它都能翻车。这份聪明又笨的反差,你心里一定嘀咕过:它到底是真懂,还是瞎蒙?
我的答案跟你猜的都不太一样:它既不是真懂,也不是瞎蒙。它是把一件事做到极致的一台机器——「预测下一个该是什么」。
先别急着关页面。我知道这句话听起来像废话。等你看完这篇,你会知道这句废话里到底装了什么:token、概率、采样、温度旋钮,四样零件每一样都不难,合起来就是你天天在用的那个"聪明又笨"的东西。
这篇我想让你带走的,不只是一堆概念,还有一副能亲手摸到的手感。文末我放了一个 Excel 演示:你输入一个字,它预测下一个字。那一下,就是 LLM 生成文字的最小切片。
2. 它不是查资料,是在接龙
记住:LLM 不是查资料的,是在接龙。
你听到「今天天气真」,会自然地接「好」。听到「他气得拍」,会接「桌子」。接龙不需要懂全部,只需要顺着前面的话,给出最像样的下一个。LLM 干的就是这件事,只是把规模放到了离谱的程度。
它不查数据库,不翻资料库。它手里只有一件事:看着前面已经出现的文字,猜下一块最该是什么。
可能有人疑惑:你明明问它「巴黎是哪个国家的首都」,它答「法国」,跟搜索不是一回事吗?
差别在这。搜索是去一个装满答案的仓库里找,找到原样搬给你;接龙是现编。它并不知道什么"答案库",它只是见过太多「……法国的首都是巴黎」这样的句子,于是看到「法国的首都是」时,觉得「巴黎」是接下来最顺的词。一个是搬运,一个是顺着学过的路子编。
还有个细节,是理解 LLM 的钥匙:它一个字一个字往外蹦。它不会先在脑子里想好整句话再一口气吐出来。它吐出一小段,接进已有的文字,再看这个更长的串,继续猜下一个。每吐一个,前面的内容就长了一点。
这个"吐一点、接上去、再吐一点"的循环,有个学名叫自回归(autoregressive)。别被名字吓到,它就是接龙。
3. 最小的零件:token
接龙得先定"接的是什么"。不是字,也不是词,是 token。这是理解 LLM 的第一道坎。
你可以把 token 想成它手里那本「词典」里的词条。LLM 不直接看字符,它只认这本词典里的条目。词典有多大?GPT-2 那代大约 5 万条;今天的模型常见的是十万级、二十万级。词典里有的,整条认;没有的,就拆成更小的部件拼出来。
给你一个直观的例子。英文 “Hello, World” 这句话,12 个字符、2 个词,在 GPT-2 的词典里却是 3 个 token:「Hello」「,」「 World」——注意逗号和它前面的空格,各占一个。
中文跟英文在这件事上差很多。英文按空格天然切分,常见英文词往往整词就是一个 token;中文没有空格,一个汉字在字节级词表里可能被拆成 1 到 3 个 token。「你好世界」四个字,有的词表能整段认,有的要拆成好几个部件。所以同样一句话,中文常常比英文更"费 token"。这个技术细节,第八节再展开。
所以一句话怎么被拆成零件?就是查那本词典:能整认就整认,整不了就拆,拆到词典里有的最小部件为止。在 LLM 眼里没有"字",只有一串 token,它所有的工作都在 token 层面完成。
上一节我说"它一个字一个字蹦",这里把说法校准一下:它一个 token 一个 token 地蹦。token 是它的最小单位,不是字。
4. 每一步怎么选下一个:脑子里冒出一堆候选
好,现在它手里已经是一串 token。下一步的关键问题:下一个 token 怎么选?
不是像查字典那样命中一个确定答案,而是——它脑子里"冒出一堆候选",每个候选带一个概率。接在「今天天气真」后面,「好」的概率高,「坏」次之,「恐龙」极低。所有候选的概率加起来正好等于 1。
这一步跟人有点像。你接话时也不是只想到一个词,是几个词在脑子里冒出来抢着说,只是最顺的那个通常赢。LLM 就是把这套"候选打架"明明白白算了出来。
注意一个容易忽略的点:它不总是选概率最大的那个。这一步叫采样(sampling)。概率大只是"骰子重的一面",不是"只会出这一面"。所以同一个问题问它两次,答案可能不一样——不是它学坏了,是它每一步本来就在掷骰子,只是偏心。
这里有个旋钮叫 temperature,中文常叫温度。拧低,骰子越来越偏心,输出保守、稳、爱重复;拧高,骰子越来越均匀,冷门候选也有机会,输出发散、有创造性、也更容易离谱。想让它正经答事实题,拧低;想让它编故事,拧高。直觉上,这就是把"敢不敢冒险"做成的一个旋钮。
采样为什么必要?我给你一个具体例子。我写"走累了我就坐在长椅上"这种句子时,"走"字后面既可能接「。」(走累了我就…),也可能接「累」(走累了…),两种都顺。真实的 LLM 在这种地方会随机二选一——这正是人说话的样子。如果每次都只选概率最大的,文字会变得死板、无限重复。
把整个循环画出来,一眼就能看明白:
这就是那个"吐一点、接上去、再吐一点"的循环,绕圈走,直到它决定停下来。
5. 靠什么会接:海量文本里学的
到这里,"接龙机器"的形象已经立住了。但你可能憋着一个问题:它凭什么会接?谁教它的?
答案是海量文本。它在数不清的文章、书籍、网页里,反复练习同一件事:看着前面的文字,猜下一个。语法、事实、逻辑、常识,全都藏进了"猜下一个"这个动作里。
给你一个例子就懂了。它能正确接「法国的首都是→巴黎」,说明它为了接得准,"知道"了巴黎是法国的首都。所以事实不是背下来的,是"猜下一个"被逼着学会的。语法同理:它能接「他跑得→很快」,说明它摸到了"得"后面常跟程度副词的规律。
那它到底是怎么被教会的?这篇先按下不表。教会它需要喂海量文本、反复训练、一次次校准,这件事本身够写一整篇。下一篇《训练三阶段:它到底是怎么被教出来的》专门讲这个,我会把训练拆成三个清晰的阶段。
6. 它的边界:为什么翻车是原理决定的
明白了它是"接龙机器",它的那些翻车就都不难解释了。
第一,它不知道实时信息。它学到的知识有截止日期——训练截止到某年某月的语料为止,之后的事它没"见"过。你问它最新新闻,它只能根据训练期见过的模式,编一个最像的。
第二,它算不对精确数。3 位数乘法这种需要精确逐位进位的计算,它"猜"不出来——因为它本来就不是在算,是在顺着概率往下编。开头那个反差,到这里你应该明白了:不是它笨,是它的工作方式压根不是计算器那套。
第三,它会一本正经地胡说。这是最吓人的一条。我要立一个判断:它会一本正经地胡说,不是它笨,是原理决定的。它从设计上就不保证"说的都对",它只保证"说得像人话"。一个天衣无缝的假答案,和一个正确的真答案,在"像不像人话"这件事上可能打平,甚至假答案更顺。幻觉(hallucination)就是这么来的。
这三条边界,是同一个原理的必然结果,不是可以修掉的 bug。知道边界在哪,比知道它多强更值钱——以后被它唬住的时候,心里能有个准星。幻觉,还有"上下文窗口"(它一次能记住多长),本系列后面各有一篇展开,这里先埋个引子。
7. 用 Excel 亲手接一次
原理讲完,该上手了。我做了一个 Excel 演示随文附送,零宏、零依赖,就一个文件。
它有三个 Sheet。「语料」里是一段 104 字的中文短文;「统计」是"当前字 × 下一字"的频次矩阵,数每个字后面跟过哪些字、各几次;「预测」里你输入一个字,它告诉你这个字后面最可能出现哪个字。
你打开「预测」Sheet,在黄色格子里输入「公」,它预测「园」——因为语料里「公园」出现了很多次。再试「很」,它预测「多」。这套机制跟你前面读到的完全同构:语料是训练数据,统计矩阵是学到的规律,预测就是那个"预测下一个"。唯一的差别是,真正的 LLM 用神经网络打分,这个 Excel 用查表打分。
有个反直觉的小发现,我特意留在了里面。语料里「走」字后面,出现过「。」也出现过「累」,各一次,平手。这个 Excel 只取了频次最大者,所以它每次都答「。」;但真实的 LLM 遇到这种情况会带随机——这就是第四节说的采样,真实模型更像掷骰子,只是重的那面概率大。
说句题外话:真有人把完整版 LLM 塞进过 Excel。Ishan Anand 那套"Spreadsheets Are All You Need",把 GPT-2 的完整推理过程(嵌入、注意力、多层感知机)用公式搬进了表格,一个 1.24 亿参数的小模型,文件 1.2GB,只能在 Windows 版 Excel 365/2021 上跑,一次只能处理 10 个 token。那是真本事。但你不必碰那份重家伙——这个约 21 KB 的朴素统计表,就能让你亲手摸到它最核心的那个机制:预测下一个。别人是开着航母看发动机,这份小表格是让你用一根橡皮筋,亲手弹响同一根弦。
玩法我建议你试三样。一是换输入字,看预测怎么变。二是把「语料」Sheet 的 A1 整段换成你自己的话——你会发现统计矩阵、预测结果全部自动重算,这就是"换语料等于重新训练",喂它什么,它就学什么。三是看「预测」Sheet 第 6-7 行,那里列出了同一个字后面每个候选出现的次数——一个不折不扣的概率分布,只是被平铺成了表格。
动手前说一句:这个文件约 21 KB,用的是 MID、COUNTIFS、INDEX、MATCH、MAX 这些最普通的函数,WPS 和 Excel 2016 以上都能开。文末"参考来源"里列了它和配套说明。
8. 技术深挖(可跳过)
这一节写给想看更细的开发者,跳过不影响主线。
token 词表怎么来的:BPE 合并
前面说 token 是"词典里的词条",那词表怎么造出来?主流做法叫 BPE(Byte Pair Encoding,字节对编码)。思路朴素得惊人:先让每个最小单元(字符或字节)都是一个 token,然后反复扫描语料,把"出现次数最多的相邻对"合并成一个新 token,直到词表达到目标大小。合并的顺序,就是词表里那些"词"出生的顺序。
我用四个英文词当示意语料(low、lower、lowest、newer、wider),画成图:
合并一路继续,词表一路变长,直到凑满目标。GPT-2 就是按这个法子,凑出了 50,257 个 token。这个数是这样组成的:256 个基础字节(覆盖一切可能的字节,所以任何语言、任何符号它都能拆,不存在"不认识的字")、1 个特殊的"文本结束"标记,加上 5 万个合并出来的词条。50,257 约等于 5 万,这就是"GPT-2 词表约 5 万"说法的出处。
中文为什么"费 token"
这解释了第三节的疑惑。GPT-2 这种字节级词表里,一个汉字是 3 个 UTF-8 字节,经常要拆成 1 到 3 个 token;而英文常见词往往早就被合并成了整 token。粗算下来,同样一段意思,中文花的 token 常常是英文的 2 到 5 倍。
token 花得多,后果很实际:按 token 计费更贵、同样的上下文窗口能装的内容更少。这也是新一代模型(比如 LLaMA 3 那批)专门往词表里加常见中日韩字符的原因——把常用汉字先合并好,省 token,也减少"一个词被拆散导致理解变差"的问题。
采样概率直觉
第四节说的"概率分布 + 采样",落到代码上是四步:模型对词表里每个 token 吐一个原始分数(logit)→ 除以 temperature 缩放 → 过 softmax 变成加起来等于 1 的概率 → 从这个分布里采样一个 token。
temperature 越低,softmax 后的分布越"尖",概率最高的那个几乎必胜;temperature 越高,分布越"平",冷门候选的机会上来;temperature 趋近 0,就等于永远选最可能的那个(也叫贪心解码)。实际产品里还会叠 top-k、top-p 这类截断手段,先把候选池砍小再抽,防止高温度下跑得太偏。
9. 收束:接龙接出了智能
回到开头那个反差。能写诗、改代码,却算不对 3 位数乘法——现在你知道了,这两件事在它那里是同一台机器:都在预测下一个 token。写诗是顺着语感接龙,算乘法也是顺着见过的算式接龙——只是"接"数学答案时,它没有计算器那套精确规则兜底,于是翻车。
动手用Exel做一个GPT:https://download.csdn.net/download/houwenjin/93292327