2026-04-15 · transformer
【Transformer 与注意力机制】08 嵌入:从 one-hot 到分布式表示
embedding 是把离散的词变成稠密向量的桥梁。从 one-hot 的痛苦出发,经过 Firth 的分布假设、word2vec、GloVe、ELMo、BERT,一路走到现代 LLM 的 embedding 矩阵,本文把这条 70 年的演化讲清楚。





















到这里,前 19 篇已经把 Transformer 的所有重要部件单独讲了一遍:
但 19 篇的逐个零件讲解,到这里必须合成一张完整的图。只有当你能闭着眼睛说出「一个 token 从被 tokenize 那一刻起,到最终 softmax 出概率分布,中间经过了哪 N 步」时,你才算真正理解 Transformer。
这一篇就来做这件事。我不再讲新东西(新概念全在前 19 篇),而是把所有部件串起来,跟随一个具体的 token 走完它在 Transformer 里的旅程。读完后你应该能徒手画出 Transformer 的全貌、解释每一个箭头的存在理由、说出训练时和推理时数据流的差异。
下图是论文 Figure 1 的清晰重绘版本,左边是 encoder(堆 N=6 层),右边是 decoder(堆 N=6 层),中间通过 cross-attention 连接:
把这张图刻进脑子里。它的关键骨架是:
这个架构在 2017 年是为机器翻译设计的,但今天的 LLM(GPT/LLaMA 等)只用了右半部分(decoder-only)。理解了完整图,就能瞬间理解 BERT(只用 encoder)和 GPT(只用 decoder)的关系。
把 encoder 的一层放大,内部是这样的:
每一层做 6 件事:
x + attn(x)(残差)y + FFN(y)(残差)这 6 步组成一个 sublayer 群,N 层堆起来形成 encoder。
注意原论文用 Post-LN(Add 之后再 Norm)。今天大模型几乎全部用 Pre-LN(Norm 在 sublayer 前)。两者公式:
out = LayerNorm(x + Sublayer(x))out = x + Sublayer(LayerNorm(x))Pre-LN 训练稳定性更好(第 15 篇展开过),是 GPT-2 之后的事实标准。
decoder 比 encoder 多一个 sublayer(cross-attention),所以一层有 9 步:
9 步分成 3 个 sublayer 群:
第一组(Masked Self-Attention): 1. Masked Multi-Head Self-Attention(QKV 都来自 decoder 的输入 y) 2. Add(残差) 3. LayerNorm
第二组(Cross-Attention): 4. Cross-Attention(Q 来自 decoder,K、V 来自 encoder 的最终输出) 5. Add 6. LayerNorm
第三组(FFN): 7. Feed Forward 8. Add 9. LayerNorm
注意几个关键差异:
让我们把 source = "Hello world"、target =
"Bonjour le monde" 的翻译过程,详细 trace
一遍。
"Hello world" →
[15496, 995](假设 BPE 编码)。
"Bonjour le monde" →
[10222, 333, 7625]。
decoder 的输入要 shift right(首位加
BOS):[BOS, 10222, 333]。target
输出(要预测的):[10222, 333, 7625]。
每个 token id → d 维向量(d=512 base 模型)。结果: -
source embeddings: 形状 (2, 512) - target
embeddings: 形状 (3, 512)
embedding 矩阵 E 大小
(vocab_size, 512)。论文里 source 和 target
共享同一个 E。
按位置 t 加 sin/cos:
PE[t, 2i] = sin(t / 10000^(2i/d))
PE[t, 2i+1] = cos(t / 10000^(2i/d))
x = embedding + PE。这一步把「位置信息」灌入了向量表示。第
11 篇详细讲过为什么这个编码能让模型 learn
出相对位置关系。
source 进入 encoder layer 1:
softmax(QK^T/√d_k) V,得到 attention
输出(2, 512)重复 6 次。最终 encoder 输出
mem ∈ R^(2,512),作为 decoder 的「记忆」。
target embedded (3, 512) 进入 decoder layer
1:
Masked Self-Attention:QKV 都来自
(3, 512) 自己,但 attention matrix 用下三角
mask 屏蔽未来。位置 0 只看 0;位置 1 看 0,1;位置 2 看
0,1,2。
Cross-Attention:Q 来自前一步输出
(3, 512),K, V 来自 encoder 输出 mem
(2, 512)。所以 attention matrix 是 3×2
的(每个 decoder 位置对每个 encoder
位置)。这一步是「翻译」真正发生的地方——decoder 在生成
Bonjour 时,attention 主要 focus 在 source 的
Hello。
FFN:(3, 512) → (3, 2048) → (3, 512)。
重复 6 层。
decoder 最后一层输出 (3, 512)。过一个
Linear(512 → vocab_size) →
(3, vocab_size) → softmax。
每行是一个位置的下一个 token 概率分布。位置 0(输入
BOS)的输出预测应该是 Bonjour,位置 1(输入
Bonjour)预测 le,位置 2(输入 le)预测
monde。
cross-entropy over vocab,对 3 个位置取平均:
loss = -(1/3) · Σ log p(target[t] | inputs[:t])
backward propagation 一直传回到 embedding 表,所有矩阵都更新一步。
整个训练过程一次 forward 处理了 3 个目标位置。这就是 Transformer 训练比 LSTM 快几十倍的根源。
同样一组权重,训练和推理的执行方式完全不同:
训练(teacher forcing):
推理(autoregressive):
理解这两种执行方式的差异,是理解所有「推理优化」(KV cache、speculative decoding、parallel decoding)的前提。
原论文是 Encoder-Decoder,但 2018 年之后,工业界把它拆成了三种用法:
Encoder-only(BERT 派):
Decoder-only(GPT 派):
Encoder-Decoder(原版/T5 派):
下面这张表对比了三种变体的工程权衡:
| 维度 | Encoder-only | Decoder-only | Encoder-Decoder |
|---|---|---|---|
| Self-attention mask | 双向 | causal | encoder 双向、decoder causal |
| 推理形式 | 一次前向 | 自回归 | 自回归 |
| 训练目标 | MLM | LM | seq2seq |
| 主要用途 | 理解 | 生成 | 翻译/摘要 |
| 参数效率 | 高(全用) | 高(全用) | 低(参数翻倍) |
| 灵活性 | 任务化强 | 通用 | 任务化强 |
| 时代 | 2018–2020 | 2020+ | 2017–2020 |
七年间,三种变体逐渐演化成今天 decoder-only 一家独大。原因不是 decoder-only 在理论上最优,而是几个工程现实的合力:
1)Pretraining-finetuning 范式。GPT-3 证明 decoder-only 可以靠 in-context learning 适配新任务。这一发现让「先训一个通用 LM 再当成任何工具」的范式诞生,encoder-decoder 的「为每个任务做专门 fine-tune」范式被淘汰。
2)数据简单。decoder-only 只要纯文本、自回归预测下一个 token。encoder-decoder 训练需要构造 (input, output) 对,数据更难规模化。
3)参数效率。同样的总参数量,decoder-only 全部用于「建模文本」;encoder-decoder 一半用于 encode,一半用于 decode,对 generation 任务来说浪费。
4)KV cache 优化路线清晰。decoder-only 的推理优化(KV cache、PagedAttention、speculative decoding)路线明确,工业界投入巨大;encoder-decoder 的优化生态弱很多。
5)任务统一。一切任务都可以转成「输入 prompt → 输出 text」的形式,decoder-only 天然胜任。「翻译」也只需要 prompt:「把这句翻译成法语:Hello world」。
这就是为什么 GPT、LLaMA、Claude、Gemini 全是 decoder-only 的原因。Encoder-only(BERT 派)现在主要存活在「精排、向量检索、文本分类」这些经典 NLP 任务里;encoder-decoder 主要存活在 T5 派的研究里。
论文 base 模型(d=512、L=6、h=8、d_ff=2048、vocab=37k)的参数构成:
Embedding:vocab × d = 37000 × 512 ≈ 19M
每个 encoder layer:
每个 decoder layer:
输出投影:与 embedding 共享,0 增。
合计:embedding 19M + encoder 19M + decoder 25M ≈ 63M。论文写「65M」,差距来自 LayerNorm/positional 等小项。
注意几个观察:
把这个账本记在心里,看到任何 Transformer 架构都能秒算参数量。
第 20 篇是 Transformer 系列前半部分的总结。从第 21 篇开始,本系列将进入两条主线:
主线 A(架构演进):第 21–35 篇覆盖 BERT、GPT、T5 详解,以及 RoPE、ALiBi、GQA、MoE、RMSNorm、SwiGLU 等近代架构改进。
主线 B(推理与工程):第 36–50 篇覆盖 KV cache、PagedAttention、FlashAttention、量化、speculative decoding、长上下文等推理优化。
如果第 20 篇你能合上眼睛画出完整 Transformer 图,那么后面所有的「改进」与「优化」都只是在这张图上做局部替换。Transformer 七年来真正变化的只是细节,骨架仍是 2017 年的样子。
这正是这篇论文最了不起的地方:在它之后,所有人都只是在它的图上修修补补。
← 上一篇:19.《Attention Is All You Need》论文背景 | 下一篇:21. BERT 与 Encoder-only 路线 →
把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-04-15 · transformer
embedding 是把离散的词变成稠密向量的桥梁。从 one-hot 的痛苦出发,经过 Firth 的分布假设、word2vec、GloVe、ELMo、BERT,一路走到现代 LLM 的 embedding 矩阵,本文把这条 70 年的演化讲清楚。
2026-04-15 · transformer
RNN 三难(长程依赖、梯度稳定、训练并行)的系统分析;attention 如何作为补丁逐步把 RNN 推向极限;Vaswani 2017 抛弃循环的范式革命
2026-04-15 · transformer
很多人第一次读 Vaswani 2017 的公式时,都会卡在那一个 √dk 上。
2026-04-15 · transformer
这是【Transformer 与注意力机制】系列的第一篇,承担两件事:一是把这套五十多篇文章为谁写、解决什么问题、彼此之间是什么关系交代清楚;二是为完全没基础的读者画出一条从向量、点积、矩阵乘法走到自注意力、再走到大语言模型的爬升路径,让你在投入时间之前先知道终点在哪、路上要经过哪些坎、读完之后你会、还不会做什么事。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。