跳到主要内容

为可训练性而生的零件 — 激活、dropout、归一化、残差

这一章讲四个零件。 它们有个共同点:不携带任何关于数据的知识—— 不像卷积那样对应「图像的结构」。它们存在只为一件事:让第 04 章的下山 在深网络上走得动、走得稳。这一章兑现第 04 章结尾那个「视角转变」: 改造模型本身,让它生来可优化。

1. 顶层全景:四个零件各管一种「走不动」

走不动的原因 零件 一招
─────────────────────────────────────────────────
层全线性 = 白堆(还是线性) 激活函数 逐个数加一道弯
参数互相搭伙背题 dropout 随机清零,逼各自承重
层间尺度漂移、互相牵扯 归一化层 把均值方差钉回标准
梯度连乘几百次后归零 跳跃/残差连接 给梯度留旁路

图说:四种病,四种药。本章按此顺序讲。

2. 激活函数:没有它,多少层都白堆

先看病。第 06 章的线性层做的是仿射变换;仿射变换套仿射变换, 结果还是仿射变换——一百层全连接摞起来,数学上等于一层。 深度买来的「逐层改造空间」(第 04 章的扭布实验)的前提是: 每两层之间插一道非线性的弯1

这道弯由激活函数(activation function)提供:对张量里的每个数单独 做同一个小变换,形状不变2

最通行的一个叫 ReLU(Rectified Linear Unit,整流线性单元): 负数清零,正数原样3

输入: [−2.0, −0.5, 0.3, 1.7, −4.1, 0.9]
输出: [ 0, 0, 0.3, 1.7, 0, 0.9]

图说:就这么简单。整条流水线里所有的「智能」,
都是这种「负数清零」和矩阵乘法交替堆出来的。

你可能会担心:它在 0 点不可导,而且在整个负半轴上变化率是零—— 第 04 章说下山全靠变化率指路,半个定义域没方向怎么行? 原书给的回答很实用:下山只需要方向「平均而言有信息量」。 配合随机初始化和归一化,训练开始时约一半激活为正,够用了4

ReLU 之前的标准是 Tanh(双曲正切):一条 S 形曲线,把输入压到 (−1, 1)。 它的问题是两端饱和——输入稍大稍小,曲线就平了,变化率趋零, 正好喂给梯度消失5

ReLU 的两个常见变体:Leaky ReLU 给负数留一条小斜率(乘 0.01 之类), 不让负半轴完全死寂;GELU 用一条光滑曲线近似 ReLU(定义里用到 正态分布的累积函数),今天的主流序列模型主要用它。 选哪个,原书明说:靠实证,不靠理论6

3. dropout:逼每个激活独自承重(主走查)

第二味药管的是另一种作弊:搭伙。训练时,某些参数可能学会 「我们几个绑在一起才有意义」——一组激活联合起来记住训练集的巧合, 这正是过拟合的微观机制。

dropout 层的做法粗暴有效:训练时,每个激活以概率 p 被独立地清零; 幸存的激活统一乘 1/(1−p),让输出的期望值不变。测试时整个层关闭, 输出等于输入7

拿一个 6 维向量走一遍,p = 0.5(随机结果是演示编的):

输入: [0.8, 1.2, 0.5, 2.0, 0.3, 1.1]
抛硬币(0.5): [留, 清, 清, 留, 清, 留 ]
清零后: [0.8, 0, 0, 2.0, 0, 1.1]
×1/(1−0.5)=×2: [1.6, 0, 0, 4.0, 0, 2.2]
测试时: 原样通过,不清零

图说:每次前向,下游层拿到的都是「残缺版」的输入。
它不敢指望任何特定的搭档在场。

为什么这能治搭伙?算笔概率账:k 个激活组成的小组集体幸存的概率是 (1−p)ᵏ——p=0.5 时,2 人小组幸存率 25%,5 人小组 3%。 团伙越大越靠不住,下山自然放弃团伙路线,改为让每个激活 独自就有意义。也可以把它看成往训练里注噪声,让模型皮实8

一个修正:对图像不行。图像相邻像素强相关,清掉一个点, 邻居能把它推回来,白清。所以图像版 dropout 按整个通道清零—— 要么这个通道的激活图整张在,要么整张消失9

4. 归一化层:把漂移的尺度钉回去

第三种病:训练中某一层的参数变了,它输出的尺度就变了, 后面每层都得跟着重新适应——几百层互相牵扯,下山走得磕磕绊绊。

