SICI · 蕴灵宗 · 第十一章 · 结丹一层

注意力觉醒

Transformer架构 · 结丹一层

你以为注意力不过是加权平均。可在注意力殿堂,每个位置都要和所有位置算一次关系——Q/K/V 三把钥匙背后,藏着 n×n 的代价。注意力之渊在暗处立赌:你以为注意力无所不能,却不知 O(n²) 是它永恒的影子。

注意力之渊低语:「你觉得注意力是免费的?我赌你以为它免费。你每一次低估代价,我都会记下来。」
序章

注意力之门

架构之赌 · 长序列依赖 · 注意力全景

结丹期的殿堂浮在虚空里,门楣上刻着一行字——Attention Is All You Need——金漆剥落了一半。门内没有路,只有一张巨大的、空白的矩阵网格——n 行 n 列,每个格子都空着。高斯老祖站在网格下,手里握着三把发光的钥匙。

注意力殿堂,n×n矩阵网格与三把Q/K/V钥匙
高斯老祖 高斯老祖

「你在时序之河里证明过一件事——递推链上梯度会死。注意力绕过了那条链。但它有自己的代价。先告诉我——四种架构里,哪一种最适合处理长序列依赖?」

注意力之渊

「又来了一个觉得注意力免费的。打个赌——你选什么?RNN?CNN?我赌你低估了代价。你的每一次错误判断,我都会记进深渊账。」

架构之赌 · 长序列依赖预测挑战器

反直觉下注(四选一,可连错)→ 矩阵网格逐行点亮 → 注意力机制全景图

注意力之渊逼你下注:四种架构里,哪一种最适合处理长序列依赖?逐个点击。
详解 · K11-11 与 CNN/RNN 的对比

RNN/LSTM 靠递推链传信息:O(n) 序贯步不可并行,长程依赖在链上逐步衰减;CNN 只有局部感受野,要看距离 k 需堆 O(k) 层;Transformer 让任意两位置 O(1) 步直连、全序列并行——代价是 O(n²) 内存与计算。局限同样明确:注意力没有局部性、平移不变性等归纳偏置,一切靠数据学出来,小数据上往往不如 CNN。

第一幕 · 自信→崩塌 前奏

自注意力殿 · Q/K/V

Q=XW_Q · K=XW_K · V=XW_V · Attention=softmax(QK^T)V

殿中央悬浮着三块发光的变换矩阵碑——W_Q、W_K、W_V,旁边躺着一串输入向量 X。高斯老祖把三把钥匙递给你:「让每个位置自己决定'我要问什么'(Q)、'我能回答什么'(K)、'我手里有什么'(V)。然后让 Q 和 K 互相点乘——看看会发生什么。」

高斯老祖 高斯老祖

「RNN 靠递推传信息,CNN 靠卷积扫局部。注意力靠什么?靠让每个位置自己决定问什么、答什么、给什么。把 X 分别乘上这三块碑——然后让 Q 和 K 互相点乘。你算算那是多少次运算。」

注意力之渊

「点乘?好。n 个位置,每个都和其他 n 个点一次——你管这叫加权平均?我管这叫 n²。第一笔账,我先记着。」

自注意力计算器 · Q/K/V 矩阵推导 + 注意力热力图

输入3个词 → 可视化 Q/K/V 矩阵乘法 → softmax 归一化注意力权重热力图

输入序列 · 3 个词

Q / K / V 矩阵 · XW_Q / XW_K / XW_V

注意力权重热力图 · softmax(QK^T/√d_k)

详解 · K11-01 自注意力机制

三个可学习矩阵把输入映成三种角色:Q=XW_Q(我要问什么)、K=XW_K(我能回答什么)、V=XW_V(我携带什么信息)。Attention=softmax(QK^T/√d_k)V:QK^T 的第 (i,j) 个元素是位置 i 对位置 j 的匹配分,softmax 把每行归一化成权重,再对 V 加权求和即输出。每个位置一层之内直接看见所有位置——RNN 要走 n 步的全局感受野,注意力一步达成。

第一幕 · 精巧发现

缩放点积 · √d_k

Var(q·k)=d_k · softmax 饱和 · 梯度消失 · 缩放归一

缩放台上摆着一组滑块:d_k 维度旋钮。高斯老祖指着原始论文里的公式:「你写的是 softmax(QK^T)V,但论文写的是 softmax(QK^T/√d_k)V——多了个 √d_k。你觉得它多余?拧一下 d_k 试试,看你的 softmax 会变成什么。」

高斯老祖 高斯老祖

