预测下一个字
它没有在思考你的问题,它在算下一个字最可能是什么。所有本事和所有毛病都从这一条长出来。
最后一章回头看这台机器本身。前面五章讲的都是怎么用它:怎么把话说清、怎么求稳、知识从哪来、钱怎么算、哪些话能信——这一章解释它们为什么成立。它没有在想你的问题,只是在判断下一个位置该填哪个字。听起来像在贬低它,但这恰恰是唯一能讲通它的入口——它所有的本事和所有的毛病,都源自这一条。
读完你能回答:
- 为什么同一个问题问两次,答案会不一样?
- 为什么让它「先想清楚再答」真的会变好?
- 为什么它明明发现前面写错了,也不肯退回去?
它一次只往前挪一格
给它一段文字,它会进入一个没有出口的循环,每一圈重复同样四件事:把手上这条序列整个读进来;为下一个 token 算出概率分布;从分布里抽一个;把它拼到序列末尾,然后立刻回到第一件事。这种一环扣一环的接续方式,就是 Transformer 结构的核心,今天主流的大模型都是它的直系后代。transformer
第三步值得停一下。它做的是从候选里抽一个,而不是取排名第一的那个。同一个问题问两遍得到两个版本,源头就在这里:排在第一位的候选只是机会最大,排在它后面那些候选的机会并不等于零,一旦被抽中,整句话的走向就换了另一条路。也正因为是抽,两个版本的语气可以一样笃定,谁都不带一点犹豫。
第一步同样值得停一下。每多算一格,整条序列都要被从头看一遍。它手上没有一份预先写好的答案,也不打草稿。你在屏幕上看着一个个字冒出来,那不是把成品念给你听——那就是它的过程本身。
你以为它在做,它一件都没做
把「它不是人,但它很像人」这层滤镜摘掉,日常最容易装上去的期待有四个:
- 它读懂了你的问题——它只把你写的字切成 token,再算出一串数字。
- 它去查了资料——没有查这一步,它给出的内容全部来自权重里的统计规律。
- 它先想好答案再开口——没有这个环节,它边写边定。
- 它交回来之前检查过——没有这个环节,除非你让它重跑一轮。
后两条最容易被忽略,因为从输出上完全看不出来。于是就有了那句要紧的判断:它交回来的是「最像真的」,而不是「核实过的」。 它也不会替你标出哪一句更可疑——「靠不靠得住」并不在它的计算范围里。这条推论的落点很具体:数字、日期、人名、引述的话,凡是要准的,一律自己复核过再采信。
会错的地方,都长在同一条机制上
把这条机制翻过来看,得到的正好是它全部弱点的清单。它们都算不上缺陷,而是这套设计必然带出来的结果;换一代模型能减轻,但抹不掉。
抽样带来的两笔账。 同一个问题两次对不上,是因为第三步走的是抽样,没有取概率最大的那个;语气上的笃定和结果上的不确定,是同一台机器同时给出的。另一笔是编造:它追求的是「最像接下来会出现的」,而不是「确实发生过」,所以某个位置上如果没有真材料,最像的那个候选照样会被选中,读起来和真话毫无区别。
序列只增不减带来的两笔账。 已经产出的字早就是序列的一部分,它只能在它们之上继续铺,所以发现自己前面错了也退不回去,只能硬着头皮往下圆,越圆越远——上一步的偏差会变成下一步的起点。同一个道理还说明,开头最值得用力:格式、口径、限制条件都要赶在它开口之前交代清楚,因为开篇那句话会定下往后的走向,事后再想改就很吃力。它也决定了你安排任务的方式:与其指望它中途自己醒过来,不如把任务切小,让每一段各自产出、各自验收,偏差累积得就慢。
还有一笔来自数字的切分。 数字进模型时被打散成 token,位值这种关系统计上并不牢固,所以数数、算准数这类活它天生做不好。要精确计算的地方,别让它心算,把这一步交给它外面的工具。
本事是猜得准的副产品
一个只会顺着往下接的东西,凭什么既能写代码,又能读懂你半句话里的弦外之音?答案有点绕:把「下一个字」猜得足够准这件事本身,就已经要求它学会一大堆别的本领——每猜错一次,训练上都是有代价的。
要猜准「这个位置接下来该出现什么」,它就没法只会接话,必须顺带学会好几层东西。第一层是语言自身的结构规则:哪一类成分后面能接哪一类成分,分句怎么嵌套,哪些格式必须成对出现。第二层是论证的走向:「既然 A 成立,那么 B 大概也成立」这类衔接有很强的形状约束,它学到的是形状本身而不是逻辑学,但形状对上之后,结论往往也跟着对了。第三层是分寸:同一个意思对客户说和对同事说,用词和语气不一样,这层差别同样可以从语料里统计出来。
把这三点放到具体文本上更直观。一份合同里「本合同自双方签字之日起」后面该出现什么,取决于生效条件和例外情形的固定说法,以及它们通常落在哪一段;一份财报里「同比上升」后面跟哪个数字、配哪个量词,取决于数字与措辞之间的搭配惯例;一份病历里「主诉」之后接下来写什么,取决于这类文本一贯的推进顺序。它掌握的是这些形状和搭配,不是合同、财务或医学知识本身;但形状对上之后,接出来的内容往往也像模像样。
规模堆到某个量级之后,它的表现会溢出「接话」这个范围。没有人专门训练它做翻译、做摘要、写代码,这些能力是在参数量和语料上去之后成段地跳出来的——那篇论文的标题直接写成了「语言模型就是少样本学习者」,说的就是这件事。gpt3-paper
多写中间步骤,是在给自己铺路
「先想清楚再答」为什么真的管用?答案仍然在这条机制上:你让它把一串中间步骤先写出来,这些步骤就留在了序列里,成了它后面每一步的依据。它并没有变聪明,只是把自己后续要接的内容铺垫得更好了。多写几句,就是多算几轮。
代价要一并看:多写的每一步,都要在更长的序列上重新算一遍,时间和花费都跟着涨。所以「先想清楚再答」适合推理链条长、错一步就全错的活;换成一句话就能答的请求,强行铺一大堆中间步骤,只是白掏钱。
这一条推不出什么
从「它在猜下一个字」推不出「所以它不行」,也推不出「所以它只是在模仿」。它确实能做出训练语料里没有过的新组合,也确实能完成没人教过的任务——这些是规模化之后涌现出来的,不是设计出来的。
但它同样推不出「所以它能替你做判断」。这条机制只保证它给出的话像,不保证对;只保证它接得上,不保证它接得住。哪一段该由它做、哪一段必须你来,看的是另一样东西:出错以后你能不能发现、能不能收回。这条线怎么划,它能补全实现,补不上判断 会展开。
它还有一条更容易被忽略的后果:这个字一个接一个接出来的东西,随时可以被打断,也随时可以被喂进新的东西。这就是为什么它天然适合做流式、适合放进一个循环里反复跑——也正因为它只是个接话的机器,把它放进循环之后会发生什么,需要工程上单独设计。那部分在 Agent 循环 里。
