向左看、向下传 — Transformer 如何决定了提示词的一切
这一章讲一件事: 模型内部到底长什么样,以及为什么这个构造让 「提示词里先放什么、后放什么」成了提示工程的第一变量(最先要拧的那个旋钮)。 读完你会拿到一个判断任何任务能不能交给它的口诀。
1. 这一章讲什么
前两章说的是「它做什么」,这一章说「它怎么做到的」——但只讲到对写提示词有用的深度。 原书声明得很干脆:这是本讲怎么用的书,矩阵(把数排成表格做乘法)乘法留给别家;
激活函数(信号往下一个单元传时要过的一道门槛)也不讲 (书推荐的深读材料是经典图解 The Illustrated Transformer)1。
主走查还是那句儿歌:「One, Two,」→「 Buckle」。
这一次我们跟它钻进模型内部,看这四个标记各自顶着一个「小脑」,
是怎么一步步把 [ Buck] 拱出来的。辅走查是作者亲手做的一个实验:
同一段话、同一个问题,问题放在开头和放在结尾,答案差了整整一倍。
2. 顶层全景:一千个一模一样的小脑
剥开最后一层皮,里面不是一个大脑,而是几千个「小脑」: 每个标记上坐一个,结构完全相同,互为克隆2。
每个小脑开局只知道两件事:我坐在哪个标记上、这个位置是全文第几号。 然后它原地思考固定的步数——每一步叫一层,GPT-3 有 96 层,更新的模型普遍过百3。
思考期间,它能收到左边小脑递来的笔记;思考完,它干两件事: 把笔记递给右边的小脑;顺便猜一猜「我右边那个标记是什么」。
[One] [,] [ Two] [,] ← 四个标记,各坐一个小脑
脑1 →→ 脑2 →→ 脑3 →→ 脑4 →→ 猜:[ Buck] ← 只有最右这个的猜测被采用
└ 每轮思考:收左边的笔记 → 想 → 递右边(共 96 轮)
猜中后:给 [ Buck] 安置一个新小脑,四轮起步,再猜下一个 → [le]
图说:主走查全景。前面几个小脑的猜测全都作废——
它们右边的标记早就在提示词里了,猜什么不重要;
重要的是它们递出去的笔记。
注意一个省油设计:提示词里那些小脑的笔记算完就存着—— 缓存——把算过的结果存下来、下次直接取用——之后每吐一个新标记, 旧笔记不用重算,只为新标记补一个新小脑4。
3. 核心原理
3.1 笔记怎么递:注意力是一场问答游戏
几千个小脑,谁的笔记该给谁?这套交通规则就是注意力—— 第 01 章说过它是 2015 年发明的「软搜索」,这里看它具体怎么玩。
它像一场问答游戏,四步走5:
- 每个小脑报上几个问题。 坐在
[my]上的小脑想知道「我」指谁, 就挂出问题:「谁在说话?」 - 每个小脑报上几条答案。 坐在
[Susan]上的小脑, 从之前的笔记里得知这是自我介绍的最后一句,就挂上: 「现在说话的人是 Susan。」 - 系统自动配对。 「谁在说话?」和「现在说话的人是 Susan」严丝合缝。
- 答案递回提问者。
[my]上的小脑收到答案,它对「my」的理解里 从此掺进了「Susan」。
当然,小脑们不说人话——问题和答案都是向量——一长串数字, 是模型内部表示「意思」的通用货币,每个模型在训练中自己发明这套「数字语言」6。
主走查在这里过一站: [ Two] 上那个小脑挂的问题大概是
「我在这个数数序列(一字排开的一串)里的什么位置?」,[One] 那边递来「这是从 1 开始的列举」——
于是它递向右边的笔记里,「接下来很可能是某个押韵的接龙」的分量越来越重,
到最右边小脑的第 96 层,[ Buck] 的分数压过了 [ Three]。
3.2 两条铁律:只向左看,只向上传
这场游戏有两条门禁。合起来,它们决定了提示工程的一半规矩。
第一条:遮罩(masking)——只准左边的小脑回答问题。
[my] 提问时,它右边的小脑哪怕知道答案也不许吭声;
而且小脑永远不会被告知「你的答案被没被用上」——右边无法影响左边。
人们说的「单向 Transformer」,单向就单向在这儿7。
第二条:只向上传。 第 80 层的小脑,只能从第 79 层及以下的笔记里取答案。 换句话说,第 i 层的一条「思考链」最多 i 步深; 高层的新发现,没有任何通道回灌给低层再加工8。
信息流向:
高层 ← 只能从下一层收笔记
↑
低层 ← 只能从左边收笔记
↑
[标记1] [标记2] [标记3] … ← 永远不许从右边收
图说:backward-anddumbward——向左看(backward)、向下传(dumbward)。
这两条带来一个非常实用的不对称:读提示词可以并行——许多份计算同时推进, 因为第 N 个标记的小脑只依赖它左边的笔记,大家互不等待; 写补全却只能串行,因为下一个标记的小脑,得等上一个标记被最终选定才能开工。 所以模型读长提示词比写长补全快得多——书里给的口径是快大约一个数量级9。 (用训练好的模型做预测,行话叫推理——和「训练」相对,训练调参数,推理只用不调。)