做产品 PMaker 首页
搜索
跟随系统
颜色主题
空格的键盘
一次生成,它只做这一件事读序列把已有的整段文字全部读进来算分布算出下一个 token 的概率分布抽样按概率抽一个,不是选概率最高的那个接上重来把抽中的接在序列尾巴上,从第一步重来让它多说几句,等于让它多算几轮

它每次只回答一个问题:下一个 token 最可能是什么。写完一整段,是这个动作重复了几百次。

大模型的运作原理

每次只猜下一个 token,这就是全部。所有神奇和所有毛病都从这里长出来。

每次只猜下一个 token,这就是全部。所有神奇和所有毛病都从这里长出来。

它没有在思考你的问题,它在算下一个 token 最可能是什么。这句话听起来像在贬低它,其实是理解它的唯一入口。

你会遇到的现象:

  • 同一个问题问两次,答案不一样,但两次都说得很肯定
  • 让它先想清楚再回答,效果居然真的会变好
  • 它写到一半发现前面错了,却不会回头改,而是硬着头皮圆下去

这个循环

把一段文字丢给它,它做的事只有一轮又一轮的这四步:读进已有的整段序列、算出下一个 token 的概率分布、按概率抽一个、把抽中的那个接到序列尾巴上。然后从第一步重来。这个一步步自回归接下去的机制,正是 Transformer 结构的核心,今天主流的大模型都是它的直系后代。transformer

注意第三步。它不是「选概率最高的那个」,而是。这个区别是后面所有随机性的来源。62% 的那个词大概率会被选中,但 18% 的那个也有它的机会,选中之后整句话就拐向另一个方向了。

还要注意第一步。每算一个新 token,它都要把整条序列从头看一遍。它没有一个「已经想好的答案」存在某个地方,也没有草稿。你看到的那段流式输出,就是它真实的思考过程本身,不是把想好的东西念出来。

很多人会高估它,这里把「你以为的」和「它实际在做的」放在一起:

你以为它在做 它实际在做
理解你的问题 把你的字切成 token,算出一串数字
查资料 没有查,全靠权重里的统计规律
想好答案再给你 没有这一步,边写边定
检查一遍再给你 没有这一步,除非你让它再跑一轮

中间两行是最多误会的地方。它给出的每一个事实,都是「算出来最像真的」,不是「查出来是真的」。

能力从哪来

一个只会接话茬的东西,为什么能写代码、能改文案、能读懂你半句话里的意思?因为「猜下一个词」这个任务,要猜得足够准,就必须顺带学会一大堆别的东西。

  • **要猜准代码的下一行,就得学会语法和常见结构。**括号必须配对、变量得先声明,这些规律在语料里出现了几亿次,猜错了就会被罚。
  • 要猜准一段推理的结尾,就得学会推理的形状。「因为…所以…」后面接什么,是有强约束的。它学到的是这个形状,不是逻辑本身,但形状足够像的时候,结论往往也对。
  • **要猜准一段对话的下一句,就得学会揣摩语气和意图。**客服口吻后面不会接脏话,这也是统计规律。

规模和语料堆到这个程度,能力会超出「接话」本身——那篇著名的「few-shot 学习者」论文想说的就是这个:随着参数量和语料增长,任务能力不是一点点涨的,而是成段地冒出来。gpt3-paper

所以「让它一步一步想」这类提示为什么有用,答案也在这:你逼它先生成一串中间步骤,这些步骤会进入序列,成为后面每一步的输入。它不是变聪明了,是给自己铺了更好的接话素材。让它多说几句,等于让它多算几轮。

毛病也从这来

同一条机制,反过来看就是它全部的短板。这几条不是 bug,是这个设计的直接后果,换个模型只会缓解,不会消失。

现象 机制上的原因
每次答案不一样 第三步是抽样,不是取最大值
会一本正经地编 它要的是「最像下一句」,不是「真的下一句」
写错了不回头 已经生成的 token 进了序列,只能顺着往下圆
数数、算数容易错 数字被切成 token,位值关系不是统计上的强规律
越写越长越跑偏 每一步的误差都会进入下一步的输入

第三行对产品设计影响最大:一旦开头跑偏,后面只会越圆越远。与其指望它写到一半自己纠正,不如把任务切小,每段单独出、单独验。

落到你手上的动作有三个。一是把长任务切成短的,每段短一点,累积误差就少一点。二是开头要压住,第一句一旦定了调,后面很难扭回来,所以格式、口径、约束要放在它开口之前。三是凡是要准的地方都得校验,数字、接口名、引用,不要因为它说得笃定就信。

参考资料

  1. Attention Is All You Need — arXiv
  2. Language Models are Few-Shot Learners — arXiv