「假设 q、k 各分量独立、均值 0、方差 1,则 q·k=Σq_i·k_i 的方差是 d_k。d_k=64 时标准差 8,d_k=512 时标准差约 22.6。点积一大,softmax 就饱和——输出变成 one-hot,梯度归零。1/√d_k 不是装饰品。」

缩放因子实验台 · d_k 维度 + 不缩放vs缩放

滑动 d_k(16/64/128/512)→ 切换缩放/不缩放 → 看 softmax 分布与梯度热力图

d_k 维度旋钮 · 方差面板

缩放模式 · 不缩放 vs 缩放

softmax 分布可视化

梯度热力图 · 饱和即归零

详解 · K11-02 缩放点积注意力

设 q、k 各分量独立、均值 0、方差 1,则点积 q·k=Σᵢqᵢkᵢ 的方差恰好是 d_k——d_k=64 时 σ=8,d_k=512 时 σ≈22.6。logits 一大,softmax 就饱和成 one-hot:胜者通吃,且 p(1−p)→0 梯度消失。除以 √d_k 把方差归一到 1,是 softmax 的保险丝。这也是为何大模型改大 d_k 时必须同步审视缩放。

详解 · K11-12 Transformer 的训练策略

原论文两大暗器:标签平滑——把硬标签 0/1 软化为 ε/|V| 与 1−ε 的混合,防止模型对预测过度自信,提升泛化与 BLEU;学习率热身——前 warmup 步线性升温、之后按步数平方根倒数衰减,因为训练初期注意力 logits 尺度未稳,大学习率会直接冲散参数。现代大模型沿用此道(warmup+cosine 衰减)至今。

第一幕 · 第一崩塌

维度爆炸 · O(n²)之壁

序列长度 512→8192 · 显存指数增长 · n×n 空间复杂度

缩放台之后是一条狭长的回廊,回廊尽头是一面巨大的空白矩阵墙。高斯老祖把序列长度旋钮从 512 拧到 8192——墙上瞬间浮现出无数格子,显存计数器从 0.4GB 跳到 103GB。注意力之渊的声音从墙后传来:「翻倍序列,翻四倍计算。你亲手拧的。」

高斯老祖 高斯老祖

「自注意力的代价不在线性增长——在平方增长。注意力矩阵本身有 n² 个元素,n=4096 时就是 1600 万个。序列翻倍,注意力矩阵翻四倍。这不是工程问题,是数学问题。」

注意力之渊

「你以为注意力是免费的?在山门你说过'全部'。每一个'全部'都是我的一块砖。第一笔深渊账,我正式开立——n=8192,8 头 24 层仅注意力分数就要 103GB。你的 GPU 炸了。」

O(n²)之壁 · 序列长度旋钮 + 显存/计算双曲线

拖序列长度 512→8192 → 看显存平方增长 → 看注意力矩阵 n×n 膨胀

序列长度旋钮 · n

512

显存 / 计算量双曲线 · 平方增长

注意力矩阵尺寸 · n×n

详解 · K11-10 Transformer 的计算复杂度

自注意力的 FLOPs 主要在两次矩阵乘:QK^T 与 权重×V,各 O(n²d),合计 O(n²d);空间 O(n²) 存注意力矩阵。对比 RNN 的 O(nd²):当 d>n 时自注意力 FLOPs 反而更少——所以短序列时代 n² 不是瓶颈;序列一旦拉长(文档、代码、基因),n²d 与 n² 内存便双双撞墙。KV cache 让推理省重算,却让显存随长度线性膨胀。

第二幕 · 掌控感攀升

多头注意力 · 子空间

8 头并行 · 句法/语义/位置/共指 · h×d_k=d_model 参数守恒

多头殿中央悬浮着一面棱镜——一束白光射入,被拆成 8 道不同颜色的光。高斯老祖:「一个注意力头,是一种'看'的方式。但一句话里,'看'的方式不止一种——有的头看语法结构,有的看语义关联,有的看指代消解。把 d_model 拆成 8 份,每份跑一个独立的注意力。」

高斯老祖 高斯老祖

「多头不是'算更多',是'看更多角度'。同一个 d_model,单头是一个 512 维视角,多头是 8 个 64 维视角的并行——总参数不变(h×d_k=d_model),但子空间的多样性让模型同时捕获不同类型的关系。」

多头注意力可视化器 · 8 头热力图 + 模式归类

点击 8 个头 → 看各自的注意力模式 → 归类句法/语义/位置/共指

8 个注意力头 · 点击查看模式

注意力热力图 · 当前头

