专题三 · 注意力演进

这份讲义怎么用

这是老师的草稿,不是给学员的材料。学员看 课件,你看这一份。
课程作者 Chris Yang · Google Cloud AI Infra 架构师。

🎯这一节要留下什么 讲完之后台下脑子里该剩的那一句。
🗣讲稿 黄底的可以照着念;灰底斜体的是当事人原话,必须念
🖥屏幕 这一段该滚到课件的哪张图、放大哪一格。 ⭐ 这些提示全都挂了 class="board",构建时会被逐条对账 ——  指了一张不存在的图或不存在的小节号,会当场报出来。
⚠️别讲什么 这一节最容易跑偏的方向。

⏱ 时间:主线 60′ / 完整 87′

这一讲跟别的讲不一样的地方:它是一条故事线,不能跳着讲 每一章的第一句和最后一句都是接口 —— 跳掉一章,下一章的开头就没有来处。

段落主线 60′完整 87′说明
开场(挂枪)33⛔ 一个数就够,别讲综述
一 一条链57只为立那个「盒子」的形状
二 2017 那一刀810⭐ 唯一的人物戏(3′)+ 给主角 S 命名
三 账单到期57那把「省了多少 / 亏了多少」的尺子
四 砍头68判据:压体积 vs 压自由度
五 MLA1012⭐⭐ 全讲最硬。5.4 那五分钟不许压
六 别全读912⭐ 滑窗侦探故事 + 新的 DSA 机制图
七 绕回原点810⭐⭐⭐ 全讲的高潮,三段引文要念
八 那就都要38时间紧就只讲 8.1 和 8.5
九 落到机器上 + 收尾310⛔ 收尾那两句再紧也不能砍
合计6087

⛔⛔ 上面那张表是愿望,下面这张是地板 「地板」= 把这一章的讲稿一个字不落地念完、再加上切图滚动的时间, 一句现场发挥都没有。每次 build 现数,不是估的。

台词汉字切图地板87′ 版给的
第一章 一条链3,355417.8′7′
第二章 2017 年那一刀1,52138.4′10′
第三章 账单到期82534.9′7′
第四章 第一次省:砍头65544.3′8′
第五章 MLA2,631414.2′12′
第六章 别全读:从滑窗到 DSA4,829826.1′12′
第七章 绕回原点4,592524.2′10′
第八章 那就都要2,459613.8′8′
第九章 落到机器上 + 收尾1,50158.8′10′
九章合计122′84′

⭐⭐ 60 分钟版怎么砍 —— 只砍「展开」,不砍「接口」。

  • ⛔⛔ 先说一条被实测推翻的:原来这里写「砍掉一的三个痛 + 四的 GQA 三条理由 + 八的 8.2~8.4,就能省回十四分钟」—— 那是算错的 量过才发现:一 的三个痛讲稿里本来就写着「指着图念标题就行,不要逐个展开」, 砍了省 0;四 那三条理由整段只有 88 字,留一条省 0.3 分钟; 8.4 也早就标着「只在 87′ 版讲」。三条加起来省不到一分钟。
  • 所以 60′ 版不是「砍几段」的问题,是整章取舍的问题。 看上面地板表挑:最贵的三章是六、七、九,而七是高潮、九有收尾, 真要腾时间只能从八下手 —— 八整章砍到只讲 8.1 和 8.5。
  • 砍了就散架的:二 的 2.5(「头」在这里出生)和 2.6(给 S 命名)、 三 的那把尺子、五 的 5.5、七 的 7.5、九 的收尾两句。 这六处是整条故事线的关节。
  • ⚠️ 六 的「显存不省」那一句,任何版本都必须说 ——  省略它,第八章就成了没来由的「那就都要」。

⛔⛔ 时间账:60′ 版实际讲不完,上台前必须先决定砍哪一段。

这不是估的,是每次 build 现数的 ——  全部讲稿台词 22,801 汉字(引号里要念的原话也算在内,按 200 字/分 = 114 分钟)+ 44 次切图 (每次滚动定位按 15 秒 = 11.0 分钟)——  合计 125 分钟,而这里面还没算任何讲图、互动、答问的时间。
⛔ 这几个数字以前是手写的,于是讲稿一改它就悄悄过期 (实测某一版已经偏了 600 多字)。现在由 topic03-build-lecture.py 末尾直接从生成出来的 HTML 里数,改稿即更新,不会再对不上。

87′ 版:剩 -38 分钟给讲图和现场发挥。
60′ 版只剩 -65 分钟缓冲 —— 只要有一个人举手,就会崩。

所以 60′ 版要在上台前就砍掉这三处(都是「展开」,不是「接口」): 第一章的三个痛 · 第四章「为什么是八组」的三条理由(留第三条)· 第八章的 8.2~8.4。 这三段合计约 1,200 字,砍完能挣回六分钟左右 —— ⚠️ 这个 1,200 是估的(三段的目测字数),不像上面那几个数是现数出来的; 真要卡点,上台前自己数一遍。

而这五处砍了就散架,任何版本都不能动: 第二章 2.6(给 S 命名 + KV cache 出生)· 第三章那把三问尺子 · 第五章 5.5 · 第七章 7.5 · 第九章收尾那两句。

🧵 上台之前:把三条暗线记在心里

这一讲的名词有三十个,但只有三条线。 讲的时候每碰到一次就点一次名 —— 台下记住的会是这三条,不是那三十个。

① 硬件反过来决定公式。 第二章(点积赢在能写成矩阵乘)→ 第四章(八组对上八张卡)→ 第六章(按块挑不按 token 挑)→ 第九章(为了对齐硬件,连块大小都改了)

② 同一个恒等式挪两次括号。 第五章(吸收:压缩包一个都不用拆)→ 第七章(那张大表根本没被造出来)。 ⛔ 只有这两次 —— 第二章那次不算:点积赢加性换的是打分公式, 跟结合律没关系,算进来这条线从第一站就是错的。
两次的敌人是同一类东西:夹在两个矩阵中间、不让你挪的那个玩意儿。 第五章挡路的是 RoPE(带下标的旋转,每一对「谁问谁」都不一样); 第七章挡路的是 softmax两次都是先把那个东西搬开,括号才挪得动。

③ 那个盒子走了一圈又回来。 第一章立起来 → 第二章被扔掉 → 第三章被迫回来一次(解码)→ 第七章有人主动请它回来

如果只能让台下带走一句话,那就是第九章最后那句: 2017 年那笔交易,这八年一直在往回赎 —— 但不能把并行度还回去。

🖥 投屏怎么放 —— ⛔ 别整张投

⛔ 这条是量出来的,不是讲究 这一讲用到的图里,大多数整张投到 1280×720 上,最小字会掉到 5px 以下根因不是字号定小了 —— 一张 1400 宽的三栏图本来就是三页内容

⭐⭐ 正确的放法:一次只放大一格。 三栏图的一格占满投影区就是 2.8× —— 11px 到屏幕上变成 31px,后排也看得清。

操作上两句:① 把图点开单独一张,用 Ctrl/⌘ + 滚轮放到只剩一格; ② 讲完一格横向平移到下一格。 —— 下面每一段讲稿里的「指第二格」「只看 ① 和 ②」,就是按这个节奏写的。

唯一需要整张投的三个时刻: 第三章那张三行对照(Ⓐ Ⓑ Ⓒ 要一起看)、第六章的五张 mask(骨架从「摆在一起」里浮出来)、 以及最后那张编年史 —— 它是结束画面,让它停在屏幕上。

第零章 开场:先把这八年摊开(3′)

开场只做一件事:把那把枪挂上墙。

「今天这一讲,讲的是一个数
2020 年的 GPT-3,一次只记得住两千零四十八个 token ——  token 你就当成「字」来听,中文里差不多就是一个字,英文里差不多是大半个词。 后面我会「字」和「token」换着说,说的是同一样东西。
今天的模型,记一百万。
这中间是五百一十二倍。这一讲从头到尾,就讲这五百一十二倍是怎么换来的。」

「⭐ 而我想先请你在心里猜一个数:这五百多倍里, 真正靠『买更好的硬件』换来的,占几成?—— 最后一张图会给答案。

🖥 屏幕fig3-chronicle 现在默认是折起来的 —— 点开「先看一眼这八年的形状」,整张投,让它停两秒然后收回去⛔ 一个名字都别念。

⭐⭐ 2026-09-16 现场把它改成默认折叠了。 原话:「我光看后边那个有模型名称和年份的编年史就够了。」 ⭐ 判据:两样东西讲同一段历史、而其中一样明显更好读时, 差的那样不该跟好的那样抢同一屏 —— 收起来,不是删掉。 ⛔ 它必须留着:第九章那句召回指的就是它。 ⚠️ 所以这一段可以整段跳过;真跳了,第九章那句召回改成指模型表。

「在开始之前,先把这一路真实发生过的事整个摊开看一眼 —— 从 2014 年到今天。
……上面有三十几个名字。现在它对各位来说大概就是一团噪音 ——  这是正常的,而且是故意的。
请记住你此刻看它的感觉。两小时之后,我会请你回到这张图再看一眼 ——  到那时候,它会是另一张图。

🖥 屏幕fig3-arc 现在默认折起来 ——  点开「整本书的路线图(六段)+ 两张趋势图」,直接下滚到底下那两张趋势图, 左右各指一下,然后收回去⛔ 上面那六张卡片一段都不要介绍 —— 那是给读者自己看的。

⭐⭐ 2026-09-16 现场把它改成默认折叠了。 原话:「这一部分内容对主线没有什么帮助,把它折叠起来, 有时间的话,谁愿意自己读的话,可以自己读。」 ⚠️ 所以这一段可以整段跳过 —— 跳了不影响第一章开讲。 ⛔ 但别删:那两张趋势图是本课模型表 44 行现算的, 是全讲唯一一处「拿自己的数据说话」,而且第九章收尾要引它

这两张图是真数据(本课模型表 44 行现算), 台下只需要看见「一个往上、一个往下」这一件事,别念点名。 ⛔ 原来这里写的是「用手从左扫到右比一下,不然台下会找哪条线」——  那是图上还没有线的时候的权宜之计。现在线是真的,手就不用比了。

「左边这张,每个点是一个模型能吃多长的上下文;右边这张, 每个点是同一个 128K 长度下它要付多少显存。
你不用看清任何一个点。只看两条绿线:左边往上,右边往下。
这六年真正发生的事,就是这两条线同时反着走 ——  能装的越来越多,而装同样多东西越来越便宜。agent 是这两条线交出来的。

「而我们今天,就按上面从左到右这六步来讲 ——  一步只解决上一步留下的一个麻烦。
⭐ 而第一步,要先回到这条线开始之前 —— 回到还没有注意力的年代。」

⚠️ 不要在开场解释 KV cache 是什么。 那句话留到第二章末尾,让它从故事里自己长出来 ——  现在讲,台下只会当成一个要背的名词。

⚠️ 这一节最容易跑偏的地方 ⛔ 别把开场讲成「注意力综述」。一个数就够了。
编年史那张一个名字都不许念 —— 它此刻的作用是「让人看见有多乱」, 念名字反而会把那个感觉冲掉。
⛔ 别念路线图上那六段的名字 —— 那是给读者自己看的,不是拿来念的。

🖥 本节主屏:课件 第零章 开场:先把这八年摊开 · 主图 fig3-chronicle

第一章 一条链(7′)

🎯 这一章要在台下脑子里留一个形状:一个固定大小的盒子。 —— 因为第七章它会原样回来,而那一刻是这一讲的高潮。

「先回到 1990 年。那时候的答案朴素得近乎粗暴:带一个盒子。 读一个字,把盒子里的东西和这个字搅一搅,写回盒子;读下一个字,再搅一次。 读完,盒子里剩下的就是这段话在模型眼里的全部。」

⭐⭐ 这里插三十秒把名字拆开 —— ⛔ 全讲从第一句就在说「RNN」, 却从来没说过它是哪三个词。 (2026-09-15 现场被问到了。)⭐ 一定要放在动作讲完之后: 这样「R 指什么」是台下从刚听过的画面里自己认出来的,不是背下来的。 ⛔ 别提前放到开场,那时候他们还没有那个画面。

「顺手把这三个字母拆开:RNN,Recurrent Neural Network, 中文叫循环神经网络。
⭐ 那个 R,指的就是你刚才听到的那个动作 ——  搅完之后不是走了,是绕回去当下一步的输入。那条绕回去的线, 就是它名字的全部来历。
⭐ 这个词本身也很直白:recurrent 来自拉丁语,re 是回、currere 是跑 ——  字面意思就是往回跑。」

「⭐⭐ 还有一件多数人不知道的事: 这个词不是数学家造的,是从解剖学借来的。
解剖学里 recurrent 一直是用来描述环状结构的 ——  一九〇一年 Cajal 在小脑皮层里看到过,一九三三年 Lorente de Nó 又发现了一批。
⛔ 而在那之前,神经系统一直被当成纯前馈的 ——  「脑子里有回路」这件事,到四十年代才被正经提出来。」

这一条到第七章会回响一次 ——  那里 Albert Gu 说「这一支像一个大脑」。名字本来就是从大脑借的, 绕了三十年又借回去了。⛔ 现在别点破,留到第七章。

「⛔ 顺带避一个很常见的中文误译:它不叫『递归神经网络』。
递归神经网络是另一个东西,是沿着语法树往下钻的。
RNN 是循环,沿时间轴转圈;递归是往深处钻。一个原地打转,一个往下挖。

🖥 屏幕:1.1 滚到 fig3-rnn-inside按 Ⓐ → Ⓑ 走,最后读一遍落点带。

⭐⭐ 2026-09-16 这张图被砍掉一半多(3186 → 1300 px),1.1b 也并进 1.1 了。 现场原话:「非常简单的事情画了太多的图,它们彼此之间讲述的内容严重重叠。」 ⛔ 所以原来的 Ⓒ 和 Ⓓ 两格没有了:Ⓒ 并进了 Ⓑ(它俩本来就是同一个动作的两面), Ⓓ 压成了落点带的一句话。下面的台词按新版走,别照着旧格数念。

⭐⭐⭐ 这一节 2026-09-16 才加,起因是现场三连问: 「到底通过什么原理搅进去?」「为什么搅一下不是把原有信息搞乱?」 「KV 是不是这时候发明的?」—— 三问本课原来一个都答不上来。
⛔ 根子在「搅一搅」这个比喻本身:它会让人想成「搅匀」,而搅匀是毁东西的。 ⭐ 判据:一个用来降低门槛的比喻,如果它本身会引出错误的物理直觉,那它就欠一张图。

「刚才我说『搅一搅』—— 那是为了好懂用的比喻, 可它其实会误导各位。
⛔ 因为『搅』容易让人想成搅匀而搅匀,是会把东西毁掉的。
⭐ 所以我们把盒子打开看一眼。」

「⭐ Ⓐ。一步之内其实只有四个动作。
① 转一下:上一步那个盒子,乘一个学出来的矩阵 —— 转了个方向。
② 映过来:这一个新字,乘另一个矩阵,进到同一个空间里。
③ 叠上去:两个相加
④ 压一压:过一次非线性,收回到一个范围里。然后写回盒子。」

「⭐⭐ 四步里最要紧的是第三步它是「相加」,不是「搅匀」。
新的在老的上面 —— 老的一点都没被抹掉。

说完这句立刻抛出那个反问,别等台下自己想到。

「⛔ 那紧接着的问题就来了:叠了一万次之后,还分得开吗?

「⭐⭐⭐ Ⓑ。这一格是这张图的重心,因为它给的不是说法,是一个能算的数。
二维里,随便两个方向的夹角,典型只有五十来度 ——  叠上去就糊成一团,取不回来
可在一千零二十四维里 —— 两个随机方向的夹角是八十八点六度。」

「⭐ 几乎垂直。
两样东西朝着几乎垂直的方向叠在一起,是可以各取各的
⭐⭐ 所以那句话是:叠加之所以能还原,是维度买来的。

⚠️ 紧跟一句边界,别让它听起来像「维度高就万事大吉」。

「⛔ 但它不是无限的真正互不打扰的方向,最多 d 个。 叠过了头,照样糊。
⭐⭐ 各位把这句话记住 —— 今天它还会再出现一次, 那时候它解释的是另一块板子为什么会写满。」

「⭐ Ⓒ。那为什么还是会「传远了会淡」?
因为它每走一步,都要再乘一次
一条消息从第一步传到第一百步,就被连乘了九十九次、也被压了九十九次。」

「⛔ 那个矩阵的『劲道』要是略小于一 —— 连乘一百次就指数级地趋近于零; 略大于一 —— 就指数级地炸掉
⭐⭐ 这就是「传远了会淡」的全部机制:它不是被时间冲淡的,是被反复相乘压没的。

⭐⭐⭐ 下面这一句是全讲最漂亮的一个提前回响,值得停一秒再说。

「⭐ 顺带说一件事,今天最后各位会回头想起来:
「每一步都乘一个小于一的数」—— 在 1990 年,这是这条路的致命伤。
而今天这一支,主动把它放了回去。
区别只有一处:当年那个衰减不受控,今天那个是学出来的, 而且每个通道各有一个
⭐⭐ 同一条性质,一次是病,一次是药。

「⭐⭐⭐ Ⓓ。最后回答一个很重要的问题:KV 是不是这时候发明的?
不是。盒子里根本没有那两样东西
1990 年那个盒子里,就一条向量没有钥匙,也没有内容。

「⭐ 钥匙和内容这一对,是注意力带来的; 而 Q、K、V 这套叫法,要等到2017 年
至于 KV cache 作为「一笔要花钱的账」,还要更晚 ——  要等到自回归生成把「每一步都要重算一遍历史」变成真金白银, 它才会被缓存起来。」

