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

Transformer架构 · 结丹一层

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

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

注意力之门

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

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

生成之炉,GAN对抗训练
高斯老祖 高斯老祖

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

注意力之渊

「又来了一个觉得注意力免费的。打个赌——你选什么?RNN?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)

第一幕 · 精巧发现

缩放点积 · √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 分布可视化

梯度热力图 · 饱和即归零

第一幕 · 第一崩塌

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

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

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

高斯老祖 高斯老祖

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

注意力之渊

「你以为注意力是免费的?在山门你说过'全部'。每一个'全部'都是我的一块砖。第一笔深渊账,我正式开立——n=8192,显存 128GB。你的 GPU 炸了。」

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

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

序列长度旋钮 · n

512

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

注意力矩阵尺寸 · n×n

第二幕 · 掌控感攀升

多头注意力 · 子空间

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

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

高斯老祖 高斯老祖

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

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

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

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

注意力热力图 · 当前头

参数对比 · 单头 vs 多头

第二幕 · 第二崩塌 前奏

位置编码 · 顺序之锚

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

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

高斯老祖 高斯老祖

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

注意力之渊

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

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

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

位置编码方案 · 三选

位置编码矩阵 · 可视化

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

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

第二幕 · 架构组装

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

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

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

高斯老祖 高斯老祖

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

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

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

组件碎片池 · 拖入装配区

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

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

第二幕 · 第二崩塌

长序列之壁 · 位置外推

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

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

注意力之渊

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

高斯老祖 高斯老祖

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

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

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

训练长度 / 测试长度 旋钮

512
512

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

四种位置编码外推性对比

第三幕 · 顿悟→突破 前奏

高效注意力 · 破壁之路

标准 / 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 → 看时间空间复杂度 → 看精度

注意力方案 · 四选

时间 / 空间复杂度对比

方案详情 · 原理与权衡

第三幕 · 最高潮

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 越大就越强?」

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

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

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