跳到主要内容

层与线性层 — 网络里真正干活的零件

这一章讲三件事: 「层」到底是个什么单位(它不是神经元); 参数和算力的大头——线性层——的两种形态:全连接与卷积; 以及两个配套小零件:池化与转置卷积。 它在全书的位置:第 06、07、08 三章是「零件目录」,第 09 章用它们拼整机。

1. 顶层全景:「层」是标准件,不是神经元

书里给的定义很实在:层(layer)是被设计和实证筛选出来的、「通用且高效」的 复合张量运算,常常内含可训练参数。它名字继承自老式的多层神经网络——一种模仿生物神经元连接的计算网络, 但今天的模型早已不是「一层神经元」的堆叠,而是这些标准件组成的一张图, 可以有多条并行通路1

老式想象: 神经元 — 神经元 — 神经元 (生物学隐喻)
实际: [卷积]→[归一化]→[ReLU]→[卷积]→ … →[注意力]→[全连接]
每个方框是一种标准张量运算,深色方框里有可训练参数

图说:把模型想成「标准件的装配图」,比想成「神经元网络」更接近真相。
本书的图约定:方框=算子,深色=含参数,蓝字=非默认超参数,虚线框=重复 N 次。

从这一节起,零件目录开卷。本章讲最重的那一类:线性层—— 原书说它占了计算量和参数个数的主体,而且矩阵运算是芯片厂商优化了几十年的东西, 所以它快2

2. 全连接层:一次仿射变换

先正名:深度学习里说的「线性层」,做的其实是仿射变换—— 「线性表达式 + 一个常数项」:输出 = W×输入 + b。W 是一张权重矩阵, b 是一个偏置向量(bias——给每个输出分量各自加一个常数, 让变换不必经过原点),两者都是要训练的参数3

全连接层(fully connected layer)是最基本的线性层:输入向量的每个分量, 都通过 W 的某一列/行与每个输出分量相连——所以叫「全连接」。 输入 D 个数、输出 D′ 个数,就需要 D′×D 个矩阵参数加 D′ 个偏置4

它表面只能做几何变换(旋转、拉伸、平移),但原书给了一个更深的读法, 这个读法会在第 08 章开花结果:两个向量做点积(对应分量相乘再相加) 是在量它们的相似度;而矩阵乘向量 = 矩阵的每一行分别和输入做点积。 所以一个全连接层也可以读成:输入向量是「查询」,矩阵的行是若干把「钥匙」, 输出是输入对每把钥匙的匹配分5

一个工程细节:训练从随机初始化开始,而随机的尺度很有讲究—— 太随意会让激活和梯度在层间爆炸或消失(第 04 章的暗病)。 框架会按输入维度自动缩放随机数的范围,保持各层激活的波动幅度稳定6

3. 为什么全连接撑不起图像:卷积的登场

拿数字说话(这是本章主走查的上半)。一张 256×256 的彩色图, 拉直成向量是 256×256×3 ≈ 20 万个数。如果用一个全连接层处理它、 输出同样大小,参数个数 ≈ 20 万 × 20 万 = 4×10¹⁰,四百亿个参数—— 就一层。原书给了同一个数7

而且这不只是贵。图像有强烈的结构:相邻像素强相关,把图平移一下, 统计性质不变。全连接层对这些结构一无所知——它把第 1 个像素和第 10 万个像素当成完全平等的两个输入。用第 01 章的话说: 它的归纳偏置里完全没有图像的结构8

卷积层(convolutional layer)就是针对这两条病的药,思路一句话: 不再让整个输出连接整个输入,而是造一个小算子,在输入的每个位置上滑着用。

具体地(一维版本):取一个小窗口,宽 K 个位置、覆盖 D 个输入通道, 窗口里的数经过一个小的仿射映射 ϕ,算出 D′ 个输出数; 然后窗口向右滑一格,用同一个 ϕ 再算一次,直到滑完整条输入。 这个 ϕ 的参数就是 D′ 套「滤波器」,每套 D×K 个数,外加 D′ 个偏置。 二维版同理:窗口是 K×L 的小方块,在图像上逐格滑动9

输入(1 通道,长度 6): [3, 1, 4, 1, 5, 9]
滤波器(K=3): [1, 0, −1] ← 这是要训练的参数,这里用演示值
滑窗计算:
位置1: 1×3 + 0×1 + (−1)×4 = −1
位置2: 1×1 + 0×4 + (−1)×1 = 0
位置3: 1×4 + 0×1 + (−1)×5 = −1
位置4: 1×1 + 0×5 + (−1)×9 = −8
输出: [−1, 0, −1, −8]

图说:同一组参数 [1,0,−1] 在每个位置复用。(数是为演示编的;
这个滤波器实际在算「左右之差」——一个边缘检测器。)