⭐⭐ 下面这两句是本章真正的落点,说完再回到「盒子一样大」。 ⛔ 别省 —— 它给后面八章立了一把尺子, 少了它,后面每一章都只是「又一个新方法」。

「⭐⭐ 请各位记住这两样东西的关系,它是这整本书的骨架
RNN 的状态 = 把全部历史压成一团。
KV cache = 把全部历史原样留着。

⭐⭐ 下面三句是 2026-09-16 现场追问补的,很好用 ——  台下问「那个盒子到底多长」的概率很高。 ⛔ 第二问的答案是「论文不写」,而且要把「不写」本身讲成答案。 判据:别替史料补一个它没有的数。

「⭐ 顺带回答三个各位可能想问的:
第一,那个盒子到底多长?—— 小得超乎想象。
Elman 1990 那篇原文里,最大的那个模拟用的是 一百五十个数; 字母预测那两个是二十个;最小的那个 XOR —— 两个。

「⭐⭐ 拿它跟今天比一下:今天一块线性注意力的板子, 每个头每一层就能到上万个数; 而全注意力那条路上,长上下文的 KV cache 是按 G 记的。
—— 「盒子变板子」这一步,量级上是这么大。

第二,什么精度?—— 论文没写。
⭐ 而这正是答案的一部分:那个年代,精度还不是一个可以权衡的东西 ——  它就是机器上的普通浮点数,没人把它当旋钮。
⭐⭐ 精度变成一件要专门讨论的事,是很晚以后了。
一个量什么时候开始被写进论文,本身就是个信号 ——  说明它那时候才变成一件要权衡的事。

还有两个各位一定会想到的:可学的权重到底在哪?那个「揉进去」的矩阵多大?
可学的就三块矩阵:把新字映进来、把上一步的状态转一下、从状态里读出答案。 加上偏置。」

「⭐⭐ 尺寸都在图上。句子那个模拟:输入三十一维、隐藏一百五十维 —— 
映进来那块是 三十一乘一百五十,四千六百五十个数;
转一下那块是 一百五十乘一百五十两万两千五百个数
读出来那块,又是四千六百五十。」

⭐⭐⭐ 下面这两条是台下最会「哦」出声的两句,别赶。

「⛔ 注意一件很多人想不到的事:那条「回线」本身,是不训练的。
原文写得很死 —— 「循环连接固定为 1.0,不参与调整」。 它只是把这一步的状态原样抄一份留给下一步。
真正学的,是「怎么把抄来的那一份读回去」那个矩阵。 而它占了全部参数的七成。

「⭐⭐ 最后给各位一个量级感:整个模型,三万多个参数。
不是三万亿,不是三十亿 —— 三万。

⭐⭐⭐ 而下面这一条,是这一整节最值钱的一句 —— 它顺手解释了 embedding 是干什么的。

「⭐ 那各位一定还想问:那时候的「词向量」是什么样的?多少位?
⛔ 答案是 —— 那时候根本没有「embedding」这回事。
Elman 给每个词分配一个 三十一位的向量,每个词占其中一个 bit。 (另外留了两位给后续实验,所以真实词表是二十九个词。)
它是随机指定的,完全不参与训练。

「⭐⭐ 原文特意点明了这么编码的两个后果
第一,每个词向量彼此完全正交。
第二,它不携带任何词性或词义信息。

「⭐⭐⭐ 各位,这两句话正好说出了 embedding 后来是干什么的
当年是 —— 完全正交,但零信息
今天是 —— 学出来的稠密向量,只做到「近似正交」,换来的是它开始携带意思
⭐ 而「近似正交够不够用」这个问题 —— 正是刚才那一格那个八十八点六度在回答的。

⭐⭐⭐ 下面这一段是 2026-09-16 现场四连问补的,全是台下真会问的东西。 ⛔ 第一条那个「八千个数」值一秒停顿 —— 它是全讲最省力的一个量级对照。

「⭐ 那真正能用的时候,那个盒子到底多大?——  Elman 那个一百五十是玩具尺寸
第一个真正能用的大 RNN 是二〇一四年那篇做机器翻译的: 四层,每层一千个 cell,词向量一千维,输入词表十六万、输出八万。」

「⭐⭐ 而原文紧接着那一句才是精华:
「这个深层 LSTM 用八千个实数来表示一整句话。」
—— 整整一句话,在这个模型眼里,就是八千个数。

「⛔ 现在拿它跟开篇那道题对一下:
四百八十八 G 的 KV cache,bf16 存,是两千六百二十亿个数。
⭐⭐⭐ 八千,到两千六百二十亿。三千两百七十五万倍。
—— 这就是「压成一团」和「原样留着」之间的真实距离。

⭐⭐⭐ 下面这一问是四问里最值钱的,慢讲。

「⭐ 那 RNN 那三块矩阵,各自在提取什么?
注意力那边各位都很熟:Q 是我要找什么,K 是我能回答什么,V 是找到我能给什么。
⛔ 而 RNN 的答案是 —— 它没有这样的分工。
⭐⭐ 而且这不是我们没研究清楚,是架构本身就没把角色分开。

输入矩阵:把这个词翻译进状态空间。
硬要类比,它像 K 和 V 的混合体 ——  写进去的东西既是内容,又是将来被检索的依据,这两件事是同一份东西。
循环矩阵:它同时干两件事 ——  保留(把旧状态搬下去)和变换(决定哪些方向被放大、哪些被衰减)。 所以它既是记忆的保持器,又是记忆的检索器。」

「⭐⭐⭐ 各位,这正好说出了注意力为什么是个突破
它把「记什么」和「怎么找」拆成了两个独立的参数化。
在 RNN 里,这两件事是同一个矩阵在兼职
⭐ Q、K、V 的语义之所以那么清楚 ——  是因为「检索」这个动作被显式地写进了架构。 RNN 里没有「检索」这个动作,只有「搓」。

「⭐ 那 x 是什么、y 是什么?
x 是当前这一个词的向量;h 是读完前面所有词之后的状态;
y 是状态过输出矩阵,得到一个跟词表一样长的向量 ——  softmax 之后就是「下一个词是每个词的概率」。
⭐⭐ 所以是的 —— 它就是 next token prediction。
证据就在 Elman 原文里:「每一个输入周期的任务,是预测序列里的下一个词。」
—— 一九九〇年,同一个训练目标。用了三十五年。

🖥 屏幕:指落点带最后那一条(⚠️ 开头那句)。

⭐⭐ 这一段原来有自己一整格(Ⓐb,两条回线),2026-09-16 砍掉了。 ⛔ 不是因为它不重要 —— 是因为它讲的是第一章的痛和第二章的解, 不是「盒子里有什么」。完整版留给 1.2 和第二章,这里只点一句。 ⚠️ 现场那个直觉(「y 是不是该绕回去当下一次的 x」)完全对, 但一定要说成两条,否则会把 teacher forcing 讲错。

「⭐ 顺带点一句,完整的下一节讲 ——  把一整条序列连起来的,其实是两条回线,而它们不是一回事。
一条是状态回线:盒子传给下一步,训练推理都有 ——  二〇一七年那一刀解开的就是它,所以训练能并行了。
另一条是自回归回线:这一步吐的字变成下一步的输入。 它只有生成时才有,而且到今天也没人解开。

「⭐⭐⭐ 所以最后一章那句话,现在就能听懂了:
你今天用的每一个大模型,在往外吐字的时候,都退回成了 1990 年那条链。

⚠️ 下面这一段现在只在教材的折叠块里(七个追问那一块),图上没有了。 ⭐ 当堂可以整段跳过;被问到再讲,或者让台下自己点开读。

最后,什么时候变成二维的?—— 比多数人以为的早得多。
矩阵状态不是 2020 年发明的,是 2020 年被重新发现的。
⭐ 九十年代初就有人用外积累加出来的矩阵当状态; 而二〇二一年,那一支自己回来把「它跟线性注意力等价」证了出来
⭐⭐ 那篇摘要里有一句我特别喜欢:它说那些外积拼起来的东西,是 「今天被称为 key 和 value 的那些模式」
—— 今天这两个词,三十年前就以外积的形式出现过。

「⭐⭐⭐ 一个压到不能再压,一个一点都不压 ——  它们是同一件事的两个极端。
今天剩下的八章,讲的就是这两个极端之间的全部空间。

「这里有一个决定了后面三十年的细节 ——  这个盒子从头到尾一样大。喂它十个字,盒子这么大;喂它十万个字,还是这么大。」

⭐⭐ 说完这句停一秒,什么都别补。 台下十有八九会想「那不挺好吗,省地方」—— ⛔ 千万别纠正他。 他是对的,只是要等到第七章才知道自己对。 现在纠正,等于把全讲最大那个反转提前拆了。

🖥 屏幕:滚到 fig3-rnn-unroll只放大右半边那条摊开的链。指红底那一行 —— 「h3 要等 h2,h2 要等 h1」。 然后指竖着的绿箭头和蓝箭头:「能并行的方向一直都在,被卡住的只有横着这一条。」

1.2 那一格要慢讲,它是全书第一次出现「硬件说了算」。

「那它有什么毛病?第一个毛病是它只能一步一步来。
一万个字,就得排一万轮 —— 第二轮必须等第一轮算完,因为盒子得先被上一个字改过。」

⛔⛔ 「不能并行」这四个字必须在这里从你嘴里说出来。 课件第一章写了六次「并行」,可讲稿原来一次都没说 ——  而第二章整章的卖点就是「训练能并行,规模才起得来」。 第一章不立这个对照面,第二章那句台下只会听成「新方法更快一点」。

「『排一万轮』听上去只是慢一点 —— 可它不是算不动。 一万个字的计算量,这台机器一眨眼就完了。是这一万步不能同时开工。
慢,和不能并行,是两回事 —— 这个区别请记住,下一章全靠它。」

「而落到机器上,还要再糟一层: 每一轮,都要把整个模型的权重从显存里重新搬一遍,然后只拿它算一丁点活。」

「那个 313 不是我们编的数 —— 它就是上一讲整整一节在立的那条屋脊线: 每从显存搬一个字节,这台机器配套能算三百一十三次。
所以这条不是『RNN 慢一点』,是买了台很贵的机器,而它九成时间在等着搬东西。」

🖥 屏幕:滚到 fig3-rnn-hw,指中间那两辆车。 ⛔ 车那一格讲完就走,别展开算术强度的推导 —— 那是 L300 的活。

1.3 的三个痛,指着图念标题就行,不要逐个展开。 真正要说出口的只有那一句衔接。

「所以这一章只留两句:盒子的好处是每步要搬的东西不随长度变; 坏处是只能一步一步来,而且装不下 —— 传得越远,越淡
下一刀冲的是坏处 —— 但它会把那个好处一起扔掉。 这本书剩下的八章,讲的都是怎么为『扔掉那个好处』付账。」

⭐⭐⭐ 这里要顺手埋一句 —— 它在第六章要收。 那个好处和那个坏处,是同一条性质:盒子一样大。 第六章会用这条判据去解释 attention sink 那个 bug, ⛔ 而如果它是在第六章第一次出现,台下接不住。

「⭐ 最后请各位注意一件事:刚才那两句里, 好处和坏处其实是同一件事 —— 都是因为『盒子一样大』。
一个设计的毛病,十有八九跟它的好处是同一条性质。
这句话今天会用到三次。这是第一次。

最后这一句是往下走的钩子,别省 —— 第二章开口就在答它。

「那既然注意力这个配件这么好使 ——  能不能把 RNN 整个扔掉,只留配件?
……下一章,就有人真的这么干了。」

⚠️ 这一节最容易跑偏的地方不要讲 LSTM 的门。台下不需要,而且它会把「盒子」这个形状冲淡。
⛔ persistent RNN 那一格只念一句(「当年有人试过把权重钉在片上」), ⭐ 但一定要说「这个念头七年后还会赢一次」 —— 那是第九章的引线。

🖥 本节主屏:课件 第一章 一条链 · 主图 fig3-rnn-unroll

第二章 2017 年那一刀(10′)

🎯 这一章要留下的是:KV cache 是在这里出生的。

⭐⭐ 2.1 是这一讲唯一的「人物戏」,值得花三分钟,而且要念原话。

「答案是:能,而且 2017 年真有人这么干了。
⛔ 不过我得先纠正一件很多人搞混的事:注意力不是 2017 年发明的。
2014 年就有了 —— 而且一开始, 它是长在 RNN 身上的一个小配件。」

「所以那一刀真正干的事,不是发明注意力, 是把长着配件的那条链整个扔掉,只留配件
而在那一刀落下来之前,我想先讲讲这个配件自己是怎么来的 ——  因为它不是谁灵光一闪想出来的,是被人一次次嫌弃出来的。

名字念一次就够,后面一律用「那个实习生」。 —— 台下记不住外国名字,但记得住「一个实习生」。 而且这个身份本身就是故事的一半。

「2014 年,Bengio 实验室有一个实习生,叫 Bahdanau。
他试了两次都不满意:第一个太复杂,做不出来;第二个能跑,但笨得很 ——  它只会死板地按顺序一个对一个,原文第三个词就配译文第三个词。
然后有一天 ——」

⚠️ 念之前先垫半句,否则「解码器」是台下今天第一次听见这个词: 「他说的『解码器』,就是正在往外吐译文的那一半。」

我忽然想到,要是能让解码器自己学会该把游标放在原文的哪个位置,那该多好。 这个念头多少是中学学英文时做翻译练习来的 —— 你翻译的时候, 目光会在原文和译文之间来回移动。

念完停一拍,补这一句收束 ——  它把「注意力」从一个术语变回一个人的经验,这一章的人物戏就立住了。

「各位,这就是注意力的出身。 不是什么宏大理论 —— 是一个学生想起自己做翻译作业的时候,眼睛是怎么动的。

⭐⭐⭐ softmax 在这里第一次出现,必须当场给一句白话 ——  它是第六章那个 bug 的病根。 ⛔ 拖到第六章再解释就晚了:那时候台下要同时消化「新机制」和「新名词」。

「他把这个『软搜索』写成了一个叫 softmax 的东西。
softmax 你就理解成一句话:把一堆分数,变成一组加起来正好等于 100% 的比例。
—— 记住「加起来正好 100%」这六个字。今天下午它会闯一次大祸。」

第一次跑就成了。
他给它起的名字叫 RNNSearch。他后来说:这名字不怎么样。
—— 『注意力』这三个字,是 Bengio 在最后几轮修改里加进去的。

Bengio 那段「为什么必须是软的」是整讲的地基,务必念完。 它一句话解释了后面所有的 softmax,也埋下第六章那个 bug。

这就好比先把整本法文书从头读到尾,然后凭印象把英文版写出来 ——  肯定会丢细节。办法是:写每一个英文词的时候,都允许回头去看法文书里的任意一处细节。 而为了能用反向传播训练,注意力必须是『软』的:不是挑中某一个位置, 而是有一份总额固定的注意力,可以分摊到所有位置上。

「⭐ 各位注意他最后那句 —— 「一份总额固定的注意力, 可以分摊到所有位置上」
这就是刚才那个 softmax,换成人话再说了一遍
⭐⭐ 而它是优点:正因为总额固定、可以分摊,这个东西才训得出来。
⛔ 请各位把这一条记在心里 —— 到第六章,它会变成一个 bug 的病根。还是第一章那句话(这次只是打个招呼,正式的第二次在第六章):
一个设计的毛病,十有八九跟它的好处是同一条性质。

🖥 屏幕:滚到 fig3-attn-invented指第二格念论文那句理由,然后停一下说:「注意这句理由里没有一个字在讲哪种更准。」 —— 这是本书暗线第一次露面。

⛔⛔ 先把「换来了什么」说出来,再说「代价是什么」—— 顺序不能反。 课件这一章的卡片写着「训练能并行,规模才起得来」, 可讲稿里原来「并行」两个字一次都没有 ——  于是整章只讲了砍掉什么,没讲为什么值得砍。 ⭐ 而第一章刚立完「不能并行」那个对照面,这里必须接上。

「2017 年那一刀落下来了:把循环整个拿掉,只留配件。
⭐ 论文的题目就是这个意思 —— 你只需要注意力。

「这一刀换来了什么?换来了并行。
上一章那一万步得排一万轮,现在所有的字可以同时开工,不用排队了。
⭐⭐ 规模,是从这一刀之后才起得来的。 —— 没有它,今天这些模型根本训不出来。」

⭐ 2.2 ~ 2.4 走快一点,三张图各指一格就够。 唯一要停的是 fig3-mha-swap 上那句「状态没了」——  收益说完了,现在说代价。

「注意,被换掉的不只是那根横箭头 —— 那个盒子也一起没了。 上一章说的那个好处,从这一刀落下的那一刻起,不成立了。」

⛔⛔ 紧接着把这条因果链说完,一句都不能省。 讲稿原来从「盒子没了」直接跳到 2.6「S 是主角」——  中间那三步(它不记了 → 每次回头重看 → 所以前面的必须留着) 一个字都没有。 ⭐ 而那三步就是 KV cache 为什么非存在不可的全部理由 ——  少了它,2.6 那个名字是硬塞给台下的。

「那问题就来了:盒子没了,它靠什么记住前面说过的话?
⭐ 答案很直接 —— 它不记了。 每要吐一个新字,它就回头把前面所有的字重新看一遍。」

「可要回头看,前面那些字就得留着。
—— 这就是账单的第一页。

「不过在算这笔账之前,我得先讲一个 会让它乘以八的东西。」

🖥 屏幕:2.5 滚到 fig3-mha-heads指左边那一格

⛔⛔ 这一格快归快,但「头」这个词必须在这里从你嘴里出生 —— 不许只让它出现在图上。 判据很硬:第四章整章叫「砍头」。如果台下第一次听见「头」, 是在听它被砍掉的时候,那一刀就没有痛感 ——  你砍的是一个他还不知道是什么的东西。