参数对比 · 单头 vs 多头

详解 · K11-03 多头注意力

MultiHead:把 d_model 拆成 h 个 d_k=d_model/h 的子空间,每个头在自己的子空间里独立做注意力,拼接后过 W_O 融合。h×d_k=d_model 保证总参数与单头几乎相同——多头不是"算更多",而是"从更多角度看":不同头分别捕获句法依存、语义关联、位置邻近、共指消解等不同关系,单头被迫平均掉的模式被分拆保留。

详解 · K11-13 注意力可视化研究

Clark 2019 对 BERT 144 个头逐头可视化发现:大量头盯住 [SEP] 等分隔符(疑似"无操作"占位),有的头专司指代、有的专司相邻位置,模式高度可解释。Voita 2019 进一步证明:大部分头可被剪枝而性能几乎不掉——多头存在显著冗余,但少数关键头(句法/指代头)剪掉即崩。这解释了"8 头够看、16 头常浪费"的工程经验。

第二幕 · 第二崩塌 前奏

位置编码 · 顺序之锚

排列不变性 · 正弦编码 · RoPE · ALiBi · 距离衰减

位置钟楼里悬着一口大钟,钟面刻着 sin 和 cos 的纹路。高斯老祖让你把输入序列打乱——注意力输出竟然完全不变。「你的注意力能看见所有位置。但它——分不清位置。注意力是排列不变的,它不知道谁在前谁在后。」

高斯老祖 高斯老祖

「打乱顺序,输出不变——多公平,公平到它根本不知道'第一个'和'最后一个'有什么区别。位置编码是把'顺序'这层信息重新缝回去。正弦用不同频率的波覆盖不同尺度,RoPE 把旋转缝进 Q/K 点积让相对位置自然涌现。」

注意力之渊

「不知道顺序?那它就是瞎子。你以为架构完整了?少了一半。第二笔账,记下——你以为注意力自带时序,它却没有。」

位置编码实验台 · 三方案对比 + 距离衰减

切换正弦/RoPE/ALiBi → 看位置编码矩阵 → 看距离衰减特性

位置编码方案 · 三选

位置编码矩阵 · 可视化

距离衰减特性 · 相对位置感知

排列不变性验证 · 打乱顺序输出不变

详解 · K11-04 正弦位置编码的设计动机

PE(pos,2i)=sin(pos/10000^(2i/d))、PE(pos,2i+1)=cos(…)。三条设计动机:①不同频率的正弦波覆盖从近到远的不同距离尺度,类似二进制位的进位;②对任意固定偏移 k,PE(pos+k) 是 PE(pos) 的线性变换——相对位置信息可被线性层直接利用;③值域有界、函数连续,理论上可外推到未见过的位置。无需训练、零参数。

详解 · K11-05 位置编码演进:RoPE / ALiBi

RoPE(旋转位置编码):按位置把 Q/K 的二维子空间逐对旋转 θ=pos·base^(−2i/d),旋转后 QK^T 点积天然只含相对位置 m−n——相对位置"涌现"而非缝补,外推稳健,LLaMA 系标配。ALiBi 更极简:不给词元加任何编码,直接在注意力分数上加 −m·|i−j| 的线性偏置(每个头斜率 m 不同),惩罚远距离——训练 1024、推理 4096 仍稳,实现只有一行。

第二幕 · 架构组装

编码器 · 解码器 · 完整架构

组件拼装 · 掩码自注意力 · 交叉注意力 · Add&Norm · FFN

编码殿的墙上刻着一行字:"Self-Attention + FFN + Residual + LayerNorm = One Encoder Layer"。解码殿的墙上有两扇窗——左窗"Masked Self-Attention",右窗"Cross-Attention"。高斯老祖:「编码器看输入,解码器生成输出。但生成时第 t 个词只能看到第 1 到 t 个词——这就是掩码。而交叉注意力,是解码器向编码器提问的唯一通道。」

高斯老祖 高斯老祖

「注意力负责'看见全局',FFN 负责'消化信息',残差负责'梯度活路',LayerNorm 负责'尺度稳定'。解码器还多两把钥匙——掩码自注意力保证因果性,交叉注意力让信息从编码器流向解码器。去掉任何一个,Transformer 都不是 Transformer。」

Transformer 架构组装器 · 拖拽拼装 + 编解码对比

拖拽组件拼装编码器层 → 对比解码器差异 → 掩码下三角可视化

组件碎片池 · 拖入装配区

编码器层装配区 · 按序拼装

解码器差异 · 掩码 + 交叉注意力

详解 · K11-06 Transformer 编码器