批归一化(batch normalization)的做法:对一个批量里的样本, 按每个通道算出经验均值和方差——方差:这批数离均值有多散的度量—— 把每个数归一化成「均值 0、方差 1」 (「归一化」就是把一批数平移缩放到标准尺度的操作);然后再用两个 可训练的参数 γ、β 把它缩放平移到模型自己选定的位置10

4 个样本、单通道的走查(演示数):

一批 4 个值: [2, 4, 4, 6] 均值 = 4,方差 = 2(标准差 ≈ 1.41)
归一化: [(2−4)/1.41, (4−4)/1.41, …] = [−1.41, 0, 0, 1.41]
缩放平移(设 γ=3, β=1,可训练): [−3.2, 1, 1, 5.2]

图说:无论上游把尺度搞成什么样,这层都先扳回标准形,
再让模型自己决定要什么尺度(γ、β 是学出来的)。

两个要点11:

  • 依赖批量(要同批的其它样本才能算均值方差),所以训练时和测试时 行为不同:测试时用训练全程攒下的滑动平均值,退化成一次固定仿射;
  • 原书坦白:它的实际起效机制可能比「防尺度漂移」这个最初动机更复杂—— 动机是事后讲的故事,效果是先被证实的。无论如何,它让深模型好训得多。

变体层归一化(layer normalization):不跨样本,而是在单个样本内部, 跨它的全部分量算均值方差来归一。好处是不依赖批量,训练和测试一个样—— 它是 Transformer 家族的标配(第 08、09 章)12

5. 跳跃连接:给梯度留一条旁路

最后一味药直接对着第 04 章的连乘病。跳跃连接(skip connection) 不是层,是一种布线:把某一层的输出原封不动地绕过中间几层, 送到更后面去,和那里的信号拼接或相加13

普通: x → [f1] → [f2] → [f3] → y 梯度要连穿 f3、f2、f1
残差: x → [f1] → [f2] → [f3] →(+)→ y 梯度还有一条 x 的直达旁路
└───────────────────────┘

图说:哪怕 f1–f3 集体把梯度压没,旁路上梯度照样畅通。

其中「跨得短、用加法合并」的那类叫残差连接(residual connection): 层的输出 = 变换后的信号 + 原信号。两个后果14:

  • 梯度永远有一条不被连乘缩放的路——原书说这让几百层的模型可训, 今天视觉的 ResNet 和语言的 Transformer(第 09 章详讲的两类整机)全部 由残差块组成;
  • 学习内容从「整体重算」变成「在输入上找差分改进」—— 学「改动量」比学「完整答案」容易,这个读法解释了残差连接为何还好优化。

跳跃连接还有第二份工作:在「先压缩后放大」的模型里(第 10 章逐像素分类那里), 把压缩前的高分辨率层和同分辨率的放大后层连起来,救回细节15

6. 作者的判断与证据

  • 「梯度只需平均有信息量」是作者为 ReLU 做的实用主义辩护,原书给了机制 (初始化与归一化保证一半激活为正),不是定理;
  • 批归一化「实际机制可能更复杂」是原书明说的坦白——这在教科书里少见, 值得原样保留;
  • 残差连接的「差分改进」读法,原书措辞是「may also facilitate」——是解释性假说, 而「几百层可训」是实证事实(ResNet、Transformer 为证);
  • dropout 的「防团伙」论证((1−p)ᵏ)是算术,牢靠;「注噪声更皮实」是重述性解释。

7. 边界与局限

  • 这一章的零件全部诞生于「让训练更稳」的动机,对最终模型的表达能力 贡献为零(激活函数除外)——这是它们的定位,不是缺点;
  • 批归一化依赖一整批,一小批或单样本的使用场景要用层归一化等替代品;
  • dropout 在今天的超大模型预训练里用得比 2014 年少(数据多时过拟合压力小), 原书未讨论这个变迁(补充,不在书里,来自通用知识);
  • 残差连接为什么好优化,除了「旁路」和「差分」两个读法,理论界仍在研究, 原书没有更多交代。

8. 可带走的

  1. 纯线性堆叠 = 白堆;激活函数是深度的前提;
  2. ReLU = 负数清零;它赢在不饱和,不靠精致;
  3. dropout = 训练时随机清零:治「搭伙背题」,概率账是 (1−p)ᵏ;图像版按通道清;
  4. 批归一化把尺度钉回标准,再让模型自选尺度(γ、β);它跨样本,训测行为不同;
  5. 层归一化在样本内部归一,训测一致——Transformer 用它;
  6. 残差连接 = 输出 = 变换 + 原信号:梯度有旁路,学习变「找改动」;
  7. 这四个零件全是「为可训练性」而生——看到任何模型结构,都可以问一句 「这个零件是装知识的,还是管训得动的」;
  8. 原书的坦白值得学:机制故事可以事后讲,效果要先实证——批归一化是标本。