「左边这个小人只有一个 query,可它同时想去三个地方: 上一个词、这句话的主语、三段之前那个人名。
请看那根红线 —— 三个方向一平均,它又短,又哪个都没真指到, 落在中间一块空地上。这就是单头的毛病:不是不够用,是会把该分开的东西平均掉。
办法就在右边:把 512 维切成八份,每份 64 维,各看各的,最后拼回来。 ⭐ 这八份,就叫八个『头』。

「⭐ 记住两件事,第四章要用:
一,多头买的不是算力,是分辨率 —— 总维度没变,参数量没变,只是切开了。
二,代价是每个头都要留自己的 K 和 V —— 要存的东西,当场乘以八。
⛔ 这个八,就是第四章第一刀要砍的那个八。」

⚠️ 顺一句「八只是 2017 年那篇的取法」再走 ——  否则第四章你一开口就是「本来有几十个头」,台下会以为自己听错了。 本课主角 DeepSeek-V3 是 128 个头,图里右下角那行小字写着。

🖥 屏幕:2.6 滚到 fig3-kv-born幼儿版), 按 Ⓐ → Ⓑ → Ⓒ 走,停在 Ⓒ 别走。fig3-tx-base 那张专家版现在默认折着,当堂不要点开

⭐⭐ 2026-09-16 现场:「那个图是 Scaling Book 里的专家版,信息量太大了, 我怕同学们理解不了,能不能画一个幼儿版的。」 ⭐ 于是新画了 fig3-kv-born —— 一个字母都不用认: 问题 / 钥匙 / 内容三样东西,两个动作,然后桌上分三堆。
⛔ 专家版没删:它是全专题的主线图,后面几章还要把它重画、点亮改动处。 —— 但第一次讲到这里不要打开它,打开就前功尽弃。

别让台下「找」那个答案 —— 图上已经涂红了,三秒就看见。 ⭐ 把问题换一个:答案直接给,让他们说为什么。互动还在,而且更深。

「先说清楚怎么读这堆字母:它们不是缩写,是一个字母一个维度拼起来的 ——  B 是几个人同时在问,T 是这次要问几个字,S 是历史有多长,以此类推。
⭐ 我已经把答案标红了:就是那个 S
但我想请各位想一秒:为什么偏偏是它,不是别的?
……因为别的都是你开工前就定死的:几个人、多少层、每层多宽。
只有 S 是聊着聊着自己长出来的。

给它起个名字:这一讲的主角,就是这个 S。
后面每一章你只要盯着它问一句:这一招是让 S 前面的系数变小、 让每步读到的 S 变少,还是干脆让 S 从形状里消失?」

⭐⭐⭐ 这一句是本章真正的落点,别漏 —— 这个名词必须从你嘴里出生。 ⛔ 教材 2.6 的标题就是「KV cache 就是在这里出生的」, 可讲稿里如果不说,第三章开口就用这个词,台下是第一次听见。

「而这个 S 之所以会变长,是因为每来一个字,就得把它那份 K 和 V 存下来 ——  下次再有人提问,还得拿它们来比。
这一堆存货有个名字,叫 KV cache。
⭐⭐ 各位,它就是在这里出生的 —— 2017 年那一刀落下的同一秒
今天剩下的七章,讲的全是同一件事:这堆存货太大了,怎么办。

「最后留一句给发明注意力的那个人。2017 年 Transformer 那篇出来的时候, Bahdanau 的反应是一句话:我当场就跟同组的人宣布 —— RNN 死了。
⭐ 他说对了一半。下一章你就会看到,它在另一个地方活得好好的。」

⚠️ 这一节最容易跑偏的地方不要讲 FlashAttention。它不在这条故事线上,问起来再说。
不要展开 √d_k 的推导,一句「它就是个标准差」就够。
⚠️ 人物戏容易讲嗨 —— 三分钟到了就走,2.6 那一格才是这一章的落点。

🖥 本节主屏:课件 第二章 2017 年那一刀 · 主图 fig3-attn-invented

第三章 账单到期(7′)

🎯 留下一句:它决定的不是装不装得下,是能同时伺候几个人。

「刚才我说他只说对了一半 —— 这一章就兑现这句话。
不过在看见那一幕之前,得先把上一章那笔债换算成看得见的东西
⭐ 所以这一章一个新招都不讲,它只做这一件事。」

🖥 屏幕:滚到 fig3-rnn-decode三行一起投(这是少数需要整张看的图)。

「这三行用的是同一把尺子。
Ⓐ 是开篇那条老链;
Ⓑ 是训练的时候 —— 一整段话一次性喂进去, 这正是 2017 年那一刀赢下来的地方
Ⓒ 是它给你吐字的时候 —— 也就是你每天在用的那个样子。」

「⭐⭐ 所以这一章真正要说的是这么一件事:
它赢的是 Ⓑ,可你每天在用的是 Ⓒ。
—— 赢的那一栏,和付钱的那一栏,不是同一栏。

「而这不是打比方。请各位看 Ⓒ 那一行的形状。
吐第一个字,吐第二个字,吐第三个字 —— 每一个都得等上一个吐完。
⭐ 因为上一个字得先变成新的存货,才能被下一个字看见。」

第一章那条链,在这里原封不动地回来了一次 ——  只不过这一次它是被迫的,没人想要它,它自己长回来了。
⭐ 到第七章我们还会再见到同一幕,那一次是有人主动把它请回来的。

🖥 屏幕:滚到 fig3-flip指左右两根柱子。

原来这里有一句「同一个模型、同一份权重,被拿去干了另一种活, 瓶颈就换了个位置」—— 2026-09-15 现场试讲时我自己跳过了它,然后才想明白为什么: 它复述了三十秒前刚说完的「赢的那一栏和付钱的那一栏不是同一栏」, 又复述了这张图自己底下写着的「什么都没改,是工作负载变了」。同一件事说三遍。 ⭐ 剪掉,换成图上摆着、而这一章原来一个都没提的那三个数 ——  这一章叫「账单到期」,可它整章没有一个数字。账单是要有数的。

「为什么偏偏是这两年?答案不在论文里,在机房里。

「屏幕上这两根柱子,是同一个模型。 左边是一个人、一段短对话(上下文 4K);右边是六十四个人、各拿一份长文档(上下文 128K)。
⭐ 请各位读三个数 —— 
灰的那一段,权重:625 GiB → 625 GiB,一个字节都没动。
红的那一段,存货:0.27 GiB → 549 GiB,涨了两千多倍。
于是 要几张卡:7 张 → 13 张。

「⭐⭐ 各位,什么都没改。 模型没换、权重没动、技术一个字没变 —— 是工作负载变了。

「⭐ 而『突然』这两个字是这么来的。
这几年有两样东西各自翻了几十倍:一样是话变长了 —— 从几千字到几十万字;一样是同时伺候的人变多了
⛔ 而这两样,都乘在同一项上 —— 就是刚才那堆存货。」

「一样东西翻十倍,你会看着它一点点变贵。
可两样东西各翻几十倍、还乘在一起 ——  你看见的就不是变贵,是某天早上它忽然成了最大的一块。

🖥 屏幕:滚到 fig3-motives拉到最底下那一行(那把尺子)

「记住这把尺子。从下一章起,每出场一个新名词, 我们都只拿它问三句 —— 而且顺序是死的:
第一句:省的是哪一样是显存、是带宽,还是算力?
第二句:省了多少?
第三句:亏了多少?

「⛔ 第一句绝对不能省,也绝对不能放到第二句后面。
因为一个漂亮的倍数最会干的事,就是让你忘了问它省的到底是哪一样 ——  ⭐ 今天你会看到一个省了五十多倍的方案,它省的那一样,跟你以为的不是同一样。

「这一章最后一句,也是全讲最要紧的一条操作性结论:
模型的权重,一台机器上只放一份,谁来都用它;可那份 KV,来一个人就得单开一份。 所以它卡住的不是『这台机器装不装得下这个模型』, 而是这台机器同时伺候得了几个人。」

⚠️ 这一节最容易跑偏的地方 ⛔ 不要在这里讲 MLA 省了多少 —— fig3-flip 里有那个数,但今天先不碰
⚠️ 三行那张图容易讲太久。Ⓐ Ⓑ Ⓒ 各一句,然后走。

🖥 本节主屏:课件 第三章 账单到期 · 主图 fig3-rnn-decode

第四章 第一次省:砍头(8′)

🎯 留下一条判据:压掉的是体积,还是自由度?

🖥 屏幕:先滚到 fig3-wiring整张看一眼,就走。
这张图从左到右是 MHA → GQA → MQA → MLA,按「存得越来越少」排的, 不是按时间排的。而我们按时间讲(2019 的 MQA 在前,2023 的 GQA 在后)——  所以讲 MQA 的时候要指第三格,别顺着往右平移。

「账摆在这儿了:一人一份,而且随着话越说越长。
那最直白的省法是什么?—— 这一章就去试。

「先看全景:今天讲前三家,最右边那家留给下一章。
⭐ 提醒一句 —— 这张图是按「谁存得少」排的,不是按谁先出生排的。 我们等下按时间讲,顺序会跟图上不一样。」

⛔⛔ 先把两套词对起来,再往下走。 讲稿原来这一句还在说「头」「K 和 V」,隔一句就变成「八个人、一本通讯录」——  中间没有任何一句把这两套词对上。 对应关系写在图的抬头上,可台下只有耳朵,看不到抬头。 ⭐ 同型的第六次:一个说法在图上出生过,在讲师嘴里没有。

「下面这张图用的是一个生活里的画面,我先把对应关系说清楚 —— 
一个查东西的人,就是一个 query 头他手里那本通讯录,就是一份 K 和 V。
八个头,就是八个人、八本通讯录 —— 抽屉塞满了。

「2019 年的做法简单粗暴:所有头合用同一份 K 和 V。
本来有几十个头就要存几十份,现在只要一份
省得漂亮 —— 可它也就是从这儿开始变笨的。

⛔⛔ 这一章有两个「八」,会撞车 —— 第一次说到八就要把它们分开。 图上画的是八个人(那是示意,好数而已); 4.3 要讲的八组是真实超参。
⭐ 而十几句之后你还会念到「Llama-2-70B:六十四个查的人、八本通讯录」——  那才是真实数字。不提前打招呼,台下会把三个数搅成一个。

🖥 屏幕:滚到 fig3-mqa-why停在最上面那一格,指横排那三个困惑度

指图的时候用图上的原话,别另起一套 ——  图上那三格写的是「八个人各带一本 / 八个人共用一本 / 只派一个人去查」。

「看这三格。第二格和第三格,占的地方一模一样 —— 都只剩一本通讯录。
它俩唯一的区别是:第二格还有八个人在查,第三格只剩一个人。
就这一点差别,下面那个数差了整整 1.0。」

⚠️ 「困惑度」是台下第一次听见,给一句白话再往下走 (这个词后面还要用四次)。

「⭐ 那个数叫困惑度,你就理解成:模型读下一个字的时候, 心里大概在几个候选之间犹豫。数越小越好。
三十上下这个量级,差 1.0 是个不小的差距 ——  后面你会看到有些方案改一大堆东西,才换回零点几。」

「⭐ 所以看一个方案,要分清它压掉的是哪一样:
是通讯录变薄了(压体积)还是查的人变少了(压自由度)
—— 通讯录薄一点通常还好;查的人少了,很贵。
这条判据今天后面还要用四次。」

⭐ 顺带念一句论文原话:「MQA 会导致 quality degradation and training instability」—— 不只是掉点,还训不稳。 掉点还能拿数据补;训不稳意味着你随时可能摔一跤,而且事先不知道在哪儿摔。

🖥 屏幕:4.3 停在正文那三条理由上(这一段不用图)。

⛔⛔ 先介绍 GQA 本身,再问「为什么是八组」。 讲稿原来从「MQA 会训不稳」直接跳到「为什么大家都选八组」——  中间那一步(有人折中:不要全合成一本,改成分组)一个字都没有。 台下根本不知道那个「八组」是什么东西的八组。 ⭐ 跟第二章「盒子没了怎么办」、第三章「那条链为什么会回来」是同一个形状: 结论有了,中间那步没有。

「MQA 太狠了。那有没有中间路线?
⭐ 2023 年有人给了一个:不要全合成一本,改成分组 ——  几个人一组,一组共用一本
这就是 GQA。八个头分成几组,就存几份。」

⭐⭐ 2026-09-16 现场:「4.3 和 4.4 这两节太扯了,什么也没讲明白, 乱七八糟的都删了。」 ⛔ 教材里「为什么偏偏是 8」那三条论证已经整段删掉 (分片复制、速度曲线、Llama-2-70B 的 config),GQA 转换成本那一块也删了。 ⭐ 只留一句「八组 ≈ 八张卡」—— 因为第九章收尾要回指它 (「硬件决定了一个超参」那条暗线)。台上也只说这一句,别展开。

「⭐ 那为什么大家不约而同都选了八组
—— 因为一台机器通常正好装八张卡,八组就让每张卡各管一组。
⭐⭐ 所以这个数字不是从模型里推出来的,是从机箱里数出来的。

⛔⛔ 2026-09-16 第二次点名:「这个小结没有用,给我收起来,折叠起来。」教材里 4.3 整节已经默认折起来了 ⭐ 当堂可以整段跳过,从这一章的三句收尾直接进第五章。
⚠️ 真要讲就点开折叠块 —— 第五章开篇那句「那块写死的矩阵」指的就是它,跳过的话开场要自己补一句「GQA 那块矩阵是写死的,格子里只有几个 1」。

🖥 屏幕:(可跳过)点开 4.3 的折叠块,滚到 fig3-copy-matrix

「四个名词第一次被摆在同一个位置上,比的只有一件事: 同一块矩阵里写了什么。
GQA 那块是写死的,格子里只有几个 1。而下一章要做的,就是动这块矩阵。

走之前拿第三章那把尺子量一下 —— 这是它第一次真正被用。

「⭐ 用那三句收一下这一章:
省的是哪一样?—— 显存。省了多少?—— 缓存除以八。
亏了多少?—— 掉一点点分,而且会训不稳。

⚠️ 这一节最容易跑偏的地方别在这一章提 MLA 的倍数,留给下一章开场。
⚠️ 「八张卡」那句要明确说是他的判断,不是论文写的 ——  论文只说了「分片会复制、GQA 去掉这份浪费」。

🖥 本节主屏:课件 第四章 第一次省:砍头 · 主图 fig3-mqa-why

第五章 MLA(12′,全讲最硬的一章)

🎯 留下一句:MLA 漂亮在它同时向两套账交了差 ⛔ 不是「它省了 57 倍」—— 那个数不重要。

⛔⛔ 「把那块矩阵松开」这句话不能直接说 —— 它是跳的。 2026-09-15 现场讲到这儿,第一个问题就是「这一点都不相干啊」。 ⛔ 问得对:台下还没有「四家是同一个形状」这个前提, 所以「松开那块矩阵」听起来像凭空冒出来的一个动作。 ⭐ 前提得先搭,而且只要四句话。

「要听懂这一章,得先接受一个前提:这四家其实是同一个形状。
仓库里存一份东西,然后从这一份,做出一百二十八个头各自要用的 K 和 V
⭐ 四家都是这个形状。区别只有两件事:仓库里那份有多宽, 以及「做出一百二十八份」的那个动作,是什么动作。」

「先看 GQA。仓库里存着八杯调好的果汁
要用的时候,照着每一杯,复印出十六杯一模一样的 —— 凑够一百二十八杯。
⭐ 请注意:那十六杯一滴不差,完全相同。 多出来的十五杯是纯冗余,不带任何新东西。」

「那为什么还非要复印?
因为后面的计算要求每个头手里都得有完整的一份,形状得对上。 所以哪怕内容一样,也得凑够一百二十八份。
GQA 省的是仓库(只存八杯); 代价是那十六个头被迫拿到同一杯 —— 它们再也没法各看各的了。」

「另外两家是这条线的两头。
MQA 更狠:仓库里只存一杯,复印一百二十八份 —— 所有人喝同一杯。
MHA 是另一头:老老实实存一百二十八杯,各不相同,一份都不用复印。 最贵,但也最自由。」

「⭐⭐ 现在看 MLA。
它仓库里存的不是果汁,是一包浓缩粉
然后一百二十八个头,每人手里一张自己的配方 ——  从同一包粉里,冲出一百二十八杯各不相同的。」

「⭐ 所以那个『松开』,松开的是这个动作本身: 从复印,变成
复印只能得到一样的;冲可以得到不一样的。
而这两个动作花的力气差不多 —— 反正都要从仓库那份东西里, 做出一百二十八份来。
⛔ 那问题就来了:既然反正都要做这一步,为什么只许你复印,不许你冲?

⚠️ 口径护栏,顺手补一句 ——  ⛔ 这不等于「MHA / GQA 都是 MLA 的特例」,那是网上转述放大出来的。 苏剑林的原话是「MLA 被视为 GQA 的一般化」。 ⭐ 台上只说:同一个位置、同一个动作,区别在那个动作允许做到多少。

⛔⛔ 不要说「那块矩阵的格子里只有 0 和 1」。 2026-09-15 现场原话:「0 和 1 是啥呀?到现在也没懂。」——  它是把结论用符号又说了一遍,对台下零信息量。 ⭐ 复印 / 冲这两个动词已经把它说完了,符号那层留给 L300。

还有一个更早被现场抓到的错,别再犯不要说「把一桶倒进十六个杯子」—— 那是均分, 听起来每杯只有十六分之一。真实的动作是复制,十六份都是完整的一整份。 ⭐ 这个区别是这一段的全部要害:冗余,不是摊薄。