一层编码器 = Multi-Head Self-Attention → Add&Norm → FFN → Add&Norm。残差连接让梯度有高速路直达浅层(深堆叠不塌),LayerNorm 把激活尺度钉在稳定范围,FFN(d_model→4d_model→d_model 两层全连接)承担全模型约 2/3 的参数与非线性"消化"工作。编码器双向可见,输出的是上下文化表示。

详解 · K11-07 Transformer 解码器

解码器比编码器多两块:掩码自注意力——生成第 t 个词时只许看位置 1..t,保证自回归因果性;交叉注意力——Q 来自解码器、K/V 来自编码器最终输出,是信息从输入端流向输出端的唯一通道。GPT 系只保留掩码自注意力(decoder-only),靠大规模预训练证明生成即理解。

详解 · K11-08 完整前向传播流程

源序列 → 词嵌入+位置编码 → N 层编码器堆叠;目标序列右移一位 → 嵌入+位置编码 → N 层解码器(掩码自注意力 → Add&Norm → 交叉注意力 → Add&Norm → FFN → Add&Norm)→ 线性层映射到词表 → softmax 出分布。训练用 teacher forcing 全序列并行,推理逐词自回归——同一架构,两种节奏。

详解 · K11-09 注意力掩码

因果掩码:把上三角位置的分数置 −∞,softmax 后未来权重精确归零——训练时不偷看答案,推理才不会崩塌。填充掩码:把 pad 位置分数置 −∞,防止注意力质量被稀释到无意义的填充符上。前者保因果性,后者保有效长度——批量不等长序列训练的必备两件套。

第二幕 · 第二崩塌

长序列之壁 · 位置外推

超出训练长度 · 性能骤降 · 位置外推问题

你拼出了完整的 Transformer,正准备处理超长文本。高斯老祖把测试序列长度从 512 拉到 4096——性能曲线像被人从中间折断。注意力之渊完整现身,化作一面刻满公式的水晶之壁:「你以为拼出来就是终点?序列超过训练长度,你的位置编码就失效了。」

注意力之渊

「你训练时只见过 512。现在你要处理 4096——位置编码的外推性,你考虑过吗?学习式位置编码见过最大的位置就是 511,第 512 个位置它是瞎的。这就是位置外推问题。第三笔账,记下。」

高斯老祖 高斯老祖

「正弦位置编码理论上可外推(连续函数),但效果一般;学习式不可外推(超出训练范围即失效);RoPE 兼顾外推与效果;ALiBi 极简外推。位置外推是长序列的第二道墙——第一道是 O(n²) 计算量,第二道是位置外推。」

长序列之壁 · 训练长度 vs 测试长度 + 性能曲线

拖测试长度超过训练长度 → 看性能骤降 → 对比四种位置编码外推性

训练长度 / 测试长度 旋钮

512
512

性能曲线 · 超出训练长度即骤降

四种位置编码外推性对比

详解 · K11-16 架构对比:Mamba / RetNet / RWKV

破墙的另一条路是换骨架。RWKV 把注意力改写成 RNN 递推形式,训练可并行、推理 O(1) 每步;RetNet 的保留机制统一了并行训练/递推推理/分块循环三种形态;Mamba 用选择性状态空间模型(SSM)让递推参数随输入动态变化,线性复杂度下保留内容感知。它们在超长上下文持续挑战 Transformer,但生态、工具链与多任务通用性上 Transformer 仍是默认答案——注意力的疆界在谈判,不在崩塌。

第三幕 · 顿悟→突破 前奏

高效注意力 · 破壁之路

标准 / Linformer / Performer / FlashAttention · 复杂度对比

水晶之壁前,高斯老祖递给你四把新钥匙:「壁不会消失。但你可以穿过它。标准注意力 O(n²),Linformer 用低秩近似把 K/V 投影到低维,Performer 用核函数近似 softmax,FlashAttention 不减少计算而减少 GPU 读写显存的浪费——同样的注意力,O(n) 内存而非 O(n²)。」

高斯老祖 高斯老祖

「FlashAttention 是精确的——它不近似注意力,它优化的是 IO。把分块计算留在 SRAM 里,HBM 读写从 O(n²) 降到 O(n²/M)。Linformer 和 Performer 是近似——用低秩或核函数换线性复杂度,但牺牲精度。精确 vs 近似,是破壁的两条路。」

高效注意力对比器 · 四方案复杂度 + 性能

切换标准/Linformer/Performer/FlashAttention → 看时间空间复杂度 → 看精度

注意力方案 · 四选

