9.1 背景:为什么需要 Transformer?

2017 年之前,处理文字的主流模型是 RNN(循环神经网络) 和它的变体 LSTM。它们有什么问题?

RNN 的三大痛点

痛点 1:长距离遗忘
"小明昨天去了超市,买了牛奶、面包和鸡蛋,
 然后他回家做了___"

RNN 要"记得"小明昨天去了超市,但中间隔着 20 个词,
前面的信息早就"忘"得差不多了。

痛点 2:不能并行
RNN 必须一个字一个字顺序处理:
  第 1 个词 → 第 2 个词 → 第 3 个词 → ...
没法同时处理,训练慢得离谱。

痛点 3:梯度消失
错误信息在反向传播时逐层衰减,模型学不到远处的规律。

Transformer 的破局

2017 年,Google 发表论文《Attention Is All You Need》(你只需要注意力),提出了 Transformer:

  • 注意力机制:所有词同时"互相对话",没有距离遗忘问题
  • 完全并行:所有词同时处理,训练速度飞升
  • 效果碾压:从此 GPT、BERT、Llama、Qwen 全是 Transformer

一句话:Transformer 让模型从"一个字一个字排队处理"变成了"所有字同时开会讨论"。


9.2 宏观结构:一张图看懂

┌─────────────────────────────────────────────────┐
│                  输入文本                          │
│              "中国的首都是____"                     │
└──────────────────────┬──────────────────────────┘
                       ↓
              ┌─────────────────┐
              │   Token 化 + Embedding  │  ← 第 2、8 课学过
              └─────────────────┘
                       ↓
              ┌─────────────────┐
              │   位置编码 (Positional Encoding) │  ← 第 11 课细讲
              └─────────────────┘
                       ↓
       ┌─────── 重复 N 次(如 12/32/64 层)───────┐
       ↓                                          ↓
┌─────────────────┐                  ┌─────────────────┐
│  多头自注意力     │                  │   前馈网络 FFN    │
│  Multi-Head     │  → 残差 → Norm → │  Feed-Forward    │
│  Attention      │                  │   + 残差 + Norm   │
└─────────────────┘                  └─────────────────┘
       ↓
              ┌─────────────────┐
              │   输出预测层(Softmax)  │
              └─────────────────┘
                       ↓
              "北京"(概率最高的词)

整个 Transformer 的核心就三块:

  1. 多头注意力:让每个词"看到"所有其他词(第 10 课深讲)
  2. 前馈网络:对每个词单独做"深度思考"
  3. 残差 + LayerNorm:让深层网络能正常训练

9.3 核心流程:一个 Token 的旅程

跟着一个词"北京"走一遍:

第 1 步:向量化

"北京" → Token 编号 3111 → Embedding 向量 [0.3, -0.1, 0.8, ...](如 4096 维)

第 2 步:加上位置信息

位置向量(告诉模型"我是第 4 个词")+ 词向量 → 最终输入向量

第 3 步:多头注意力

"北京"发出的查询(Q),去和句子里所有词的**键(K)**比对:

"北京" vs "中国" → 相关性很高(0.9)
"北京" vs "的"   → 相关性一般(0.4)
"北京" vs "首都" → 相关性很高(0.85)

然后把值(V)按相关性加权汇总。这一步让每个词都吸收全句信息

第 4 步:前馈网络

对融合后的向量做两次线性变换 + 激活函数(相当于每个词单独"想一想")。

第 5 步:重复 N 层

上面的 3~4 步重复十几到几十层,信息一层层被加工得越来越"懂语义"。

第 6 步:预测下一个词

最后一层输出向量 → 映射回词汇表 → 得到每个词的概率 → 选"北京"。


9.4 残差连接(Residual Connection)

问题

Transformer 动不动就是几十层。网络太深会梯度消失:误差信号传到浅层就衰减没了,底层学不到东西。

解决

给每一层加一条"捷径":

输出 = 层处理(输入) + 输入
      ↑                ↑
    精加工的结果      原始信息(不走弯路)

类比:快递不想每次都穿过整个拥堵城区,所以修了高架桥直达。即使城区内部堵死,信息也能通过高架桥传出去。

残差让模型可以堆叠 100+ 层而依然能训练。


9.5 LayerNorm(层归一化)

问题

输入数据的数值范围飘忽不定(有的维度是 0.01,有的是 100),训练不稳定。

解决

对每个样本的向量做"标准化":减去均值、除以标准差,让数值稳定在 0 附近。

LayerNorm([1.2, -0.5, 3.1, 0.4]) → 标准化后均值≈0,标准差≈1

类比:比赛前把所有选手的身高换算成"相对平均值的偏差",避免身高差影响裁判判断。


9.6 前馈网络(FFN):被低估的部分

注意力负责"词与词之间"的交流,FFN 负责**"单个词内部"的深加工**:

FFN(x) = activation(x · W1 + b1) · W2 + b2

4096 维 → 升维到 11008 维 → 激活 → 降维回 4096 维

直觉:先"展开"到高维空间(能看到更多细节),思考完再"压缩"回去。一个事实:FFN 里的参数占整个模型参数的三分之二,比注意力还多。


9.7 现在的 LLM 都是 Decoder-only

原始论文里有 Encoder(编码器)和 Decoder(解码器)两部分,但现在的大模型(GPT、Llama、Qwen、DeepSeek)只用 Decoder 部分,而且做了简化:

GPT 的架构(简化):

输入 → Embedding → [ 掩码自注意力 → FFN → 残差 → Norm ] × N 层 → 输出层
                       └──────── 每一层都长这样 ────────┘

区别在于一个关键细节:掩码(Mask)。GPT 生成文字时只能"看前面"不能"偷看后面":

生成"中国的首都____"时:
"北" 可以看到:中、国、的、首、都(前面所有)
"北" 不能看到:它自己之后的任何字

因为自回归生成时,后面的字还没生成出来呢!

所以 Decoder-only 模型的注意力叫因果注意力(Causal Attention):只允许往"前"看。


9.8 参数都花在哪了?

以 Llama-7B 为例(约 70 亿参数):

组件占比(约)
FFN 的权重矩阵~67%
注意力(Q/K/V/O 矩阵)~25%
Embedding 层~8%

70 亿参数意味着:存储模型需要 70 亿 × 2 字节(FP16)≈ 14GB。 这直接关系到第 15 课要讲的"模型量化与本地部署"。


更多推荐