「⭐ 苏剑林那句原话说得最干净:分割和复制都是简单的线性变换, MLA 的第一个想法,就是把这些简单的线性变换换成一般的线性变换, 以增强模型的能力。」

「上一章最后停在一块矩阵上。把它松开、交给模型自己去填 ——  这就是这一章的主角,MLA。
⭐ 这三个字母拆开是 Multi-head Latent Attention, 关键在中间那个词:Latent,潜藏的
—— 它存的不是你要的东西,是一个能变出你要的东西的「潜件」。

⛔⛔ 从这里开始,「仓库 / 存货」这套词要跟第一章的「盒子」分干净。 ⭐ 念出来「箱子」和「盒子」台下根本分不出 ——  而「盒子」是第一章立的核心意象、第七章还要原样请回来的。 讲这一章一律说「仓库里那一份」,不要说「箱子」。

「先说一件最容易听岔的事:MLA 仓库里存的那一份,已经不是 K 和 V 了。 它存的是一份压缩件 —— 每个头真正要用的 K 和 V, 是从这份压缩件现场展开出来的,用完就扔。」

🖥 屏幕:滚到 fig3-knob1指最左边那个点(MQA)
别让台下猜「为什么它不是赢家」 ——  它右边就写着题眼「MQA 比 MLA 还小 2.25 倍,却更差」,两秒就读完了。

「最左边这个点是 MQA —— 它存得最少,比等下要讲的 MLA 还少两倍多。
⭐ 可它不是赢家。上一章刚讲过为什么:它省的那一样, 是查的人,不是通讯录。
—— 这张图横轴量的是「占多少地方」,而占地少不等于好。

⭐⭐ 5.2「吸收」是这一章的地基,慢讲。

🖥 屏幕:滚到 fig3-absorb只看 ① 和 ② 的对照

「那问题就来了 —— 存的是压缩包,用的时候不还得拆开吗?
不用拆。算的是同一个东西,只是括号站的位置不同。 而括号换个位置,仓库里那一万个压缩包就一个都不用动。」

⛔⛔ 紧接着必须回答「那它到底省了什么」—— 而答案跟多数人以为的不一样。 2026-09-15 现场原话:「涉及到这个交换,能省下算力吗?能省下什么东西?能省下显存吗?」 ⭐ 讲稿原来只说「不用拆」,没说不用拆省下了什么 ——  于是听众只记住一个巧妙的代数动作,不知道它为什么要紧。

「先把『不挪』有多贵摆出来。
仓库里躺着十三万个压缩件。你要吐下一个字,就得一个一个解压, 还原成每个头要用的 key,再拿提问去比。
解压十三万次。而且下一个字,还得再来十三万次 ——  因为解压出来的东西你不敢留,留了就等于又存了一份没压缩的,压缩白做了。」

「挪完之后呢?
先算的是『配方转置乘提问』—— 而提问只有一个,你这一步只在问一个字。
⭐ 所以这个动作只做一次。做完拿着它,直接去跟那十三万个压缩件点乘。
解压次数:从十三万次,变成零次。

「那它省的是什么?请各位分清楚 —— 
它不省显存缓存。仓库里存的还是每个 token 五百七十六个数,挪不挪一个字节都不差。
⭐ 它省两样别的:一是算力 —— 那个「跟历史一样长」的解压工作, 变成了一个跟历史无关的一次性动作,历史越长省得越多;
二是带宽和临时显存 —— 解压出来那一大坨得找地方放、还得写出去再读回来, 现在它压根没被造出来。」

「⭐⭐ 但这里还有一层,是这一章的地基:这两件事是绑死的。
假如挪不动括号,你就必须每步解压十三万次 —— 那太贵了,贵到没人会这么干。 于是你只能退回去直接存解压后的 K 和 V,压缩就白做了。
⛔ 所以:挪括号本身不省显存,但它是「存压缩件」这个选择能不能成立的前提。

「⭐ 这个『挪括号』的动作,今天一共只会出现两次,这是第一次。
另一次在第七章 —— 那一次挪完,整张注意力矩阵都不用建了,更赚。

别把第二章那次算进来。点积赢加性换的是打分的公式, 跟结合律没关系 —— 那一次属于另一条线(「能写成什么形状」在替数学做决定)。 ⭐ 教材 2026-09-15 已经改过口径,讲义这里必须跟上,否则台上台下对不上。

⛔⛔⛔ 2026-09-16:「白送的那段 vs 赌的那段」这一节整段删了fig3-lowrank 也从 L200 撤了。台上不要再讲这条判据 现场原话:「这一小节就是在胡说。它这个低秩压缩,就算你左边那个例子, 它也不是白送的 —— 它能表现的那个秩就降低了。」
这个批评是对的。那张图数学上没错(真·秩 2 的矩阵用 rank 2 去拆确实 无损),错的是拿它给 MLA 背书 —— MLA 把 KV 压到 512 不是「本来就低秩」,是硬压,属于图里右栏那一格。
⭐⭐ MLA 里真正白送的是吸收(精确的代数恒等), 但它省的是算力和带宽,不是 cache 大小 ——  这一节把两件事混成了一件。
⛔ 判据:一个恒等式成立的前提,比恒等式本身更重要。

🖥 屏幕:5.3 先滚到 fig3-two-lanes从上往下指 ① ② ③ 三格,一格一句⛔ 中间那个黄框指一下就走,不要展开 ——  它是给课后读的,台上展开要多三分钟。

「MLA 有一处形状很不好看:每个 token 要存的那一份是 512 加 64。 这六十四是哪来的?三步。
第一格:那个紫方块本来能从仓库那侧搬到提问那侧 ——  就是刚才说的挪括号,仓库里的压缩包一个都不用拆。
第二格:RoPE 一插进来,路当中立了一道闸,紫块搬不过去了。
第三格:那就把一条轨劈成两条 —— 让这道闸只站在窄的那条上。

⛔⛔ 「RoPE 立了一道闸」这句话不能就这么过去。 2026-09-15 现场原话:「64 个维度的旋转编码,为什么它就影响了矩阵运算? 你把那个里边讲讲。」⭐ 讲稿原来直接说「它带下标所以挡住了」——  可台下连 RoPE 在干什么都还不知道,「带下标」这三个字接不住。 ⛔ 先用三十秒说清它怎么工作,那道闸才立得起来。

「先说 RoPE 在干什么。模型本身是不知道先后顺序的。
RoPE 的办法是给每个位置一个转角:第五个字,把它的 key 转五度; 第一百个字,转一百度。提问那一侧也转 —— 你在第几个位置就转几度。」

「⭐ 妙就妙在:两个向量做点积,只看它们之间的夹角差
你转了一百度、它转了五度 —— 点积的结果只跟 九十五 有关, 也就是你们隔了多远
位置信息,就这么自动变成了距离信息。」

「可麻烦也在这儿。回到那三样连乘:提问、配方、压缩件。
RoPE 一插进来,中间多了一个旋转
⭐ 假如这个旋转是一块固定的矩阵,那照样挪得动 ——  你把它跟配方提前乘成一张新配方,事情就完了。 所以「中间夹了个东西」本身不是问题。
⛔ 真实情况是:那个角度 = 你的位置减它的位置。 问第五个字转九十五度,问第六个字转九十四度 ——  每一对「谁问谁」都是一个不一样的矩阵。

「⭐⭐ 说得再白一点:你想提前把配方和旋转合成一张, 可旋转多少度取决于你问的是谁 —— 你还没开口问,就不知道该转多少。

「⭐ 顺便说一句为什么是这道闸卡住的 ——  不是因为「中间夹了个东西」。中间要是夹一块固定的矩阵, 照样能预先乘好、照样搬得动。
卡住它的是那个东西带下标:每一对「谁问谁」对应一个不一样的矩阵, 你想预乘出「那一个」,可根本不存在那一个。」

「⭐ 最后补一个很多人忽略的细节:那六十四维, 是一百二十八个头共用的一份
所以它只多花六十四,不是一百二十八乘六十四 —— 这是个很便宜的妥协。

⚠️ 这一句别省 —— 不说的话,台下会默认那条窄轨也是每头一份, 心里算出来的开销差一百二十八倍,后面 576 那个数就对不上了。

⛔⛔ 2026-09-16:这一段在教材里已经默认折起来了 现场原话:「这一段对主线没有帮助,而且我们现在也讲不明白,把它折叠起来。」
当堂可以整段跳过,从这里直接进本章落点。
⚠️ 真要讲,那张图的减法(两级台阶合计 −0.039、MLA 只好 −0.029)是本课自己做的,不是原文的话 —— 原文只说「增大 head_dims 收益最大,Partial RoPE 也有一定帮助」。
⛔ 判据:自己从别人数据里做的减法,讲的时候要背两重责任 —— 既要讲对数,又要讲清「这一步推理是我们加的」。两重都背不动时,收起来比硬讲强。

🖥 屏幕:(可跳过)点开折叠块,再滚到 fig3-mla-credit

「读到这儿很多人会觉得这条窄轨是个妥协。
可有人做了一组受控实验,结论正好反过来。

「原文的结论只有两条 —— 而且这两条屏幕上都有:
一,把每个头做宽,收益最大
二,只给一小部分维度加位置信息,也有帮助。」

「⭐ 现在回头看 MLA 那条『很不好看』的窄轨 ——  它恰好把这两条同时做到了。
所以那不是妥协,是撞上了对的东西。

⭐⭐⭐ 5.4 是这一章的高潮,也是整讲最值得讲透的五分钟。

「还记得第三章那件事吗 —— 同一个模型,读题的时候和吐字的时候, 瓶颈根本不是一回事。把这句话往下推一层,就能看见 MLA 到底在解什么题。」

吐字那一边卡在缓存上。所以给定一个缓存预算,理论上最好的做法是 把预算全给一个头,K 和 V 还共用 —— 因为不管 MHA 还是 GQA 都能被改写成这种形状,它是它们的超集
⭐ 为什么是超集?—— 「一份大的、所有人共用」这种形状, 能表达「切成一百二十八小份各带各的」;反过来不行。 同样的字节数,它装得下最多的东西。
读题那一边卡在算力上,而算力主要看头数乘每头维度。每头维度从 128 抬到 512, 计算量就是四倍。所以这边最想要的,是老老实实的 MHA-128。」

一边要 512,一边要 128。这是个死结。
⭐ 而 MLA 的大招,就是把这个死结解开了:它分两步投影 ——  先压成一个 512 维的向量,再展开成多个 128 维的头; 然后靠刚才那个『挪括号』,训练时它是一个 MHA-128,吐字时它是一个 MQA-576
—— 576 = 512 的压缩件 + 刚才说的那条 64 维窄轨; 要到第八章那个 NoPE,这 64 才整个消失,那时候才是干净的 512。
同一套权重,两种算法,各自站在自己那一边的最优点上。」

「苏剑林把这件事叫做 『Prefill 和 Decoding 的双向奔赴』。」

⚠️ 紧接着一定要说代价,否则这一章会变成吹捧:

「但它有一处很实在的代价,而且正好长在它最漂亮的地方上。 GQA 的 KV 是按头切的,八张卡一卡存八分之一,天然分得开; 而 MLA 那份压缩件根本不按头分 —— 多卡部署时你只有两条路:
要么每张卡各存一份,省下来的当场还回去几倍;
要么把注意力那一段单独换一种切法(按请求切,不按头切)——  今天真上生产的都走第二条,代价是调度和框架都得跟着改。
⭐ 这是本讲那条暗线的反面:一个在单卡上极漂亮的数学结构, 到了多卡上恰恰因为『不按头分』而失去了最自然的切法。」

「⭐ 还是那三句:省的是哪一样?—— 还是显存。
省了多少?—— 比上一章又小了一大截。
亏了多少?—— 算力多花一点,而且多卡切分这件事变难了。

⚠️ 这一节最容易跑偏的地方不要在台上推那个恒等式。图里画着,指一下就够。
⛔ 不要展开 RoPE 本身(那是位置编码怎么工作,不是这一章的事)。 「它带下标所以挡住了挪括号」这一句要说 ——  5.3 那张 fig3-two-lanes 的第 ② ③ 格就是它,指着说三句。 ⛔ 但图中间那个黄框(固定矩阵 vs 一摞矩阵)不要展开,那才是 L300 的活。
⚠️ 这一章最容易超时。5.1–5.3 合起来七分钟,5.4 五分钟 ——  宁可压前面,也不要压 5.4。

🖥 本节主屏:课件 第五章 MLA · 主图 fig3-absorb

第六章 别全读:从滑窗到 DSA(12′)

🎯 留下一句:这条路一个字节的显存都不省。 —— 而正因为它不省,第八章才非存在不可。

「前两章一直在拧同一个旋钮:让每一份小一点
这一章换一个完全没碰过的方向 —— 每一份多大都不改, 改的是每走一步到底读进来几份。
⛔ 先把话说在前面,这句话请记一整章:这条路,一个字节的显存都不省。
⭐ 而正因为它不省,第八章才非存在不可。」

🖥 屏幕:6.1 滚到 fig3-knob2五张 mask 一起看
说完「一起看」别马上走 —— 要把骨架说出来,否则这一格白摆。

「先别一张一张看,五张一起看 ——  这一支的骨架是从摆在一起里浮出来的。
⭐ 从左往右,黑格子越来越少:全都算 → 只看身边 → 只看身边再加开头几个 → 挑着看 → 先压再挑。
五张图就是一句话:这一支从头到尾只在回答「这一步,到底哪些格子可以不算」。

6.2 滑窗那一段,是全讲最好的一个侦探故事,值得四分钟。

⛔⛔ 上图之前必须先把滑窗一遍,而且要让台下先点头。 课件里这两句一直都在(「每个字只看前面固定的几百个」「听上去很合理」), 讲稿里一次都没有 —— 于是台上是直接从柱状图开讲的, 台下还不知道滑窗是什么就被告知它崩了。
⭐ 这是同型的第九次,方向跟前八次相反:不是图上有嘴里没有, 是课件上有、讲稿里没有侦探故事最不能省的是「本来大家都信什么」。

「最容易想到的那一招,叫滑动窗口: 每个字只看前面固定的几百个,再往前的一律不看。
⭐ 听上去很合理,对吧?—— 说话本来就大多只跟附近有关。
⛔ 可它有一个著名的崩法,而且崩得毫无预兆。」

🖥 屏幕:滚到 fig3-swa-why指中间那三根柱子

「⚠️ 先说这三根柱子是按对数画的 —— 5158 和 5.40 之间差的是 三个数量级,不是三倍。一个模型从能用到彻底胡说,中间只隔着四个 token。

⚠️ 台下可能会拿它跟第四章那三个数对不上(那边是 29.9/30.2/31.2)——  顺一句就行,别展开。

「⭐ 顺带说一句:这个 5.40 跟第四章那个 30,不是一个模型、一套题, 所以别横着比困惑度只能在同一组对照里比大小。

⛔⛔ 第三根柱子必须讲,它是这个侦探故事唯一的判决性证据 课件里「换行符」出现三次、「起作用的是位置,不是内容」出现两次, 而讲稿里一次都没有 —— 于是台上只能把那句结论断言出来。 ⭐ 差别很大:没有第三根,「是位置不是内容」只是一个说法; 有了第三根,它是被实验逼出来的。 (同型的第七次:图上出生过,讲师嘴里没有。)

「那这四个 token 是什么神仙?
⭐ 有人做了一个判决性的实验:把那四个 token, 换成毫无意义的换行符
如果它们重要是因为内容,那换掉之后应该照样崩。」

「结果是 5.60
—— 跟留着原来那四个字(5.40)几乎一样。」

「⭐⭐ 所以结论只能是这一个: 起作用的是位置,不是内容。
那几个字其实什么意思都没有 —— 它们是个废票桶。」

「⭐ 顺带说一句这个 bug 是怎么被发现的,它是一整类 bug 的样板: 从公式上你看不出任何问题。
是有人把注意力矩阵整个画出来,才看见开头那几个字上 堆着一大片。」

🖥 屏幕:滚到 fig3-sink只停 Ⓐ 那一格⛔ Ⓑ Ⓒ 两格当堂不讲,但要念下面那一句交代 ——  不交代的话,台下会以为「加个桶」是件显然的事。

「看左边这一格:一行的一百分必须投满,而在场的候选人 只有前面这些 token —— 于是那根粗箭头,全涌到第 0 号身上。
它不是特殊,它只是唯一一个人人都够得着的。

「⭐ 右边两格课后自己看,我只说结论: 补一个『可以弃权』的格子,这条路是对的 ——  但那一格必须是可学的
有人试过补一个恒定为零的格子,形状一模一样, 结果困惑度从 18 涨到两万九。
两个长得一样的方案,结果差了一千倍。

⭐⭐ 下面这一段把第一章和第二章一起收 —— 一次说完,别分两段。 ⛔ 原来是连着两个回指、Bengio 那句还说了两遍,念起来像卡带。

「⭐ 还记得第二章 Bengio 那句话吗 —— 注意力必须是『软』的, 要有一份总额固定的注意力
「总额固定」翻译过来就是:不许有人弃权。 一个头这一步实在没什么想看的,它也得把票投到某个地方去。
窗口一滑过开头,废票桶被扔掉,那些票没地方去了 —— 模型当场崩掉。

「⭐⭐ 而这正是第一章那句话,第二次应验:
一个设计的毛病,十有八九跟它的好处是同一条性质。
「总额固定」是它能被训出来的原因 —— 也正是这个 bug 的病根。
⭐ 第一次是盒子一样大,这是第二次。第三次在第七章。

🖥 屏幕:6.3 滚到 fig3-chicken只讲最上面那一格(死结)