时间 / 空间复杂度对比

方案详情 · 原理与权衡

详解 · K11-14 高效注意力变体

Linformer:假设注意力矩阵低秩,把 K/V 沿序列维投影 n→k,复杂度 O(nk);Performer:用随机正特征图近似 softmax 核,O(nd) 线性注意力。二者是"近似换线性"。FlashAttention 走另一条路:不改一个浮点运算,改数据流——分块载入 SRAM、在线 softmax 滚动重归一化,HBM 访问量从 O(n²) 降到 O(n²/M),精确无损,已成训练推理标配。稀疏注意力(Longformer/BigBird)则折中:局部滑窗+少量全局锚点,O(n·w)。

第三幕 · 最高潮

Boss 战 · 注意力之渊

三问对决 · 深渊账清算 · 排除刻痕收网

水晶壁从地面升起,遮蔽了整个视野——冰冷、透明,壁面上刻满了公式:n²、n²d、2n²dL。注意力之渊完整现身,它的声音没有情绪,像在陈述一条物理定律:「我是 O(n²)之壁。我不住在你的无知里。我住在你的注意力里。你每让一个位置看向另一个位置,我就长一块砖。三问。答错一题,我就厚一分。」

注意力之渊

「你说你的注意力无所不能——它不是。它有代价。证明给我看:你真的理解了注意力的代价,还是只会背一句'Attention Is All You Need'?你的刻痕不是耻辱,是你的排除法——每一条'此路不通',都在告诉你正确的路在哪里。」

深渊账累计 0 笔 · 三问全对后清零

第三幕 · 收束 · 结丹一层圆满

顿悟 · 注意力即一切

知识图谱点亮 · 应用全景 · 境界突破 结丹一层

壁散尽后,全景图重新亮起——但比之前更广阔。你看见 Transformer 的种子落入了无数领域,长成你未曾想象的形状。高斯老祖指着远方的地平线:「机器翻译、BERT、ViT、DETR、MoE——每一扇门背后,都是 Transformer 的一个变体。你穿过了壁。现在看看——你手里这把钥匙,打开了多少扇门。」

高斯老祖 高斯老祖

「你从加权平均的误解开始,推出 Q/K/V,发现 n×n,推导缩放因子,拆出多头子空间,补上位置编码,组装编码器与解码器,撞见 O(n²)之壁,又以 FlashAttention 破壁而出。注意力即一切——但'一切'背后是 n² 的代价。结丹一层·注意觉醒,你已圆满。但下一座山,是预训练与规模化——为什么 Transformer 越大就越强?」

顿悟 · 知识图谱点亮 + 应用全景 + 境界突破

点亮知识图谱碎片 → 展开应用全景 → 境界突破动画(结丹一层圆满)

知识图谱 · 注意力全链点亮

详解 · K11-15 应用:机器翻译与 BERT

机器翻译是 Transformer 的出生地:2017 年原论文在 WMT 英德/英法翻译上以质量与训练速度双杀 RNN 时代。BERT 随后只用编码器+掩码语言模型预训练,一举刷新 11 项 NLP 任务纪录——"预训练+微调"范式由此确立,NLP 进入大模型时代。

详解 · K11-17 Transformer 在 CV:ViT / DETR

ViT 把图像切成 16×16 的 patch 当作词元序列直送 Transformer,大数据预训练下反超 CNN,证明注意力是跨模态通用接口;DETR 用交叉注意力把目标检测改写为集合预测——可学习 query 直接向编码特征"提问",砍掉锚框与 NMS 后处理。CV 的卷积堡垒自此开门。

详解 · K11-18 混合专家 MoE 架构

MoE:每层放 N 个专家 FFN,门控路由器为每个词元选 top-k 个激活——参数量随专家数暴涨,单步计算量却近似不变(稀疏激活)。配套难题:负载均衡损失防止路由器"赢家通吃"塌缩到少数专家,专家并行通信成为系统瓶颈。容量与成本的解耦,是 MoE 对 Scaling Law 的回答。

详解 · K11-19 MoE 代表模型

Switch Transformer:路由简化到 top-1,首次把 MoE 推上万亿参数;Mixtral 8×7B:top-2 路由,约 13B 激活参数打平 70B 稠密模型,开源 MoE 的里程碑;DeepSeekMoE:细粒度专家切分+共享专家捕获通用知识,DeepSeek-V3 以 671B 总参、37B 激活达到一线水平——MoE 已成大模型扩参的主流路线。

交互实验

注意力权重

拖动查询向量,观察对各键 token 的注意力分布(softmax)。