2017 年那篇论文的核心主张只有一句:既然注意力已经能让任意两个位置直接通信,
那循环还有什么用? 删掉 RNN 之后,训练快了好几倍——
注意它不是算得少(第 11 节真算过,注意力比 RNN 多算约 8 倍),而是整句话的位置能一次算完,
模型反而更强。
上一章《注意力机制》把「Q·K 打分」算到了底;这一章是一整栋楼——
一个 Block 里到底有什么、那三分之二的参数花在哪里、为什么它能堆到一百层。
再上一章(Seq2Seq)的最后,
下面这个互动真的跑了一遍 RNN 递推:让它把整句话读完,得到最后那一个状态; 然后回头量一件事——把第 1 个词的输入轻轻改一点,最后那个状态的输出会跟着变多少。 这个数就是影响力,和反向传播里的梯度是同一个东西。 注意力那半用「改一点、再算一遍」的差分量出来;RNN 那半按链式法则一路乘出来。
互动 · 跑一遍 RNN:句子读完了,前面的词还剩多少
像一个被要求「用一句话复述全场会议」的记录员。只有三个人发言时,他记得清清楚楚; 开到第二十个发言人,他嘴里只剩下最后几句,前面的人只剩一个模糊的印象—— 不是他记性差,是「一句话」这个格式本身就装不下。
Transformer 的全部主张就是一句话:别再复述了,让每个词自己伸手去拿。 不需要中转的向量,也就没有那个固定大小的口袋——代价是所有词都要两两比较一遍。
每一个词,都去问所有词"你和我有多相关",然后按相关度把它们的信息加权平均到自己身上。
就这么一件事。而且因为所有词是同时互相问的,它可以在一次矩阵乘法里算完—— 这是它和 RNN 最本质的区别。把每个词当成一个点、人人都连着人人,这句话说的就是一张图; 注意力就是在这样的图上传话,图那边的名字叫 GAT(图注意力网络,图神经网络里负责「谁看谁」的那一层)。
路径长度从 O(n) 变成 O(1)。这就是为什么长距离依赖不再是个问题, 也是为什么能并行——没有谁需要等谁。
换个角度看一眼:把它和它的两个前辈写成并排的三行公式,差别会立刻显出来—— 它们解决的是同一个问题,只是 f 的输入不一样。
互动 · 三种写法,同一个问题:谁能一步看到谁
| 角色 | 是什么 | 图书馆里对应 |
|---|---|---|
| Query(查询) | 当前这个词,想知道什么 | 你拎进图书馆的那个问题 |
| Key(键) | 每个词能提供什么 | 每本书书脊上的标签——用来和问题比对 |
| Value(值) | 每个词的实际内容 | 书里的内容——比对上之后,真正借回家的东西 |
三个都是同一个输入 X 乘上三个不同的权重矩阵得到。 换句话说:Q、K、V 不是三种不同的东西,而是同一份信息被投影到了三个不同的"视角"里。 这三个矩阵是训练出来的。
这一章关心的是这栋楼怎么搭起来,所以缩放点积、√dk、多头怎么切、掩码怎么加,都只点到为止; 推导在《注意力机制》里。这一章只借它一步:拿每个词的提问(Q)去和所有词的键(K)打分, 把分数变成权重,再用权重去取所有词的值(V)。公式在数学那节一次给全。
为什么非得是三组投影、不是一组:「我要找什么」和「我有什么」是两件事, 《注意力机制》第 9 节第 2 步把三条理由摆全了。
「相关」这两个字太含糊。注意力真正算的是一个可以量出来的数: 两个向量的点积。下面把 512 维压到 2 维,让它看得见。
互动 · 点积 = 对齐程度:把「相关」变成一个数
拖 k₁ 的箭头,让它绕原点转一圈
一句话能说清的机制,搭起来其实有 8 个工位。下面是完整的流程图—— 每一块都能点,点下去下面的面板会展开那一步真正的计算: 不是示意,是这一章当场用一个小模型(4 个词 × 8 维)跑出来的数字。
先交代清楚它和真模型的关系:这里的权重是手写的小权重,没训练过, 所以最后吐出来的概率是随机的。但形状、步骤、先后顺序和 GPT 一模一样, 只是每个数字小了几十倍——把 8 换成 512、6 换成 96,就是今天用的模型。
互动 · 整栋楼的地图:点任一模块,看那一步的真实数字
「总览 + 点进去看细节」这个做法学自 Transformer Explainer——佐治亚理工 Polo Club 做的一个在浏览器里可视化 Transformer 的网页。 它要在浏览器里加载真实的 GPT-2 权重(好几百 MB),这一章用的是手写的小权重——双击打开、断网也能跑。
从头到尾,数据的形状都是 [4 × 8]——
只有中间那两张注意力矩阵是 [4 × 4],而且算完这一步就不再需要、直接丢掉。
这就是为什么 Block 能一层一层往上叠:它的入口和出口一样大
(像一根水管,而不是一个漏斗)。唯一“变形状”的地方是最后那一步:
从 8 维变成“词典里每个词一个分数”。
下面用的是 4 个词、8 维的迷你 Transformer。点「下一步」跟着走一遍, 会依次做点积、缩放、softmax、加权求和。
互动 · 完整数据流逐步拆解
| 细节 | 做什么 | 不做会怎样 |
|---|---|---|
| 除以 √dk | 点积之后除以 √dk(dk 是每个头的维度) | 维度一大,点积的方差就大,softmax 会变成"只有一个位置是 1,其他全 0"——
|
| 因果掩码 Causal Mask | 生成模型里把上三角的位置设成 −∞,softmax 之后那些位置的 α 就是 0 | 模型会偷看后面的答案。训练时损失很低,一生成就露出马脚 |
互动 · 掩码前后的注意力矩阵
没有掩码:每个词都能看到全部
加了因果掩码:只能看自己和左边
一个注意力头只能学出一种关注模式。但语言里的关系有很多种: 主谓一致、指代消解、修饰关系、位置邻近……
多头注意力的做法是:把 dmodel 维切成 8 份,每份独立做一次注意力, 最后拼回去再投影一次。
「512 维」对人是没有直觉的,「4 个格子」有。下面是一位写图解博客的工程师 Jay Alammar 那套画法(他的《The Illustrated Transformer》在章末拓展阅读里): 用格子的数量来代表维度。换头数时,下面四行数字全部当场重算。
互动 · 用「格子的数量」编码维度(示意,非按比例)
像一个 8 人的评审团。每个人只负责盯着一个方面—— A 看语法关系,B 看代词指代,C 看情感倾向……最后把 8 份意见拼起来。 如果只让一个人看全部 512 维,他反而什么都看不过来。
一个反直觉的发现 后来的研究(如 Are Sixteen Heads Really Better than One?)发现: 推理时可以把大部分注意力头剪掉,性能几乎不掉。 这说明多头里存在大量冗余——但训练时它们确实各自学到了不同的东西, 只是最后可以被压缩掉(前面「A 看语法、B 看指代」是事后观察到的典型,不是谁事先指定的)。 这也是为什么会有 GQA(分组查询注意力)和 MQA(多查询注意力) 这种「几个头共享同一份 K、V」的优化:要存的量小一截,效果几乎不变(见阶段 6)。
自注意力只是半个 Block。完整结构是这样:
上面写的是 2017 原论文的版本:归一化放在残差之后(Post-Norm),激活用 ReLU。
后来的 BERT(Google 的双向编码器)、GPT-2(OpenAI 的解码器)把激活换成了 GELU, LLaMA(Meta 的开源大模型)又换成了 SwiGLU(两个都是激活函数,《激活函数》那章讲过); 而从 GPT-2 起,归一化挪到了子层之前 (Pre-Norm:x ← x + F(LayerNorm(x)),见阶段 1 的归一化层与初始化)。
| 部件 | 作用 | 参数量(d=512, 8 头, FFN 4×) |
|---|---|---|
| 注意力 QKV + 输出投影 | 让词之间互相通信 | 4 × 512 × 512 ≈ 105 万 |
| 前馈层 FFN | 真正"存储知识"的地方 | 2 × 512 × 2048 ≈ 210 万 |
| LayerNorm × 2 | 稳定数值 | 约 2000(可以忽略) |
| 合计 | 一个 Block | 约 315 万 |
版本在变,但「FFN 是重量级、占三分之二参数」这个结论不变。
① 注意力不"存储"知识。它只负责让信息在位置之间流动。
真正记住"巴黎是法国首都"这类事实的,是前馈层——它占了参数的大头。
② 直觉上以为"注意力是主体",其实 FFN 才是重量级。
这也是为什么后来的 MoE 改造(阶段 5)主要就是把 FFN 换成多个专家。
注意力只负责一件事:让信息流动。可是流动本身不产生知识。 上面那张参数表已经告了一个状:大头在 FFN。那它在算什么?
它是两层的小 MLP,而且每个词各算各的—— 同一句话里的词在这一步完全不交流。注意力管“互相看”,FFN 管“各自想”。
为什么中间要宽 4 倍 中间不宽、激活又是线性的,两层矩阵乘起来就是一个矩阵,整个 Block 退化成一层—— 变宽是给非线性留出操作空间。
4 倍也不是神圣的:普通 FFN 两张表(d×4d、4d×d)一共 8d² 个参数; SwiGLU 要三张 d×h 的表,想让总数不变就解 3dh = 8d²,得 h = 8d/3 ≈ 2.67d。 真正重要的是「变宽再压回」这个形状。
互动 · 中间宽度一变,参数账单就重算一遍
把注意力想成一个会议室:大家互相对看一下,把相关信息交换一圈。 但开完会还得有人回工位干活——把交换来的信息变成自己的理解。 FFN 就是那个回工位的环节。它占了人手的大头。
为什么说它“存知识” 把 FFN 的中间那一层看成一部查手册的机器:
前半段(W₁)在问“当前这个词像不像我要找的那个开头”,
后半段(W₂)把匹配上的内容抬出来。
“巴黎 —— 法国”这类事实就是在这一层被记下的:只要前面出现这组匹配,对应的那一行就被抬起来 (研究者在训练好的模型里找到的现象,Geva et al. 2021,见章末论文卡; 本页这几个互动演示不了它——它们用的是没训练过的小权重)。
这也是为什么后来的 MoE 一定是对 FFN 下手:要变的就是大头那块。
原始论文把它们写成两行工程细节,但这是整栋楼能堆起来的真正原因: 没有它俩,梯度在回传路上越乘越小,层数一多就传不回前面的层。 下面量的是「信号和梯度能传多远」,不是训练结果——但它和「48 层能不能训起来」量的是同一件事。
下面这个互动把一个 4 维的小网络叠了 L 层(用 4 维而不是 2 维: 维度太低时 LayerNorm 会退化成常数,看不出差别), 再把梯度一层层乘回去,当场量出两种现象: 没有残差,信号和梯度会一起消失;没有归一化,信号量级会跑飞。
互动 · 叠 48 层:激活和梯度各会变成什么样
左边:信号的量级(越大越“爆”,越小越“消”)
右边:梯度的大小(对数刻度,注意 1e−19 这种数字)
两者分工很干净:
| 对比 | Post-Norm(2017 原版) | Pre-Norm(GPT-2 之后) |
|---|---|---|
| 写法 | x ← LN(x + F(x)) |
x ← x + F(LN(x)) |
| 残差通道上有几道关卡 | 直通路也要穿过 LN:梯度每层被它的导数乘一次,层一多就稀释 | 直通路只有加法:LN 挪到了支路上,梯度不用过它的导数 |
| 训练 | 必须开 warmup(先拿很小的学习率热机),否则容易炸 | 不需要 warmup,能一直堆到上百层 |
| 今天谁用 | 原版 Transformer | GPT / LLaMA / 几乎所有现代模型 |
它是对每个词自己那 8 个数算均值方差,不是对一整句话算。
两个后果:
① 它不会泄露别的位置的信息——所以才能安全地插在注意力前后;
② 推理时可以逐个算,不需要等整句话。换成一跨位置的归一化(BatchNorm),
这两条全都不成立——这也是 Transformer 里不用 BatchNorm 的原因(见 《归一化层》)。
前面十节把整栋楼拆完了。楼里最核心的那一步,注意力子层,合起来其实只有一条公式—— 而它画出来就是一句话:拿你的提问去和每个词的键打分,把分数变成权重, 再用权重把每个词的内容拌在一起。
下面这六张图把这条公式里的每一个符号都画出来,数字全是当场算的: 一个 5 个词、每词 2 维的小注意力(为了能把 Q、K 画成平面上的箭头)。
核心大图 · 一条公式的三个动作:打分 → 分配 → 拌在一起
互动 · 为什么要除以 √dk:每档采样 4000 次算给你看
互动 · softmax 到底做了什么:分数 → 权重
互动 · 不加
互动 · 8 个头各自在看什么(跑 8 组 softmax)
这一节只有一句话要记住 注意力不是一个「查找」,是一个「加权平均」。
它的输出永远落在所有 V 围出来的那片区域里——不会跑到外面去。
这也顺带解释了第 7 节那个发现:头可以剪掉——因为每个头都只是在做一次混合,
少做几次混合不至于把东西搅坏;而被拿掉的权重,softmax 会自动分回给别的词。
这一节回答一个比“它怎么算”更重要的问题:2017 年之后,为什么几乎所有架构都变成了它? 答案不是“注意力更聪明”,而是它把自己的先验几乎全部拿掉了—— 下面这份先验(也叫归纳偏置,inductive bias)对照表就是全部理由。
| 问题 | RNN / LSTM | CNN | Transformer |
|---|---|---|---|
| 它假设世界是什么样 | 顺序很重要,而且信息可以靠“一个状态”传下去 | 局部性:附近更相关;平移不变:同一个模式出现在哪都一样 | 几乎什么都不假设——只假设“任意两处都可能相关” |
| 用生活比喻 | 传话游戏,一个人接一个人 | 一枚印章盖满整张纸,同一个花纹反复用 | 全员会议室,每个人直接问每个人 |
| 看到全句要几步 | n 步(必须一步一步来) | 约 n/2 层(每层只看 3 个邻居) | 1 层 |
| 先验强度 | 强 | 强 | 最弱 |
| 需要多少数据 | 少也能学(先验在帮它猜) | 图像上很省 | 很吃数据——先验弱就得拿数据补 |
| 天花板 | 低 | 中 | 高 |
上表里「看到全句要几步」那一行的“约 n/2 层”、“1 层”不是估计值。下面把它们算出来——
同一个序列长度、同一个宽度 d = 512,
三种写法各要多少乘加、各要多少步串行。
互动 · 算一遍:看完全句,三种架构各要付多少钱
一句话解释这张图 来历:注意力一层约 2n²d 次乘加,RNN 约 n·d² 次,
两者相除就是 2n/d——所以 n 超过 d/2 时注意力更贵;
句子短时反过来(本页 n=128、d=512 时它只有 RNN 的 0.5 倍)。
但它在另一个维度上彻底赢了:串行步数从 n 变成 1。
GPU 上有几万条并行通道,串行 n 步意味着这几万条通道里的绝大部分时间在发呆——
在一个“算力便宜、串行昂贵”的时代,“多算几十倍”比“慢慢等 n 步”便宜得多。
既然 Transformer 几乎不作假设,它学东西就比 CNN/RNN 费力得多—— ViT 在 130 万张图上直接训打不过 ResNet,换到 1400 万张、再到 3 亿张才反超。 把先验从结构里拿掉不代表不用付出,只是把账单从“模型设计”转移到了“数据和算力”。 所以文本上 2018 年(BERT)就赢了,图像上要等到 2020 年(ViT):凑够那么多数据,晚了两年。
很多人分不清 BERT 和 GPT 到底差在哪。真实情况是: 它们用的是同一套零件,区别只在“谁能看谁”——也就是那张掩码矩阵。 三个选项,就是三种拓扑(谁跟谁连着)。
互动 · 同一批分数,三种掩码:重跑一遍 softmax
| 拓扑 · 代表 | 谁能看到谁 | 学什么(预训练目标) | 擅长 / 不擅长 |
|---|---|---|---|
| encoder-only 只编码 BERT · RoBERTa |
双向:每个位置都能看两边 | 掩码填空(挖掉一个词让它猜) | ✅ 理解:分类、抽取、检索、向量嵌入 ❌ 生成(它的训练方式里没有“下一个词”) |
| decoder-only 只解码 GPT · LLaMA · 几乎所有今天的对话模型 |
因果:只能看自己和左边 | 预测下一个词 | ✅ 生成;而且“只猜下一个词”这一个目标居然带出了通用能力 ❌ 双向理解略弱(看不到右边) |
| encoder-decoder 两头都要 原版 Transformer · T5(Google 的编码器-解码器)· Whisper(OpenAI 的语音模型) |
填空 + 生成 | ✅ 输入和输出都很长且不是同一种东西(翻译、语音转写) ❌ 参数利用率低(两套堆叠各干一半活) |
一个很容易搞反的点 掩码矩阵里那个叉叉不是“被删掉的数据”,而是 softmax 之后的 0。 它没有把后面的词从序列里拿掉,而是把那些位置的权重抬到零—— 信息还在那里,只是拿不到发言权。
encoder-only 像做完形填空试卷:空在前面还是后面都一样,两边都能看。
decoder-only 像接力默写:只能看已经写下的部分,不能偷看后面。
encoder-decoder 像同声传译:一边听完整句(双向),一边一个词一个词地往外说(因果),
中间不停地回头对照原文(交叉注意力)。
这个分类不是三个不同的发明,而是同一堆零件换一行代码。 而且它早就跳出了语言:ViT 把图片切成方块当词、用 encoder-only; DiT(把扩散模型的主干换成 Transformer)是 2026 年图像生成的主力; Mamba 则把中间的注意力层换成了别的,外面的残差 + 归一化骨架照搬。
同一个模型,训练时和生成时干的事情差很多。这里先把两个概念分开:
训练时整句话已经摆在桌上(所以能一次算完);生成时
互动 · 同一句话,训练一次算完;生成只能一步接一步
把鼠标移到下面这行公式里的 n 上——上面那个「序列长度 n」按钮组会亮起来。
然后把 n 从 512 一路切到 8192,看 2n²d 那一项涨得多快。
里面那个 n² 就是注意力的平方墙。
互动 · 为什么推理会变成“搬数据的比赛”:KV cache 算一下
| 对比 | 训练 | 推理(生成) |
|---|---|---|
| 一次前向处理多少位置 | 全部 n 个(并行度 = n) | 只算 1 个新位置(并行度 = 1),但历史长度不断增加 |
| 能不能并行 | 能。因为答案已经在手上,因果掩码保证了它不会偷看 | 不能。第 k 个词必须等第 k−1 个词出来 |
| 总乘加次数 | L·(2n²d + 12nd²) | 几乎一样——区别不在“多少计算”,而在“能不能同时算” |
| 卡在哪里 | 算力(n 个位置一起算,都是大矩阵乘,GPU 的乘加单元吃得满;显存主要被激活占着) | 显存带宽(每生成一个词就把整个 KV cache 读一遍) |
| 最贵的动作 | 存激活(见反向传播那个显存账单) | 把几 GB 的 KV 从显存搬到计算单元 |
| 维度 | RNN / LSTM | Transformer | 什么时候真的会痛 → 换什么 |
|---|---|---|---|
| 并行 | 不能,严格串行 | 完全并行,一次矩阵乘法算完所有位置 | 要逐词生成的推理阶段(见第 13 节)→ 推理优化,让每一步少搬数据 |
| 路径长度 | O(n),要穿过 n 个时间步 | O(1),任意两个位置一步直达 | 长距离依赖任务(长文档、代码)→ 正是它赢的地方 |
| 计算复杂度 | O(n · d²),和序列长度线性相关 | O(n² · d),序列翻倍计算量变四倍 | 序列很长(几万 token)→ 高效注意力 / 滑窗 / Mamba |
| 显存 | 只要存状态,O(1) | 要存注意力矩阵和 KV cache,长序列是大问题 | 长上下文推理 → KV cache 量化、GQA / MQA、PagedAttention |
| 词序信息 | 结构自带(按顺序读) | 完全没有,必须额外加 |
要支持更长上下文 → 换成 RoPE 这类位置编码(下一章) |
| 差 | 注意力权重能画出来,但权重高 ≠ 原因(见 《注意力机制》代价那一节) | 想拿注意力权重当解释 → 别这么做,换探针、消融那类工具 |
这句话要记住,因为阶段 6 和阶段 8 的整个故事都在解决它: 高效注意力(FlashAttention / 线性注意力 / GQA、MQA / MLA——MLA 是 DeepSeek 的多头潜在注意力,把 KV 压到很低维)、 状态空间模型(Mamba)、滑窗注意力——全都是为了把这个 n² 压下去。
上面讲的是一栋完好的 2017 版大楼。但到了 2026 年,它的四块墙都被人动过了。 这里只给出四个你需要知道的节点,每一条都指向它自己的一章。
| 节点 | 一句话 | 为什么它重要 | 去哪看 |
|---|---|---|---|
| ① 推理时代 DeepSeek-R1-Zero(2025) |
不用人类写推理过程,靠强化学习加一个能自动判对错的奖励信号(后面 《RLVR 与 GRPO》那章会讲),模型自己长出了推理能力 | 2025 年的头号范式转移:“对齐”从“让模型听话”变成了“让模型学会想” | RLVR 测试时计算 |
| ② 架构裂变 2026 一条热门路线 |
越来越多的模型不再是纯 Transformer,而是 attention + SSM 混搭(如 Mamba-3 的混合配置) | 纯 attention 的 O(n²) 和纯 SSM 的记忆短板互相补——本章第 14 节那张代价表就是这套混搭的动机 | Mamba 线性注意力 |
| ③ MoE 成为标配 | 它从“一种可选架构”变成了大模型的默认架构(一个输入只动用一小部分专家) | 回看第 9 节:MoE 改的就是 FFN 那块——“只激活一部分”正是因为大头在那里 | MoE |
| ④ |
同一栋楼现在要横着切到上千张卡上跑,还要降到 bf16 / fp8(每参数 2 字节 / 1 字节) | 训练与推理的账(暗线 C/D)已经变成了工程的主要矛盾 | 分布式训练 显存账本 |
再往前一步是让 AI 改进 AI:目前实际系统大多还停在「人指定怎么改」的第一级, 见 《递归自我改进》。
这一章站在 ② 没有免费午餐 这条线上:Transformer 把先验调到了最弱,天花板最高,账单也最大。
回到第 11 节那个互动,把序列长度拉到 8192。看那三行串行步数。
你会看到:RNN 的乘加最少,但串行 8192 步;卷积要多算很多倍,还得串行 4096 层;
注意力只串行 1 步。“串行深度”才是这张图真正在比的东西——它就是“先验换天花板”这句话的可测量版本。
| 暗线 | 这一章的回答 |
|---|---|
| A 信息流动 | 形状(d = 512):[n×d] → Q/K/V 还是 [n×d] → 分数 [n×n] → 权重 [n×n] → 输出 [n×d]。 整栋楼从头到尾都停在 [n×d],只有两张注意力矩阵是 [n×n](第 4 节总览第 ③ 步那张图); 最后一步才把它们换成 [词典大小]。 形状不变 = 可以无限叠层。 |
| B 什么被牺牲了 | 三样:注意力矩阵的显存、被拿掉的先验、推理时缓存的 KV。 训练时每层要存下 [B×H×n×n] 的注意力矩阵(B = 一批几句话,H = 头数;第 14 节的 O(n²)); 先验被拿掉,模型只能拿数据补(第 11 节);推理为了省重算要缓存 KV,于是吃显存(第 13 节) |
| C 参数账本 | 一个 Block(d=512, 8 头, FFN 4×)= 314.8 万参数: 注意力 104.9 万 + FFN 209.7 万 + LN 0.2 万。 关键比例:FFN 的参数量正好是注意力的两倍—— 而且这个比例与 d 无关(两边都是 O(d²)),只由中间倍率决定(第 9 节) |
| D 跑在什么上 | 两张账(第 13 节那张表):训练一次把 n 个位置全算完;推理只能一个字一个字来, 每生成一个词就要把整个 KV cache 搬一遍——n=4096 时单个请求就是 2.0 GB。 最贵的动作是“搬数据”,不是“算数”。 |
| E 它假设了什么 | 假设“任意两个位置都可能相关”。
代价很具体:它不知道“近的比远的重要”(要靠 |
| F 违背了哪个直觉 | 直觉说“参数多的地方就该是主角”,结果是错的方向反了——参数多的地方(FFN)恰好是“逐词独立”的那一层。 真正实现“互相沟通”的注意力反而只占 1/3。另外一个: 注意力主要负责搬运;到了 MoE 时代,被拆开复制的依然是 FFN |
它接住了前两章的什么:Seq2Seq 把注意力当“一个补丁”贴在 RNN 上,
《注意力机制》把这个补丁算清楚了。这一章回答:既然它这么好用,能不能把 RNN 直接删掉。
它给下一章留了什么:整栋楼里唯一没讲的一块拼图是“位置信息从哪来”——
注意力自己看不见顺序,本章只用了最原始的正弦/余弦。
下一章《
把「循环」删掉,只留「注意力」:每个词问所有词「你和我有多相关」,再按相关度加权平均它们的信息。
一个 Block = 注意力 + FFN,各套残差和 LayerNorm;真正「存知识」的是 FFN,它占了参数的大头。
所以呢:它赢不是因为它更聪明,而是把先验几乎全拿掉了——天花板最高,但只有数据和算力充足的人才付得起;
那个 n² 和「推理只能一步一步」,就是后面几章要解决的问题。
上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。