跳到主要内容

整机 — MLP、卷积塔与 Transformer

这一章讲一件事: 第 06–08 章的零件,怎么拼成历史上真正赢过的整机。 答案是三种搭法——全连接塔、卷积塔、注意力塔——各自对应一类数据的结构。 读完后,LeNet、ResNet、Transformer、GPT、ViT 这些名字对你来说 不再是五个孤立的黑话,而是三种搭法的五个实例。

1. 顶层全景:三种搭法,三类数据

搭法 零件配方 对应的数据结构
───────────────────────────────────────────────────────────
MLP 全连接 + 激活,交替 维度不高的「平坦」向量
卷积塔 卷积 + 池化 + 残差 网格状、平移不变的信号(图、声)
注意力塔 嵌入 + 位置 + 自注意力块 序列,远程依赖重要(文字)

图说:整机 = 按数据的结构选搭法,再把零件按固定节奏重复堆叠。
「深」来自重复:同一种块乘上 N。

2. MLP:最简单,还带着一条定理

多层感知机(Multi-Layer Perceptron, MLP)就是全连接层和激活函数交替串起来: 全连接 → ReLU → 全连接 → ReLU → 全连接。夹在中间的层叫隐藏层 (hidden layer——既不是输入也不是输出的层,「藏」在中间);按历史习惯, 「几个隐藏层」数的是线性层的个数、不含最后一层1

它带着深度学习里最著名的一条理论结果:万能近似定理(Cybenko 1989)—— 只要激活函数连续且不是多项式,一个隐藏层的 MLP 就能在任意有界区域上, 把任何连续函数逼近到任意准的程度——「精度」就是准的程度2

听上去像「一层就够,深度白讲了」?注意定理的两个附带条件,原书都点明了3:

  • 它要求那个隐藏层的宽度可以任意大——逼近精度要靠堆宽度换, 第 04 章的深度定理说的正是「同样预算,加深比加宽买到的表达花样多」;
  • 它是存在性定理:保证「存在一组参数能逼近」,一个字没提怎么找到这组参数。 训练能不能找到,是另一件事——本书的其余部分都在回答后一件事。

所以 MLP 的真实定位是:输入维度不太大时的趁手工具。 维度一大(图像),参数爆炸,轮到卷积塔4

3. 卷积塔:LeNet 的配方,ResNet 的深度(主走查)

LeNet:一个用了三十年的配方

1998 年的 LeNet(手写数字识别)定下了卷积塔的基本两段式5:

前半(特征提取器): [卷积 → ReLU → 最大池化] × 若干次
28×28×1 → 24×24×32 → … → 4×4×64 → 拉直成 256 维向量
后半(分类头): 一个 MLP,256 维 → 10 个 logits(十个数字)

图说:前半把图像「读」成一个浓缩向量,后半对这个向量做判决。
前半吃的是卷积的平移等变,后半吃的是 MLP 的灵活组合。

2012 年的 AlexNet(点燃深度学习革命的那一炮)和 2014 年的 VGG, 原书一句话概括:同一张蓝图,只是更大6

ResNet-50:残差块堆到上百层

LeNet 家族直接加深会撞上梯度消失(第 04 章)。 ResNet(残差网络,He et al. 2015)的解法就是第 07 章的残差连接: 把几个「卷积 + 批归一化 + ReLU」包成一块,块的输出 = 块内变换 + 块的输入, 这样的残差块可以叠上百层7

原书拿 ResNet-50 做了整机解剖,我们把一张 224×224×3 的照片 从头走到尾(形状数字全部来自原书图 5.5)8:

输入: 3 × 224×224
7×7 卷积,步长 2: 64 × 112×112 ← 一上来先减半、通道升到 64
最大池化: 64 × 56×56
第 1 段(残差块×3): 256 × 56×56 ← 注意:不降尺寸,通道 ×4(原书说「意外」)
第 2 段(降尺度+×4): 512 × 28×28 ← 每段开头:高宽减半,通道翻倍
第 3 段(降尺度+×6): 1024 × 14×14
第 4 段(降尺度+×3): 2048 × 7×7
7×7 平均池化: 2048 维向量 ← 每个通道只剩一个数
全连接: 1000 个 logits ← ImageNet 的 1000 类

图说:这就是第 06 章「用空间换通道」的完整执行:
224×224 的空间一路换没,换来 2048 个通道的浓缩描述,最后一票定类。

残差块内部还有一个省钱的细节值得记住:通道多了之后,卷积的参数和算力 随通道数平方增长。所以残差块做成「瓶颈」形:先用 1×1 卷积把通道数 压小,再在瘦通道上做 3×3 卷积,最后用 1×1 卷积抬回去。 1×1 卷积 = 只在通道方向做全连接、空间上不滑窗——便宜9

降尺度怎么和残差连接兼容(旁路两端形状不一样了)? 旁路上也放一个 1×1、步长 2 的卷积,把捷径的尺寸调成一致10