先过一句桥再上图 —— 6.2 刚落在「滑窗会崩、得把开头那几个留着」, 台下这会儿正等着一个更聪明的办法。让他们先觉得聪明,再摔进死结, 那一下才有力气。⛔ 直接说「这里有个死结」等于自己剧透了转折。

「上一段我们知道了:滑窗会崩,得把开头那几个留着。
那下一个想法就很自然了 —— 别只看身边,去把重要的挑出来。
⭐ 听起来比滑窗聪明多了,对吧?
……可这里有个死结。

「你要挑出重要的,就得先知道谁重要。 而『谁重要』这件事,本身就是注意力分数
可你要是已经把注意力算完了,再回头去挑 —— 那就没意义了。
⭐⭐ 你想省的那一步,钱已经付过了。

⚠️ 下面那三条破法当堂不展开(展开要多七八分钟),一句话带过、让大家课后读图。 ⭐ 但最下面那条带子值得留一句 —— 三条里的最后一条, 两家不同的团队各自独立做了出来

「⭐ 破法一共三条,图里都画了 —— 我只讲第一条,另外两条课后自己读。
不过第三条值得先记一笔:它的办法是先把要挑的东西压短四倍, 再在压短之后的格子里挑 —— 死结没破,但那只鸡小了四倍。
⭐⭐ 而这一条,两家不同的团队各自独立做了出来
一件事被独立做对两次,跟只有一家做过,分量不一样 ——  那说明它不是谁的灵光一现,是这个死结自己逼出来的解。

🖥 屏幕:6.4 先 fig3-dsa-why(一分钟),再 fig3-dsa-flow(四分钟)。

「DeepSeek 的破法是 —— 师徒
让真正的注意力当老师,另外训一个极便宜的学生。」

⭐⭐ 接下来这一问一答不能省,它是「便宜」两个字唯一的交代。 ⛔ 光说「训一个极便宜的学生」,台下会以为是拿小模型硬凑 ——  便宜不是因为它小,是因为它被允许做一件更容易的事。 说完顺手指 fig3-dsa-why 第 ③ 格(徒弟凭什么便宜:三样减法), 那一格是这句话的账。

「学生学什么?它不学怎么算得准。
它专门去学老师那张分布的排序 —— 它只要知道谁排前面
⭐⭐ 这个要求低多了,所以它可以做得非常轻。」

「⭐ 而这个套路,各位其实在别处已经见过好几次: 投机解码、模型蒸馏、各种缓存预测器 ——  同一个形状:贵的那个不用消失,它只要愿意当一次老师。

⭐⭐⭐ fig3-dsa-flow 是这一讲专门为四个问题画的, 按 ①②③ 的顺序一格一格讲。

「① 一步之内发生了什么:一个很轻的打分器扫过全部历史, 取分数最高的 2048 个位置,再只对这 2048 个做完整的注意力。
⛔ 注意那个红框:它必须扫过全部历史,一个都不能跳 —— 不扫完,就不知道该跳谁。」

「② 这一格请多停一会儿。这条带子是按真比例画的: 橙色那一小条是这一步读进来的,一点五六个百分点;
灰色那一大片,全都还在显存里躺着。

「③ 三栏账:第一栏省下来的,第二栏一点没省的,第三栏反而多花的。
⭐ 请各位看中间那一栏 —— 它整栏讲的就是一件事:显存,一个字节都没少。
道理很硬:要能从历史里挑,就得把历史全留着。

「⛔ 而且说「没少」还算客气的 —— 它其实还多了一成。
那个打分器自己也得存一份东西:每个字一份很小的、专门给它打分用的记号。
⭐ 算下来接近 1 个 G是挑中那 2048 个的七倍 ——  而且每走一步都得整条读完,因为不扫完就不知道该挑谁。」

「⭐⭐ 所以这一支后来所有的新名字,都在缩这一笔 ——  让好几层共用一个打分器,别一层一个。」

🖥 屏幕:6.4b 滚到 fig3-deepseek-sparse按 Ⓐ → Ⓑ → Ⓒ 走,整段停在这一张上。

⭐⭐⭐ 这一节 2026-09-16 才加。在那之前 NSA / CSA 是被标成「支线不讲」的。 ⛔ 改判的理由不是「时间够了」,是 ——  这四个名字是同一条路上的四步,拆开讲,每一步都少一个对照组。 尤其 DSA「为什么最碎」,不摆 NSA 的「挑块」在旁边根本说不清。
⚠️ 现场原话:「这几个是 DeepSeek 的,所以大家都盯着呢。」 —— 这是个真实的听众诉求,不是我们自己想讲。

「刚才那个 DSA,既不是这条路的起点,也不是终点。
⭐ 我把它前后那三步一起摆出来 —— 各位会看到一条非常干净的线。」

「⭐ Ⓐ,先看 NSA,2025 年 2 月,DeepSeek 的。
不是一条稀疏,是三条支路并排跑,最后用门控合起来
① 压缩 —— 远处按块压成摘要,粗看全局;
② 选择 —— 挑出最相关的几块,对这几块做完整注意力;
③ 滑窗 —— 身边那一段全留,保住局部精度。」

⭐⭐ 这里指一下颜色 —— 整张图的颜色只有一个意思。 橙 = 要跑起来才知道,绿 = 编译的时候就定死。 ⭐ 于是 Ⓐ 自己就说出了一件事:三条支路里只有「选择」是橙的。 后面三步动的全是这一条。

「⭐ 各位看这三条的颜色:只有中间那条『选择』是橙的。
压缩是静态的,滑窗也是静态的 —— 只有『挑哪几块』要跑起来才知道。
记住这条橙的。后面三步,动的全是它。

「⭐⭐ NSA 还有两个字要划重点:名字里那个 Native
意思是 训练的时候就稀疏,不是训完了再拿稀疏去套。
—— 所以这个模型是「长在稀疏上」的。

「⛔ 最后这一句请各位记住,因为下一格正好反过来:
NSA 挑的是「块」,不是散落的单个 token。
块是连续的一片,搬起来整齐 ——  论文自己把这件事写进了标题:hardware-aligned,对齐硬件的。

「⭐⭐⭐ Ⓑ,这一格是整张图的重心。 我把四个名字摆到同一张图上,两条轴
横着是 —— 压多狠;竖着是 —— 要不要跑起来才挑。」

「从左往右:
NSA,挑块,还带一条压缩支路;
DSA不压,纯挑 top-k 个单个 token —— 更准,也最碎
CSA,先把四个 token 压成一条再挑 ——  死结没破,但要挑的池子小了四倍。」

⭐⭐⭐ 下面这一步要慢,它是这张图的落点,也是全节的落点。

⛔⛔⛔ 2026-09-16 现场问出来的真错,原话:「那个 128 倍压缩,真的是从那 4 倍压缩再压 32 倍来的吗?是分两级压缩的吗?」—— 不是。 ⭐ 扒了源码核实:HCA 的压缩器拿的是这一层的原始输入,一次 reshape 成 128 一组、一次门控求和 —— 一步压到 128,没有中间的 4
⛔ 而且 CSA 和 HCA 根本不是同一层:它们是两种层型,在网络里交替排每一层都直接从 token 压,不存在谁接谁的力。
⭐⭐ 判据:两个数成整倍数关系,不等于它们之间有因果或先后。—— 台上千万别说「再压 32 倍」,那是把比值说成了机制。

「⭐ 然后是 HCA。它把一百二十八个字压成一条 —— 比 CSA 狠得多。
⛔ 注意不是在 CSA 的基础上再压它是另一种层,自己直接从原始的字压过去。
⭐⭐ 而压到这个份上之后 —— 各位看它掉到了下面那一行。
它不挑了。

「⭐⭐⭐ 这就是这张图真正要说的那一句:
压得够狠的时候,就不需要挑了。
—— 『挑』这个动作,本来就是为了在一大堆里只看几个。 可你要是先把一大堆压成一小堆,那全看也无所谓了。

代价必须紧跟着说,别让它听起来像白捡的。

「⛔ 代价就写在横轴上:压一百二十八倍,分辨率就是没了。
所以 HCA 不能单独用 —— 它旁边还挂着一个局部滑窗管近处。
远处压得很糊,近处一个不落。

⭐⭐⭐ 下面两段是 2026-09-16 试讲现场真被问出来的,讲的时候主动讲掉, 别等人问。⛔ 两条都不是「细节没讲够」,是我们默认了听众没有的前提: ①「压缩器和滑窗是两条并排的支路、结果是加起来的」—— 图上画了,没说; ②「这里的『压缩』跟 §五 MLA 的『压缩』不是一个轴」—— 同名、又挨着讲, 混起来太自然了。判据:同一个词在两章里指不同的轴,必须在第二次出现的地方当场分开。

「⭐ 这里我知道各位要问什么 —— 压缩还分远近吗?不是统一压的吗?
⭐⭐ 是统一压的。那个压缩器一视同仁,它不认远近,每一百二十八个字合成一条。
近处之所以还清楚,不是它手下留情 —— 是旁边那条支路给的: 一个局部滑窗,把身边那一段原样留着、压根不进压缩器。」

⛔⛔ 这里原来写的是「两条的结果加起来」—— 错的,已改 那是 NSA 的门控融合,被顺手套到了 V4 头上。扒 MaxText 源码才发现 V4 走的是拼接。 ⭐ 判据:「听起来像常识的架构关系」最危险,老关系在新架构上常常已经不成立。

「⛔ 注意,这两段不是各算一遍再合起来 —— 那是 NSA 的做法。
⭐ V4 是把压缩块直接拼在未压缩那一段的后面,凑成一条更长的 KV 序列一次注意力一起看完。

「⭐⭐ 所以『越远越粗』这件事,是两条支路拼出来的压缩本身没有这个概念。
—— 而这一手各位刚在 Ⓐ 见过:NSA 的①压缩管远、③滑窗管近。
⭐⭐⭐ HCA,就是把 NSA 中间那条『选择』砍掉之后,剩下的东西。

下面这段要慢。它是全节唯一一处会跟 §五 打架的地方。

「⭐ 第二个问题更值钱:这东西用的时候要不要解压缩? 还是像 MLA 那样,把矩阵吸收了?
⭐⭐ 不用解压。但原因跟 MLA 完全不是一回事 ——  它俩压的根本不是同一个轴。

「⭐ MLA 压的是『一个 token 有多宽』,是维度那个方向。
而维度方向压完,逻辑上是必须升回去的 —— 不然点积的宽度对不上。
『吸收』这一手就是为这个生的:把升维那个矩阵提前乘进 Q 和输出矩阵里, 于是物理上不用真展开。」

「⭐ CSA 和 HCA 压的是『一共有多少个 token』,是序列那个方向。 一百二十八行合成一行。
⭐⭐ 而压出来的那一条,本身就是要参与注意力的 K 和 V
它不是谁的压缩包 —— 它就是本体。
⭐⭐⭐ 所以根本没有『还原』这回事。

「⭐ 两句摆一起,形状就很清楚了:
MLA 是『需要解压,但我们想办法不解了』;
这一支是『压根没有解压这一步』。

⚠️ 代价必须紧跟着补,否则听起来像序列方向白赚。

「⛔ 代价也跟着这两个轴分开走。
维度方向是低秩近似,有损,可每个 token 都还在
序列方向是把一百二十八个字合掉 —— 它们各自的身份永久没了,不可逆
⭐⭐ 这才是那条滑窗非挂不可的真正理由 ——  不挂它,连刚说完的上一句都是一团摘要,模型接不上话。」

🖥 屏幕:切到 6.4c 的 fig3-v4-arch按 Ⓐ → Ⓑ → Ⓒ → Ⓓ 走。

⭐⭐⭐ 这一段是加餐,口径全部来自论文与官方文档。 这一段被推翻重写过一次。第一版只读了 MaxText 的代码,讲成了 「V4 是简单 MQA,跟 MLA 没关系」—— 把现场的直觉判错了。 ⭐ 判据(值得当堂说出来):读实现只能告诉你「怎么做的」,说不清「为什么这么做」。 口径和命名要回论文,代码只做交叉验证。

「⭐ 看 Ⓐ。先说一个各位很可能已经冒出来的念头 —— 
『这不就是 MLA 吗?所有的头,最后不也变成一条 512 的压缩体?』
⭐⭐ 这个直觉是对的。论文给它的正式名字就是 Shared Key-Value Multi-Query AttentionKV 头只有一个128 个查询头共读同一条。」

别急着讲差别。先让这个「对了」落地半秒 ——  台下好不容易自己想对一次,第一反应不该是被纠正。这是本讲第七处「先让台下觉得自己想得挺对」。

「⭐ 那差在哪?打个比方:
MLA 存的是原料,V4 存的是成品。
原料下锅前得先加工一道 —— 那道工序就是「升维还原成每个头的 K 和 V」。
⭐⭐ 第五章那个「吸收」,本质上是把这道工序提前折进别的矩阵里
而 V4 这边,这道工序压根不存在。

⭐⭐ 下面这个问题现场问过,一定会再被问到 —— 主动讲掉。

「⭐ 那六十四维的 RoPE,跑哪儿去了?
⭐⭐ 它没被挪走 —— 它长在那五百一十二里面。

「⭐ 各位看 Ⓐ 那两条色带:
V3.2 是五百一十二的潜向量,外面再挂六十四的 RoPE,两块分开存,一共五百七十六。
V4 一共就五百一十二 —— 它用的是 partial RoPE只旋转每个头末尾那六十四个通道,前面四百四十八个不带位置。
⭐⭐ 一句话:V3.2 的六十四是加在外面的,V4 的六十四是长在里面的。

代价必须紧跟着说,否则这笔买卖听起来是白捡的。

「⛔ 既然 K 和 V 是同一条,那就有个麻烦:
V 也跟着被 RoPE 转过了 —— 可 V 本来不该带位置。
⭐ 所以看 Ⓓ 的第四步:算完注意力之后, 输出那六十四维要用位置「负 i」再反向转一次。
⭐⭐ 转回来之后,每条 KV 的贡献才只跟它到查询的「相对距离」有关。
—— 论文第二点三点三节,式二十六。」

「⭐ 所以 Ⓓ 那五步里,没有任何一步叫「解压缩」
查询直接和那条五百一十二点积,softmax,再乘同一条五百一十二。
省下来的那一半显存,代价就是多了一次逐元素的旋转。

⭐⭐⭐ 下面这一段是现场追问逼出来的,它比前面更重要 ——  讲完 Ⓐb,这一节的骨头才立起来。 ⚠️ 那条演化链要明说是推的:论文没写「V4 是 MLA 的变体」。

「⭐ 看 Ⓐb。这条 512,到底是哪来的?
⭐⭐ 从第五章那个 MLA,四步就能推到它。

① MLA:一条 512 的潜向量,加两个升维矩阵把它还原成每个头的 K 和 V, 另外单挂一条 64 的 RoPE key —— cache 五百七十六。
② 第一刀:把两个升维矩阵删掉。那条 512 直接当 K,也当 V。
③ 第二刀:把那条 64 收进 512 里面。cache 五百一十二。
④ 最后一步:在这条 512 上,沿序列再压。压 4 倍是 CSA,压 128 倍是 HCA。」

「⭐⭐⭐ 所以『看着像 MLA』根本不是错觉 —— 
MQA 是它的形式,MLA 是它的效果。

下面这个算术是全节的命门,一定要当堂算出来,别只给结论。

「⭐ 现在问一句:这两个轴,能不能只上一个?
假设 V4 以那条窄 entry 为基础,就是标准多头 ——  128 个头、每头 128 维、K 和 V 各存一份,每 token 每层三万两千七百六十八个数
⭐ 压四比一,还剩 八千一百九十二
⛔ 而 MLA 是 五百七十六差十四倍。

「⭐⭐ 所以结论是:序列压缩不是「可以叠在宽度压缩上」,是「必须叠」。
光压条数、不压宽度,连上一代都打不过。

Q 那条路现场被点名问过,别漏。

「⭐ 有人会问:那 Q 呢?是一条 1536 的 latent,还是也只生成一条 512?
⭐⭐ 答案是 —— Q 走 latent,但最后是完整的多头。
hidden 先下投到 1536,归一化,再上投成 128 个头、每头 512 维。」

「⭐ 而这个 1536,跟 V3 和 V3.2 一模一样 —— 
查询侧 V4 根本没动,改的全在 KV 侧。
⛔ 还有一句要补:Q 不进 cache。所以这个低秩省的是算力,不是显存。」

最后这一问,把两个轴再钉一次。

「⭐ 还有人问:那滑窗那一百二十八条,用的也是 MQA 吗?
⭐⭐ 是,而且是同一条 —— 不是另起一套 KV。
官方文档给这个分支起的名字就是 Shared sliding-window K=V branch。」

「⛔ 请各位品一下这里:滑窗那一段,序列轴没压 ——  每个 token 各占一条,谁也没被合掉;
宽度轴照样是压过的 —— 还是那条五百一十二。
⭐⭐⭐ 滑窗只决定「这一段不合并」,它不决定「每条多宽」。

🖥 屏幕:滚到 fig3-v4-archⒶc

⭐⭐⭐ 这是 6.4c 的收口,也是全节最值钱的一段。 ⛔ 开口就要说清楚:论文没有正面回答这个问题,下面是推导。 ⚠️ 恒等式本身是公开技巧(DeepSeek-V2 就有), 「V4 = MLA 吸收形态的原生化」是我们的判断,不是论文原话。

「⭐ 最后一个问题,我猜各位心里已经憋着了:
MQA 这东西,2019 年不是被判过「能力不行」吗?什么时候又好上了?

「⭐⭐ 我先交个底:论文没有正面回答这个问题。
我把第二点三点三节和第二点三点四节都翻了, 没有一段解释「共享 KV 为什么不掉点」。
—— 所以下面这段是推导,不是论文原话。」

