From 252e7d6b639ae8a040ec982612a13362719c5a97 Mon Sep 17 00:00:00 2001 From: wuyang <5700876+banisherwy@user.noreply.gitee.com> Date: Wed, 29 Jul 2026 05:26:59 +0800 Subject: [PATCH] feat: deepen attention and transformer chapter --- PROGRESS.md | 15 +- README.md | 4 +- ROADMAP.md | 8 +- package.json | 3 +- research/TRANSFORMER_GROK_LEADS.md | 91 + research/TRANSFORMER_RESEARCH.md | 182 ++ scripts/check-data-browser.mjs | 8 +- scripts/check-moe-browser.mjs | 2 +- scripts/check-numerics-browser.mjs | 8 +- scripts/check-reasoning-browser.mjs | 2 +- scripts/check-scaling-browser.mjs | 6 +- scripts/check-training-systems-browser.mjs | 2 +- scripts/check-transformer-browser.mjs | 251 +++ src/components/AttentionLab.astro | 980 +++++++-- src/components/SiteFooter.astro | 2 +- src/data/chapters.ts | 8 +- src/data/papers.ts | 88 + src/pages/foundations/index.astro | 2096 +++++++++++++++----- src/pages/index.astro | 29 +- src/pages/progress/index.astro | 12 +- 20 files changed, 3131 insertions(+), 666 deletions(-) create mode 100644 research/TRANSFORMER_GROK_LEADS.md create mode 100644 research/TRANSFORMER_RESEARCH.md create mode 100644 scripts/check-transformer-browser.mjs diff --git a/PROGRESS.md b/PROGRESS.md index af693e8..794acfd 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -10,7 +10,7 @@ | 网站设计系统 | 进行中 | 89% | 打印样式与更多通用可视化组件 | | Kimi K3 深读 | 进行中 | 66% | 扩写 pre-training / infra 逐图笔记 | | 语言模型前史 | 完成首版 | 78% | Kneser–Ney、LSTM、Bahdanau 逐图精读与真实小语料复现 | -| Transformer 基础 | 进行中 | 52% | 矩阵形状动画与手算练习 | +| Transformer 基础 | 完成首版 | 79% | 多头电路、归一化 traces 与真实 kernel / KV 配置 | | Scaling Laws | 完成首版 | 74% | 真实拟合复现、置信区间与更多模型族对照 | | 数据工程与预训练配方 | 完成首版 | 73% | FineWeb / DCLM 逐图精读、真实去重误伤与 mixture traces | | DeepSeek 专题 | 进行中 | 71% | 补 R1 / DAPO 的逐图训练轨迹与复现对照 | @@ -32,10 +32,10 @@ - [x] 提炼参考网站的编辑设计语言。 - [x] 确认 `git.k1412.top` 为 Gitea/Forgejo 兼容服务且本机 HTTPS 凭据可用于既有仓库。 - [x] 使用 Grok CLI 检索并形成约 95 篇一手论文的补充路线,主代理已回查关键来源。 -- [x] 完成 247 篇关键论文索引,覆盖 14 个标签专题与 Kimi/DeepSeek 聚光主线。 +- [x] 完成 258 篇关键论文索引,覆盖 14 个标签专题与 Kimi/DeepSeek 聚光主线。 - [x] 完成可检索、可按专题筛选的论文库页面。 - [x] 完成 K3、语言模型前史、Transformer 基础、DeepSeek 谱系、Scaling Laws、数据工程、长上下文、MoE、推理、训练系统与数值优化十一篇首版长文。 -- [x] 完成 K3 三轴架构、语言模型前史四联实验、Self-Attention、DeepSeek 谱系、长上下文、MoE 路由、推理三页签,以及训练系统、Scaling、数据工程与数值专题各四页签等二十八个原创交互视图。 +- [x] 完成 K3 三轴架构、语言模型前史四联实验、Transformer 四联实验、DeepSeek 谱系、长上下文、MoE 路由、推理三页签,以及训练系统、Scaling、数据工程与数值专题各四页签等三十一个原创交互视图。 - [x] 完成长上下文首版:五张成本账、26 篇一手论文、10+ 机制图与 8 策略交互实验室。 - [x] 核验 FlashAttention、DeepSeek-V2/V3.2/V4、Kimi Linear/K3 等六份论文原文,并建立长上下文研究账本。 - [x] 核验 Switch、ST-MoE、DeepSeekMoE、Loss-Free、V3、LatentMoE 与 K3 原文,并建立 MoE 研究账本。 @@ -85,9 +85,15 @@ - [x] 论文库新增 24 个语言模型前史节点,从 223 篇扩充至 247 篇;DeepSeek-V3/V4 与 K3 补充「基础」映射。 - [x] 语言模型前史真实 Chrome 断言通过:零概率/平滑、one-hot 选择、指数记忆衰减、Attention 对齐、键盘 tabs 与 390px 移动端均正确响应。 - [x] 语言模型前史首版以源提交 `a54152d`、不可变镜像 `20260728T204916Z-a54152d` 发布;NAS、VPS/Tailscale、NPM、DNS、HTTPS、证书、15 路由、门户、公开 Forgejo 与七套生产 Chrome 回归全链路通过。 +- [x] 启动 Transformer 深度专题:以十张问题账拆开信息路径、匹配几何、可见性、多头、位置、局部计算、深度、架构目标、系统成本与当代映射。 +- [x] 使用 Grok Headless 扩展 50 个候选节点;候选元数据与过强归因永久隔离在 `TRANSFORMER_GROK_LEADS.md`。 +- [x] 建立 Transformer 正式研究账本:40 个节点、DeepSeek V2→V4 与 Kimi Linear→K3 双谱系、四实验合同与解释边界。 +- [x] 完成 Transformer 深度首版:21 段正文与 QKV—Mask—多头位置—Block 成本四联实验。 +- [x] 论文库补齐 Residual/Norm、相对位置、UniLM、多头冗余与解释争论等 11 个节点,从 247 篇扩充至 258 篇。 ## 正在进行 +- [ ] Transformer 二轮:多头电路逐图、Pre/Post-LN 真实 traces、Flash/KV kernel 与模型配置对照。 - [ ] 语言模型前史二轮:Kneser–Ney / LSTM / Bahdanau 逐图精读、真实小语料复现与 tokenizer 公平性案例。 - [ ] Scaling Laws 二轮精读:真实拟合复现、逐篇图表、置信区间、外推失败与更多模型族对照。 - [ ] 数据工程二轮:FineWeb / DCLM / Dolma / ROOTS 逐图精读、真实去重误伤、mixture traces 与污染案例。 @@ -145,6 +151,9 @@ | 2026-07-29 | K3 / DeepSeek 的 NTP、MTP、多模态与 draft 分角色记账 | 统一视觉/文本 next-token objective 不排斥 one MTP layer;MTP 与 speculative draft 都不写成取消自回归 | | 2026-07-29 | 论文库扩充到 247 篇 | 新增 Shannon 1951、Good、Katz、Kneser–Ney、LSTM、RNNLM、Seq2Seq 前夜与输出成本等 24 个一手节点 | | 2026-07-29 | 语言模型前史首版用不可变镜像 `20260728T204916Z-a54152d` 发布 | OCI digest `sha256:fb646aba…fe923`;复用 `12010→8080`、NPM host 31 / cert 41、门户 order 180 与公开 Forgejo | +| 2026-07-29 | Transformer 按十张问题账组织 | 不再把 QKV、Mask、位置、Norm、训练目标、KV Cache、Flash 与当代架构压成一个“Block” | +| 2026-07-29 | Attention 权重与因果解释永久分离 | 热力图只描述中间计算和提出假设;因果结论需要消融、patching 或反事实干预 | +| 2026-07-29 | 论文库扩充到 258 篇 | 新增 Residual/Norm、relative position、UniLM、多头冗余、解释争论与 NormFormer 等 11 个节点 | ## 未决问题 diff --git a/README.md b/README.md index 415205d..0b54ba8 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,9 @@ - 持续进度:[PROGRESS.md](./PROGRESS.md) - 证据与写作规范:[research/METHODOLOGY.md](./research/METHODOLOGY.md) -当前里程碑包含 16 专题学习地图、247 篇关键论文索引、Kimi K3 完整导读、 +当前里程碑包含 16 专题学习地图、258 篇关键论文索引、Kimi K3 完整导读、 语言模型前史、Transformer 基础、DeepSeek 技术谱系、Scaling Laws、数据工程、长上下文、MoE、推理、训练系统与数值优化深度专题, -以及 28 个覆盖核心机制的原创交互视图。 +以及 31 个覆盖核心机制的原创交互视图。 其余专题按进度账本持续扩建。 ## 本地开发 diff --git a/ROADMAP.md b/ROADMAP.md index e81a406..761ea58 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -33,7 +33,13 @@ one MTP layer 与 EAGLE-3 draft bridge,并与 DeepSeek-V3/V4 的顺序 MTP 对 ### 02. 注意力与 Transformer -Bahdanau Attention → Self-Attention → Transformer → decoder-only GPT。逐项拆解 Q/K/V、因果掩码、多头、残差、归一化、FFN。 +Bahdanau Attention → Self-Attention → 原始 encoder–decoder Transformer → BERT/GPT/T5 家族 → +KV/IO 效率 → DeepSeek MLA/CSA-HCA 与 Kimi KDA/AttnRes。逐项拆解 Q/K/V、缩放、Mask、 +多头、位置、Residual/Norm、FFN/MoE、训练目标与推理状态。 + +首版已发布:十张独立问题账、40 个正式一手节点、21 段正文,以及 QKV 手算、Mask 矩阵、 +多头/位置、Block/KV 成本四个独立实验。正文明确区分 2017 原作与 decoder-only LLM, +也把 Attention 权重观察与因果解释永久分开。 ### 03. 表示层、位置与残差高速公路 diff --git a/package.json b/package.json index 6a884d6..821fc5d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "check:scaling-browser": "node scripts/check-scaling-browser.mjs", "check:data-browser": "node scripts/check-data-browser.mjs", "check:numerics-browser": "node scripts/check-numerics-browser.mjs", - "check:language-model-history-browser": "node scripts/check-language-model-history-browser.mjs" + "check:language-model-history-browser": "node scripts/check-language-model-history-browser.mjs", + "check:transformer-browser": "node scripts/check-transformer-browser.mjs" }, "dependencies": { "@astrojs/sitemap": "3.7.3", diff --git a/research/TRANSFORMER_GROK_LEADS.md b/research/TRANSFORMER_GROK_LEADS.md new file mode 100644 index 0000000..8b65b9a --- /dev/null +++ b/research/TRANSFORMER_GROK_LEADS.md @@ -0,0 +1,91 @@ +# Attention / Transformer:Grok 候选线索 + +> 状态:**未核验发现队列,不是正式证据。** +> +> 生成方式:2026-07-29 使用本机 Grok CLI Headless 检索;主代理只保留可回查的候选节点,正文、数字、年份和归因不得直接引用本文件。 + +## Grok 建议的十张问题账 + +1. 信息路径与可微检索:固定向量瓶颈怎样变成按需读取。 +2. Q / K / V 匹配几何:加性打分、点积、缩放与 softmax。 +3. 信息可见性:encoder self-attention、causal self-attention、cross-attention 与 prefix mask。 +4. Multi-Head:多子空间表达、头冗余与后验电路分析。 +5. 位置:绝对、相对、RoPE、ALiBi 与跨段记忆。 +6. 局部计算:FFN、GLU、SwiGLU 与 MoE。 +7. 深度路径:Residual、LayerNorm、Pre/Post-Norm、RMSNorm 与 AttnRes。 +8. 架构与目标:encoder-only、decoder-only、encoder–decoder、MLM、causal LM、span corruption。 +9. 系统成本:训练并行、Attention IO、KV Cache、MQA / GQA。 +10. 当代映射:DeepSeek MLA / MTP / CSA-HCA 与 Kimi KDA / Gated MLA / AttnRes。 + +## 候选节点(进入正式账本前必须回到原文) + +### 信息路径 + +- Bahdanau et al. — *Neural Machine Translation by Jointly Learning to Align and Translate* +- Luong et al. — *Effective Approaches to Attention-based Neural Machine Translation* +- Graves et al. — *Neural Turing Machines* +- Sukhbaatar et al. — *End-To-End Memory Networks* +- Xu et al. — *Show, Attend and Tell* +- Vinyals et al. — *Pointer Networks* + +### QKV、Mask 与架构家族 + +- Vaswani et al. — *Attention Is All You Need* +- Radford et al. — GPT-1 / GPT-2 technical reports +- Devlin et al. — BERT +- Raffel et al. — T5 +- Dong et al. — UniLM +- Child et al. — Sparse Transformer + +### 多头与解释边界 + +- Michel et al. — *Are Sixteen Heads Really Better than One?* +- Clark et al. — *What Does BERT Look at?* +- Voita et al. — *Analyzing Multi-Head Self-Attention* +- Jain & Wallace — *Attention is not Explanation* +- Wiegreffe & Pinter — *Attention is not not Explanation* +- Elhage et al. — *A Mathematical Framework for Transformer Circuits* + +### 位置 + +- Shaw et al. — relative position representations +- Dai et al. — Transformer-XL +- Su et al. — RoFormer / RoPE +- Press et al. — ALiBi + +### FFN、残差与归一化 + +- He et al. — ResNet +- Ba et al. — Layer Normalization +- Xiong et al. — Pre-LN / Post-LN analysis +- Zhang & Sennrich — RMSNorm +- Dauphin et al. — GLU +- Shazeer — GLU Variants / SwiGLU +- Shazeer et al. — sparsely-gated MoE +- Fedus et al. — Switch Transformer + +### 系统效率 + +- Shazeer — Multi-Query Attention +- Ainslie et al. — Grouped-Query Attention +- Dao et al. — FlashAttention / FlashAttention-2 +- Shoeybi et al. — Megatron-LM +- Rajbhandari et al. — ZeRO + +### DeepSeek / Kimi + +- DeepSeek-V2 — MLA + DeepSeekMoE +- DeepSeek-V3 — MLA + MTP + auxiliary-loss-free balancing +- DeepSeek-V4 — CSA / HCA + mHC +- Kimi Linear — KDA + MLA hybrid +- Attention Residuals — Full / Block AttnRes +- Kimi K3 — 3:1 KDA / Gated MLA + AttnRes + Stable LatentMoE + +## 明确拒绝直接采信的 Grok 表述 + +- “Attention 权重就是解释”:只可作为一个中间变量或诊断线索,不能自动升级为因果归因。 +- “Transformer 就是 GPT”:原始论文是 encoder–decoder 机器翻译系统。 +- “FlashAttention 把 Attention 变成线性复杂度”:FlashAttention 是 IO-aware 的精确实现,数学上的稠密注意力仍是二次计算。 +- “MQA / GQA / MLA 是同一种方法”:它们都影响 KV 成本,但共享、分组与低秩潜变量压缩是不同机制。 +- “KDA 已全面取代 softmax attention”:Kimi Linear / K3 使用混合层;结论限定于报告实验设置。 +- “DeepSeek MTP 一定用于多 Token 推理”:V3 明确说推理可丢弃 MTP 模块,也可把它用于 speculative decoding。 diff --git a/research/TRANSFORMER_RESEARCH.md b/research/TRANSFORMER_RESEARCH.md new file mode 100644 index 0000000..eeede67 --- /dev/null +++ b/research/TRANSFORMER_RESEARCH.md @@ -0,0 +1,182 @@ +# 第 02 章研究账本:注意力与 Transformer + +> 核验截止:2026-07-29(Asia/Shanghai) +> +> 原则:只把原论文、正式会议页、作者技术报告与官方实现写入事实层。下文的“教学映射”是本站重组,不冒充论文原话。 + +## 0. 本章边界 + +本章回答的是“Transformer 这个计算骨架如何出现、如何工作、又怎样演化为现代 LLM block”。它与其他章节的边界如下: + +- 第 01 章负责 N-gram → NPLM → RNN/LSTM → Seq2Seq 的完整前史。 +- 第 03 章继续深入 Tokenizer、位置、表示与跨深度路径。 +- 第 06 章完整解释 MoE 路由与专家并行。 +- 第 07 章完整解释长上下文、线性注意力、MLA / KDA 与缓存成本。 +- 第 08 章完整解释并行训练与通信。 +- 本章仍必须给出这些机制的“最小闭环”,否则读者无法看懂一个现代 block;但复杂实验数字不在这里无限展开。 + +## 1. 十张问题账 + +| 账 | 核心问题 | 最小结论 | +|---|---|---| +| 01 信息路径 | 怎样摆脱固定向量瓶颈? | 对每个输出位置按需读取一组源表示。 | +| 02 匹配几何 | Q、K、V 究竟在算什么? | 匹配特征与被搬运内容分离;缩放抑制高维点积的幅值增长。 | +| 03 可见性 | self / cross / causal 有何区别? | 本质是来源集合和 mask 不同。 | +| 04 多头 | 为什么要并行多组投影? | 增加不同表示子空间中的路由容量,但不保证每头有单一人类语义。 | +| 05 位置 | Attention 为什么需要位置? | 无位置项时,算子本身不知道序列次序。 | +| 06 局部计算 | Attention 之后为什么还要 FFN? | Attention 跨位置混合;FFN / MoE 在每个位置做共享非线性加工。 | +| 07 深度 | 怎样堆到几十上百层? | Residual 提供加法捷径;Norm 位置改变优化行为。 | +| 08 架构与目标 | BERT、GPT、T5 为什么不同? | 可见性、组件拓扑和训练目标是三条相互关联但不等价的轴。 | +| 09 系统成本 | 同一公式为什么快慢差很多? | 训练、prefill、decode 的瓶颈不同;IO、缓存与并行实现必须单独记账。 | +| 10 当代映射 | DeepSeek / Kimi 改了哪一轴? | MLA 改 KV 表示,KDA 改序列状态,AttnRes / mHC 改深度路径,MTP 改训练信号。 | + +## 2. 已核验主干结论 + +### 2.1 从软对齐到 Self-Attention + +1. Bahdanau et al. 2014/ICLR 2015 明确把传统 encoder–decoder 的固定长度向量视为瓶颈,并让 decoder 每一步对源端表示做可学习的 soft search。来源:[arXiv 1409.0473](https://arxiv.org/abs/1409.0473)。 +2. Luong et al. 2015 系统比较 global / local attention 与 dot / general / concat 打分。它仍是 RNN NMT,不是 Transformer。来源:[arXiv 1508.04025](https://arxiv.org/abs/1508.04025)。 +3. Vaswani et al. 2017 的原始 Transformer 是 encoder–decoder 机器翻译架构,使用 encoder self-attention、masked decoder self-attention 与 encoder–decoder attention;论文主张以 attention 取代 recurrence / convolution,并强调训练并行性。来源:[NeurIPS 正式页](https://proceedings.neurips.cc/paper_files/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html)。 +4. 原论文在 WMT 2014 英德/英法翻译实验中报告 28.4 / 41.0 BLEU,并称其大模型在 8 个 P100 上训练 3.5 天;这些数字只属于论文设定,不能外推为现代 LLM 的通用速度结论。 + +### 2.2 Q / K / V、缩放与 Mask + +1. Scaled dot-product attention:`softmax(QKᵀ / √d_k)V`。原论文给出的动机是:若 Q、K 分量独立、均值 0、方差 1,则点积方差为 `d_k`;大幅值把 softmax 推向小梯度区,因此除以 `√d_k`。 +2. Q 与 K 决定“从哪里读”,V 决定“读回什么”。Q/K/V 是线性投影的计算角色,不是三份固定词义。 +3. Encoder self-attention 允许同一层的全部源位置互见;decoder self-attention 用 subsequent mask 阻止未来信息;cross-attention 的 Q 来自 decoder,K/V 来自 encoder。 +4. Causal mask 只规定信息可达性,不意味着模型的内部算法必然以人类的线性“思考步骤”运行。 + +### 2.3 Multi-Head 与解释边界 + +1. Vaswani et al. 的原始主张是:多头允许模型在不同位置、不同表示子空间共同关注信息。 +2. Michel et al. 2019 发现测试时移除相当比例的头通常不会显著损害性能,一些 self-attention 层甚至可减到单头;论文没有证明这些头在训练阶段毫无作用。来源:[NeurIPS 正式页](https://papers.neurips.cc/paper_files/paper/2019/hash/2c601ad9d2ff9bc8b282670cdd54f69f-Abstract.html)。 +3. Clark et al. 2019 在 BERT 中观察到分隔符、相对偏移、句法和共指等模式;这是后验分析,不是“每个头被指定一种语法功能”。来源:[ACL Anthology](https://aclanthology.org/W19-4828/)。 +4. Jain & Wallace 2019 展示 attention 权重与梯度型重要性可能不相关,并可构造不同权重却保持相近预测;Wiegreffe & Pinter 同年指出结论依赖“解释”的定义和测试方法。课程结论采用保守表述:**权重可用于观察与提出假设,但仅凭热力图不能证明因果归因。** 来源:[NAACL](https://aclanthology.org/N19-1357/)、[EMNLP](https://aclanthology.org/D19-1002/)。 + +### 2.4 位置 + +1. 原始 Transformer 把固定 sin/cos 位置编码与 embedding 相加;论文还测试 learned positional embedding。 +2. Shaw et al. 2018 把相对距离表示加入 self-attention,并在论文的 WMT 设置中优于只用绝对位置的基线。来源:[NAACL 正式页](https://aclanthology.org/N18-2074/)。 +3. Transformer-XL 用 segment-level recurrence 与新相对位置方案解决固定片段和 context fragmentation;论文的速度/依赖长度数字只属于其评测设置。来源:[ACL 正式页](https://aclanthology.org/P19-1285/)。 +4. RoPE 用旋转矩阵把绝对位置写进 Q/K,并使点积显式依赖相对位置。来源:[arXiv 2104.09864](https://arxiv.org/abs/2104.09864)。 +5. ALiBi 不把位置向量加到 embedding,而是给 attention logits 添加与距离成比例的惩罚;原文在 1.3B、训练长度 1024 / 测试 2048 等设置中验证外推。来源:[arXiv 2108.12409](https://arxiv.org/abs/2108.12409)。 + +### 2.5 FFN / GLU + +1. 原始 block 不只有 Attention:每个位置还经过共享的两层 FFN(ReLU)。 +2. GLU 的门控思想早于 Transformer。Shazeer 2020 在 Transformer FFN 中比较 GLU 变体,报告部分变体优于 ReLU / GELU;这是一组实验结论,不是“证明 SwiGLU 永远最优”。来源:[arXiv 2002.05202](https://arxiv.org/abs/2002.05202)。 +3. MoE 把局部 FFN 容量稀疏化;本章只画 token → router → experts 的最小路径,负载均衡和通信留到第 06 章。 + +### 2.6 Residual / Norm / Depth + +1. Residual shortcut 来自深度视觉网络。ResNet 的原始贡献是把层学习目标改写为残差映射,从而缓解深网优化退化;它不是 Transformer 发明。来源:[CVPR 正式页](https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html)。 +2. LayerNorm 在单个样本内按层输入统计量归一化,训练和测试计算一致,最初尤其强调对 RNN 的适配。来源:[arXiv 1607.06450](https://arxiv.org/abs/1607.06450)。 +3. 原始 Transformer 图与正文采用 Post-LN(残差相加后做 LayerNorm)。 +4. Xiong et al. 2020 以 mean-field 分析指出:初始化时 Post-LN 输出附近梯度较大,warm-up 有助稳定;Pre-LN 梯度更良好,其实验可在多项设置下去掉 warm-up。不能简化成“Pre-LN 在一切方面更优”。来源:[ICML / PMLR](https://proceedings.mlr.press/v119/xiong20b.html)。 +5. RMSNorm 去掉 re-centering,只按 RMS 做 re-scaling;原论文报告在多种模型上的可比性能与运行时间下降,但具体 7%–64% 依赖实验模型。来源:[NeurIPS 正式页](https://papers.neurips.cc/paper_files/paper/2019/hash/1e8a19426224ca89e83cef47f1e7f53b-Abstract.html)。 + +### 2.7 架构家族与目标 + +1. GPT-1 使用 Transformer decoder 做生成式预训练,再在监督任务微调;它把“decoder-only + causal LM + transfer”连成路线。来源:[OpenAI 原始 PDF](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)。 +2. BERT 是 Transformer encoder,目标是深度双向表示,原文采用 MLM + NSP;其贡献不是新 QKV 公式。来源:[arXiv 1810.04805](https://arxiv.org/abs/1810.04805)。 +3. T5 用 encoder–decoder,把任务统一为 text-to-text,并系统比较目标、架构、数据和迁移配方;不能把统一接口误写成“发明 encoder–decoder”。来源:[JMLR 正式页](https://jmlr.org/papers/v21/20-074.html)。 +4. UniLM 表明同一个 Transformer 可通过不同 self-attention mask 实现单向、双向与 seq2seq 目标。来源:[arXiv 1905.03197](https://arxiv.org/abs/1905.03197)。 +5. 架构拓扑、mask 和预训练目标必须分开画:decoder-only 常配 causal LM,但逻辑上它们不是同义词。 + +### 2.8 训练、Prefill、Decode 与 IO + +1. 训练用 teacher forcing,可在因果 mask 下并行计算全部位置的损失;生成时新 token 尚不存在,必须自回归逐步解码。 +2. KV Cache 用显存换重算:保留旧 token 的 K/V,不改变标准 attention 的数学输出。 +3. MQA 让多组 Q 头共享一组 K/V,论文直接把动机写成增量解码反复加载 K/V 的 memory-bandwidth cost。来源:[arXiv 1911.02150](https://arxiv.org/abs/1911.02150)。 +4. GQA 在 MHA 与 MQA 之间使用中间数量的 K/V heads,并提出以原训练计算量 5% uptrain checkpoint 的方案;论文报告质量接近 MHA、速度可比 MQA。来源:[EMNLP 正式页](https://aclanthology.org/2023.emnlp-main.298/)。 +5. FlashAttention 是 IO-aware 的**精确 attention**:分块并利用在线 softmax,减少 HBM 与片上 SRAM 间读写;不是稀疏近似,也没有改变稠密 attention 的数学定义。来源:[NeurIPS 正式页](https://proceedings.neurips.cc/paper/2022/hash/67d57c32e20fd0a7a302cb81d36e40d5-Abstract-Conference.html)。 +6. Megatron-LM 处理 intra-layer model parallel;它是训练系统切分,不是新的 attention 算子。来源:[arXiv 1909.08053](https://arxiv.org/abs/1909.08053)。 + +## 3. DeepSeek 重点谱系 + +### 3.1 DeepSeek-V2:MLA + +- 报告模型为 236B total / 21B active,128K context。 +- MLA 把每个 token 的 K/V 表示压进低维 latent,再按需上投影,缓存 latent 而非全部 head-specific K/V。 +- 报告声称相对 DeepSeek 67B:训练成本降 42.5%、KV Cache 降 93.3%、最大生成吞吐 5.76×。课程引用这些数字时必须带比较对象。 +- 来源:[arXiv 2405.04434](https://arxiv.org/abs/2405.04434),本地提取 `research/sources/long-context/2405.04434.txt`。 + +### 3.2 DeepSeek-V3:MLA 延续 + MTP + +- V3 继续采用 MLA 与 DeepSeekMoE。 +- MTP 使用顺序模块预测额外未来 token,增加训练信号;主目标仍然是 autoregressive next-token。 +- 报告 §2.2 明确:推理时可直接丢弃 MTP 模块,主模型独立运行;也可把模块用于 speculative decoding。 +- 来源:[arXiv 2412.19437](https://arxiv.org/abs/2412.19437),本地证据 `research/sources/moe/2412.19437.txt:534-602`。 + +### 3.3 DeepSeek-V4:CSA / HCA + mHC + +- V4 用 CSA 与 HCA 的混合稀疏/压缩 attention 面向 1M context;这不是单纯把 V3 的 MLA 改名。 +- 报告同时用 manifold-constrained hyper-connections(mHC)升级相邻层的 residual path。 +- 报告称 V4-Pro 在 1M context 的 single-token inference FLOPs / KV cache 分别为 V3.2 的 27% / 10%;V4-Flash 为 10% / 7%。这些是报告内比较,不能外推到不同服务栈。 +- 来源:[arXiv 2606.19348](https://arxiv.org/abs/2606.19348),本地证据 `research/sources/long-context/2606.19348.txt:14-26,178-212,473-483`。 + +## 4. Kimi K3 映射 + +1. K3 报告的 backbone 采用 3 个 KDA 层 + 1 个 Gated MLA 层的重复 block,另有额外 Gated MLA;不是纯线性 attention。证据:`research/sources/kimi-k3/k3_tech_report.txt:195-225`。 +2. KDA 是带 channel-wise forget gate 的 delta-rule recurrence;长序列解码维护固定大小 recurrent state,区别于随序列增长的 softmax KV Cache。证据:同文件 `:230-256,1161-1177`。 +3. K3 的 Gated MLA 沿用 DeepSeek-V2 的 latent KV compression,并增加 input-dependent channel-wise output gate;报告还说明 MLA 层使用 NoPE,而 KDA 提供位置敏感、recency-aware 的混合。证据:`:352-370`。 +4. AttnRes 让当前层以 learned pseudo-query 对先前深度表示做选择性聚合;Block AttnRes 降低内存/通信开销。证据:`:377-401`;独立报告:[arXiv 2603.15031](https://arxiv.org/abs/2603.15031)。 +5. 每个 attention layer 后接 Stable LatentMoE;额外 RMSNorm 与 SiTU-GLU 用于稳定潜空间与抑制大激活。证据:`:421-501`。 +6. 课程问题轴: + - KDA:序列长度上的有限状态更新。 + - Gated MLA:周期性全局 token-to-token 交互与压缩缓存。 + - AttnRes:网络深度上的选择性信息路由。 + - Stable LatentMoE:模型宽度上的稀疏局部计算。 + +## 5. 正式论文链(40 个教学节点) + +| # | 年 | 节点 | 主账 | 本章一句话 | +|---:|---:|---|---|---| +| 01 | 2014 | Bahdanau Attention | 信息路径 | 每个输出步按需软读取源表示。 | +| 02 | 2015 | Luong Attention | 匹配几何 | global/local 与多种 score 形成可比较设计空间。 | +| 03 | 2015 | Pointer Networks | 信息路径 | 权重本身也可成为指向输入位置的输出分布。 | +| 04 | 2016 | ResNet | 深度 | 残差加法高速公路的直接前史。 | +| 05 | 2016 | LayerNorm | 深度 | 单样本内按特征归一化。 | +| 06 | 2017 | GLU | 局部计算 | 门控前馈的前史。 | +| 07 | 2017 | Attention Is All You Need | 全局 | encoder–decoder 的全 attention 机器翻译系统。 | +| 08 | 2018 | GPT-1 | 架构目标 | decoder-only 生成预训练 + 迁移。 | +| 09 | 2018 | BERT | 架构目标 | encoder-only 双向 MLM 预训练。 | +| 10 | 2018 | Relative Position | 位置 | 相对距离进入 self-attention。 | +| 11 | 2019 | Transformer-XL | 位置/长程 | 跨段 recurrence + 相对位置。 | +| 12 | 2019 | GPT-2 | 架构目标 | decoder-only causal LM 的零样本扩展。 | +| 13 | 2019 | T5 | 架构目标 | encoder–decoder + text-to-text + span corruption。 | +| 14 | 2019 | UniLM | Mask | 用 mask 统一单向、双向、seq2seq。 | +| 15 | 2019 | RMSNorm | 深度 | 去均值中心化的归一化。 | +| 16 | 2019 | MQA | 系统 | 多 Q 头共享一组 K/V。 | +| 17 | 2019 | Sixteen Heads? | 多头 | 测试时头存在显著可剪枝冗余。 | +| 18 | 2019 | What Does BERT Look At? | 多头 | 观察头模式,但不把观察升级为因果。 | +| 19 | 2019 | Attention is not Explanation | 边界 | 权重不能自动作为解释。 | +| 20 | 2019 | Attention is not not Explanation | 边界 | 解释定义与测试协议也需明确。 | +| 21 | 2019 | Megatron-LM | 系统 | 层内张量并行支撑更大 Transformer。 | +| 22 | 2020 | Pre-LN analysis | 深度 | Norm 位置改变初始化梯度与 warm-up 需求。 | +| 23 | 2020 | GLU Variants | 局部计算 | GEGLU / SwiGLU 等进入 Transformer FFN。 | +| 24 | 2020 | GPT-3 | 架构目标 | causal decoder + scale 形成 in-context 接口。 | +| 25 | 2020 | Query-Key Normalization | 匹配几何 | 显式控制 Q/K 尺度。 | +| 26 | 2021 | RoPE | 位置 | 旋转 Q/K 表达相对位置。 | +| 27 | 2021 | ALiBi | 位置 | 直接给 logits 加距离偏置。 | +| 28 | 2021 | NormFormer | 深度 | 在 block 内增加归一化改善梯度尺度。 | +| 29 | 2022 | DeepNet | 深度 | 深层 Post-LN 的稳定缩放路线。 | +| 30 | 2022 | FlashAttention | 系统 | 不写出完整矩阵的 IO-aware 精确实现。 | +| 31 | 2023 | LLaMA | 现代配方 | Pre-Norm RMSNorm + SwiGLU + RoPE 的代表组合。 | +| 32 | 2023 | GQA | 系统 | MHA 与 MQA 之间的 K/V head 折中。 | +| 33 | 2023 | FlashAttention-2 | 系统 | 改进并行和任务划分。 | +| 34 | 2024 | DeepSeek-V2 | DeepSeek | MLA 压缩 KV latent。 | +| 35 | 2024 | DeepSeek-V3 | DeepSeek | 延续 MLA,并加入 MTP 训练目标。 | +| 36 | 2025 | Kimi Linear | Kimi | KDA 与 MLA 的 3:1 混合路线。 | +| 37 | 2025 | DeepSeek-V3.2 | DeepSeek | DSA 把稀疏索引带回 MLA 谱系。 | +| 38 | 2026 | Attention Residuals | Kimi | 在深度维选择先前层表示。 | +| 39 | 2026 | DeepSeek-V4 | DeepSeek | CSA/HCA + mHC 面向 1M context。 | +| 40 | 2026 | Kimi K3 | Kimi | KDA/Gated MLA + AttnRes + Stable LatentMoE。 | + +## 6. 页面交互验收目标 + +1. **QKV 手算台**:调 Q/K logits 与 `d_k`,逐步看到 scale → softmax → Value weighted sum。 +2. **Mask 矩阵台**:full / causal / cross / prefix 四种可见性,可点位置并读出允许来源。 +3. **多头与位置台**:切换 local / syntax-like / long-range 等教学头和 None / absolute / relative / RoPE / ALiBi,明确这是示意。 +4. **Block 与成本台**:Original Transformer / BERT / GPT / LLaMA / DeepSeek MLA / K3 hybrid;比较拓扑、Norm、FFN、KV 组织和训练/推理阶段。 +5. 所有实验必须支持键盘 tab、移动端无横向溢出,并把“教学模拟”与“论文事实”分开标注。 diff --git a/scripts/check-data-browser.mjs b/scripts/check-data-browser.mjs index a9c37c3..b55c01c 100644 --- a/scripts/check-data-browser.mjs +++ b/scripts/check-data-browser.mjs @@ -234,11 +234,11 @@ if (layout.navLinks !== 14 || mobile.mobileLinks !== 14 || home.navLinks !== 14) if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 8 || !home.firstRelease.includes("预测下一个 Token") || home.firstHref !== "/foundations/language-models/") { - failures.push("首页语言模型前史新章入口异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是") || home.firstHref !== "/foundations/") { + failures.push("首页 Transformer 新章入口异常"); } -if (home.paperCount !== "247") failures.push(`首页论文总数异常:${home.paperCount}`); -if (!papers.hasDataFilter || papers.total !== 247 || papers.visible < 25) failures.push("论文库数据标签或论文总数异常"); +if (home.paperCount !== "258") failures.push(`首页论文总数异常:${home.paperCount}`); +if (!papers.hasDataFilter || papers.total !== 258 || papers.visible < 25) failures.push("论文库数据标签或论文总数异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-moe-browser.mjs b/scripts/check-moe-browser.mjs index e353c73..9f434fc 100644 --- a/scripts/check-moe-browser.mjs +++ b/scripts/check-moe-browser.mjs @@ -177,7 +177,7 @@ if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentO } if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible) failures.push("移动端菜单按钮未显示"); -if (home.releaseCards !== 8) failures.push(`首页新章卡数量异常:${home.releaseCards}`); +if (home.releaseCards !== 9) failures.push(`首页新章卡数量异常:${home.releaseCards}`); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-numerics-browser.mjs b/scripts/check-numerics-browser.mjs index 63e6bcb..6cfc7e0 100644 --- a/scripts/check-numerics-browser.mjs +++ b/scripts/check-numerics-browser.mjs @@ -277,11 +277,11 @@ if (layout.navLinks !== 14 || mobile.mobileLinks !== 14 || home.navLinks !== 14) if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 8 || !home.firstRelease.includes("预测下一个 Token") || home.firstHref !== "/foundations/language-models/") { - failures.push("首页语言模型前史新章入口异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是") || home.firstHref !== "/foundations/") { + failures.push("首页 Transformer 新章入口异常"); } -if (home.paperCount !== "247") failures.push(`首页论文总数异常:${home.paperCount}`); -if (!papers.hasOptimizerFilter || papers.total !== 247 || papers.visible < 8) failures.push("论文库优化器标签或论文总数异常"); +if (home.paperCount !== "258") failures.push(`首页论文总数异常:${home.paperCount}`); +if (!papers.hasOptimizerFilter || papers.total !== 258 || papers.visible < 8) failures.push("论文库优化器标签或论文总数异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-reasoning-browser.mjs b/scripts/check-reasoning-browser.mjs index 620e411..101e8c1 100644 --- a/scripts/check-reasoning-browser.mjs +++ b/scripts/check-reasoning-browser.mjs @@ -289,7 +289,7 @@ if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentO } if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 8 || !home.firstRelease.includes("预测下一个 Token")) failures.push("首页语言模型前史新章入口异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是")) failures.push("首页 Transformer 新章入口异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-scaling-browser.mjs b/scripts/check-scaling-browser.mjs index 332beaf..06e13d0 100644 --- a/scripts/check-scaling-browser.mjs +++ b/scripts/check-scaling-browser.mjs @@ -273,10 +273,10 @@ if (layout.navLinks !== 14 || mobile.mobileLinks !== 14 || home.navLinks !== 14) if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 8 || !home.firstRelease.includes("预测下一个 Token") || home.firstHref !== "/foundations/language-models/") { - failures.push("首页语言模型前史新章入口异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是") || home.firstHref !== "/foundations/") { + failures.push("首页 Transformer 新章入口异常"); } -if (home.paperCount !== "247") failures.push(`首页论文总数异常:${home.paperCount}`); +if (home.paperCount !== "258") failures.push(`首页论文总数异常:${home.paperCount}`); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-training-systems-browser.mjs b/scripts/check-training-systems-browser.mjs index 3fdfb4f..061de43 100644 --- a/scripts/check-training-systems-browser.mjs +++ b/scripts/check-training-systems-browser.mjs @@ -233,7 +233,7 @@ if (layout.articleSections !== 16 || layout.paperLinks !== 37 || layout.labTabs if (layout.documentOverflow > 0 || mobile.documentOverflow > 0 || home.documentOverflow > 0) failures.push("页面存在横向溢出"); if (layout.navGap < 0) failures.push(`桌面导航碰撞:${layout.navGap}px`); if (!mobile.menuVisible || mobile.menuOpen !== "true") failures.push("移动端菜单不可用"); -if (home.releaseCards !== 8 || !home.firstRelease.includes("预测下一个 Token")) failures.push("首页语言模型前史新章入口异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是")) failures.push("首页 Transformer 新章入口异常"); if (exceptions.length) failures.push(`浏览器脚本异常:${exceptions.join("; ")}`); socket.close(); diff --git a/scripts/check-transformer-browser.mjs b/scripts/check-transformer-browser.mjs new file mode 100644 index 0000000..f65c276 --- /dev/null +++ b/scripts/check-transformer-browser.mjs @@ -0,0 +1,251 @@ +import { writeFileSync } from "node:fs"; + +const cdpPort = process.env.CDP_PORT ?? "9224"; +const baseUrl = process.env.SITE_URL ?? "http://127.0.0.1:4323"; +const pages = await fetch(`http://127.0.0.1:${cdpPort}/json/list`).then((response) => response.json()); +const page = pages.find((entry) => entry.type === "page"); +if (!page) throw new Error(`CDP ${cdpPort} 没有可用页面`); + +const socket = new WebSocket(page.webSocketDebuggerUrl); +await new Promise((resolve, reject) => { + socket.addEventListener("open", resolve, { once: true }); + socket.addEventListener("error", reject, { once: true }); +}); + +let nextId = 0; +const pending = new Map(); +const exceptions = []; +socket.addEventListener("message", (event) => { + const message = JSON.parse(event.data); + if (message.id && pending.has(message.id)) { + const { resolve, reject } = pending.get(message.id); + pending.delete(message.id); + if (message.error) reject(new Error(message.error.message)); + else resolve(message.result); + } + if (message.method === "Runtime.exceptionThrown") { + exceptions.push(message.params.exceptionDetails.exception?.description ?? message.params.exceptionDetails.text); + } +}); + +const command = (method, params = {}) => new Promise((resolve, reject) => { + const id = ++nextId; + pending.set(id, { resolve, reject }); + socket.send(JSON.stringify({ id, method, params })); +}); +const pause = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)); +const evaluate = async (expression) => { + const result = await command("Runtime.evaluate", { expression, returnByValue: true, awaitPromise: true }); + if (result.exceptionDetails) throw new Error(result.exceptionDetails.exception?.description ?? result.exceptionDetails.text); + return result.result.value; +}; +const navigate = async (path) => { + await command("Page.navigate", { url: `${baseUrl}${path}` }); + for (let attempt = 0; attempt < 70; attempt += 1) { + await pause(100); + if (await evaluate("document.readyState === 'complete'")) return; + } + throw new Error(`${path} 加载超时`); +}; +const screenshot = async (path, full = false) => { + const params = { format: "png", captureBeyondViewport: full }; + if (full) { + const metrics = await command("Page.getLayoutMetrics"); + params.clip = { + x: 0, + y: 0, + width: metrics.cssContentSize.width, + height: metrics.cssContentSize.height, + scale: 1, + }; + } + const result = await command("Page.captureScreenshot", params); + writeFileSync(path, Buffer.from(result.data, "base64")); +}; + +await command("Page.enable"); +await command("Runtime.enable"); +await command("Emulation.setDeviceMetricsOverride", { + width: 1440, + height: 1100, + deviceScaleFactor: 1, + mobile: false, +}); +await navigate("/foundations/"); +await screenshot("/tmp/llm-atlas-transformer-desktop.png"); + +const overview = await evaluate(`(() => ({ + title: document.querySelector("h1")?.textContent.trim(), + sections: document.querySelectorAll(".article-section").length, + tocLinks: document.querySelectorAll(".side-rail a").length, + paperLinks: document.querySelectorAll(".paper-chain a").length, + labTabs: document.querySelectorAll("[data-attention-tab]").length, + labPanels: document.querySelectorAll("[data-attention-panel]").length, + documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, +}))()`); + +const qkv = await evaluate(`(() => { + const root = document.querySelector("[data-transformer-lab]"); + const read = () => ({ + output: root.querySelector("[data-qkv-output]").textContent, + dimension: root.querySelector("[data-qkv-dimension-label]").textContent, + temperature: root.querySelector("[data-qkv-temperature-label]").textContent, + weights: [...root.querySelectorAll("[data-qkv-weight]")].map((node) => node.textContent), + }); + const initial = read(); + const dimension = root.querySelector("[data-qkv-dimension]"); + dimension.value = "4"; + dimension.dispatchEvent(new Event("input", { bubbles: true })); + const temperature = root.querySelector("[data-qkv-temperature]"); + temperature.value = "250"; + temperature.dispatchEvent(new Event("input", { bubbles: true })); + const sharp = read(); + return { initial, sharp }; +})()`); + +const mask = await evaluate(`(() => { + const root = document.querySelector("[data-transformer-lab]"); + root.querySelector('[data-attention-tab="mask"]').click(); + root.querySelector('[data-mask-mode="prefix"]').click(); + root.querySelector('[data-mask-query="0"]').click(); + const prefix = { + label: root.querySelector("[data-mask-label]").textContent, + sources: root.querySelector("[data-mask-sources]").textContent, + allowed: root.querySelectorAll(".mask-grid i.allowed.selected-row").length, + }; + root.querySelector('[data-mask-mode="causal"]').click(); + root.querySelector('[data-mask-query="2"]').click(); + const causal = { + sources: root.querySelector("[data-mask-sources]").textContent, + allowed: root.querySelectorAll(".mask-grid i.allowed.selected-row").length, + visiblePanel: root.querySelector("[data-attention-panel]:not([hidden])").dataset.attentionPanel, + }; + return { prefix, causal }; +})()`); + +const heads = await evaluate(`(() => { + const root = document.querySelector("[data-transformer-lab]"); + root.querySelector('[data-attention-tab="heads"]').click(); + const select = root.querySelector("[data-position-mode]"); + select.value = "alibi"; + select.dispatchEvent(new Event("change", { bubbles: true })); + return { + kicker: root.querySelector("[data-position-kicker]").textContent, + title: root.querySelector("[data-position-title]").textContent, + mode: root.querySelector("[data-position-visual]").dataset.mode, + localHeights: [...root.querySelectorAll('[data-head-bar^="local-"]')].map((node) => node.style.height), + }; +})()`); + +const block = await evaluate(`(() => { + const root = document.querySelector("[data-transformer-lab]"); + root.querySelector('[data-attention-tab="block"]').click(); + root.querySelector('[data-block-id="k3"]').click(); + const context = root.querySelector("[data-context-length]"); + context.value = "131072"; + context.dispatchEvent(new Event("input", { bubbles: true })); + const selected = { + family: root.querySelector("[data-block-family]").textContent, + kv: root.querySelector("[data-block-kv]").textContent, + path: [...root.querySelectorAll("[data-block-path] b")].map((node) => node.textContent), + note: root.querySelector("[data-block-note]").textContent, + context: root.querySelector("[data-context-label]").textContent, + mha: root.querySelector('[data-cost-value="mha"]').textContent, + kda: root.querySelector('[data-cost-value="kda"]').textContent, + }; + const firstTab = root.querySelector('[data-attention-tab="qkv"]'); + firstTab.focus(); + firstTab.dispatchEvent(new KeyboardEvent("keydown", { key: "End", bubbles: true })); + return { + ...selected, + keyboardSelected: root.querySelector('[data-attention-tab][aria-selected="true"]').dataset.attentionTab, + keyboardVisible: root.querySelector("[data-attention-panel]:not([hidden])").dataset.attentionPanel, + }; +})()`); + +await evaluate(`document.querySelector("[data-transformer-lab]").scrollIntoView({ block: "start", behavior: "instant" })`); +await pause(180); +await screenshot("/tmp/llm-atlas-transformer-lab-desktop.png"); + +await navigate("/"); +const home = await evaluate(`(() => ({ + releaseCards: document.querySelectorAll(".release-card").length, + firstRelease: document.querySelector(".release-card h2").textContent, + firstHref: document.querySelector(".release-card").getAttribute("href"), + paperCount: [...document.querySelectorAll(".hero-stats b")].map((node) => node.textContent.trim()).find((value) => value === "258"), +}))()`); + +await navigate("/papers/"); +const papers = await evaluate(`(() => ({ + total: document.querySelectorAll("[data-paper]").length, + transformerVisible: (() => { + const button = [...document.querySelectorAll("[data-filter]")].find((node) => node.textContent.includes("Transformer")); + button?.click(); + return document.querySelectorAll("[data-paper]:not([hidden])").length; + })(), +}))()`); + +await command("Emulation.setDeviceMetricsOverride", { + width: 390, + height: 844, + deviceScaleFactor: 1, + mobile: true, +}); +await navigate("/foundations/"); +const mobile = await evaluate(`(() => { + const root = document.querySelector("[data-transformer-lab]"); + root.scrollIntoView({ block: "start", behavior: "instant" }); + const toggle = document.querySelector("#menu-toggle"); + toggle?.click(); + return { + documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, + menuVisible: getComputedStyle(toggle).display !== "none", + menuOpen: toggle.getAttribute("aria-expanded"), + tabs: root.querySelectorAll("[data-attention-tab]").length, + offenders: [...document.querySelectorAll("body *")] + .filter((node) => node.getBoundingClientRect().right > document.documentElement.clientWidth + 1) + .slice(0, 12) + .map((node) => ({ + tag: node.tagName, + className: typeof node.className === "string" ? node.className : "", + right: Math.round(node.getBoundingClientRect().right), + width: Math.round(node.getBoundingClientRect().width), + })), + }; +})()`); +await pause(180); +await screenshot("/tmp/llm-atlas-transformer-mobile.png"); + +const report = { overview, qkv, mask, heads, block, home, papers, mobile, exceptions }; +console.log(JSON.stringify(report, null, 2)); + +const numeric = (value) => Number.parseFloat(value); +const failures = []; +if (!overview.title.includes("按需取信息")) failures.push("章节标题异常"); +if (overview.sections !== 22 || overview.tocLinks !== 22) failures.push("章节/目录数量异常"); +if (overview.paperLinks !== 40) failures.push("正式论文链不是 40 个节点"); +if (overview.labTabs !== 4 || overview.labPanels !== 4) failures.push("四联实验结构异常"); +if (overview.documentOverflow > 1 || mobile.documentOverflow > 1) failures.push("桌面或移动端存在横向溢出"); +if (qkv.initial.dimension.trim() !== "64" || qkv.sharp.dimension.trim() !== "4") failures.push("QKV 维度交互异常"); +if (qkv.sharp.temperature.trim() !== "2.5×" || Math.max(...qkv.sharp.weights.map(numeric)) < 60) failures.push("QKV softmax 尖锐度没有响应"); +if (mask.prefix.allowed !== 3 || !mask.prefix.sources.includes("那只")) failures.push("Prefix mask 前缀区异常"); +if (mask.causal.allowed !== 3 || mask.causal.visiblePanel !== "mask") failures.push("Causal mask 可见性异常"); +if (heads.mode !== "alibi" || !heads.kicker.includes("LINEAR BIASES")) failures.push("位置方案切换异常"); +if (new Set(heads.localHeights).size < 2) failures.push("多头权重视图没有分化"); +if (block.family.trim() !== "Hybrid MoE" || !block.kv.includes("3 KDA : 1 Gated MLA")) failures.push("K3 Block 合同异常"); +if (!block.path.some((step) => step.includes("KDA × 3")) || !block.note.includes("AttnRes")) failures.push("K3 Block 路径异常"); +if (block.context.trim() !== "128K" || numeric(block.mha) !== 400 || numeric(block.kda) !== 1) failures.push("KV 成本缩放异常"); +if (block.keyboardSelected !== "block" || block.keyboardVisible !== "block") failures.push("实验 tab 键盘导航异常"); +if (home.releaseCards !== 9 || !home.firstRelease.includes("Attention 不只是") || home.firstHref !== "/foundations/") failures.push("首页 Transformer 首发入口异常"); +if (home.paperCount !== "258" || papers.total !== 258 || papers.transformerVisible < 30) failures.push("论文库或首页论文数量异常"); +if (!mobile.menuVisible || mobile.menuOpen !== "true" || mobile.tabs !== 4) failures.push("移动端导航或实验异常"); +if (exceptions.length) failures.push(`浏览器异常:${exceptions.join(" | ")}`); + +if (failures.length) { + console.error(`\nFAIL\n- ${failures.join("\n- ")}`); + process.exitCode = 1; +} else { + console.log("\nPASS transformer browser regression"); +} + +socket.close(); diff --git a/src/components/AttentionLab.astro b/src/components/AttentionLab.astro index c35b001..781014b 100644 --- a/src/components/AttentionLab.astro +++ b/src/components/AttentionLab.astro @@ -1,227 +1,891 @@ --- -const tokens = ["小猫", "坐在", "柔软的", "垫子", "上"]; -const weights = [ - [0.44, 0.14, 0.08, 0.26, 0.08], - [0.31, 0.24, 0.08, 0.25, 0.12], - [0.07, 0.08, 0.26, 0.51, 0.08], - [0.25, 0.09, 0.32, 0.27, 0.07], - [0.07, 0.15, 0.05, 0.55, 0.18], +const tokens = ["猫", "追", "那只", "小鸟", "因为", "它"]; +const values = [0.15, 0.82, -0.18, 0.64, 0.08, 0.42]; +const scoreSets = [ + [1.8, 0.4, 0.2, 1.1, -0.5, 0.6], + [0.2, 1.7, 0.1, 0.8, -0.3, 0.4], + [0.3, 0.1, 1.6, 1.2, -0.4, 0.5], + [0.8, 0.3, 1.1, 1.9, -0.6, 0.4], + [0.2, 0.2, -0.1, 0.4, 1.4, 0.9], + [1.1, 0.3, 0.2, 0.9, 0.7, 1.5], +]; + +const blocks = [ + { + id: "original", + label: "2017 Original", + family: "Encoder–Decoder", + norm: "Post-LN", + position: "Sin / Cos", + ffn: "ReLU FFN", + kv: "MHA", + path: ["Embedding + PE", "MHA", "Add & LayerNorm", "ReLU FFN", "Add & LayerNorm"], + note: "原论文是机器翻译 encoder–decoder;decoder 还包含 cross-attention。", + }, + { + id: "bert", + label: "BERT", + family: "Encoder-only", + norm: "Post-LN", + position: "Learned absolute", + ffn: "GELU FFN", + kv: "Full bidirectional MHA", + path: ["Token + Segment + Position", "Bidirectional MHA", "Add & LayerNorm", "GELU FFN", "Add & LayerNorm"], + note: "MLM 让同一层同时利用左右文;它不是自回归生成器。", + }, + { + id: "gpt", + label: "GPT-2 / GPT-3", + family: "Decoder-only", + norm: "Pre-LN", + position: "Learned absolute", + ffn: "GELU FFN", + kv: "Causal MHA", + path: ["Token + Position", "LN → Causal MHA", "Residual", "LN → GELU FFN", "Residual"], + note: "decoder-only + causal LM 把生成和 in-context 接口连起来。", + }, + { + id: "llama", + label: "Modern dense", + family: "Decoder-only", + norm: "Pre-RMSNorm", + position: "RoPE", + ffn: "SwiGLU", + kv: "GQA", + path: ["Token", "RMSNorm → RoPE GQA", "Residual", "RMSNorm → SwiGLU", "Residual"], + note: "代表性现代组合,不表示所有开源模型都采用完全相同配方。", + }, + { + id: "deepseek", + label: "DeepSeek MLA", + family: "Decoder-only MoE", + norm: "Pre-RMSNorm", + position: "Decoupled RoPE", + ffn: "DeepSeekMoE", + kv: "Latent KV", + path: ["Token", "RMSNorm → MLA", "Residual", "RMSNorm → DeepSeekMoE", "Residual + MTP train"], + note: "MLA 压缩的是 KV 表示;MTP 增加训练信号,不取代主 next-token 目标。", + }, + { + id: "k3", + label: "Kimi K3", + family: "Hybrid MoE", + norm: "RMSNorm + AttnRes", + position: "KDA state / MLA NoPE", + ffn: "Stable LatentMoE", + kv: "3 KDA : 1 Gated MLA", + path: ["AttnRes select depth", "KDA × 3", "Gated MLA × 1", "Stable LatentMoE", "AttnRes write-back"], + note: "KDA 管长度状态、MLA 补全局交互、AttnRes 管深度路径;三者不是同一维度的改名。", + }, ]; --- -
-
+
+
- INTERACTIVE / SELF-ATTENTION -