对比一下账目:同样 256×256×3 的图,用 K=3 的卷积、输出 64 通道, 参数只要 64×3×3×3 + 64 ≈ 1800 个——从四百亿到一千八, 这就是「同一个小算子处处复用」的省法。

卷积还自带一个好性质:平移等变(equivariant)——输入平移,输出跟着平移。 对「平移后仍是同一类东西」的信号(图像、声音),这正是想要的归纳偏置10

三个控制旋钮(各有名字,出门看文档会撞见)11:

  • padding(填充): 在输入边缘补几圈 0,免得每卷一次尺寸就缩一圈;
  • stride(步长): 窗口每次滑几格。默认 1;设成 2,输出尺寸减半—— 这是缩小信号的主要手段;
  • dilation(膨胀): 窗口内部跳格取数。在不加参数的前提下, 把窗口的覆盖范围撑大。

4. 感受野:一个激活「看得到」多大一片

把卷积层叠起来,会出现一个重要的量:感受野(receptive field)—— 某个激活的值,由输入信号里的哪一片决定。每多过一层卷积, 感受野就向四周扩大约一个窗口宽12

第 1 层的激活看得到 3×3
第 2 层的激活看得到 5×5(透过第 1 层的 3×3 再往外一圈)
第 3 层: 7×7 ……

图说:层越深,一个位置「知道」的输入范围越大。浅层看纹理,
深层看零件,再深看整体——卷积塔天然是层级化的。

顺带命名一个后面的章节会用的词:输出张量里某一个通道的那一整张 H×W 切片, 叫一张激活图(activation map)——它回答「这个滤波器检测的东西, 在图的哪些地方出现了」13

卷积怎么用?原书给的总纲是:用空间尺寸换通道数——一路把 224×224×3 压成 7×7×2048,空间越来越小,每个位置上的描述越来越丰富。 它能实现的不仅是边缘检测;一堆卷积层叠起来,相当于一层层组装出 「从零件到整体」的复合表示14

5. 两个配套零件:池化与转置卷积

池化(pooling)是主动的压缩器。最常用的是最大池化(max pooling): 把输入切成不重叠的小块(比如 2×2),每块每个通道只留最大的那个数, 输出尺寸直接除以块边长15

它有个好懂的读法:取最大值 ≈ 逻辑上的「或」。如果前几层卷积算的是 「这里有没有某种零件」的分数,那么最大池化回答的就是「这一片里 至少出现了一个吗」。代价是丢掉精确位置——这换来对局部形变的不敏感。 它的替代品平均池化(块内取平均)是线性运算,最大池化不是16

转置卷积(transposed convolution)是卷积的反向形态:卷积把窗口压成一个数, 它把一个数撒回一个窗口——每个输入位置的小向量经仿射映射变成一个 K 宽的小块,错位相加地铺到输出上。输出比输入,所以它是「合成方向」 的工具:从浓缩表示重建大信号(第 10、11 章的分割与图像生成都要用它)17

卷积塔: 大图 → 小图×多通道 → …… → 一个向量 (理解/压缩方向)
转置卷积: 一个向量 → 小图×多通道 → …… → 大图 (重建/生成方向)

图说:一对方向相反的零件。压缩到底的那个向量里信息够不够,
靠转置卷积重建出来检验。

6. 作者的判断与证据

  • 「矩阵乘 = 查询与钥匙的匹配分」是作者给的读法,不是定义; 它是第 08 章注意力机制的预科,作者有意埋的线;
  • 卷积的两重动机(省参数 + 结构先验)有定量支撑:4×10¹⁰ 对 1800 的对比 是算术,平移等变是定义的直接推论;
  • 「卷积塔是层级化表示」引 Zeiler & Fergus 2014 的可视化研究,是实证结论;
  • 初始化的讨论引 Glorot & Bengio 2010,是教科书共识。

7. 边界与局限

  • 本章只讲了 1D/2D 的规则网格信号;图结构数据(分子、社交网络)用不了卷积, 原书放在最后一章,我们在第 12 章补;
  • 「同算子处处用」假设了统计性质处处相同(平稳);位置确实有意义的场合 (比如「图像正中央通常是主体」),卷积反而吃亏——第 08 章末的位置编码与此相关;
  • 转置卷积的棋盘格伪影等实操问题,原书未提;
  • 卷积的效率对比(四百亿对一千八)比的是参数个数;实际算力对比还涉及实现细节, 原书未展开。

8. 可带走的

  1. 「层」= 被实证筛出来的标准张量运算;现代模型是标准件装配图,不是神经元堆叠;
  2. 全连接层 = W×输入 + b;换个读法,它在算「输入对每把钥匙的匹配分」;
  3. 全连接处理大图要四百亿个参数,同任务卷积只要几千——省在「同一算子处处复用」;
  4. 卷积的平移等变性是它适合图像/声音的根本原因;
  5. padding / stride / dilation 三旋钮:补边、跳着滑、窗口内跳格;
  6. 感受野随层数扩大:浅层看纹理,深层看整体;
  7. 最大池化 = 「或」:要的是「至少有一个」,代价是丢位置;
  8. 卷积压空间换通道(理解方向),转置卷积反向放大(生成方向)。