「⭐ 看 Ⓐc 最上面那个恒等式。
MLA 里第 h 个头的分数,是 q_h 点乘 k_h;而 k_h 是升维矩阵乘那条共享的 512。
⭐⭐ 把括号重新打一下 —— 把升维矩阵转置过来乘到 q 上
于是分数就变成:每个头自己那条 512 维 query,去点同一条 512 维 key。

「⭐⭐⭐ 各位看清楚这是什么 —— 
这字面上就是一个 head_dim 等于 512 的 MQA。
也就是说:MLA 吸收之后,本来就长成这个样子。
—— V4 不是「把 MQA 捞回来」,是把 MLA 原本就有的那个等价形态, 直接拿来当架构。

下面这句是这一段真正的落点,慢一点说。

「⭐ 那 2019 年那个为什么掉点?
毛病不在「共享」,在「删了不补」。
它共享的那条只有一个头宽,query 侧也没加宽 ——  被删掉的每头视角,没有任何东西接手。

「⭐⭐ 而 V4 这边:
共享的那条宽四倍;query 每头 512; 输出侧还有分组低秩投影;每头再挂一个可学的 attention sink。
⭐⭐⭐ 每头视角没有消失 —— 它搬家了。

⚠️ 必须补代价,否则这段听起来像「白捡」。

「⛔ 但请各位别把它听成「零损失」。
K 和 V 合成同一条,这一步连 MLA 都没敢做 ——  MLA 好歹还留着两个矩阵把 K 和 V 分开。
原本两组独立的自由度,现在只剩一组。省一半,不可能白省。

「⭐ 那这份损失谁吃了?三样:
query 侧每头的自由度、输出侧的分组投影、以及 —— 原生训练。
⭐⭐ 它是从第一天就这么训的,不是拿别的模型改出来的。

「⭐⭐⭐ 最后这一条各位应该觉得眼熟 —— NSA 名字里那个 Native, 说的是同一件事。
一个结构「长在上面」,和「事后套上去」,是两回事。
⛔ 而这条值得单独记一笔:很多「某某方法没用」的旧结论, 失效的原因恰恰是当初只在「事后套」的设定下测过。

❹ 这一条是接上一节 DSA 的,讲完正好收口。

「⭐ 最后一条,回到上一节那个 DSA。
它挑的那 2048 个 —— 是在 MLA 上面挑的。
V3.2 的配置写得清清楚楚:attention_type 是 mla,kv_lora_rank 是 512, indexer 的 topk 是 2048。

「⭐⭐ 顺序是这样的:
MLA 的全量潜向量,一条不少地照存
indexer 另外存一份自己的小索引记号
用它给全部历史打分,挑出 2048 个,生成一张 mask;
最后在 MLA 那份全量 KV 上,按这张 mask 做注意力。

「⭐⭐⭐ 而源码里有一行,正好把我们这一章那句判据写实了
序列长度只要小于等于 topk,indexer 就直接选全部。
—— 短上下文下,DSA 就是普通的 MLA。
⭐ 这不是我推的,是能指着代码说的。」

收这一段的时候,把三次翻车归成一个形状 —— 这是本讲方法论的落点。

「⭐⭐ 各位注意,今天这几个『想当然』栽在同一个形状上
都是把上一代成立的架构关系,顺手套到了下一代身上。
『三条支路就该门控融合』—— 在 NSA 上对,在 V4 上错。
『DeepSeek 就等于 MLA』—— 在 V3 上对,在 V4 上错。
所以架构上的事,别凭印象,去扒配置和源码。

「⭐ Ⓒ,最后一格 —— 为什么这一步在 TPU 上特别要紧。
动态那一边(DSA、CSA):跑起来才知道挑谁,于是 mask 只能运行时现造、 在显存里放一张稠密的、还得占着算数部件去算它。
静态那一边(HCA):窗口固定、压缩比固定 ——  mask 在编译的时候就能算出来,在主机上算好、打包成位图直接塞进片上, 显存里根本不存那张稠密 mask。

「⭐⭐⭐ 所以这一句要说清楚:
HCA 不是「把动态稀疏做快了」,是「把动态取消了」。

⭐⭐ 收这一节的时候把它接回本讲那条反复出现的判据。

「⭐ 各位把这四步连起来看:
NSA 挑块 → DSA 挑单 token → CSA 先压再挑 →  HCA 压到不用挑
⭐⭐ 每一步,都在把「运行时要做的决策」往编译期推。
—— 而这跟我们今天反复见到的那条判据,是同一个形状
一个麻烦最好的结局,不是被解决,是不再存在。

⚠️ 两条口径,被问到才说,别主动展开 ——  本节没有任何性能数字:本课没有这四者的对照实测,给数就是编。
② CSA / HCA 的结构与默认参数取自 MaxText 的公开实现(Apache-2.0), 不是论文原文 —— 说的时候要带上这个出处。

别说「中间那一栏是空着的」 ——  它写满了字。要说的是「那一栏里没有一个数字是往下走的」。

「⭐ 多花的那两笔里,第二笔更疼:挑中的两千多个散落在显存各处, 不是一整块,搬起来很碎。
省 FLOPs 谁都会 —— 在纸上少算 98% 的格子而已。可只要那些格子是散的, 要搬的字节一点没少,时间就一点没省。

「⭐ 那三句在这一章会给出一个很不一样的答案
省的是哪一样?—— 不是显存,是算力和带宽。
省了多少?—— 每步只读两千个,六十四分之一。
亏了多少?—— 显存一个字节都没省,而且搬起来更碎了。
请各位记住这一栏 —— 下一章整章都建立在它上面。

⚠️ 这一节最容易跑偏的地方不要讲 NSA 和 CSA 的细节,它们是支线。
⛔ 不要讲 DSA 的训练流程(KL 热身、冻主模型)—— 一句「师徒」就够。
⚠️ 「显存不省」这一句必须当面说清楚,它是这一章存在的理由, 也是第八章的引线。省略它,第八章就成了没来由的「那就都要」。

🖥 本节主屏:课件 第六章 别全读:从滑窗到 DSA · 主图 fig3-dsa-flow

第七章 绕回原点(10′,全讲的高潮)

🎯 留下一句:KV cache 才是状态的一种,而不是反过来。

「三条路走到这儿:一条改『一份有多大』,一条改『每步读几份』。 这一条最狠 —— 它干脆不存。
而这条路的终点,是第一章那个盒子。」

⭐⭐⭐ 那条判据的第三次、也是最后一次,就落在这一章。 第一章埋、第六章收过一次 —— ⛔ 这次不要提前说, 等讲完 7.3「板子会写满」再回头点,那时候台下自己就想起来了。

🖥 屏幕:7.1 滚到 fig3-assoc指下面那一格(② 把 softmax 拿掉)的形状

「2020 年有人写下一句在当时听起来相当刺耳的话: 真正卡住注意力的,其实是那个 softmax。
理由只有一行:因为要对所有位置求和归一化,那张『谁对谁』的大表躲不掉, 必须先整个造出来 —— 而它就是那个平方。
可要是把 softmax 拿掉呢?剩下的就是三个矩阵连乘 —— 而矩阵乘法可以挪括号。

「⭐ 盯着下面那一格:句长这一维,整个不见了。 这就是这一支敢说『跟话有多长无关』的全部底气。
—— 这是今天第二次挪括号 —— 一共就两次,而这一次最赚。
上一次(第五章)挪完,仓库里的压缩包一个都不用拆;这一次挪完,那张大表压根没被造出来。

🖥 屏幕:7.2 滚到 fig3-notepad不要并排开两个窗口 —— fig3-notepad 有 1748 px 高,半屏放不下,而且跟「一次只放大一格」的投屏规矩打架。
⭐ 改成滚过去再滚回来:先在这张说完,再滚回 fig3-rnn-unroll 指一下那个盒子,一句话就滚回来。

「挪完之后它变成了什么?一个固定大小的状态。 说得再直白一点:线性注意力本质上就是一个 RNN,只不过它的状态不是向量,是矩阵。

⭐⭐⭐ 这里必须补一格:「加」到底是怎么加的。 (2026-09-15 现场被追问。)⛔ 全讲通篇在说「揉进去」「加一笔」, 可从来没说过加的是什么 —— 而 7.3 那三件事 (d 个正交方向 / 叠糊了 / delta rule)全都架在这一格上。 不讲,它们就都是悬空的断言。
⚠️ 这一格值两分钟,别赶。

「先排掉一个很自然的误解:这不是把这个字的向量直接加到板子上。
⛔ 维度都对不上 —— 板子是个 d 乘 d 的方块,一个字的向量只是一条 d 长的线。

「真实动作分两步。
第一步,拆成一对。这个字先被两个学出来的矩阵投影成 一把钥匙 k一份内容 v,各是一条 d 长的线。
第二步,焊成一张卡片。把这两条线做外积 ——  两条 d 长的相乘,出来一个 d 乘 d 的方块
板子上加的是这张卡片,不是零件。现在维度对上了。」

「⭐⭐ 那加成一团之后,凭什么还能单独取回某一张
关键在 —— 取的动作也是线性的。你拿钥匙去问,做的就是板子乘以这把钥匙
而板子是一堆卡片加起来的,这一乘就自动散开每张卡片的内容,各自乘上『它那把钥匙跟你这把有多像』。

「⛔ 所以取出来的东西一定是两截
第一截,是你要的那一张 —— 它的钥匙跟你的一模一样。
第二截,是所有别的卡片漏过来的一点点。漏多少,看它们的钥匙跟你的有多像。」

「⭐⭐⭐ 第二截就是串音,也就是一会儿要说的『叠糊了』。
如果所有钥匙两两垂直,串音正好全是零,取回来干干净净。
而 d 维空间里,最多只有 d 个两两垂直的方向。
⭐ 各位,这就是那句『板子只放得下 d 条』的出处 —— 它不是比喻,是能验算的。

⭐⭐ 下面这条判据比这一段本身更值钱,一定要说出来。

「⭐ 记一条:『加法』之所以有意义,是因为『读法』是线性的。 加和读,必须配成一对。
softmax 那套读法是非线性的 —— 分母要对所有位置求和 ——  所以它没法用加法把历史压在一起,只能把每一条原样留着。」

「⭐⭐ 回头看刚才 7.1 就通了:先拿掉 softmax,不只是为了挪括号。
是拿掉它之后,「加」这个动作才第一次变得可取回。

⛔⛔ 紧接着一定有人问:「一直加不会爆吗?总得配个 norm 吧?」 —— 这一问会逼出本讲前面说漏的一件事,必须当场认。 (2026-09-15 现场被问到;查证时才发现 7.1 那句「把 softmax 拿掉」 是简化说法。⛔ 不许让简化说法在课上当真话用。)
⭐ 出处要报:arXiv 2006.16236 的式 (5) 和式 (7)

「好,那『一直加』会不会爆?
⭐ 回答之前我得先认一件事:我刚才说『把 softmax 拿掉』, 那是个简化说法。

「翻回原论文那个式子 —— 分母是在的。
它算的是『这一条的相似度,除以所有条相似度之和』 ——  跟 softmax 的形状一模一样。

「⭐⭐ 所以被拿掉的不是归一化,是 exp
softmax 是两件事:先取指数,再除以总和。 线性注意力扔掉的是前一半 —— 那层非线性的壳, 也正是它锁死乘法顺序的元凶;后一半原封不动留着了。
⭐ 而且那个分母自己也是个累加量,用同一招挪括号顺带就算出来了,不多花什么。」

「⭐⭐⭐ 于是『爆不爆』就清楚了:分子在涨,分母也在涨。
取出来的是个加权平均,不是一个越堆越大的和。
这就是原版的 norm —— 它从第一天起就在里面。

如果有人追问那个古怪的 elu 加一 ——  一句话:论文明说是为了让相似度恒为正 —— 分母要是能过零,除法当场就炸。 至于为什么不用 relu:relu 在负半轴梯度是 0,训不动。

「⭐⭐ 不过这一支后来的主流,并不靠那个分母 ——  它换了一条更狠的路。而那条路,正好就是下一节整节的内容。」

「做法是:每一步先把整块板子乘掉一点,再加新的。
于是『一直加』就变成了 —— 一边加,一边一直在忘。
⭐ 加的是等比级数,不是等差级数。它自己就收敛,根本不需要谁来压。

「⭐ 所以各位那个直觉对了一半:确实得有东西管住它 ——  但管住它的主力不是外面那层 norm,是『会忘』这件事本身。
外面通常还有一层 norm,那是兜底,不是主因。

⭐⭐ 说完这句,台下一定有人在心里问:那它为什么不叫 RNN? ⛔ 别等提问,自己接上 —— 这个疑问一旦挂着,后面讲什么都分心。 (2026-09-15 试讲现场就被问了这一句,而当时讲稿和课件里一个字都没有。)
⭐ 出处要说死:arXiv 2006.16236,ICML 2020,两层意思都在摘要第一句里。

「各位心里这会儿八成在问:那它为什么不叫 RNN?
⭐ 有意思的是 —— 命名它的那篇论文,正标题就叫《Transformers are RNNs》。 作者第一天就知道它是 RNN,还写进了标题。
叫 linear attention 的,是标题里那个方法。」

「那『线性』到底线性在哪?—— 一个词管住两件事,而且是因果关系。
⭐ 第一件:那个点积变线性了。摘要原话是 a linear dot-product of kernel feature maps ——  ⛔ 这句念完必须马上翻成人话,否则等于没说 —— 
「softmax 是套在相似度外面的一层非线性的壳。 把这层壳拿掉,剩下的相似度就是 —— q 和 k 各自先过一道很轻的变换, 然后直接点积。
⭐ 没有壳了,也就不用先凑齐一整行再算。」
⭐ 第二件:于是复杂度线性了。正因为它线性, 结合律才用得上,平方才掉成 O(N)。
先有第一个线性,才有第二个 —— 不是并列,是因果。

「⭐⭐ 那为什么不改叫 RNN?因为名字记录的是它从哪来,不是它是什么。
它是从注意力里出来的,不是从 RNN 里出来的。
而且 2020 年,RNN 刚被 Transformer 打败三年 —— 那时候这是个不利的名字。
你给新方法起名叫 RNN,等于自己把自己埋了。

「⭐ 还有一层是写给谁看:作者要说服的,是用 Transformer 的那群人 ——  就得在他们的坐标系里命名。
『这是一种注意力』,他们会读下去;『这是一种 RNN』,他们会划走。

⭐⭐ 这里收一下第一章那个名字 —— 两个名字并排,这一段才算讲完。 (第一章 1.1 讲了「R」是什么;⛔ 那边没有点这层对照,是专门留给这里的。)

「⭐ 最后把这两个名字摆在一起看,还能多读出一层。
RNN 的那个 R,说的是它长什么样 —— 有一条绕回自己的边,是个形态
线性注意力的『线性』,说的是它怎么被算出来 ——  点积是线性的、于是能重排,是个数学性质。」

「⭐⭐ 一个按形态命名,一个按性质命名 ——  所以这两个名字听上去八竿子打不着,可它们说的是同一样东西。
这不是巧合,是命名这件事本身的毛病名字只记得住起名那一刻最要紧的那一面。

「现在请把这块板子和第一章那个盒子摆在一起看。形状一模一样: 大小固定、一步一步往下传、成本跟话有多长无关。
差别只有一处 —— 当年那个是个向量,这一块是个矩阵而这一处差别,正是三十年里最要紧的那一处:板子变大了,而且是能变大的。

🖥 屏幕:7.3 滚到 fig3-erase

⛔⛔ 先让台下猜错一次,再给答案 —— 直接说「只加不擦」那个反转是平的。 这是同一个形状的第三处(6.2 滑窗、6.3 挑重要的,这是第三次): 几乎人人都会先想到一个合理的错答案,把它摆出来再推翻,转折才立得住。

「板子会写满。那各位先猜一下:一块固定大小的板子,写着写着会怎么坏?
⭐ 大多数人第一反应是 —— 旧的东西会慢慢淡掉吧? 像磁带反复覆盖,越早的声音越模糊。」

「⛔ 不是。最朴素的那个线性注意力,根本不是这么坏的 ——  因为它只会加,不会擦
你每读一个字就往板子上加一笔,读一万个字就加一万笔。 旧笔迹一笔都没走,没有任何东西在变淡。

「⭐⭐ 所以它不是『淡掉』,是 —— 叠糊了。
就像一块白板,你不停往上写、从来不擦。写到第一百条的时候, 板子还是那块板子,墨也还都在 ——  可是你已经一条都读不出来了。

下面这句一定要念出来(图里也有,但台下读不到)——  ⛔ 而且要带上是谁说的,否则就成了一句没来历的金句。

「神经科学家 David Eagleman 在《Livewired》里有一句话, 被做这一支的人反复引用 ——」

记忆的敌人不是时间,是别的记忆。

「—— 所以第一章那个『传远了会淡』,在这里换了一张脸: 它不是被时间冲淡的,是被后来的记忆挤掉的。
于是这一支所有的新名字,其实都只在回答同一个问题:怎么擦。

⭐⭐⭐ 这里放那个日常版本 —— 它补的正好是上一句没说的那半截: 「为什么装的越多就越挤」。 ⛔ 位置必须在 Eagleman 之后、delta rule 之前: 它一头接住「是挤不是淡」,另一头直接把 delta rule 解释掉了。
⚠️ 最后那句边界不能省 —— 我们借的是形状,不是在断言人脑就这样。

「这件事有一个日常版本,各位一听就明白。
⭐ 成年人常觉得自己记性不如小孩。可未必是记性变差了 ——  更可能是脑子里原有的东西太多了。

「小孩脑子里干扰项少。一件新事进来,周围是空的, 很容易跟别的区分开、单独记住。
成年人不一样:你得先找一块空地,或者找一个合理的位置把它插进去, 让它跟已有的知识互不冲突 —— 而这件事本身就很难。