点一个词,看它“回头看”谁

+ INTERACTIVE / FOUR-VIEW LAB +

把 Attention 从一句公式拆成四次可操作实验

-

示意权重不是训练模型的真实输出;它只帮助理解一次注意力查询的流程。

+

全部数值都是教学模拟。实验展示计算关系,不声称复现任何真实模型的隐藏状态。

-
- {tokens.map((token, index) => ( - - ))} +
+ + + +
-
-
- QUERY / 我正在理解 - -

Query 是当前词提出的问题:“为了更新我的表示,我应该从哪些词取信息?”

+
+
+
QUESTION

缩放会怎样改变 softmax 的“确信程度”?

+

这里把每个 Value 压成一个标量,方便看见最终加权和;真实模型的 V 是向量。

-
- {tokens.map((token, index) => ( -
- {token} -
- {Math.round(weights[4][index] * 100)}% + +
+ + + +
+ +
+
Q1 × dₖ当前 Query
× +
Kᵀdₖ × 6全部 Keys
+
LOGITS1 × 6匹配分数
× +
V6 × dᵥ被读取内容
+
OUTPUT1 × dᵥ上下文向量
+
+ +
+
+
RAW DOT
+
÷ √dₖ
+
SOFTMAX
+
Σ αᵢVᵢ
+
+
+ {tokens.map((token, index) => ( +
+ {token} +
+ 0% + V={values[index].toFixed(2)} +
+ ))} +
+
+ +
+ 除以 √dₖ 后,softmax 不容易过早饱和。 +

“谁被读”和“读回什么”是两步:权重由 Q/K 决定,结果由权重与 V 共同决定。

+
+
+ + + + + +
-
图 02 单个注意力头的教学示意。真正的模型会在每一层、每个头上并行进行类似计算,权重由 QKᵀ 经缩放和 softmax 得到。
+
+
+ {blocks[3].path.map((step, index) =>
{String(index + 1).padStart(2, "0")}{step}
)} +
+
+
FAMILY
{blocks[3].family}
+
NORM
{blocks[3].norm}
+
POSITION
{blocks[3].position}
+
LOCAL COMPUTE
{blocks[3].ffn}
+
KV ORGANIZATION
{blocks[3].kv}
+
+
+ +

{blocks[3].note}

+ +
+
+ DECODE COST SKETCH +

同样长度,KV 组织决定每一步要搬多少历史

+

下方是归一化教学单位,不是某张 GPU 的实测延迟。

+
+ +
+
MHA · 每头 K/V100
+
GQA · 分组 K/V25
+
MLA · latent cache7
+
KDA · fixed state1
+
+ 边界:K3 是 KDA / MLA 混合,所以整模型缓存不会等于“纯 KDA 固定状态”;MLA 数字也依具体 latent 维度。 +
+ + +
+ 交互图 02 + 四联实验把公式、信息可见性、表示子空间、位置与系统成本分开。真实模型有更多维度、层、head、kernel 与并行策略。 +
diff --git a/src/components/SiteFooter.astro b/src/components/SiteFooter.astro index 4873f2b..6302373 100644 --- a/src/components/SiteFooter.astro +++ b/src/components/SiteFooter.astro @@ -12,5 +12,5 @@ 开放源码 K3 官方报告
- + diff --git a/src/data/chapters.ts b/src/data/chapters.ts index 04bdca8..1d1ef90 100644 --- a/src/data/chapters.ts +++ b/src/data/chapters.ts @@ -47,12 +47,12 @@ export const chapters: Chapter[] = [ title: "注意力与 Transformer", kicker: "TRANSFORMER", question: "一句话里的每个词,怎样直接找到真正相关的词?", - summary: "用可操作的小例子拆开 Q、K、V、自注意力、多头、因果掩码、残差与前馈网络。", + summary: "用十张问题账与四联实验拆开 Q/K/V、Mask、多头、位置、深度、架构目标、KV/IO,并映射 DeepSeek 与 K3。", status: "published", - progress: 45, - papers: 12, + progress: 79, + papers: 40, prerequisites: ["01"], - highlights: ["Q / K / V", "交互实验", "张量形状"], + highlights: ["十张问题账", "四联实验", "DeepSeek / K3"], }, { number: "03", diff --git a/src/data/papers.ts b/src/data/papers.ts index 87bf3bf..dc2f797 100644 --- a/src/data/papers.ts +++ b/src/data/papers.ts @@ -273,6 +273,30 @@ export const papers: Paper[] = [ contribution: "以门控网络让多个局部专家竞争分工,是现代 MoE 的概念起点。", verified: true, }, + { + year: 2015, + title: "Pointer Networks", + url: "https://arxiv.org/abs/1506.03134", + topics: ["Transformer"], + contribution: "让 Attention 分布直接指向输入位置,展示软路由不仅能混合表示,也能定义可变输出字典。", + verified: true, + }, + { + year: 2016, + title: "Deep Residual Learning for Image Recognition", + url: "https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html", + topics: ["Transformer"], + contribution: "以加法捷径学习残差映射,是 Transformer 深度信息高速公路的视觉前史。", + verified: true, + }, + { + year: 2016, + title: "Layer Normalization", + url: "https://arxiv.org/abs/1607.06450", + topics: ["Transformer"], + contribution: "在单个样本内按层输入统计量归一化,为序列模型提供训练/推理一致的尺度控制。", + verified: true, + }, { year: 2017, title: "Attention Is All You Need", @@ -281,6 +305,14 @@ export const papers: Paper[] = [ contribution: "用多头自注意力与 FFN 取代循环,开启高度并行预训练。", verified: true, }, + { + year: 2018, + title: "Self-Attention with Relative Position Representations", + url: "https://aclanthology.org/N18-2074/", + topics: ["Transformer", "长上下文"], + contribution: "把相对距离表示引入 Self-Attention,并把方法扩展为 relation-aware attention。", + verified: true, + }, { year: 2018, title: "SentencePiece: A simple and language independent subword tokenizer", @@ -321,6 +353,14 @@ export const papers: Paper[] = [ contribution: "T5 统一 text-to-text 接口,并以 C4 建立现代 Common Crawl 清洗基线。", verified: true, }, + { + year: 2019, + title: "Unified Language Model Pre-training for Natural Language Understanding and Generation", + url: "https://arxiv.org/abs/1905.03197", + topics: ["Transformer"], + contribution: "用 Attention mask 在同一 Transformer 中切换单向、双向与序列到序列预训练。", + verified: true, + }, { year: 2019, title: "Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context", @@ -337,6 +377,38 @@ export const papers: Paper[] = [ contribution: "不做均值中心化的轻量归一化,成为现代 LLM 常用组件。", verified: true, }, + { + year: 2019, + title: "Are Sixteen Heads Really Better than One?", + url: "https://papers.neurips.cc/paper_files/paper/2019/hash/2c601ad9d2ff9bc8b282670cdd54f69f-Abstract.html", + topics: ["Transformer", "评测"], + contribution: "测试时剪枝显示大量 Attention heads 存在冗余,但不证明这些 head 在训练阶段无用。", + verified: true, + }, + { + year: 2019, + title: "What Does BERT Look at? An Analysis of BERT’s Attention", + url: "https://aclanthology.org/W19-4828/", + topics: ["Transformer", "评测"], + contribution: "在 BERT heads 中观察位置、分隔符、句法和共指模式,为后验分析提供系统案例。", + verified: true, + }, + { + year: 2019, + title: "Attention is not Explanation", + url: "https://aclanthology.org/N19-1357/", + topics: ["Transformer", "评测"], + contribution: "展示 Attention 权重与特征重要性可能不相关,且不同权重可产生近似预测,划定解释边界。", + verified: true, + }, + { + year: 2019, + title: "Attention is not not Explanation", + url: "https://aclanthology.org/D19-1002/", + topics: ["Transformer", "评测"], + contribution: "指出解释结论依赖定义、模型整体、基线与测试协议,为 Attention 解释争论补充对照。", + verified: true, + }, { year: 2020, title: "Language Models are Few-Shot Learners", @@ -353,6 +425,22 @@ export const papers: Paper[] = [ contribution: "系统比较 GLU 变体,SwiGLU 进入现代 FFN 配方。", verified: true, }, + { + year: 2020, + title: "On Layer Normalization in the Transformer Architecture", + url: "https://proceedings.mlr.press/v119/xiong20b.html", + topics: ["Transformer", "训练系统"], + contribution: "从初始化梯度分析 Post-LN 的 warm-up 需求与 Pre-LN 的优化差异。", + verified: true, + }, + { + year: 2021, + title: "NormFormer: Improved Transformer Pretraining with Extra Normalization", + url: "https://arxiv.org/abs/2110.09456", + topics: ["Transformer", "训练系统"], + contribution: "在 Pre-LN block 内增加归一化以改善层间梯度尺度与预训练稳定性。", + verified: true, + }, { year: 2020, title: "Longformer: The Long-Document Transformer", diff --git a/src/pages/foundations/index.astro b/src/pages/foundations/index.astro index a4ddf2a..2fc31b3 100644 --- a/src/pages/foundations/index.astro +++ b/src/pages/foundations/index.astro @@ -3,624 +3,1766 @@ import BaseLayout from "@/layouts/BaseLayout.astro"; import AttentionLab from "@/components/AttentionLab.astro"; const toc = [ - ["00", "goal", "这一章要建立什么"], - ["01", "next-token", "预测下一个 Token"], - ["02", "vector", "词怎样变成向量"], - ["03", "bottleneck", "RNN 的顺序瓶颈"], - ["04", "attention", "注意力的出现"], - ["05", "qkv", "Q / K / V"], - ["06", "block", "Transformer Block"], - ["07", "training", "训练与生成"], - ["08", "myths", "常见误解"], - ["↳", "papers", "关键论文链"], + ["00", "compass", "先拿到一张地图"], + ["01", "bottleneck", "固定向量瓶颈"], + ["02", "soft-retrieval", "软对齐与可微检索"], + ["03", "qkv", "Q / K / V 的分工"], + ["04", "scale", "缩放与 Softmax"], + ["05", "visibility", "Self / Cross / Mask"], + ["06", "multi-head", "Multi-Head"], + ["07", "position", "位置从哪里来"], + ["08", "block", "完整 Transformer Block"], + ["09", "depth", "Residual 与 Norm"], + ["10", "ffn", "FFN / GLU / MoE"], + ["11", "families", "三大家族"], + ["12", "objectives", "目标函数不是架构"], + ["13", "train-infer", "训练、Prefill、Decode"], + ["14", "kv", "KV Cache / MQA / GQA"], + ["15", "flash", "FlashAttention 与并行"], + ["16", "deepseek", "DeepSeek 重点谱系"], + ["17", "kimi", "Kimi K3 回看全章"], + ["18", "interpretability", "权重不等于解释"], + ["19", "checklist", "遇到新架构怎样读"], + ["20", "reading", "分层阅读路径"], + ["↳", "papers", "40 个关键节点"], +]; + +const paperChain = [ + { n: "01", year: "2014", title: "Neural Machine Translation by Jointly Learning to Align and Translate", url: "https://arxiv.org/abs/1409.0473", tag: "ORIGIN", note: "固定向量 → 每个解码步软读取源表示。", mark: "core" }, + { n: "02", year: "2015", title: "Effective Approaches to Attention-based Neural Machine Translation", url: "https://arxiv.org/abs/1508.04025", tag: "SCORE", note: "global / local 与 dot / general / concat 的设计空间。", mark: "core" }, + { n: "03", year: "2015", title: "Pointer Networks", url: "https://arxiv.org/abs/1506.03134", tag: "ROUTING", note: "Attention 分布本身也能指向输入位置。", mark: "map" }, + { n: "04", year: "2016", title: "Deep Residual Learning for Image Recognition", url: "https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html", tag: "DEPTH", note: "加法残差高速公路的直接前史。", mark: "map" }, + { n: "05", year: "2016", title: "Layer Normalization", url: "https://arxiv.org/abs/1607.06450", tag: "NORM", note: "单样本内按层输入统计量归一化。", mark: "core" }, + { n: "06", year: "2017", title: "Language Modeling with Gated Convolutional Networks", url: "https://arxiv.org/abs/1612.08083", tag: "GLU", note: "门控线性单元的 Transformer 前史。", mark: "map" }, + { n: "07", year: "2017", title: "Attention Is All You Need", url: "https://proceedings.neurips.cc/paper_files/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html", tag: "TRANSFORMER", note: "原作是 encoder–decoder 机器翻译,不是 GPT。", mark: "core" }, + { n: "08", year: "2018", title: "Improving Language Understanding by Generative Pre-Training", url: "https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf", tag: "GPT-1", note: "decoder-only 生成预训练再迁移。", mark: "core" }, + { n: "09", year: "2018", title: "BERT: Pre-training of Deep Bidirectional Transformers", url: "https://arxiv.org/abs/1810.04805", tag: "BERT", note: "encoder-only + MLM 的双向表示路线。", mark: "core" }, + { n: "10", year: "2018", title: "Self-Attention with Relative Position Representations", url: "https://aclanthology.org/N18-2074/", tag: "POSITION", note: "相对距离进入 self-attention。", mark: "map" }, + { n: "11", year: "2019", title: "Transformer-XL: Attentive Language Models beyond a Fixed-Length Context", url: "https://aclanthology.org/P19-1285/", tag: "MEMORY", note: "跨段 recurrence 与相对位置。", mark: "map" }, + { n: "12", year: "2019", title: "Language Models are Unsupervised Multitask Learners", url: "https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf", tag: "GPT-2", note: "decoder-only causal LM 的零样本扩展。", mark: "core" }, + { n: "13", year: "2019", title: "Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer", url: "https://jmlr.org/papers/v21/20-074.html", tag: "T5", note: "encoder–decoder + text-to-text + span corruption。", mark: "core" }, + { n: "14", year: "2019", title: "Unified Language Model Pre-training for Natural Language Understanding and Generation", url: "https://arxiv.org/abs/1905.03197", tag: "MASK", note: "用 mask 切换双向、单向与 seq2seq。", mark: "map" }, + { n: "15", year: "2019", title: "Root Mean Square Layer Normalization", url: "https://papers.neurips.cc/paper_files/paper/2019/hash/1e8a19426224ca89e83cef47f1e7f53b-Abstract.html", tag: "RMSNORM", note: "去掉均值中心化,只保留重缩放。", mark: "core" }, + { n: "16", year: "2019", title: "Fast Transformer Decoding: One Write-Head is All You Need", url: "https://arxiv.org/abs/1911.02150", tag: "MQA", note: "多 Query heads 共享单组 K/V。", mark: "map" }, + { n: "17", year: "2019", title: "Are Sixteen Heads Really Better than One?", url: "https://papers.neurips.cc/paper_files/paper/2019/hash/2c601ad9d2ff9bc8b282670cdd54f69f-Abstract.html", tag: "HEADS", note: "测试时大量 head 可能冗余,但不等于训练时无用。", mark: "boundary" }, + { n: "18", year: "2019", title: "What Does BERT Look at? An Analysis of BERT’s Attention", url: "https://aclanthology.org/W19-4828/", tag: "ANALYSIS", note: "观察到位置、句法与共指模式。", mark: "boundary" }, + { n: "19", year: "2019", title: "Attention is not Explanation", url: "https://aclanthology.org/N19-1357/", tag: "BOUNDARY", note: "权重与输入重要性/因果解释不能直接画等号。", mark: "boundary" }, + { n: "20", year: "2019", title: "Attention is not not Explanation", url: "https://aclanthology.org/D19-1002/", tag: "DEBATE", note: "解释定义、基线与测试协议同样重要。", mark: "boundary" }, + { n: "21", year: "2019", title: "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism", url: "https://arxiv.org/abs/1909.08053", tag: "SYSTEM", note: "层内张量并行,不是新 Attention 公式。", mark: "map" }, + { n: "22", year: "2020", title: "On Layer Normalization in the Transformer Architecture", url: "https://proceedings.mlr.press/v119/xiong20b.html", tag: "PRE-LN", note: "Norm 位置改变初始化梯度与 warm-up 需求。", mark: "core" }, + { n: "23", year: "2020", title: "GLU Variants Improve Transformer", url: "https://arxiv.org/abs/2002.05202", tag: "SWIGLU", note: "门控 FFN 变体的系统比较。", mark: "core" }, + { n: "24", year: "2020", title: "Language Models are Few-Shot Learners", url: "https://arxiv.org/abs/2005.14165", tag: "GPT-3", note: "规模化 causal decoder 展现 in-context 接口。", mark: "core" }, + { n: "25", year: "2020", title: "Query-Key Normalization for Transformers", url: "https://arxiv.org/abs/2010.04245", tag: "QK NORM", note: "显式约束 Q/K 尺度与注意力温度。", mark: "map" }, + { n: "26", year: "2021", title: "RoFormer: Enhanced Transformer with Rotary Position Embedding", url: "https://arxiv.org/abs/2104.09864", tag: "ROPE", note: "旋转 Q/K 表达相对位移。", mark: "core" }, + { n: "27", year: "2021", title: "Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation", url: "https://arxiv.org/abs/2108.12409", tag: "ALIBI", note: "直接给 logits 添加距离线性偏置。", mark: "map" }, + { n: "28", year: "2021", title: "NormFormer: Improved Transformer Pretraining with Extra Normalization", url: "https://arxiv.org/abs/2110.09456", tag: "NORM", note: "在 block 内增加归一化改善梯度尺度。", mark: "map" }, + { n: "29", year: "2022", title: "DeepNet: Scaling Transformers to 1,000 Layers", url: "https://arxiv.org/abs/2203.00555", tag: "DEPTH", note: "深层 Post-LN 的稳定缩放路线。", mark: "map" }, + { n: "30", year: "2022", title: "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness", url: "https://proceedings.neurips.cc/paper/2022/hash/67d57c32e20fd0a7a302cb81d36e40d5-Abstract-Conference.html", tag: "IO", note: "精确 Attention 的 IO-aware 分块实现。", mark: "core" }, + { n: "31", year: "2023", title: "LLaMA: Open and Efficient Foundation Language Models", url: "https://arxiv.org/abs/2302.13971", tag: "MODERN", note: "RMSNorm + SwiGLU + RoPE 的代表性现代配方。", mark: "map" }, + { n: "32", year: "2023", title: "GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints", url: "https://aclanthology.org/2023.emnlp-main.298/", tag: "GQA", note: "MHA 与 MQA 之间的 K/V heads 折中。", mark: "core" }, + { n: "33", year: "2023", title: "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning", url: "https://arxiv.org/abs/2307.08691", tag: "IO", note: "改进 GPU 工作分割与并行度。", mark: "map" }, + { n: "34", year: "2024", title: "DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model", url: "https://arxiv.org/abs/2405.04434", tag: "MLA", note: "低秩 latent 压缩 KV Cache。", mark: "deepseek" }, + { n: "35", year: "2024", title: "DeepSeek-V3 Technical Report", url: "https://arxiv.org/abs/2412.19437", tag: "MTP", note: "延续 MLA,并用 MTP 增密训练信号。", mark: "deepseek" }, + { n: "36", year: "2025", title: "Kimi Linear: An Expressive, Efficient Attention Architecture", url: "https://arxiv.org/abs/2510.26692", tag: "KDA", note: "3:1 KDA / MLA 混合架构。", mark: "kimi" }, + { n: "37", year: "2025", title: "DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models", url: "https://arxiv.org/abs/2512.02556", tag: "DSA", note: "稀疏索引 attention 进入 MLA 谱系。", mark: "deepseek" }, + { n: "38", year: "2026", title: "Attention Residuals", url: "https://arxiv.org/abs/2603.15031", tag: "ATTNRES", note: "在网络深度维选择先前表示。", mark: "kimi" }, + { n: "39", year: "2026", title: "DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence", url: "https://arxiv.org/abs/2606.19348", tag: "CSA / HCA", note: "压缩稀疏 Attention + mHC 面向 1M context。", mark: "deepseek" }, + { n: "40", year: "2026", title: "Kimi K3: Open Frontier Intelligence", url: "https://arxiv.org/abs/2607.24653", tag: "K3", note: "KDA/Gated MLA + AttnRes + Stable LatentMoE。", mark: "kimi" }, ]; --- -
+
-

FOUNDATIONS / 02 TRANSFORMER

-

注意力,不是让模型
“更专心”那么简单

+

FOUNDATIONS / 02 ATTENTION · TRANSFORMER

+

先学会“按需取信息”,
再看懂整个现代 LLM

- 它把序列建模从“一步一步传话”改成“每个位置直接检索相关位置”。 - 这一变化解决了长距离依赖,也把训练变成高度并行的矩阵计算。 + Attention 不是一句“模型更专心”,Transformer 也不是一个永远不变的 block。 + 本章从软对齐一路走到 QKV、Mask、位置、深度路径、IO 与 KV Cache, + 最后把 DeepSeek 的 MLA / MTP / CSA-HCA 和 Kimi K3 的 KDA / AttnRes 放回同一张问题地图。

-
LEVEL
L0 直觉 → L2 公式
-
PREREQ
只需基础概率概念
-
CORE
Q · K · V · Softmax
-
TIME
约 55 分钟
-
STATUS
首版可读 · 继续补图
+
LEVEL
L0 直觉 → L3 系统
+
LEDGERS
10 张独立问题账
+
PAPERS
40 个一手节点
+
LAB
4 个交互实验
+
TIME
约 150–210 分钟
+
VERIFIED
2026-07-29
-
-

00 MENTAL MODEL

-

读完以后,你应该能画出一个 Token 的完整旅程

+
+

00 COMPASS

+

先拆成十张账:同一个“Attention”词,可能在回答十个不同问题

- 文本先被切成 Token,Token 变成向量;自注意力让每个位置从其他位置收集信息, - 前馈网络在每个位置内部加工;残差和归一化让几十上百层能够稳定堆叠。 + 初学者最容易把模型结构、训练目标、推理缓存和 GPU kernel 全揉进一张架构图。 + 结果是每个缩写都像在“改进 Attention”,却说不清它究竟改了什么。 + 下面十张账是本章的主坐标,后面遇到任何论文都先归账,再比较。

+ PREVIOUS / CHAPTER 01 -
语言模型从哪里来

如果 N-gram、Embedding、RNN/LSTM、Seq2Seq 或 Attention 的来由还不清楚,先回到完整前史。

- 返回上一章 → +
语言模型从哪里来

如果 N-gram、Embedding、RNN/LSTM、Seq2Seq 和 Bahdanau Attention 的前史还不熟,先回上一章。

+ 返回前史 →
- -

- K3 的复杂架构仍然没有离开这张图:KDA 与 MLA 替换“位置之间交流”的具体机制, - Stable LatentMoE 替换 FFN,Attention Residuals 改变层与层之间的传递,MoonViT 把图像也转成可进入主干的表示。 -

-
-
-

01 LANGUAGE MODELING

-

大模型最底层的训练题:根据前文猜下一个 Token

-

- 一段文本的联合概率可以用链式法则拆开: - 第一个 Token 的概率 × 在第一个已知时第二个的概率 × 在前两个已知时第三个的概率……。 - 语言模型只要不断学会这些条件概率,就能给整段文本分配概率。 -

-
- P(x₁, x₂, …, xₙ) = ∏ₜ P(xₜ | x₁, …, xₜ₋₁) - 这只是概率链式法则,本身不规定用 N-gram、RNN 还是 Transformer 计算条件概率。 +
+
01 / PATH

信息路径

怎样从固定压缩变成按需读取?

+
02 / GEOMETRY

匹配几何

Q、K、V 与缩放究竟算什么?

+
03 / VISIBILITY

可见性

谁能在这一层读取谁?

+
04 / HEADS

多头

为什么并行多个表示子空间?

+
05 / ORDER

位置

无序的算子如何获得序列次序?

+
06 / LOCAL

局部计算

Attention 之后 FFN / MoE 做什么?

+
07 / DEPTH

深度路径

Residual 与 Norm 如何支撑深网?

+
08 / OBJECTIVE

架构与目标

BERT、GPT、T5 为什么不同?

+
09 / SYSTEM

系统成本

训练、prefill、decode 哪里最贵?

+
10 / NOW

当代映射

MLA、KDA、AttnRes、MTP 各改哪一轴?

-

- 训练时,我们已知句子后面的正确 Token,因此可以把一段文本整体右移一位做标签,所有位置并行产生损失。 - 模型对正确 Token 给出的概率越低,负对数损失越大。 -

-
- L = − Σₜ log Pθ(xₜ | x<ₜ) - 交叉熵训练不会直接写入“事实库”或“推理规则”;这些结构是模型为降低大量预测误差而在参数中形成的。 -
-

为什么这样简单的任务会学到很多东西

-

- 要准确补全“牛顿在 1687 年出版了……”,模型需要吸收事实;要补全一段代码,需要跟踪变量和语法; - 要补全论证,需要建模前提与结论。下一个 Token 预测没有显式要求“理解”,但数据中的各种规律都会降低预测损失。 - 模型容量和数据足够大时,许多规律共享同一套内部表示,因此出现广泛迁移。 -

-
- 但不要反过度解释 -

- 预测目标能诱导知识与能力,不保证事实永远准确、推理过程忠实或目标与人类一致。 - 这正是检索、后训练、验证器和安全对齐仍然必要的原因。 -

-
-
-
-

02 DISTRIBUTED REPRESENTATION

-

Token ID 没有意义;Embedding 才是模型能计算的语义坐标

-

- Tokenizer 把文本分成词、子词或字节片段,并映射为整数 ID。ID 只是目录编号: - 42 比 17 大,不代表第 42 个 Token 语义更强。Embedding table 根据 ID 查出一个可训练向量, - 后续网络只处理这些连续数值。 -

-
-
TOKEN小猫ID = 4821
- lookup -
EMBEDDING[0.18, −0.42, 0.07, …, 0.31]d 个可学习维度
+
+ ONE-SENTENCE MODEL +

Attention 是可学习的信息路由;Transformer 是 Attention、局部计算、深度路径、位置与训练目标共同组成的计算骨架。

-

- “分布式表示”的要点是:一个概念不放在单个神经元里,而分散在许多维度; - 一个维度也参与表示许多概念。相似用法的 Token 在训练中往往形成相近或具有稳定关系的向量。 - Bengio 2003 的神经概率语言模型和 2013 年 Word2Vec,是这条历史线的关键节点。 -

-

同一个词在不同句子里怎么办

-

- 初始 embedding 对同一个 Token 固定不变,但经过 self-attention 后会变成 contextual representation。 - “苹果发布手机”和“吃一个苹果”里的“苹果”起点相同,周围 Token 通过注意力写入不同上下文后,深层表示会分开。 -

-

03 SEQUENTIAL BOTTLENECK

-

Transformer 之前:信息像传话游戏一样逐步穿过 RNN

+

01 THE OLD BOTTLENECK

+

问题不是 RNN “完全记不住”,而是全部信息被迫挤过同一条窄桥

- RNN 每读一个 Token,就把旧隐藏状态和新输入合成新状态。理论上最后状态可以包含全部历史; - 实际上,遥远信息必须经过许多次变换,梯度也必须沿时间反向穿过这些步骤。 - LSTM/GRU 用门控缓解遗忘与梯度问题,但训练仍然按时间顺序,难以把序列位置全部摊到 GPU 上并行。 + 经典 Seq2Seq encoder 逐步读入源句,再把最后隐藏状态交给 decoder。 + 这像一个翻译员读完整段材料后只能带一张固定大小便签进考场: + 句子越长、细节越多,便签上的取舍越残酷。

-
-
- RNN / 顺序传递 -
x₁h₁h₂h₃h₄
-

x₁ 的信息要到 h₄,必须走过每一个中间状态。

+ +
+
+ 窗边看着远处的
-
- SELF-ATTENTION / 直接检索 -
x₁x₂x₃x₄↘ ↓ ↙x₄′
-

x₄ 可以在一层内直接读取 x₁、x₂、x₃。

+
+ + 固定向量 c + 全句只留一个交接点 +
+
+ Thecat...
-

- 2014 年 Seq2Seq 用 encoder 把源句压进固定向量,再由 decoder 生成目标句。长句表现受限时, - Bahdanau Attention 让 decoder 每一步不再只依赖最后一个 encoder state,而能对全部 encoder states 加权读取。 - 注意力最初是一座跨 encoder—decoder 的桥;Transformer 的突破是让桥本身成为主体。 -

+ +

把三个问题分开

+
+
表示容量

一个向量理论上能编码很多信息,但训练是否能稳定把需要的细节写进去、再读出来,是另一回事。

+
路径长度

远处 token 的影响必须穿过许多循环步;梯度也沿同一长路径回传。

+
并行性

状态 hₜ 依赖 hₜ₋₁,时间维难以像矩阵乘法那样一次摊开。

+
+ +
+ 一口人话 +

Attention 最早不是为了制造漂亮热力图,而是给 decoder 一种“翻回原文、按当前需要查资料”的能力。

+
-
-

04 ATTENTION

-

注意力本质上是一次可学习的“软检索”

+
+

02 DIFFERENTIABLE RETRIEVAL

+

Bahdanau 的关键变化:每生成一个词,都重新决定该读源句哪里

- 每个位置提出一个 Query;所有位置提供 Key 和 Value。Query 与 Key 的匹配度决定从相应 Value 读取多少信息。 - 因为权重是连续概率,而不是只选择一个位置,所以称为“软”检索。 + 对 decoder 第 t 步,模型拿当前状态与每个 encoder state 计算匹配分数, + 把分数经 softmax 变成权重 α,再对全部源表示做加权和。 + 因为每一步都是连续可导运算,翻译损失能反向教会“应该对齐哪里”。

- -

为什么相似度之后要除以 √dₖ

+ +
+
+
x₁h₁
+
x₂坐在h₂
+
x₃垫子h₃
+
x₄h₄
+
+ +
DECODER STEP tmatcₜ = Σᵢ αₜᵢhᵢ
+
+ +
+ eₜᵢ = score(sₜ₋₁, hᵢ) + αₜ = softmax(eₜ) + cₜ = Σᵢ αₜᵢ hᵢ +

score 可以是小神经网络(additive attention),也可以是 dot / general 等形式。

+
+ +

从 Cross-Attention 到 Self-Attention

- 若 Q、K 的每个分量方差相近,维度越高,点积的典型幅值越大。softmax 输入过大时会接近 one-hot, - 梯度变得很小。除以 √dₖ 把数值尺度拉回较稳定范围,这就是 Scaled Dot-Product Attention 的“scaled”。 + 早期注意力跨越 decoder → encoder:一边提出查询,另一边提供可读记忆。 + Self-attention 则让同一序列同时产生查询、索引与内容; + “桥”不再只接在 encoder 和 decoder 之间,而成为每一层内部的主要信息混合方式。

-
- Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V - 先得到每个 Query 对所有 Key 的相似度,经 softmax 变成和为 1 的权重,再对 Value 做加权和。 + +
+
Soft alignment

decoder 读 encoder

+ +
Score families

global / local / dot

+ +
Self-attention

序列内部直接互读

+ +
Pre-trained families

相同算子,不同拓扑与目标

-

05 QUERY · KEY · VALUE

-

Q、K、V 不是三份词义,而是三个可学习角色

+

03 QUERY · KEY · VALUE

+

Q、K、V 的真正价值:把“用什么匹配”和“匹配后搬什么”拆开

- 同一个输入向量 x 乘三个不同矩阵,得到 Q、K、V。模型可以让“用于匹配的特征”和“匹配后真正搬运的内容”分开。 - 例如代词位置的 Query 可以强调性别/单复数线索,名词位置的 Key 暴露这些线索, - Value 则携带更丰富的实体表示。 + 对输入矩阵 X,三组可学习权重产生 Q = XWQ、K = XWK、V = XWV。 + 同一个 token 因而能以三种角色参与计算。不要把它们想成三份神秘词义; + 它们只是训练学出的接口合同。

-
-
Q / QUERY

我在找什么?

当前位置为了更新自己,需要哪类上下文信号。

-
K / KEY

我能被怎样找到?

每个来源位置公开哪些匹配特征。

-
V / VALUE

找到后带走什么?

一旦获得权重,真正汇入目标位置的信息内容。

+ +
+
+ Q / QUERY +

当前位置想找什么?

+

例如代词位置可把“实体候选、单复数、距离”等需求写进 Query 特征。

+
+
+ K / KEY +

来源怎样被找到?

+

名词位置可把“我是实体、我的属性是什么”写进 Key 的匹配特征。

+
+
+ V / VALUE +

找到后实际带回什么?

+

权重确定后,被汇入目标位置的是 Value;它可携带比匹配特征更丰富的内容。

+
-

Multi-Head 的意义

+ +
+ 假设 batch 暂时省略 +
Xn × d_model

n 个 token,每个 d_model 维

+ × WQ / WK / WV +
Q, Kn × d_k

匹配空间

+
Vn × d_v

内容空间

+ +
QKᵀn × n

每个位置对每个来源

+
+ +
+ 重要边界 +

“Query 像搜索词、Key 像索引、Value 像文档”是好用的直觉,但真实向量由端到端训练共同形成,不是数据库里人工定义的字段。

+
+
+ +
+

04 SCALE · SOFTMAX · READ

+

完整公式只有一行,但里面有三个容易混淆的动作

+ +
+ Attention(Q, K, V) = softmax(QKᵀ / √dₖ + M) · V + 匹配 → 缩放并施加 mask → 归一化权重 → 对 Value 加权读取。 +
+ +
+
01

QKᵀ / 匹配

得到 n×n logits。它们不是概率,可以为负,也不必和为 1。

+
02

÷√dₖ / 稳尺度

若分量方差相近,点积方差随 dₖ 增长;缩放避免 softmax 过早饱和。

+
03

+M / 控制可见性

允许位置加 0,被遮位置加 −∞;softmax 后后者权重为 0。

+
04

softmax · V / 读取

每行权重和为 1,再对对应 Value 向量求加权和。

+
+ +

为什么是 √dₖ,而不是 dₖ

- 单个注意力分布必须把多种关系挤在一起。Multi-Head 将表示投影到多个较小子空间: - 不同 head 可以学习局部搭配、指代、结构边界、长距离依赖等不同模式,最后拼接并线性投影。 - “某个头一定是语法头”并没有保证;head 的功能是训练中形成的,常常混合且可替代。 + 设 qᵢ、kᵢ 独立、均值 0、方差 1。点积 q·k 是 dₖ 项乘积之和,方差约为 dₖ, + 标准差约为 √dₖ。除以标准差量级,正好把 logits 拉回较稳定范围。 + 这是原论文给出的统计动机,不是“维度一大就必然训练失败”的定理。

-

Causal Mask 为什么不可少

+ + +
+ +
+

05 INFORMATION VISIBILITY

+

Self、Cross、Causal 不是三套公式,而是 Q 从哪来、K/V 从哪来、哪些边允许存在

+ +
+
模式Q 来源K / V 来源允许读取典型用途
+
Encoder self

当前序列

同一序列

通常全可见

双向表示
+
Causal self

当前序列

同一序列

自己与过去

自回归生成
+
Cross attention

decoder

encoder 输出

完整源序列

翻译、条件生成
+
Prefix mask

同一序列

同一序列

前缀双向,生成区因果

统一理解与生成
+
+ +

训练时为什么可以“同时算所有位置”

- 训练 decoder-only 模型时,位置 t 的输入序列里同时存在后续 Token。若不遮住未来位置, - 模型会直接偷看答案。Causal mask 把 QKᵀ 右上三角设为负无穷, - softmax 后未来权重变成 0;这样所有位置仍可并行训练,却遵守生成时只能看过去的约束。 + Teacher forcing 已经把完整正确序列放在输入张量里;causal mask 只让位置 t 的行看到 ≤t 的列。 + GPU 仍可一次计算整个 QKᵀ 矩阵,未来位置因为加了 −∞ 不会泄漏到当前预测。 + 并行的是训练计算,不是推理时凭空提前知道尚未生成的 token。

+ +
+
允许Mᵢⱼ = 0

j ≤ i

+
屏蔽Mᵢⱼ = −∞

j > i

+ softmax +
结果αᵢⱼ = 0

未来位置不参与输出

+
+
+ +
+

06 MULTI-HEAD ATTENTION

+

一个权重分布很难同时承担所有关系;多头提供多组投影与路由子空间

+

+ 每个 head 有自己的 WQ、WK、WV,在较小维度上独立计算。 + 结果拼接后再乘 WO 写回 residual stream。 + 这并不要求某个 head 永远负责“语法”、另一个永远负责“指代”;专门化只是可能出现的训练结果。 +

+ +
+
X同一 residual stream
+
+
H1Q₁K₁ᵀ → V₁局部模式?
+
H2Q₂K₂ᵀ → V₂实体关系?
+
H3Q₃K₃ᵀ → V₃边界模式?
+
HhQₕKₕᵀ → Vₕ更多子空间
+
+
CONCAT + Wᴼ[head₁; …; headₕ]Wᴼ
+
+ +

“更多头”与“更多 KV 头”不是同一回事

+

+ MHA 通常有同数目的 Q heads 与 K/V heads;MQA 保留多 Q heads,却让所有 head 共享一组 K/V; + GQA 则让若干 Q heads 共享一组 K/V。它们主要在推理解码的缓存与带宽上取舍, + 并没有把多子空间 Query 全部取消。 +

+ +
+ 论文边界 +

Michel et al. 发现许多 head 可在测试时剪掉,但这不能推出它们在训练中从未参与优化,也不能推出所有模型、层和任务都只需一个 head。

+
+
+ +
+

07 POSITION

+

只看内容的 Self-Attention 不知道先后;位置机制负责打破这种对称性

+

+ 若把输入 token 同步重排,且没有任何位置项,self-attention 的输出也只会同步重排。 + 模型能识别“猫追鸟”和“鸟追猫”不同,必须从某处获得次序信号。 +

+ +
+
ABSOLUTE

Sin / Cos

位置向量与 token embedding 相加;原作还比较 learned position。

+
RELATIVE

Shaw bias

把 i−j 的相对距离表示直接放进 attention。

+
MEMORY

Transformer-XL

相对位置与跨 segment recurrence 配合,处理 context fragmentation。

+
ROTATION

RoPE

按位置旋转 Q/K,让点积自然依赖相对位移。

+
LOGIT BIAS

ALiBi

按距离直接给 logits 加惩罚,并内置 recency bias。

+
+ +
+
+ + q@0q@3 + θ · position +
+
+ ROPE / 2D SLICE +

不是把“位置向量”加到词向量

+

+ RoPE 把 Q/K 的成对维度看作二维平面,并按位置旋转。两个向量点积时, + 共同的绝对旋转相消,留下相对角度。真实实现把这一操作分块应用到许多维度。 +

+
+
+ +
+ 长上下文边界 +

“有相对位置”不等于“任意长度可靠外推”。训练长度、频率分配、缩放策略、数据与评测都会共同决定长上下文表现。

+
-

06 TRANSFORMER BLOCK

-

Attention 只负责交流;FFN 才负责每个位置内部加工

-

- 一个现代 decoder block 通常由两类子层组成:Attention 在位置之间混合信息; - FFN 对每个位置独立应用相同的非线性变换。残差让子层学习“在现有表示上改多少”, - Normalization 则控制数值尺度。 -

-
-
-

07 TRAINING & GENERATION

-

训练能并行看完整答案;生成却必须一次走一步

-
+
+

09 RESIDUAL · NORM · DEPTH

+

深度不是把同一层复制很多次那么简单;主路径放在哪里会改变优化

+

+ Residual connection 让子层学习增量 F(x),输出 x+F(x)。 + 即使某个子层暂时学得不好,恒等路径仍可传递表示和梯度。 + 这一思想来自 ResNet;Transformer 把它用于 attention 与 FFN 子层。 +

+ +
- TRAINING / TEACHER FORCING -

一段文本同时产生许多训练题

-

输入“今 天 天 气”,标签右移为“天 天 气 好”。因果 mask 阻止偷看,四个位置可并行算损失。

+ POST-LN / ORIGINAL + y = LN(x + F(x)) +
x→ F → + → LN →y
+

原始 Transformer 的图与正文。输出附近初始化梯度可能较大,训练常依赖 warm-up。

- INFERENCE / AUTOREGRESSIVE -

新 Token 不存在,必须逐个生成

-

先产生第一个,再把它放回输入产生第二个。KV Cache 避免每一步重算全部旧 Token 的 K/V。

+ PRE-LN / COMMON MODERN + y = x + F(LN(x)) +
x→ LN → F → + →y
+

主 residual path 更接近恒等映射,初始化梯度更良好;不等于在所有深度与目标上都更优。

+ +

LayerNorm 与 RMSNorm

+
+
LAYERNORM(x − μ) / √(σ² + ε) · γ + β

重中心化 + 重缩放。

+
RMSNORMx / RMS(x) · γ

去掉均值中心化,只保留重缩放。

+
+ +

为什么 Kimi 会提出 Attention Residuals

- 这个差异解释了为什么训练吞吐和线上生成速度是两套系统问题,也解释了 K3 为什么同时关心 - KDA state、MLA KV Cache、推测解码 draft model 和 fleet scheduling。 + 标准 Pre-Norm residual 以固定单位权重累加所有层输出。AttnRes 报告把深层的 hidden-state growth + 与单层贡献稀释作为动机,改为让当前层按内容选择先前层表示。 + 这是**深度维路由**,不要和 token 之间的 self-attention 混为一谈。

-

Logits 怎样变成一个 Token

+ +
+
STANDARDhₗ = h₀ + Σᵢ Fᵢ

固定单位权重累加

+ +
ATTNREShₗ = Σᵢ αₗᵢ · stateᵢ

对先前深度表示做选择性聚合

+
+
+ +
+

10 FFN · GLU · MOE

+

信息“找回来”以后,还要在每个位置内部做一次高容量变换

- 最后一层表示经 LM head 投影到词表大小,得到每个 Token 的 logits。temperature 调整分布尖锐程度, - top-p/top-k 截断候选,再采样或取最大值。它们改变选择策略,不会给模型增加知识,也不能修复错误推理。 + Position-wise FFN 对每个 token 独立使用同一组权重。原始 Transformer 是两层线性变换夹 ReLU; + 现代 LLM 常用门控变体。由于序列位置彼此独立,这一子层很适合扩大通道容量或替换为稀疏专家。 +

+ +
+
+ RELU FFN + W₂ · ReLU(W₁x) +

简单两层逐位置网络。

+
+
+ SWIGLU + W₂(SiLU(Wgx) ⊙ Wux) +

门控支路调制内容支路。

+
+
+ SPARSE FFN + Σᵢ gateᵢ(x) Eᵢ(x) +

每个 token 只激活少量专家。

+
+
+ STABLE LATENTMOE + latent route + SiTU-GLU +

路由潜空间扩容并加入稳定化。

+
+
+ +
+ 一口人话 +

Attention 像“把相关资料搬到桌上”,FFN / MoE 像“坐在自己的工位处理资料”。只搬不算,模型不会完成复杂变换。

+
+ +
+ MoE 边界 +

稀疏激活降低的是每 token 实际计算相对总参数的比例;它不会自动消除 expert 权重搬运、all-to-all 通信与负载不均。

+
+
+ +
+

11 ARCHITECTURE FAMILIES

+

Encoder-only、Decoder-only、Encoder–Decoder:区别首先在拓扑与可见性

+ +
+
+ ENCODER-ONLY +

BERT 路线

+
Full self-attentionFFN× N
+

同一层通常看全句,适合构造双向表示。要直接自回归生成,需要改变 mask 或加 decoder。

+
+
+ DECODER-ONLY +

GPT / 现代 LLM

+
Causal self-attentionFFN / MoE× N
+

统一成“给定前缀继续生成”,天然适合开放式生成和 in-context prompting。

+
+
+ ENCODER–DECODER +

Transformer / T5 路线

+
Encoder full selfDecoder causal selfCross attention
+

先编码输入,再由 decoder 有条件生成;翻译、摘要与转换任务很自然。

+
+
+ +

原始 Transformer 到底是哪一个

+

+ 2017 论文是第三类:完整 encoder–decoder 机器翻译系统。 + GPT 后来保留 decoder stack,去掉 encoder 与 cross-attention; + BERT 反过来保留 encoder;T5 再把 encoder–decoder 用统一 text-to-text 目标规模化。 + 把原始论文画成一个 causal decoder block,会抹去真正的历史分叉。 +

+ +
+
Transformer

Encoder + Decoder

+
+
GPT

只取 Decoder · causal LM

+
BERT

只取 Encoder · MLM

+
T5

保留两端 · span corruption

+
+
+
+ +
+

12 OBJECTIVES ≠ ARCHITECTURES

+

同一个 Transformer 骨架,可以被完全不同的训练题塑形

+ +
+
目标输入可见性模型预测代表直接行为
+
Causal LM

只见过去

下一个 token

GPT / LLaMA续写与生成
+
Masked LM

左右文

被遮 token

BERT双向表示
+
Span corruption

encoder 见破损输入

decoder 重建 span

T5条件文本生成
+
Prefix LM

前缀双向 + 生成因果

生成区 token

UniLM 等理解/生成统一
+
MTP auxiliary

主干仍因果

额外未来 token

DeepSeek-V3 / K3增密训练信号
+
+ +

DeepSeek 的 MTP 为什么不能写成“取代 next-token prediction”

+

+ V3 报告使用 D 个顺序 MTP 模块预测额外未来 token,并把损失作为主语言模型损失的辅助项。 + 报告明确说推理时可以直接丢弃 MTP 模块,主模型独立运行; + 也可以把模块改用于 speculative decoding。主模型依旧是自回归 Transformer。 +

+ +
+
MAIN MODELhₜ → predict xₜ₊₁主 next-token loss
+ +
MTP 1hₜ + xₜ₊₁ → xₜ₊₂辅助未来一步
+ +
MTP Dsequential future depth训练时增密信号
+
+
+ +
+

13 TRAIN · PREFILL · DECODE

+

同一个模型有三种完全不同的运行形态;优化错阶段,数字就会误导

+ +
+
+ TRAINING

整段并行 + 反向传播

+

已知正确 token,因果 mask 防泄漏;需要保存激活、梯度与优化器状态。

+
主要压力
FLOPs · activation · communication
可并行
序列位置大体并行
+
+
+ PREFILL

把已有 Prompt 一次编码进缓存

+

没有反向传播,但要对长 Prompt 做大量矩阵计算并建立 K/V 或 recurrent state。

+
主要压力
Compute · Attention IO
可并行
Prompt token 并行
+
+
+ DECODE

一次只产生一个新 Token

+

历史 K/V 已缓存;每步模型小批量读取大量权重与缓存,常受带宽和调度限制。

+
主要压力
Memory bandwidth · KV Cache
可并行
跨请求 / batch
+
+
+ +
+
INPUT今 · 天 · 天 · 气
+ shift +
LABEL天 · 天 · 气 · 好
+

四个位置可同时产生 loss;但位置 1 的 attention 仍看不到标签侧未来信息。

+
+ +
+ 常见错觉 +

“训练时所有 token 同时输出”不等于模型学会了非自回归生成;部署时没有正确未来 token 作为输入,仍必须逐步采样。

+
+
+ +
+

14 KV CACHE · MQA · GQA · MLA

+

Decode 的关键不是再算一遍过去,而是怎样保存和搬运过去

+

+ 标准自回归解码中,旧 token 的 K/V 不会改变。KV Cache 保存它们, + 下一步只计算新 token 的 Q/K/V,再让新 Q 读取全部历史 K/V。 + 这用显存换掉了重复计算,却让长上下文和大 batch 的缓存迅速膨胀。 +

+ +
+
+ t=1 + t=4 + t=16 + t=n +
+
STANDARD CACHEO(layers × length × KV heads × head dim)

每增长一个 token,每层都追加 K/V。

+
+ +
+
MHA

每个 Q head 都有 K/V head

表达容量高,缓存最大。

+
GQA

一组 K/V 服务若干 Q heads

质量与缓存的中间折中。

+
MQA

全部 Q heads 共享单组 K/V

最小化 K/V heads,可能有质量代价。

+
MLA

缓存低维 latent,再上投影

cᴷⱽ↑ K/V

不是 GQA 改名,而是低秩表示路线。

+
+ +
+ KV bytes ≈ 2 × L × n × hkv × dhead × bytes/element + “2”来自 K 与 V;实际还受 batch、分页、量化、层配置与压缩方案影响。 +
+
+ +
+

15 IO-AWARE ATTENTION

+

FlashAttention 没有改数学答案;它改变的是中间矩阵如何穿过 GPU 内存层级

+

+ 朴素实现常把 n×n 的 score 与 probability 矩阵写回 HBM,再读回来乘 V。 + GPU 算术很快,但这些大矩阵在 HBM 与片上 SRAM 之间往返可能成为瓶颈。 + FlashAttention 把 Q/K/V 分块搬入 SRAM,用在线 softmax 累积正确归一化结果, + 避免物化完整 attention matrix。 +

+ +
+
+ STANDARD MATERIALIZATION +
HBMQKᵀ 写出HBM n²softmax 再写HBM n²×VO
+

中间矩阵大,HBM 读写多。

+
+
+ FLASHATTENTION +
HBMQ/K/V tilesSRAMonline softmaxO
+

分块计算精确结果,不写完整 n² 矩阵。

+
+
+ +

“O(n²)”有三张不同的账

+
+
FLOPs稠密 QKᵀ 仍是二次

Flash 不把所有配对计算变成线性。

+
ACTIVATION MEMORY不必保存完整 n² 矩阵

分块与重算显著降低内存占用。

+
HBM IO显著减少读写

这是 FlashAttention 的核心问题设定。

+
+ +
+ 论文数字必须带设置 +

NeurIPS 2022 论文报告的 3× GPT-2 kernel/训练、2.4× Long Range Arena 等结果属于特定硬件、长度和实现;“Flash 永远快 3 倍”不是可迁移公理。

+
+
+ +
+

16 DEEPSEEK SPOTLIGHT

+

DeepSeek 的漂亮之处:每一代都明确指出自己在改哪张成本账

+

+ DeepSeek 不是简单地把 Attention 换一个名字。 + V2 从 KV 表示入手,V3 保留 MLA 并加强训练目标,V3.2 引入稀疏索引, + V4 再把压缩稀疏 Attention 与深度连接联合设计。 +

+ +
+
+ KV REPRESENTATION +

MLA

+

把每个 token 的 K/V 压到低维 latent cKV,缓存 latent,再上投影供多头使用。

+
主攻
KV Cache
不等于
GQA / linear attention
+
+
+ TRAINING SIGNAL +

MLA + MTP

+

架构继续使用 MLA;额外顺序模块预测多个未来 token,主 next-token 目标仍保留。

+
主攻
Data efficiency / planning
推理
模块可丢弃或改作 draft
+
+
+ SPARSE SELECTION +

DSA

+

用轻量索引器选择有限 token,再在被选 token 上做精细 Attention。

+
主攻
长序列计算
边界
候选选择质量
+
+
+ 1M CONTEXT + DEPTH +

CSA / HCA + mHC

+

混合压缩稀疏 Attention,并用 manifold-constrained hyper-connections 升级 residual path。

+
主攻
FLOPs · KV · depth
不是
单一 Attention trick
+
+
+ +

MLA 的最小结构

+
+
HIDDENhₜ
+ Wᴰᴷⱽ +
COMPRESSED CACHEcₜᴷⱽ低维 latent
+ Wᵁᴷ / Wᵁⱽ +
PER-HEADkₜʰ / vₜʰ参与全局 Attention
+
+ +
+
V2 REPORT / VS DEEPSEEK 67B−93.3%

KV Cache

+
V2 REPORT / SAME COMPARATOR5.76×

maximum generation throughput

+
V4-PRO / VS V3.2 @ 1M27% / 10%

single-token FLOPs / KV Cache

+
V4-FLASH / VS V3.2 @ 1M10% / 7%

single-token FLOPs / KV Cache

+
+

+ 上述均是各技术报告内部口径:比较模型、硬件、batch、量化、服务栈与上下文长度改变后,比例不会原样迁移。

-
-

08 COMMON MISCONCEPTIONS

-

六个最容易带进后续论文的误解

-
-
误解 01

Attention 权重就是模型解释

权重只描述某层某头的 value 混合比例;它不必等价于最终预测的因果解释。

-
误解 02

上下文越长就记得越好

窗口是容量上限;检索、位置偏差、干扰和训练分布决定模型是否会用。

-
误解 03

参数越多,每次计算一定越贵

Dense 模型大致如此;MoE 可让总参数远大于激活参数,但引入路由和通信成本。

-
误解 04

Tokenizer 只影响输入长度

它还决定模型看到的基本单位,影响跨语言效率、数字/代码规律与词表输出。

-
误解 05

模型在数据库里查答案

预训练知识分布在参数计算中;显式检索需要外接索引、工具或上下文。

-
误解 06

CoT 是模型真实内心记录

生成的推理文本可用于求解和检查,但不保证完整、忠实地暴露内部因果过程。

+
+

17 KIMI K3 MAPPING

+

回到 K3:长度、全局交互、深度和宽度由四套机制分工

+

+ K3 最值得学习的不是缩写数量,而是轴向分工: + KDA 维护长序列状态,周期性 Gated MLA 保留全局内容交互, + AttnRes 选择深度表示,Stable LatentMoE 提供稀疏通道容量。 +

+ +
+
+ SEQUENCE / LENGTH

KDA

+

带 channel-wise forget gate 的 delta-rule recurrence;decode 维护固定大小 state。

+ 3 layers / block +
+
+ GLOBAL TOKEN MIXING

Gated MLA

+

沿用 latent KV compression,并加入 input-dependent output gate;周期性补足全局交互。

+ 1 layer / block +
+
+ DEPTH

AttnRes

+

当前层对先前层/块表示做 softmax 选择,而不是只按单位权重累加。

+ Block variant at scale +
+
+ WIDTH

Stable LatentMoE

+

在低维路由空间扩大 experts;RMSNorm 与 SiTU-GLU 抑制潜表示和激活失稳。

+ 896 experts · 16 active +
+
+ +
+
ATTNRES READ选择先前深度状态
+
+
01KDAfixed recurrent state
+
02KDAposition-sensitive mixing
+
03KDAchannel-wise decay
+
04Gated MLAglobal token-to-token
+
+
EACH ATTENTION LAYER→ Stable LatentMoEsparse channel mixing
+
ATTNRES WRITE进入下一深度选择池
+
+ +
+
机制主要状态随长度增长?主要问题轴不应误写成
+
MHA

每头 K/V

标准全局检索唯一 Transformer
+
GQA

分组 K/V

KV heads 折中MLA
+
MLA

低维 KV latent

是,但更小

缓存表示秩线性 Attention
+
KDA

recurrent matrix state

固定大小

序列状态更新低秩 KV Cache
+
AttnRes

先前层/块表示

与深度有关

跨层路由token self-attention
+
+ + + NEXT DEEP DIVE / KIMI K3 +
把四条轴扩展到完整 2.8T 系统

继续看原生多模态、数据、稳定性、训练基础设施、Agentic RL 与部署系统。

+ 进入 K3 专题 → +
+
+ +
+

18 INTERPRETABILITY BOUNDARY

+

Attention 权重能告诉我们“这一步怎样混合 Value”,却不自动回答“为什么模型这样决定”

+

+ 权重 α 是真实前向计算的一部分,因此当然值得观察。 + 但输出还受 V、WO、其他 heads、FFN、Residual、后续层与非线性共同影响。 + 一个来源权重高,可能携带的 Value 很弱;另一个权重低,却通过后续路径产生关键影响。 +

+ +
+
SAFE

描述权重

“这个 head 在此输入上给 token j 0.42 权重。”

+
HYPOTHESIS

提出模式假设

“它可能在追踪相对位置或指代候选,需要跨样本验证。”

+
INTERVENTION

做因果干预

消融、patching、替换、counterfactual 与多随机种子对照。

+
OVERCLAIM

读心式结论

“热力图证明模型因为这个词才得出答案。”——证据不足。

+
+ +

2019 年争论给课程的最好教训

+

+ Jain & Wallace 说明标准 attention 权重常不足以作为输入重要性解释; + Wiegreffe & Pinter 指出“解释”的定义、模型整体与对照基线必须明确。 + 因此本站不把争论压成一句口号,而采用操作性纪律: + 先说观测对象,再说干预方法,最后限定结论范围。 +

+
+ +
+

19 NEW ARCHITECTURE CHECKLIST

+

以后遇到任何“新 Attention”,先问十个问题,不要先背缩写

+ +
+
01信息路径

读取完整历史、稀疏候选,还是有限状态?

+
02匹配几何

softmax 点积、kernel、delta rule 还是 learned index?

+
03可见性

full、causal、cross、sliding window 还是 prefix?

+
04位置

绝对、相对、RoPE、NoPE,还是状态隐式编码?

+
05深度路径

Pre/Post-Norm、RMSNorm、hyper-connection 或 AttnRes?

+
06局部计算

ReLU/GELU、SwiGLU、dense FFN 或 MoE?

+
07训练阶段

是否仍可并行?需要哪些 activation 与通信?

+
08推理状态

缓存 K/V、latent、sparse tail 还是 recurrent state?

+
09比较口径

同参数、同 FLOPs、同 token、同硬件、同 kernel 吗?

+
10证据等级

peer-reviewed、技术报告、官方实现,还是未复现宣称?

+
+ +
+ MASTER QUESTION +

这篇论文把哪一种状态,从哪一层内存,用什么计算和通信,送到哪个位置或深度?

+
+
+ +
+

20 READING PATH

+

同一章可以读三遍;每一遍都能独立形成闭环

+ +
+
+ L0 / 30–45 MIN

只建立直觉

+
    +
  1. 读 00–03:瓶颈、软检索、QKV。
  2. +
  3. 在实验室玩“QKV 手算”和“Mask 矩阵”。
  4. +
  5. 读 08、11、17:block、家族、K3 四轴。
  6. +
+ 完成标准:能用自己的话解释“谁从谁那里拿什么”。 +
+
+ L1 / 60–90 MIN

补齐机制与公式

+
    +
  1. 读 04–10:scale、mask、heads、position、norm、FFN。
  2. +
  3. 手算一次 softmax 加权和,画出 causal mask。
  4. +
  5. 比较 GPT、BERT、T5 的拓扑与目标。
  6. +
+ 完成标准:能写出矩阵形状并指出架构/目标差异。 +
+
+ L2–L3 / 90+ MIN

进入系统与当代论文

+
    +
  1. 读 13–18:阶段、缓存、Flash、DeepSeek、K3、解释边界。
  2. +
  3. 按 40 节点论文链选择 8 篇主干原文。
  4. +
  5. 用第 19 节清单审计一个新架构。
  6. +
+ 完成标准:能把 MLA/KDA/AttnRes/MTP 分到不同成本轴。 +
+
+ +

最小必读八篇

+
-

LANDMARK PAPERS

-

从问题到 Transformer 的关键论文链

-
- - A Neural Probabilistic Language Model

用可学习分布式词表示和神经网络估计语言概率,突破纯计数泛化。

-
- - Efficient Estimation of Word Representations in Vector Space

Word2Vec 让大规模词向量训练变得简单高效。

-
- - Sequence to Sequence Learning with Neural Networks

Encoder—decoder 统一可变长序列映射,也暴露固定向量瓶颈。

-
- - Neural Machine Translation by Jointly Learning to Align and Translate

Decoder 每一步软选择 encoder 状态,注意力成为跨序列桥梁。

-
- - Attention Is All You Need

用 self-attention 和 FFN 取代循环,打开大规模并行训练路径。

-
- - Improving Language Understanding by Generative Pre-Training

Decoder Transformer 先做通用语言建模,再迁移到下游任务。

-
- - BERT

双向 masked language modeling 证明大规模预训练表示的通用价值。

-
- - Language Models are Few-Shot Learners

GPT-3 展示规模扩大后上下文学习成为重要交互范式。

-
+

VERIFIED PAPER CHAIN

+

40 个节点,不是一条“新论文淘汰旧论文”的排行榜

+

+ 论文链按“旧瓶颈 → 新接口 → 暴露的新代价 → 后续修正”组织。 + 深色标记是全章主轴,蓝色是 DeepSeek,铜色是 Kimi,空心节点是重要桥梁或证据边界。 +

+ +
+ 主干必读 + 谱系桥梁 + DeepSeek + Kimi + 解释/证据边界
-
- 下一步:KDA 如何改造注意力 → - 回到课程地图 + + + +
diff --git a/src/pages/index.astro b/src/pages/index.astro index f851a1a..5ceaaa2 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -81,6 +81,7 @@ const paths = [
选择学习路径 语言模型从哪里来 + 注意力与 Transformer 直接解剖 K3 DeepSeek 专题 Scaling Laws 专题 @@ -99,7 +100,7 @@ const paths = [
16核心专题
151K3 报告来源
-
247关键论文索引
+
258关键论文索引
47pK3 技术报告
@@ -113,6 +114,22 @@ const paths = [
+ +
+

NEW / CHAPTER 02 ATTENTION · TRANSFORMER

+

Attention 不只是“看哪里”,Transformer 也不只有一种 Block

+

+ 用信息路径、匹配几何、可见性、多头、位置、局部计算、深度、架构目标、系统成本与当代映射十张账, + 从 Bahdanau 软对齐和 2017 原始 encoder–decoder,一路走到 FlashAttention、DeepSeek MLA 与 Kimi K3。 +

+
+
+
LINEAGE
2014 → 2026
+
PAPERS
40 个一手节点
+
LAB
QKV · Mask · 多头位置 · Block 成本
+
+ +

NEW / CHAPTER 01 LANGUAGE MODELING ORIGINS

@@ -474,6 +491,7 @@ const paths = [ transition: transform 180ms ease, border-color 180ms ease; } + .transformer-release, .foundation-release, .numerics-release, .data-release, @@ -500,6 +518,14 @@ const paths = [ var(--paper-raised); } + .transformer-release { + background: + radial-gradient(circle at 82% 18%, rgba(56, 91, 128, 0.21), transparent 30%), + radial-gradient(circle at 60% 74%, rgba(159, 91, 52, 0.12), transparent 26%), + repeating-linear-gradient(90deg, transparent 0 64px, rgba(56, 91, 128, 0.04) 64px 65px), + var(--paper-raised); + } + .data-release { background: radial-gradient(circle at 82% 18%, rgba(76, 118, 112, 0.2), transparent 30%), @@ -590,6 +616,7 @@ const paths = [ padding-bottom: 76px; } + .transformer-release, .foundation-release, .numerics-release, .data-release, diff --git a/src/pages/progress/index.astro b/src/pages/progress/index.astro index e704d8a..7909239 100644 --- a/src/pages/progress/index.astro +++ b/src/pages/progress/index.astro @@ -11,7 +11,7 @@ const workstreams = [ { label: "网站设计系统", value: 89, next: "打印样式与更多通用可视化组件" }, { label: "Kimi K3 深读", value: 66, next: "扩写 pre-training / infra 逐图笔记" }, { label: "语言模型前史", value: 78, next: "逐图精读 Kneser–Ney、LSTM 与 Bahdanau,并加入真实小语料复现" }, - { label: "Transformer 基础", value: 52, next: "加入矩阵形状动画与手算练习" }, + { label: "Transformer 基础", value: 79, next: "逐图精读多头电路、Pre/Post-LN 与真实 kernel / KV 配置" }, { label: "Scaling Laws", value: 74, next: "加入真实拟合复现、置信区间与更多模型族对照" }, { label: "数据工程与预训练配方", value: 73, next: "逐图精读 FineWeb / DCLM,加入真实去重与 mixture traces" }, { label: "DeepSeek 专题", value: 71, next: "补 R1 / DAPO 的逐图训练轨迹与复现对照" }, @@ -44,7 +44,7 @@ const workstreams = [
OVERALL
专题平均 {average}%
READABLE
{published} 个首版可读专题
ACTIVE
{researching} 个研究/写作中
-
UPDATED
2026-07-29 04:48 CST
+
UPDATED
2026-07-29 05:20 CST
MODE
持续迭代,不锁死版本
@@ -91,9 +91,10 @@ const workstreams = [

K3 报告已结构化拆解

47 页报告目录、151 条参考来源和架构/后训练/系统主线已经提取。

16 专题知识图

从语言模型基础到评测安全,包含先修依赖和三条贯穿案例。

编辑式网站系统

响应式导航、章节模板、侧栏、进度、论文链和证据提示组件。

-

二十八个原创交互视图

K3、语言模型前史、注意力、DeepSeek、长上下文、MoE、推理,以及训练系统、Scaling、数据工程和数值专题的多页签实验。

+

三十一个原创交互视图

K3、语言模型前史、Transformer 四联实验、DeepSeek、长上下文、MoE、推理,以及训练系统、Scaling、数据工程和数值专题。

十一篇首版长文

K3、语言模型前史、Transformer、DeepSeek、Scaling、数据工程、长上下文、MoE、推理、训练系统与数值优化专题。

语言模型前史深度专题

八张独立问题账、33 个正式节点、20 段长文与概率—向量—记忆—对齐四联实验。

+

Transformer 深度专题

十张独立问题账、40 个正式节点、21 段正文与 QKV—Mask—多头位置—Block 成本四联实验。

Scaling Laws 深度专题

九张账、29 个一手节点、DeepSeek/Kimi 双谱系与曲面—部署—复用—涌现四联实验。

数据工程深度专题

十二张账、31 个一手节点、DeepSeek/Kimi 双谱系与流水线—去重—混合—改写四联实验。

长上下文深度专题

五张成本账、26 篇一手论文、10+ 机制图与 8 策略交互实验室。

@@ -101,7 +102,7 @@ const workstreams = [

推理深度专题

八张账、30 篇一手论文链、DeepSeek/Kimi 双主线与三页签互动实验室。

训练系统深度专题

九张账、37 个一手节点、DeepSeek/Kimi 双谱系与显存—网格—气泡—通信实验室。

数值、优化器与稳定性深度专题

十张账、36 个一手节点、K2/K3 与 DeepSeek-V3/V4 双谱系,以及格式—状态—更新—失稳四联实验。

-

247 篇关键论文索引

新增 24 个语言模型前史节点,并把 DeepSeek-V3/V4 与 K3 映射回 next-token 主线。

+

258 篇关键论文索引

补齐 Residual/Norm、相对位置、UniLM、多头冗余、Attention 解释争论与 NormFormer 等 11 个节点。

公开仓库与自托管发布

源码公开到 git.k1412.top,网站由不可变镜像、Compose Manager 与 HTTPS 交付。

@@ -116,6 +117,7 @@ const workstreams = [
优先级专题本轮交付完成闸门
+
P0Transformer 二轮

多头电路逐图 → Pre/Post-LN 真实 traces → Flash/KV 配置与 kernel 对照

逐图笔记 + 实测边界
P0语言模型前史二轮

Kneser–Ney / LSTM / Bahdanau 逐图 → 真实小语料复现 → tokenizer 公平性

可复现实验 + 逐图笔记
P0Scaling Laws 二轮

真实拟合复现 → 置信区间 → 更多模型族与下游任务外推

可复现实验 + 逐图笔记
P1数据工程二轮

FineWeb / DCLM 逐图 → 真实去重误伤 → mixture traces 与污染案例

逐图笔记 + 案例库
@@ -172,6 +174,8 @@ const workstreams = [
低精度结论必须写完整角色合同

对象、格式、scale 粒度、accumulator、输出与硬件不再被压缩成一个 dtype 标签。

语言模型前史按八张账组织

预测单位、概率信息、上下文、稀疏性、分布式表示、循环记忆、序列转导与系统成本不再混成单一架构年表。

NTP、MTP 与多模态永久分角色

K3 的统一视觉/文本 next-token objective、one MTP layer 与 EAGLE-3 draft bridge 分开记账;DeepSeek MTP 也不写成取代自回归。

+
Transformer 按十张账组织

信息路径、几何、可见性、多头、位置、局部计算、深度、目标、系统成本与当代映射不再混成一个 Block。

+
Attention 权重与因果解释永久分离

热力图可描述中间权重和提出假设;因果结论必须补消融、patching 或反事实干预。