9. 原文地图

主题原书章原文位置
「层」的定义与图约定The notion of layertext/14-fm-the-notion-of-layer.txt:3(搜「standard complex compounded」) · text/14-fm-the-notion-of-layer.txt:19(搜「convention for model depiction」)
线性层占计算与参数主体Linear layerstext/15-fm-linear-layers.txt:2(搜「most important modules」)
全连接层与仿射Linear layerstext/15-fm-linear-layers.txt:8(搜「affine」) · text/15-fm-linear-layers.txt:16(搜「fully」)
点积=匹配分Linear layerstext/15-fm-linear-layers.txt:40(搜「matching scores」)
初始化Linear layerstext/15-fm-linear-layers.txt:46(搜「random initialization」)
全连接的 4×10¹⁰Linear layerstext/15-fm-linear-layers.txt:109(搜「4 × 10」)
卷积定义Linear layerstext/15-fm-linear-layers.txt:77(搜「1D convolution」) · text/15-fm-linear-layers.txt:95(搜「2D convolution」)
平移等变Linear layerstext/15-fm-linear-layers.txt:176(搜「equiv」)
padding/stride/dilationLinear layerstext/15-fm-linear-layers.txt:183(搜「three additional」)
感受野/激活图Linear layerstext/15-fm-linear-layers.txt:2(搜「re」)
用空间换通道Linear layerstext/15-fm-linear-layers.txt:232(搜「recombine information」)
转置卷积Linear layerstext/15-fm-linear-layers.txt:242(搜「trans」)
池化Poolingtext/17-fm-pooling.txt:1(搜「pool」) · text/17-fm-pooling.txt:28(搜「logical disjunction」)

Footnotes

  1. 出处:「The notion of layer」第 1–10 段(text/14-fm-the-notion-of-layer.txt:3,搜「standard complex compounded」)。图约定见同章第 19–38 段(text/14-fm-the-notion-of-layer.txt:19,搜「convention for model depiction」)。

  2. 出处:「Linear layers」第 1–6 段(text/15-fm-linear-layers.txt:2,搜「most important modules」)。

  3. 出处:「Linear layers」第 8–13 段(text/15-fm-linear-layers.txt:8,搜「affine」)。

  4. 出处:「Linear layers」第 15–32 段(text/15-fm-linear-layers.txt:16,搜「fully」)。

  5. 出处:「Linear layers」第 34–42 段(text/15-fm-linear-layers.txt:40,搜「matching scores」)。原文:「a matrix-vector product can be interpreted as computing matching scores between the queries, as encoded by the input vectors, and keys, as encoded by the matrix rows」。

  6. 出处:「Linear layers」第 44–51 段(text/15-fm-linear-layers.txt:46,搜「random initialization」)。引 Glorot and Bengio, 2010。

  7. 出处:「Linear layers」第 106–109 段(text/15-fm-linear-layers.txt:109,搜「4 × 10」)。

  8. 出处:「Linear layers」第 111–143 段(text/15-fm-linear-layers.txt:140,搜「inductive」)。原文:「This is not reflected in the inductive bias of a fully connected layer, which completely ignores the signal structure」。

  9. 出处:「Linear layers」第 150–174 段(text/15-fm-linear-layers.txt:77,搜「1D convolution」;text/15-fm-linear-layers.txt:95,搜「2D convolution」)。

  10. 出处:「Linear layers」第 176–181 段(text/15-fm-linear-layers.txt:176,搜「equiv」)。

  11. 出处:「Linear layers」第 183–201 段(text/15-fm-linear-layers.txt:183,搜「three additional」;图 4.3 题注 text/15-fm-linear-layers.txt:131,搜「stride s」)。

  12. 出处:「Linear layers」第 221–226 段(text/15-fm-linear-layers.txt:2,搜「re」;图 4.4 题注 text/15-fm-linear-layers.txt:209,搜「receptive」)。

  13. 出处:「Linear layers」第 227–230 段(text/15-fm-linear-layers.txt:228,搜「activation」)。

  14. 出处:「Linear layers」第 232–240 段(text/15-fm-linear-layers.txt:232,搜「recombine information」)。引 Zeiler and Fergus, 2014。

  15. 出处:「Pooling」第 1–25 段(text/17-fm-pooling.txt:1,搜「pool」)。

  16. 出处:「Pooling」第 27–59 段(text/17-fm-pooling.txt:28,搜「logical disjunction」;:54,搜「average pool」)。

  17. 出处:「Linear layers」第 242–261 段(text/15-fm-linear-layers.txt:242,搜「trans」)。