「⭐⭐ 各位看出来了吗?这说的就是刚才那句『d 维里最多 d 个方向』
板子空着的时候,新记录随便放哪儿都不打架;板子满了, 新记录只能挤在别人旁边,挤到谁就把谁弄脏。
『找一块空地』,就是找一个还没被占用的方向。

「⭐⭐⭐ 而这个说法还顺手把下面那一招解释掉了
『找个合理的位置插进去、不跟原有的冲突』—— 翻成板子上的动作就是: 先拿这把钥匙看看那儿原来写着什么,把旧的那一笔清掉,再写新的。
成年人学东西得先整理一下才记得住 —— delta rule 干的就是这件事。

「⚠️ 说一句边界:我们借的是这个直觉的形状 ——  干扰,而不是衰减。至于人脑是不是真这么工作,那是另一个领域的问题。
这一段真正扛事的,还是那句能验算的:d 维里,最多 d 个互不打架的方向。

「⭐⭐ 讲『怎么擦』之前,先比一个东西 —— 残差网络也是『加』,它为什么不糊?
残差块做的是输出等于输入加上 F 括号输入,也是往同一个地方加。 可它叠一百多层都不糊。凭什么?」

「⛔ 区别只有一条,而且是决定性的 —— 它在加之前,先读了一遍。
⭐ 最朴素的线性注意力是盲加:第 t 步加的那张卡片, 只由当前这个字算出来 —— 它压根没看板子上已经写着什么,写重了也不知道。
⭐ 残差块是先读再加:F 的输入就是当前这份表示。 它读得到已经有什么,所以它写的是『还差什么』,不是『我以为该有什么』。」

「⭐ ResNet 那篇原文的用词就很准,是 2015 年何恺明他们那篇: learning residual functions with reference to the layer inputs ——  『有参照地』学。这个 with reference to,就是它不糊的全部原因。」

「⭐⭐⭐ 而下面 delta rule 干的,正好就是把这件事装到线性注意力身上 ——  先拿钥匙去把板子上那儿的旧内容取出来看看,再按差去改。
一句话:delta rule 等于给『加』装上残差那种『先读再写』。

⚠️ 如果有人追问「那残差凭什么层数多了也不累」 ——  一句带过即可:残差是固定的几十到一百多层,不是几万步累加, 而且层间还有 LayerNorm 重新归一化。 ⛔ 别展开梯度那条(恒等通路让梯度不衰减,那是原论文的主要动机)——  那是另一门课的内容。

「⭐ 最后给各位一个不用背谱系的办法
以后每碰到这一支的一个新名字,只问它一句 —— 你是怎么擦的?
擦多少、擦哪些、要不要每一步都擦、能不能让模型自己学着决定擦什么。 答案一定落在这四格里的某一格。

⭐⭐⭐ 现在回头点那条判据 —— 第三次,也是最后一次。 台下这时候刚看完「板子会写满」,自己已经有感觉了。

「⭐ 各位有没有发现,我们又回到今天第一句判据上了。
这块板子固定大小:好处是每步要搬的东西不随长度变 ——  这正是第一章那个盒子唯一的优点,绕了六章,我们把它捡回来了
坏处是它装不下,会写满。
⭐⭐ 还是同一条性质。第一次是盒子,第二次是那张废票桶, 这是第三次 —— 而且这一次,那条性质是我们主动选回来的。

🖥 屏幕:7.4 滚到 fig3-chunkwise一分钟带过

「状态请回来了,第一章那个『只能一步一步来』的痛也跟着回来了。 这一支能站住,全靠把它又解决了一次 —— 同一个式子一个字没改, 只改了算的顺序:不再一个字一个字往下传,而是一批一批传。

⭐⭐⭐ 下面这一格是 2026-09-16 补的 —— 现场原话: 「chunk 化到底具体是怎么做的?GDN、KDA 怎么在硬件上加速并行?」 ⛔ 原来这一节只给了比喻(排队办事、交接单), 一个字都没说块内是怎么算的 —— 而那恰恰是全部机密所在。
⭐ 判据:比喻负责让人愿意听下去,机制负责让人真的懂。缺后者,图只是好看。

「⭐ 那『一批一批传』,块里面到底是怎么算的
⭐⭐ 关键只有一句:同一个和式,按「块外/块内」劈成两截。

第一截,块外。
前面所有的块,早就压成了那一张交接单。这一块里每个 query, 拿它去问那张单子就行 ——  前面有多少个 token,跟这一步的代价完全无关
⭐ 形状是:C 乘 d 的 Q,乘上 d 乘 d 的 S —— 一次矩阵乘。

第二截,块内。
剩下的只有「本块里、我前面的那几个」。这一截躲不掉 ——  可它只有 C 个人
⭐⭐ 于是它退化成一个 C 乘 C 的小全注意力
—— 又一次矩阵乘。

「然后在块末,更新一次交接单:板子加上这一块的 K 转置乘 V。
还是一次矩阵乘。

⭐⭐⭐ 下面这一句是这一整格的落点,它把第一章收了。

「⭐⭐ 各位数一下:三件事,全是矩阵乘。
—— 而这正是 Tensor Core、MXU 要的形状。

「⭐⭐⭐ 那为什么这一改就快了?答案在第一章那句话里。
第一章我说过:RNN 在硬件上的病不是算不动,是每一步都只是 『一个维度等于 1 的矩阵乘』 —— 几千个算力单元,一次只喂得上一个。
chunkwise 做的事,一句话:把那个 1 变成了 C。
串行步数从 L 步降到 L 除以 C 步,而每一步都变成了一把胖矩阵乘。」

可以报一句论文原话,很有分量。

「⭐ Kimi 那篇的原话是:「块间递归、块内并行,以最大化矩阵乘吞吐, 从而吃满 Tensor Core」。」

⭐⭐⭐ 而 GDN / KDA 还多一步 —— 这一步才是那几家「自研 kernel」真正在解的东西。

「⛔ 不过刚才说的,是最朴素那版线性注意力。
⭐ 它块内能直接并行,是因为 —— 每个 token 只是往板子上加一张卡片, 谁也不看别人写了什么。

「⛔⛔ 可 delta rule 不一样。各位还记得吗 —— 它是先读再写的。
第 r 个 token 擦掉的东西,会改变第 r 加一个读到的。
—— 于是块内不能直接并行了。

「⭐⭐ 那怎么办?解法很漂亮:
把块内这一串依赖,折成一个 C 乘 C 的下三角矩阵,然后求一次它的逆。
求完之后,整块就能一次算完
⭐ 论文说这个逆用高斯消元的逐行前代来算,很便宜。」

「⭐⭐⭐ 所以各位听到的那句「我们自研了 kernel」,具体是在自研什么
Kimi 那篇说它做了一个 DPLR 的「特化版本」 ——  特化的地方就在这儿:通用写法要解的那个三角系统更贵, 而 delta rule 这个特例可以写得更省。

「⛔ 最后一句,请各位一定带走:
「线性注意力更快」这句话是有前提的。
它快,是因为有人替它把块内那一串依赖解开了。
—— 没有这个 kernel,它在硬件上还是那条又细又长的链。

⚠️ 别说成「这一批里不分先后」 ——  批内该谁先谁后照样算,只是那笔账可以一次填完一张小表, 不用排队。⛔ 说漏了,台下会以为分块是抄近路的近似, 而图下面又写着「数学上完全等价」,两边对不上。

⭐⭐⭐ 7.5 是整讲的最高点。慢,而且要念原话。

🖥 屏幕:7.5 滚到 fig3-gu按 Ⓐ → Ⓑ → Ⓒ 一格一格走,整段都停在这张图上。 ⛔ 别中途滚回别的图 —— 这一格的全部力气来自「三格在同一张图上」。

⭐⭐⭐ 这张图 2026-09-15 才补上 —— 在那之前,全讲最高点是没有图的。 ⛔ 后果不是「少一张图」,是这一段只能靠耳朵接: 台下要在脑子里把「谁装着谁」自己转一次。
Ⓑ 是这张图存在的全部理由 —— 两个圈的包含关系**翻过来**, 用嘴说要转一次,画出来是一眼的事

走图的三句话(每一格先说这一句,再念原文):

「⭐ Ⓐ 这条轴,是我们这七章的地图。
左端是原样留着,右端是压成一个固定大小的东西
各位看轴上那四个点 —— 全注意力在最左,GQA 挪了一点,MLA 再挪一点, 而线性注意力直接跳到了右端。

「⛔ 再看最左边那个点,它上面套了一个橙色的圈 ——  滑窗和 DSA 也站在这一站,一步都没挪。
⭐ 因为它们改的是每步读几份,不是存几份
—— 第六章那句「一个字节都没省」,在这张图上是看得见的。

「⭐⭐ 最后看下面那两组条子:左边三条越来越长,右边三条一样长。
这就是这一整章的全部收获,也是它的全部代价 ——  右边那三条一样长,意味着装不下的东西,就是装不下。

⚠️ Ⓐ 那条轴没有刻度,讲的时候别说成「压缩了多少倍」。 GQA 砍的是头数、MLA 压的是维度、线性换的是整个数据结构 ——  三者之间没有一个可比的标量。它只回答「谁在左、谁在右、谁原地不动」。

念之前先交代这两件事 ——  台下既不知道 Mamba 是什么,也不知道说话的人是谁(第 4 轮苏剑林就栽在这儿)。

「⭐ 顺带认个门牌:这一支在外面最响的名字叫 Mamba, 2023 年出来的。它走的是同一块板子、同一套「擦了再写」 ——  只是从信号处理那边推出来的,术语不一样,所以听上去像另一门功夫。
下面这段话,来自 Mamba 的作者之一、卡内基梅隆的 Albert Gu。」

「他这个说法值得整段听完。他说:其实每一个自回归模型 都是某种『状态模型』 —— 它在内存里持有一个状态,每吐一个字就演化一次。 区别只在这个状态长什么样:
注意力的状态,是把历史里每一个元素都原样缓存下来; 这一支的状态,是把全部历史压成一个固定大小的东西。

⭐⭐⭐ 念下面这句之前,先把激光笔移到 Ⓑ 那两个圈上。 ⛔ 顺序不能反 —— 先让他们看见圈,再听见话, 那句话才会「咔哒」一下扣上。念完再指一次右边那个绿圈。

「然后他补了一句很有意思的观察:很多人管这一支的状态叫『一种 KV cache』——  可反过来说才更准确:KV cache 才是状态的一种,而且是最不压缩的那一种。

「⭐ 各位看这两个圈 —— 用的是同样两个词,只是谁装着谁,换了个位置。
左边那种说法,是把最不压缩的那一种,当成了整个类别的名字
⭐⭐ 换过来之后多出来一样东西:它们是兄弟,不是父子。

「⭐ 读到这儿,第一章那个盒子的地位就变了: 它不是一个被淘汰的老办法,它是这一整个家族的原型。

「他还给了一个比喻,比任何指标都好用:Transformer 像一个数据库, 每来一条新观察都当成重要资料归档,要用的时候翻出来,一个字都不差; 这一支像一个大脑,大小有限、一直在线、边听边处理。
而我们人,恰恰是后面这一种。
你我都记不住一整本电话簿,更别说背出来 ——  我们在「精确记忆」和「精确检索」这两件事上糟糕透顶。
而这好像并不妨碍智能出现。

「所以『谁的长上下文更强』这个问法本身就不成立: 我自己的记忆,和我的研究笔记,哪个更好?—— 它们只是不一样。」

「⭐ 最后再用一次那三句,这一支的答案最干脆:
省的是哪一样?—— 三样一起省:显存、带宽、算力。
省了多少?—— 它跟话有多长,彻底无关了。
亏了多少?—— 精确检索。板子就那么大,记不住一整本电话簿。」

「⭐⭐ 所以三条路走完,局面是这样的:三条路,三块啃不动的骨头。
而全行业给出的答案 —— 出奇地一致。

⚠️ 这一节最容易跑偏的地方 ⛔ 不要讲 SSD 对偶、A 矩阵谱系、DeltaNet 的梯度推导 —— 全是 L300 的活
⚠️ 7.5 那三段引文不要概括,要念。这一讲的文学骨头就在这里。
⚠️ 如果全场只剩五分钟,砍 7.3 和 7.4,保住 7.2 和 7.5

🖥 本节主屏:课件 第七章 绕回原点 · 主图 fig3-notepad

第八章 那就都要(8′)

🎯 留下一句:混合不是省钱,是它自己带来了好处。

⛔⛔ 开场先把「和稀泥」这个念头替台下说出来,再推翻它。 ⭐ 这是本讲同一个形状的第四处(6.2 滑窗 / 6.3 挑重要的 / 7.3 板子怎么坏)——  几乎人人都会先想到一个合理的错答案。
⛔ 这一章尤其不能省:不先说破,「都要」听起来就是三条路都不行所以拼一拼, 而这一章整章要讲的恰恰是相反的事。

「上一章结尾,局面很憋屈:三条路,三块啃不动的骨头。
⭐ 最平庸的答案是 —— 那就都要呗,几条路一起用。
⚠️ 听起来像和稀泥,对吧?像是「反正每条都不行,那就拼一拼凑合用」。
—— 这一章要讲的就是:不是。

🖥 屏幕:滚到 fig3-hybrid先指左边那一格

「如果掺便宜的层只是为了省,那道理很简单:全用贵的,效果应该最好。 —— 可实测不是这样。

「而这件事有一手的说法 —— 还是刚才那位 Albert Gu。
他写道:把一个纯 Transformer 里的一部分、甚至大部分层换成状态类的层, 效率和效果会同时变好;而那个最优配比大致在 3:1 到 10:1 之间已经被几十个研究组各自独立验证过。

「几十个」是原话(dozens),但光说数字没有说服力 ——  把他点名的那几家念出来。

「⭐ 他原文里点了名的有 H3、Jamba、Zamba、Samba, 后面还有一长串跟上的。
—— 各家从不同的起点出发,最后都落在同一个区间里。 这比任何一家自己说「我们这个配比最好」都有分量。」

⭐⭐ 念完这句,回头点一下「同时」那两个字 —— 它是整句话的重量所在。

「⭐ 各位注意他这句话里最值钱的是哪个词 —— 『同时』。
不是「便宜一点、效果差一点」,是两头都往好的方向走。

紧接着必须补两句,否则这一章会变成吹捧 ——  ①「更好」这个说法比手上的证据强;② 他给的区间跟屏幕上那张图不一样。

⭐⭐⭐ 这里有一条缝,把第七章和第八章接成一条线 ——  而且是 Gu 自己在同一篇里接上的,不是我们凑的。 ⛔ 别跳过:7.5 收尾那个反问(「我的记忆和我的研究笔记,哪个更好」) 在这里拿到答案了。不接上,第八章就只是一章新内容; 接上之后,它是上一章那个问题的回答

「⭐ 各位还记得上一章最后那个反问吗 ——  我自己的记忆,和我的研究笔记,哪个更好?
当时的答案是:它们只是不一样。

「⭐⭐ 而 Gu 在同一篇里,紧接着就给了下一句。他说:
就像人的智能,是靠随手的草稿纸和外部的参考资料撑起来的 ——  语言模型也一样,把状态层和注意力层掺在一起就会变好。

「⛔ 所以第七章那个问题,答案根本不是二选一。
⭐⭐⭐ 答案是:你两个都有。
一个大脑,外加一份可以随手翻的笔记 —— 这就是混合架构。

「⚠️ 两句话要说在前头。
第一,他说的是建模能力,没把成本算进去 ——  省钱是白捡的,不是理由。
第二,「更好」这两个字要打个折:手上最硬的那组对照, 全场上下只差百分之三。严格说,证据支持的是「不差,而且便宜得多」 ——  「更好」是个方向,不是个已经钉死的结论。

「⭐ 还有一处,各位等下会在屏幕上看到:
他说 3:1 到 10:1,而图里写的是 3:1 到 6:1,还标着「没有一家超过 7:1」。
—— 这不是打架:他说的是「建模上最优的区间」,图上量的是「今天真实各家停在哪」。
真做出来的,全都停在那段区间的左半边。

🖥 屏幕:8.2 滚到 fig3-info-law只讲一句话的结论

「那为什么不能全用便宜的?—— 这里有一条能算的规律。
⭐ 先说清楚图上这个比喻:「书」就是你喂进去的那一整段上下文, 「本子」就是模型手里那份随身记的东西。
第三章我说过『远处可以少看』。那句话对,但不完整: 它不等于『远处不重要』。一本书前半和后半之间那点关联, 是随着书变厚一直在涨的,只是涨得慢。慢,不是零。
所以本子得跟着书一起变厚 —— 本子大小固定,总有一本书是它兜不住的。

「⭐⭐ 各位,这就是为什么不能全用便宜的 ——  不是工程做得不够好,是那条规律不允许。

⭐⭐⭐ 下面这一句是 8.1 和 8.2 的合并落点,说完再进 8.3。 它同时也是 8.4 那一节的引线 —— 「比」这个词第一次带上重量。

「所以局面就清楚了:贵的不能全要,便宜的也不能全要。
⭐⭐ 那个比,是被逼出来的,不是调出来的。

🖥 屏幕:8.3 滚到 fig3-ratio-grid

⛔⛔ 先摆错答案,第五处同形。 (6.2 滑窗 / 6.3 挑重要的 / 7.3 板子怎么坏 / 8.1 和稀泥,这是第五次。)
⭐ 这一处的错答案特别好用,因为它看起来很讲道理

「先说这张表怎么做的:固定十六层、同等算力预算, 把配比从一头扫到另一头,一个一个训出来比。
⭐ 各位先猜一下排名 —— 既然混合更好,那大概是:全用贵的排中间偏下, 全用便宜的垫底,对吧?」