4. 注意力塔:Transformer 一家

第三种搭法回答的是序列(文字):远程依赖第一,顺序必须显式注入

三种块

Transformer 的全部零件你都已经见过,它只定义怎么摆11:

  • 第一种块叫前馈块(feed-forward block):一个一层隐藏层的小 MLP,前面先过层归一化, 整体包在残差连接里。职责:在单个位置内部加工表示(不跨位置);
  • 自注意力块: 层归一化 → 多头自注意力 → 残差合并。职责:跨位置组合信息;
  • 交叉注意力块: 同上,但键和值来自另一个序列。

「前馈」这个名字只需记住:它管「每个位置自己想」,注意力管「大家互相看」, 两种块交替堆 N 次,就是塔身12

原版:一读一写两半

2017 年的原版 Transformer 为翻译设计,分两半13

读的那半叫编码器(encoder——把整段原文加工成一摞「精加工表示」);

写的那半叫解码器(decoder——拿着已生成的译文,一步步决定下一个词)。 两半各是一摞块,接线如下:

编码器(encoder): 原文 token → 嵌入 + 位置编码 → [自注意力 + 前馈]×N
→ 得到整段原文的「精加工表示」Z₁…Z_T
解码器(decoder): 已生成的译文 token → 嵌入 + 位置编码
→ [因果自注意力 + 交叉注意力(去 Z 里找料) + 前馈]×N
→ 下一个译文 token 的 logits

图说:编码器「读」原文,解码器「写」译文;写每个词时,
交叉注意力让它回头看原文的相关段落。因果掩码(第 08 章)
保证它写第 5 个词时看不到第 6 个。

GPT:只要解码器的纯生成版

GPT(Generative Pre-trained Transformer,Radford et al. 2018)做了 一个影响深远的简化:扔掉编码器,只留一摞「因果自注意力 + 前馈」块, 输入一段文本,逐位置预测下一个 token——它就是原版 Transformer 编码器的 因果版,一个纯粹的第 03 章自回归模型14

这个简化版「规模放大性极好,能堆到几千亿参数」(原书原话)—— 第 11 章的 GPT-3 就是它放大后的样子。

ViT:把图像切成序列

Vision Transformer(ViT,Dosovitskiy et al. 2020)证明注意力塔不只管文字: 把图像切成 M 个 P×P 的小方块——每块叫一个图像块(patch)——每块拉直成一个向量, 过一个可训练矩阵投影成 D 维——一叠图像块,从此就是一「串」token, 加位置编码、进自注意力塔,和文字一模一样15

分类怎么做?在序列最前面额外挂一个不对应任何图像块的占位 token (这个做法出自 BERT——一个 2018 年的掩码重建语言模型,第 12 章会再遇到; 这个占位符叫 CLS token)。塔身跑完后,取这个占位符位置的输出, 过一个小 MLP 出分类 logits。它的设计直觉:占位符自己不带内容, 它最终攒出来的表示,全靠注意力从各图像块收集——天然是个「全文摘要」位16

5. 作者的判断与证据

  • 「AlexNet、VGG 是 LeNet 蓝图的放大」是作者的结构性概括,把三个名字 收进一条线——这是本书「只讲结构、不追年表」风格的典型;
  • ResNet-50 第一段不降尺度只升通道,原书用了「surprisingly」—— 作者照实标注了这是一个没有现成解释的设计细节;
  • 「GPT 类模型规模放大性极好」是 2020 年前后的实证观察(引 Brown et al.), 不是定理;
  • Transformer 块里「层归一化放在残差块最前」的版本出自 Radford et al. 2018, 与 2017 原版不同——原书明确标注了这个差异来源17

6. 边界与局限

  • 本章是 2023 年的全家福:卷积塔与注意力塔并立。此后注意力塔进一步吃掉 视觉、语音的地盘,格局向「Transformer 一统」倾斜(补充,不在书里,来自通用知识);
  • 万能近似定理的条件与证明本章未展开,只保留了两个「它不管的事」;
  • 还有一个叫 RNN 的循环网络一脉,原书有意不放进正文,在第 12 章「没讲的」里补;
  • 每种的超参数怎么选(层数、通道数、头数),原书只给实例不给通则—— 那是实证手艺,不是原理。

7. 可带走的

  1. 整机只有三种基本搭法:全连接塔、卷积塔、注意力塔——按数据结构选;
  2. MLP 带万能近似定理,但定理只保证存在、不管训练,还默许宽度任意大;
  3. LeNet 配方 = 卷积提特征 + MLP 做判决;AlexNet/VGG 是它的放大;
  4. ResNet = 残差块堆百层;瓶颈设计(1×1 压通道、3×3 干活、1×1 抬回)治通道平方胀;
  5. ResNet-50 一句话:224×224×3 的空间一路换成 2048 通道,7×7 池化收成向量,全连接出 1000 类;
  6. Transformer = 归一化在前、残差包外的「自注意力 + 前馈」交替;编码器读、解码器写、交叉注意力当桥;
  7. GPT = 只留因果解码器那半的 Transformer;它的可放大性是 2020 年后一切的起点;
  8. ViT = 把图像切块当 token,挂个 CLS 占位符收摘要——注意力塔从此通吃模态。

