Transformer 是一套处理序列的神经网络骨架。输入一串符号,输出还是一串符号。聊天模型、翻译、代码补全,底层几乎都是它。
2017 年 Google 的论文题目叫 Attention Is All You Need。核心主张就一句:别用 RNN 一步步往后传了,直接让序列里每个位置去查其他位置。
它不是:
模型不吃汉字或英文单词,吃的是切出来的子词片。一句话先被 tokenizer 切成整数 ID,后面所有计算都在这些 ID 上发生。
「Transformer」可能被切成 Trans + form + er,也可能是别的切法。切法是训练时定死的,不是语法。
每个 token ID 变成一个向量,比如 4096 维的一串数。位置信息再加进去(RoPE 或绝对位置编码),模型才知道谁在前、谁在后。
当前位置对其他位置做一次软查找:相关性高的权重大,低的权重小,然后把对应内容加权加起来。这就是那张封面里「把乱线收成查找」的部分。
Attention + 前馈网络(FFN / MLP)叠成一块,再重复 N 次。7B 模型常见 32 层,更大的上百层。层数就是“这块积木重复几遍”。
最后一层把向量映回词表大小的分数,softmax 之后抽样或取最大,吐出下一个 token。聊天就是把吐出来的 token 接回去,再跑一遍。
| 词 | 一句话 | 别和谁搞混 |
|---|---|---|
| token | 模型的字母表条目 | 不是“字”也不是“词” |
| embedding | ID → 向量 | 不是“理解” |
| attention | 按相关性加权查找 | 不是人类注意力 |
| FFN / MLP | 每个位置自己做非线性变换 | 不是另一套注意力 |
| decoder-only | 只能看左边,预测右边 | 不是“解码器芯片” |
忘掉矩阵公式,先记这个比喻:
用 Q 去对所有 K 打分,分数大的 V 多拿一点,加总后就是这个位置的新表示。缩放点积注意力的写法是:
Attention(Q, K, V) = softmax(QKᵀ / √d) V
√d 只是防止点积随维度爆炸,让 softmax 不至于变成 0/1 开关。
现代 decoder 一层通常是:
多头(multi-head)不是多套灵魂,是把向量切成几段,每段用不同的 Q/K/V 投影,再拼回来。有的头学语法,有的头学指代,这是事后观察,不是设计保证。
以「猫坐在垫子上」预测下一个词为例:
训练时是并行的:整句一次性喂进去,靠掩码保证每个位置只预测自己右边第一个。推理时才变成自回归循环。这是它干掉 RNN 的关键——训练能吃满 GPU 的并行,不必一个时间步等下一个。
| 你看到的名字 | 骨架 | 和原文的差别 |
|---|---|---|
| GPT / Grok / Llama / Qwen / DeepSeek | decoder-only | Pre-Norm、RoPE、SwiGLU、GQA、更大上下文 |
| BERT 系 | encoder-only | 双向注意力,适合填空和分类,不适合直接聊天 |
| T5 / 原版论文 | encoder-decoder | 一边读源句,一边生成;翻译的老家 |
| MoE(Mixtral、部分 DeepSeek) | 还是 Transformer | FFN 换成专家路由,注意力那一段没换家 |
所以「Transformer 架构」和「某个 70B 模型」不是一层。前者是电路图,后者是按这张图焊出来、再用数据训出来的一块具体权重。
和昨天那篇 CUDA 扫盲的接缝:CUDA 解释芯片上怎么把矩阵乘跑满;本文解释那些矩阵乘在算什么。一个是跑道,一个是跑的内容。