9. 原文地图

主题原书章原文位置
纯线性复合仍是线性Activation functionstext/16-fm-activation-functions.txt:2(搜「itself be a linear operator」)
ReLU 与「平均有信息量」Activation functionstext/16-fm-activation-functions.txt:17(搜「Rectified Linear Unit」) · text/16-fm-activation-functions.txt:28(搜「gradient is informative on」)
Tanh 的饱和Activation functionstext/16-fm-activation-functions.txt:40(搜「hyperbolic tan」)
Leaky ReLU / GELUActivation functionstext/16-fm-activation-functions.txt:47(搜「Leaky」) · text/16-fm-activation-functions.txt:58(搜「GELU」)
dropout 机制与 (1−p)ᵏDropouttext/18-fm-dropout.txt:11(搜「probability p」) · text/18-fm-dropout.txt:21(搜「remains intact」)
图像版按通道清Dropouttext/18-fm-dropout.txt:47(搜「short-term correlation」)
批归一化定义与训测差异Normalizing layerstext/19-fm-normalizing-layers.txt:10(搜「batch nor」) · text/19-fm-normalizing-layers.txt:62(搜「moving average」)
动机与坦白Normalizing layerstext/19-fm-normalizing-layers.txt:66(搜「motivation behind batch normalization」)
层归一化Normalizing layerstext/19-fm-normalizing-layers.txt:91(搜「layer nor」)
跳跃连接与残差连接Skip connectionstext/20-fm-skip-connections.txt:1(搜「skip connections」) · text/20-fm-skip-connections.txt:14(搜「most desirable property」)
差分改进读法;多尺度Skip connectionstext/20-fm-skip-connections.txt:64(搜「multi-scale reasoning」) · text/20-fm-skip-connections.txt:69(搜「finding a differential」)

Footnotes

  1. 出处:「Activation functions」第 1–4 段(text/16-fm-activation-functions.txt:2,搜「itself be a linear operator」)。

  2. 出处:「Activation functions」第 7–13 段(text/16-fm-activation-functions.txt:8,搜「activation」)。

  3. 出处:「Activation functions」第 15–24 段(text/16-fm-activation-functions.txt:17,搜「Rectified Linear Unit」)。引 Glorot et al., 2011。

  4. 出处:「Activation functions」第 26–37 段(text/16-fm-activation-functions.txt:28,搜「gradient is informative on」)。

  5. 出处:「Activation functions」第 39–43 段(text/16-fm-activation-functions.txt:40,搜「hyperbolic tan」)。

  6. 出处:「Activation functions」第 45–68 段(text/16-fm-activation-functions.txt:47,搜「Leaky」;:58,搜「GELU」;:67,搜「empirical performance」)。GELU 引 Hendrycks and Gimpel, 2016;Leaky ReLU 引 Maas et al., 2013。

  7. 出处:「Dropout」第 1–16 段(text/18-fm-dropout.txt:11,搜「probability p」)。dropout 引 Srivastava et al., 2014。

  8. 出处:「Dropout」第 18–24 段(text/18-fm-dropout.txt:21,搜「remains intact」)。

  9. 出处:「Dropout」第 26–51 段(text/18-fm-dropout.txt:47,搜「short-term correlation」)。

  10. 出处:「Normalizing layers」第 9–56 段(text/19-fm-normalizing-layers.txt:10,搜「batch nor」)。引 Ioffe and Szegedy, 2015。

  11. 出处:「Normalizing layers」第 58–73 段(text/19-fm-normalizing-layers.txt:62,搜「moving average」;:66,搜「motivation behind batch normalization」)。原文:「the actual mode of action may be more complicated than this initial motivation」。

  12. 出处:「Normalizing layers」第 91–102 段(text/19-fm-normalizing-layers.txt:91,搜「layer nor」)。引 Ba et al., 2016。

  13. 出处:「Skip connections」第 1–12 段(text/20-fm-skip-connections.txt:1,搜「skip connections」)。

  14. 出处:「Skip connections」第 14–25 段(text/20-fm-skip-connections.txt:14,搜「most desirable property」;:19,搜「residual net」)。「差分改进」见第 67–70 段(text/20-fm-skip-connections.txt:69,搜「finding a differential」)。

  15. 出处:「Skip connections」第 64–66 段(text/20-fm-skip-connections.txt:64,搜「multi-scale reasoning」)。