「⛔ 第一件反直觉的事:纯全注意力那一头,不是最差的。
⭐⭐ 而且这里必须把分母说出来 —— 这张表一共只有五个配比, 它排第四。
⛔ 五个里的第四,那不是中游,是倒数第二。最差的是另一头那个极端。」

「⭐ 所以这一章的结论其实更强:不是「掺得越多越好」, 也不是「掺得越少越安全」—— 两头都不好,好的在中间。
混合的好处不是线性的。

⭐⭐⭐ 第二件事要把那个算术当场算给台下看 —— 算出来他们才信。 ⛔ 光说「能摆得匀的就那么几个」是个断言; 三十秒的除法,它就变成一件可验算的事。

第二件反直觉的事:这张表答不了『为什么是 3 不是 4』。
⭐ 为什么答不了?各位跟我算一下。
配比 r 比 1,意思是 r 层便宜的配 1 层贵的 ——  那一个循环就是 r 加 1 层。要在十六层里摆得匀, 这个 r 加 1 就得整除十六。」

「⭐ 那 r 加 1 只能是 1、2、4、8、16 ——  也就是 r 只能取 0、1、3、7、15
正好就是表里那五行。
而四比一要五层一个循环、五比一要六层一个循环 —— 都除不尽十六, 所以它们根本没进过这张表。

「⭐⭐ 各位听清楚这个区别:不是试了发现不好,是压根没试。

再补一个最能说明「margin 有多薄」的细节(图里有,值得念出来)。

「还有件事:3:1 和 7:1 在训练集上一模一样, 都是九点二三 —— 一个小数点都不差
验证集上差了零点零五,才把它们分开的。
⛔ 所以「3:1 最好」这个结论,是从一条很细的缝里挤出来的。」

「⭐⭐⭐ 好,把这一格提炼成一句能带走的话 ——  读任何一张消融表,先问一句:它到底扫过了哪些点,没扫过哪些点?
一张表给你一个漂亮的最优值,你很容易以为这是从所有可能里挑出来的
多数时候不是。它是在「能摆得下的那几个」里挑出来的。

🖥 屏幕:8.4 只在 87′ 版讲。60′ 版直接滚过去, 但要念下面那句交代 —— ⛔ 不念的话,这一节就是无声消失, 台下不知道有过它。

「⭐ 中间还有一节,今天时间不够,我只说结论:
各家越做越深的时候,守恒的是那个「比」,不是那几层的条数
换句话说,模型做得越深,你要付的贵层就越多 ——  混合省下来的是一个固定百分比,不是「越深越划算」
课件里有整节,课后自己看。」

87′ 版才讲的完整说法(约 45 秒) ——  从一对具体数字开头,不要从「有两派说法」开头。

⭐⭐⭐ 问之前先把赌注摆出来 —— 不然台下会觉得这是在抠字眼。 ⛔ 这个问题的要害不在措辞,在于两种答案通向完全相反的成本曲线

「这个问题听起来像文字游戏,其实不是 ——  它决定了你做大模型的时候,成本怎么涨。
⭐ 如果守恒的是条数:那太好了 —— 模型做得再深,也只要那么几层贵的, 越深越划算
⛔ 如果守恒的是比值:那是另一回事 —— 模型做得越深,要付的贵层就越多, 省下来的永远是一个固定百分比。」

「⭐ 这个问题不适合讲道理,适合去数。 我们把十四个模型的配置文件一个一个拉下来数。
⭐⭐ 而最干净的反证是 Kimi 自己 —— 因为它前后两代都公开了配置: 同一家、同一套思路,只是做深了。这种对照最难抵赖。

「Kimi Linear 是二十七层,其中七层是贵的。它下一代 K3 是九十三层,二十四层贵的。
层数翻了三倍多,贵的那部分也跟着翻了三倍多。
⭐ 所以守恒的不是那几层,是那个比
—— 我们前面说「贵的层不需要很多」,那句话得改一个字: 不是条数少,是占比低。各家都落在四分之一到十分之一。」

「⭐⭐ 而这句话不是推出来的,是数出来的 ——  十四个模型的配置一个一个拉下来,深度和贵层条数几乎是一条直线。
⛔ 所以今天最后一条判据:一个数到底是不是超参,看它散不散。 条数从三到二十四差了八倍,比值只差三倍多 ——  散得开的那个才是被人挑出来的;不散的那个,是被定死的。

「⭐⭐ 这条判据各位以后到处都能用。
看到一个系统里的某个参数,想知道它是调出来的还是被物理定死的 ——  别问设计者,去看它散不散。

🖥 屏幕:8.5 滚到 fig3-nope指 ① 和 ② 的对照

「⭐ 最后讲一件白捡的好事。还记得第五章那条很别扭的六十四维窄轨吗? 它之所以非有不可,是因为模型里没有任何一层天生知道先后
可状态类的层是一步一步走的,先后顺序本来就写在它的走法里。 于是可以把位置信息的全部责任交给那些便宜的层 ——  那条窄轨,在混合架构里可以不要了。

⛔⛔ 说到这儿必须停一下,替台下把那个反问问出来 ——  现场就是在这儿被问的:「那层 MLA 总还是得留 RoPE 吧?」 ⭐ 判据:一句结论如果会引出一个明显的反问,那这个反问就是讲稿的一部分。 不替他们问,他们只能自己带着疑问往下听,后面全走神。
⭐ 出处要报死:Kimi Linear 技术报告 arXiv 2510.26692, 正文有一整段小标题就叫 “No Position Encoding (NoPE) for MLA Layers”。

「各位这会儿八成在想:可那层全注意力,总还是得知道位置吧?
不留。一个都不留。而且这不是我的推论 ——  论文里有一整段就叫『MLA 层不要位置编码』,原话是 『我们对所有全注意力层都用 NoPE』。」

「⭐ 那它怎么知道位置?—— 位置没有消失,是送达方式换了。
原来是每一层自己盖戳:RoPE 在这一层自己的 key 上按位置转一下, 层层都得来一遍 —— 所以层层都被那个旋转挡着。
⭐⭐ 现在是下面几层已经揉好了,顺着残差流送上来。 MLA 层读到的那个向量本身就带着位置,它自己不用再做任何事。」

「⭐⭐⭐ 那『多远』这件事,具体是谁编码的?—— 衰减。
那块板子每走一步都要先乘一个衰减因子
所以一样东西被乘过几次衰减,就说明它离现在有多远 ——  衰减本身就是那把尺子。
⭐ 论文的说法是:KDA 接过去的是位置信息和「近因偏好」, 并把它定性为主要的位置感知算子。」

「⭐ 各位回头看我们一直在用的那条分工:『顺序』归因果掩码, 『距离』原来归 RoPE。
在混合架构里,「距离」这一项从 RoPE 手里交给了衰减 ——  于是 RoPE 整个失去了存在的理由。」

⚠️ 别讲成「混合就一定 NoPE」 ——  这是 Kimi Linear 的设计选择,不是所有混合模型都这么做。 ⛔ 而且前提很硬:得有一类天然带时序的层,且要摆在全注意力层下面, 位置才来得及被揉进去。

「 ⭐ 这是这一讲里很少见的一种好事:一个麻烦不是被解决的, 是因为换了结构而不再存在。

🖥 屏幕:8.6 滚到那张模型表。
别想着「整屏投」 —— 四十四行,一屏只显得下十来行。 投出表头那一屏、往下匀速滚一遍就走,让台下看见「有多长」就够了。

「名词讲完了。这张表是把它们放回现实 ——  每一行都标了出处,多数可以在公开配置里当场核。课后自己翻。

⚠️ 这一节最容易跑偏的地方不要念表。四十四行,念一行就毁一次节奏。
⚠️ 8.4「守恒的是比值还是层数」时间紧可整段跳 ——  但跳之前要说一句「这两派都真实存在,课件里有」。

🖥 本节主屏:课件 第八章 那就都要 · 主图 fig3-hybrid

第九章 落到机器上 + 收尾(10′)

🎯 留下一句:硬件不只决定用哪个公式,它最后连超参都改了。

🖥 屏幕:9.1 滚到 fig3-perstep指第二格里灰色那一段

「⭐ 到这里,这一讲的「想法」部分全讲完了。
剩下这一章,全是机器说了算。

⛔⛔ 上图第一句必须先说清「这张图量的是什么」,以及灰红各是谁。 ⛔ 2026-09-15 试讲时我在这里讲错过一次,把灰色说成「算权重、过 FFN」——  可这张图量的是「一步要从显存多少字节」,不是算力。
⭐ 判据(又一次):看图先读图例,别照着颜色现编含义。 「灰色=其它那些杂活」听起来太顺了,所以不会有人拦你。

「倍数是相对的,毫秒是绝对的
⛔ 先说清这张图量的是什么:走一步,要从显存里搬多少字节。 不是算多少,是多少。」

「两段颜色。
灰色是权重 —— 所有人共享,每一步都得把它整个搬一遍。 DeepSeek-V3 每个 token 激活三百七十亿参数、FP8 存,就是三十四点五个 G
红色是你一个人的 KV cache。

「⭐⭐ 现在看这五根柱子:灰色那一段完全一样,五根都顶到同一条线。
为什么?因为权重就那么多,跟你说多长的话没有关系。
⛔ 差别全在红的那一段上。」

⭐⭐⭐ 这里要回指第一章 —— 那条灰的不是新东西,它就是第一章那句话。 第一章讲 RNN 为什么慢的时候说过:每走一步,都要把全部权重从显存搬一遍。 那条线一直在,它就是这根灰的。⭐ 点这一下,台下会发现这门课绕了一圈。

「⭐ 各位还记得第一章那句话吗 ——  每走一步,都得把全部权重从显存里搬一遍。
那句话到今天一个字都没过期它就是这根灰的。

「⭐⭐ 所以『KV cache 是瓶颈』这句话,我们从第三章说到现在 ——  到这儿它才算被画出来。
不是一个说法,是一根看得见的红条:MHA 那一步里, 九成三的字节,是一个人的 KV。

⚠️ 顺手把那条「到头了」的线也点一下 ——  MLA 之后再上稀疏,只再快 1.24 倍:红的已经被压没了, 瓶颈整个搬到灰的那一段去了。⭐ 这正好给第八章「都要」补一条理由 ——  在一条路上继续使劲,收益是会到头的。

🖥 屏幕:9.2 滚到 fig3-tpu-gap⭐ 这一段对做 infra 的听众必讲。

「要命的是:这些聪明办法绝大多数是在 GPU 上长出来的。 而一台机器擅长什么,是写在它的出厂设计里的 —— 换一台,前提就换了。」

图讲完了就往下滚到正文,别停在图上。 接下来那三句(286 倍 · 块大小 32→64 · 「可能完全改变训练动态」) 不在图上,在图下面的正文里 —— 这是这一讲的最后一击,停在那三行上慢讲。

「2025 年有人真的把 NSA 移植到 TPU 上,写了一份工作日志。 他的结论是一句话:动态稀疏在这套栈的每一层都难。
⭐ 我把『每一层』拆开说 —— 三层,而且一层比一层底下。
第一层,编译器。编译器不喜欢运行时才知道的变量和分支, 而『挑哪几块』恰恰是运行时才知道的第二层,写 kernel 的框架。它强制按顺序一格一格走, 而 top-K 挑出来的块是跳着的
第三层,硬件本身 —— 这一层最狠。 那个把散落的块取回来的活,落到了一个专管算数的部件头上 ——  而不是那套专门搬东西的硬件。
⭐ 那个算数的部件干活的方式是「同一个动作,对一排几百个数一起做」。 你让它一个一个去不同地方捡东西,它一排几百个位子只用得上一个,其余全在干等。
⭐ 光是把索引改写成编译器友好的形式,他就快了 286 倍 —— 算法一个字没改。」

第六处同形:先让台下觉得这是个无关紧要的工程调整,再摔。 (6.2 / 6.3 / 7.3 / 8.1 / 8.3,这是第六次。) ⭐ 这一处的错答案是「改个常数而已」—— 它看起来太像一句小事了, 所以反转特别有力。

「但真正值得记住的不是那个 286。是下面这一条。
⭐ 先提醒一句:下面这件事听起来像个无关紧要的工程调整 ——  改个常数而已。」

为了对齐芯片里那块矩阵乘单元的形状, 他不得不把论文里的块大小从 32 改成 64。而他自己写道:这可能会完全改变训练动态 ——  块大了,挑中的那一块里会夹进更多无关的东西,模型在『大海捞针』这类细活上可能会变差。」

「⛔ 读懂这一条,今天那条暗线就走完了全程 ——  注意它管的事,一路在往「模型聪不聪明」靠:
第二章,硬件决定了用哪个公式
第四章,硬件决定了一个超参(八组,因为一台机器装八张卡);
第五章,硬件否决了一个漂亮的数学(压缩件不按头分,多卡切不开);
第六章,硬件决定了怎么挑(散着取不行,只能整块取);
到这里,硬件直接改了训练动态 ——  而它改的那个数,会影响模型聪不聪明。

「⭐⭐ 各位看这条线的走向:它是一路往上爬的。
一开始,它只管用哪个公式
到最后 —— 它管到了模型的智商。

🖥 屏幕:9.5 滚到 fig3-gun先别讲,先问。

「开场我请你猜一个数。现在揭晓 —— 这五百多倍里, 前面那一大段,全是『把每一个 token 变便宜』换来的。
末尾只露出很小的一截。

这一截要老实交代,别说成「这就是硬件的功劳」。 它是前两段除完剩下的 —— 本课没有单独查过它

「⭐ 说清楚一点:末尾这一截,是前面两段除完之后剩下的, 我并没有单独去查它。
它里面至少还混着两样今天没讲的东西 ——  一是 KV 用更低的精度存(今天各家默认就这么干,光这一项就近乎再减半), 二是前缀复用
⭐⭐ 所以真把那两样拆出来,属于「多买硬件」的那一份只会更小 ——  而这让今天这个结论更硬,不是更软。

⚠️ 务必补一句口径:「⛔ 这两根条不是一本账,别加起来 ——  上面量的是『一个 token 占多少』,下面量的是『一步要读多少』。」

🖥 屏幕:9.6 滚回第零章那张 fig3-chronicle, 整张投,作为结束画面停在那儿

⭐⭐⭐ 这是全讲唯一一次「同一张图投两遍」,而且是刻意的。 开场投它的时候,它是领土 —— 这八年真实发生过什么,你一个名字都不认识。
现在投它,它是成绩单 —— 同样一张图,你已经读得懂了。
⛔ 所以开场那句「请记住你此刻看它的感觉」必须说过, 这一下才收得回来;没埋那句,这里就只是「再看一张老图」。

⭐⭐ 这里要逐条点名,不要笼统说「那几条支线你都懂了」。 —— 空口说「你变了」,是让台下自己举证;点名才是把证据摆给他。 教材 9.6 就是逐条点的,讲稿要跟上。

「现在请各位跟我回到开场那张图。
两小时前它是一团噪音。现在我们从上往下数一遍 ——」

「最上面那条灰的,是那个盒子,和 2014 年挂在它身上的那个配件;
蓝色那一条,是第四、五章:让每一份更小
橙色那一条,是第六章:每步只读一部分
紫色那一条,是第七章:换回一块固定大小的板子
最底下那三行公司,是第八章:同一批旋钮,各拧各的。」

「⭐ 那张图一个像素都没变。变的是你。

「最后一句。
2017 年那一刀做的是一笔交易:用平方的计算量,买来完全的并行度。
而从那以后到今天,整个行业都在把那笔交易往回赎 —— 但不能把并行度还回去。

「砍头、压成压缩件、只读一部分 —— 赎回的是那个平方项前面的系数
线性注意力要赎的是那个平方本身,代价是把串行请了回来;
于是分块并行又出现了 —— 为了把并行度再找回来。一个完整的圆。

「所以今天从头到尾其实只讲了一件事:三十年里,人们一直在同一个三角里挪动 ——  记得住、算得快、付得起。哪一角都不能真的放手。

⭐⭐⭐ 最后这一句是全讲真正的收尾,念完就停,别再补任何话。 —— 真正走完一圈的不是那张图,是第一章那个盒子。

「⭐ 不过真正走完一圈的,不是那张图。
是第一章那个盒子。
赎到最后,桌上摆着的东西跟 1990 年那个盒子只差一处 ——  它是个矩阵,而且会擦。
就这一处差别,撑了三十年。

⚠️ 这一节最容易跑偏的地方 ⛔ 不要在 9.5 之前提前说答案 —— 那个悬念从开场挂到现在,值钱。
⚠️ 9.7 那份书单不要在台上念,说一句「课件最后有一份清单, 里面每一条我都标了今天哪一章欠了谁」就行。

🖥 本节主屏:课件 第九章 落到机器上 + 收尾 · 主图 fig3-gun

🚧 这份讲义还薄的地方

诚实记一下,免得下次开课时把它当成成品。

  • [ ] 没有课前题、也没有课后题。L300 那份有一道六十秒课后题, 这一份还没有 —— 而这条故事线其实很适合在第六章末尾问一句 「稀疏省显存吗」。
  • [ ] 时间表是估的,没真讲过。第一次讲完请按实际用时回来改这张表 —— ⛔ 过期的时间表比没有时间表更糟,它会让你在第四十分钟才发现只讲到一半。
  • [ ] 第八章 8.4 那一段还没找到讲法。「守恒的是比值还是层数」这个问题很好, 但它在口头上很难三十秒说清 —— 目前的写法是「时间紧就跳」,这是回避不是解决。

📌 想清楚一条就从这儿划掉一条,并把结论写进对应小节。 ⛔ 别在课件里回答这些 —— 课件只呈现结论,不呈现「我们当时在纠结什么」。