8. 原文地图

主题原书章原文位置
MLP 与隐藏层计数Architecturestext/24-fm-architectures.txt:7(搜「Multi」) · text/24-fm-architectures.txt:16(搜「hidden lay」)
万能近似定理Architecturestext/24-fm-architectures.txt:20(搜「universal ap」) · text/24-fm-architectures.txt:49(搜「arbitrarily large」)
LeNet 两段式Architecturestext/24-fm-architectures.txt:64(搜「LeNet」) · 图 5.2 题注 text/24-fm-architectures.txt:108(搜「28 × 28」)
AlexNet/VGG 是同构放大Architecturestext/24-fm-architectures.txt:80(搜「blueprint」)
ResNet 动机Architecturestext/24-fm-architectures.txt:86(搜「Residual networks」)
瓶颈块与通道平方胀Architecturestext/24-fm-architectures.txt:223(搜「quadratic with the number of channels」)
ResNet-50 全貌Architecturestext/24-fm-architectures.txt:241(搜「overall structure」)
三种块Architecturestext/24-fm-architectures.txt:268(搜「feed」) · :341(搜「self」) · :352(搜「cross-attention block」)
编码器—解码器Architecturestext/24-fm-architectures.txt:258(搜「encoder」)
GPTArchitecturestext/24-fm-architectures.txt:398(搜「Generative Pre-trained」) · :404(搜「causal version」)
ViT 与 CLS tokenArchitecturestext/24-fm-architectures.txt:413(搜「Vision Transformer」) · :427(搜「is not associated」) · :457(搜「CLS」)

Footnotes

  1. 出处:「Architectures」第 7–18 段(text/24-fm-architectures.txt:7,搜「Multi」;:16,搜「hidden lay」)。

  2. 出处:「Architectures」第 20–46 段(text/24-fm-architectures.txt:20,搜「universal ap」)。定理:σ 连续非多项式时,l₂∘σ∘l₁ 可在紧集上一致逼近任意连续函数。

  3. 出处:「Architectures」第 47–49 段(text/24-fm-architectures.txt:49,搜「arbitrarily large」)。

  4. 出处:「Architectures」第 51–52 段(text/24-fm-architectures.txt:52,搜「not too large」)。

  5. 出处:「Architectures」第 64–84 段及图 5.2 题注(text/24-fm-architectures.txt:64,搜「LeNet」;:109,搜「28 × 28」)。引 LeCun et al., 1998。

  6. 出处:「Architectures」第 80–84 段(text/24-fm-architectures.txt:80,搜「blueprint」)。

  7. 出处:「Architectures」第 86–177 段(text/24-fm-architectures.txt:86,搜「Residual networks」)。引 He et al., 2015。

  8. 出处:「Architectures」图 5.5 及第 241–247 段(text/24-fm-architectures.txt:241,搜「overall structure」;:243,搜「Surprisingly」)。

  9. 出处:「Architectures」第 221–226 段(text/24-fm-architectures.txt:223,搜「quadratic with the number of channels」)。

  10. 出处:「Architectures」第 228–239 段(text/24-fm-architectures.txt:230,搜「down」)。

  11. 出处:「Architectures」第 264–355 段(text/24-fm-architectures.txt:268,搜「feed」;:341,搜「self」;:352,搜「cross-attention block」)。

  12. 出处:「Architectures」图 5.6 题注(text/24-fm-architectures.txt:293,搜「Feed」)。

  13. 出处:「Architectures」第 256–262、357–391 段(text/24-fm-architectures.txt:258,搜「encoder」)。引 Vaswani et al., 2017。

  14. 出处:「Architectures」第 398–411 段(text/24-fm-architectures.txt:398,搜「Generative Pre-trained」;:404,搜「causal version」)。原文:「a causal version of the original Transformer encoder」。引 Radford et al., 2018, 2019。

  15. 出处:「Architectures」第 413–425 段(text/24-fm-architectures.txt:413,搜「Vision Transformer」)。引 Dosovitskiy et al., 2020。

  16. 出处:「Architectures」第 427–462 段(text/24-fm-architectures.txt:428,搜「is not associated」;:457,搜「CLS」)。CLS token 引 Devlin et al., 2018(BERT)。

  17. 出处:「Architectures」图 5.6 题注(text/24-fm-architectures.txt:293,搜「Feed」)。原文:「proposed by Radford et al. [2018] differ slightly from the original architecture of Vaswani et al. [2017], in particular by having the layer normalization first in the residual blocks」。