跳到主要内容

模型优化层 — Dropout 与归一化家族

这一章讲三件事: Dropout 为什么等价于一笔正则账(并顺手拿走三个使用技巧); 归一化家族六兄弟各自「沿哪些轴算平均」;BN 的官方理由怎么被 MIT 的实验推翻, 真正的原因(平滑损失平面)又说明了什么。这是贯穿前两篇的那一层地基,最后拆。

1. 这一章讲什么

参数涨到以亿计,带来拟合能力,也带来过拟合的温床——所以需要正则化1。书里把 手段分成三个角度:改数据(扩充)、改损失(权重上加 L1/L2 项)、改训练过程(早停, 练到不再变好就停)2;而本章只讲以网络层的形式长在模型里的两类结构: Dropout 与归一化。它们在前两篇反复客串(AlexNet 带它、ResNet 带它、BERT 带它), 这里是正式的家底盘点。

2. 顶层全景:一张「沿轴统计」的地图

归一化的全部家当就是一句话:挑出一堆数,算它们的平均和波动,再用这两个数把每个数 拉回标准范围。六兄弟的差别只在「挑哪些数」:

沿样本轴? 沿通道轴?
BN: 跨样本 同一通道 ← 最常用,但怕小批次、怕 RNN
LN: 同样本 跨通道 ← 不看别人,序列模型可用
IN: 同样本 同一通道 ← 连通道都不跨,风格迁移最爱
GN: 同样本 通道分组 ← LN 与 IN 的中间档
WN: (不在数据上算——直接把「权重的长短」和「方向」拆开管)

图说:六兄弟是一张「沿哪些轴统计」的地图。选错轴,统计就失去代表性。

主走查走 Dropout 的那笔正则账(3.1 节),BN 的批次账在 3.3 节走。

3. 核心原理

3.1 Dropout:从共适应到一笔正则账

Dropout 要治的病叫共适应:某些节点表达能力强,训练中越练越强,弱的被一路压制 到「贡献可以忽略不计」——「这时候网络中只有部分节点被训练,浪费了网络的宽度和深度」3。随机关掉一批节点,逼它们各自本事过硬,这就解脱了。

书里用单层线性网络推了全章最重要的等式:关节点相当于给每个权重乘一个随机的 0/1 开关(丢失率 p);求「关与不关」两种情况下梯度的平均值(术语叫期望),发现只要把权重先乘上 p, 带 Dropout 的网络与「带正则项的普通网络」的梯度期望完全一致——正则项的大小 正比于 p(1−p)4。三个使用技巧当场掉出来5:

  1. p(1−p) 在 p=0.5 时最大——丢失率 0.5,正则效果最强;
  2. 浅层网络丢失率应低于 0.2(丢太多输入伤元气),超过 0.5 不建议;
  3. 测试时不丢节点,但权重要乘 p(把训练时的「期望」补回来)。

理论解释不止一种:Dropout 作者认为是模型集成(每次关节点都在采样一个子网络); 贝叶斯(一种「先有预判、再用数据修正预判」的概率论流派)视角认为参数共享让它能在有限算力里训「无限多个子网络」6。 书里的边角备忘也实用:CNN 直接丢像素没用——「临近像素之间的相似性」太强, 丢一个马上被邻居补回来,要按通道丢(空间 Dropout)、按块丢(DropBlock)或在池化 窗口里丢(最大池化 Dropout)7;RNN 的掩码必须跨时间片保持不变,否则「限制 RNN 保留长期记忆的能力」,三条路线的差别只在掩码贴在单元状态的哪一处8。 变体里最实用的是蒙特卡洛 Dropout:测试时故意保留丢弃,同一输入预测多次取均值 ——因为 softmax 输出的最大值「往往是一个非常接近 0.99 的值」,作为置信度极不可靠, 多次采样才敢说「真有把握」9

3.2 BN:官方理由与被推翻的理由

批归一化(BN) 是使用频率最高的归一化:对一个批次,沿「跨样本、同通道」取数, 算出平均与波动(统计里叫方差,波动的平方的平均),把该通道的值拉回标准范围,再用两个可学习的缩放与平移系数放回去 (极端情况下能还原成恒等映射,所以「经过 BN 操作的网络容量是不小于没有经过 BN 操作的网络容量的」)10

先记一个词:变量(可以变的数)。提出者的官方理由是治 ICS(内部协变量偏移,一种「分布漂移」的说法):训练中前层参数一变,后层收到的数据 分布就漂,网络被迫追着漂移学。书里的转述很清楚:ICS 被认为是「导致网络收敛慢的 罪魁祸首」,BN 把每层输入的分布固定下来11

然后是本书最好看的反转:MIT 2018 年的论文用两个实验拆台——给 BN 网络加随机噪声 (ICS 更严重),性能仍好过无 BN 的普通网络;直接量测发现 BN 有时甚至「还能增大 ICS」12。真因:BN 平滑了损失平面(损失随参数变化的地形)。形式地说, BN 让损失满足利普希茨连续(变化速度有上界)、梯度也利普希茨连续(「斜率的斜率」 有上界),地形不再陡起陡落,大步走也不摔13。佐证:残差网络和 DenseNet 也被 证明有平滑损失平面的作用;连用 L1/L2 范数替代均值方差来归一化,效果都类似—— 起作用的是「平滑」,不是「BN」这个特定配方14

主走查:一个批次走 BN(书里 6.3 节的对照实验场景,批次大小 8):

一个批次 8 张图,某通道各给出一个数:2, 4, 4, 4, 5, 5, 7, 9(演示数)
平均 μ=5,方差 σ²=4
每个数标准化:(x−5)/2 → −1.5, −0.5, −0.5, −0.5, 0, 0, 1, 2
乘 γ 加 β(可学习):输出位置不变,但整体被拉回标准范围
测试时没有批次:用训练期间攒下的滑动平均代替 μ 和 σ
对照结果:批次 128 时 BN 明显加速;批次 8 时「BN 反而会减慢收敛速度」
(标准化那一步的数字是为演示编的;结论是书里的实验)

书里的使用边界三条:批次太小慎用(8 个样本的统计量不代表全局);RNN 等动态网络 慎用(各样本长度不齐,统计到靠后的时间片只剩个别样本,测试遇到超长样本甚至「无法 找到保存的归一化统计量,所以 BN 无法运行」);训练与测试数据方差大时慎用15。最后 作者对 ICS 之争留了个态度:「BN 真的和 ICS 没有一点关系吗?我觉得不一定」16

3.3 LN、IN、GN、WN、SN:剩下五张面孔

LN(层归一化:Layer Normalization)把统计轴转九十度:沿「同一条样本、跨各通道」取数(先交代一个词:样本,就是喂进网络的一张图或一句话)。统计量与批次大小无关, 「无论样本数多少都不会影响参与 LN 计算的数据量」,所以序列模型可用;书里自己跑了 对照:批次 8 时「BN 反而会减慢收敛速度」,LN 轻微优于无归一化;但 CNN 上 LN 「破坏了卷积学习到的特征,模型无法收敛」17。结论:都可用时 BN 一般更好 (跨样本统计更不易损失信息),不能用 BN 时才换 LN18

IN(实例归一化) 更极端:单样本、单通道。风格迁移、图像生成这类「每个像素的 独特细节都重要」的任务里,BN 混合整个批次「造成了每个像素独特细节的丢失」;Texture Network 的实验发现批次越小(如 16 个)效果越好,BN 恰好不适合,IN 应运而生19。 注意 IN 在 MLP/RNN 里没法用(每通道只剩一个数),特征图太小也不行(统计无代表性)。

GN(组归一化)(何恺明团队)取中道:通道分组、组内统计,组数是超参数(常用 32);组数取 1 就退化为 LN,取通道数就退化为 IN20。书里的态度很有人味:作者解释 GN 比 LN/IN 都好,「这令我非常困惑……有根据结果推导原因的嫌疑」,自己也跑了对照, 「实验结果并不如作者所说的那么理想」——结论:大批次用 BN,小批次先做对照实验再选21

WN(权值归一化) 根本不在数据上算:把权重向量拆成「长度 × 方向」两个参数 (每个都是单独的标量——单个的数),分别优化。

它与批次无关、不引入统计噪声——「在生成模型(造图像、造文本的那些)、强化学习等 对噪声敏感的环境中 WN 的效果也要优于 BN」;代价是没了约束数值范围的能力, 「WN 依旧对参数的初始值非常敏感」22

SN(自适配归一化) 干脆把选择权交给模型:BN、LN、IN 三路的统计各自算, 各配一个可学习权重加权合成,权重靠反向传播学——「让模型根据数据来学习每一层该选择 的归一化方法」。实测里 LSTM 学出偏 LN、风格迁移学出偏 IN,小批次时 BN 的权重自动 变小23。六个标量参数,买断「人工选归一化」这道工序。

判断(我们的,不是书里的): 把 Dropout 与归一化并排看,它们是同一件事的 两个方向——Dropout 加噪声、归一化去噪声。前者靠随机扰动逼出冗余表征, 后者靠统计校准稳住每层分布;一个「藏」,一个「扶」。书里 Ian Goodfellow 的篇首引言 (最好的模型是「适当正则化的大型模型」)正好骑在两者中间。 如果错,会错在: 若两者在损失面上作用于同一处(都只是平滑),同时使用就该 边际递减——而实践里 Dropout+BN 同用确实常互相干扰,说明它们至少部分重叠; 「完全互补」的说法站不住。

4. 作者的判断与证据

书里自己跑的实验: 批次 128 对 8 的 BN/LN 对照、LSTM 上的 LN 对照、CNN 上的 LN 失败实验;对 GN 论文的复现尝试。转述的: MIT 对 ICS 的两个实验与四条定理、 残差/DenseNet 平滑损失平面的证据、WN 的自稳定性分析。作者的态度: 对 ICS 「不一定没关系」的保留、对 GN 解释「根据结果推导原因」的怀疑、对 RegNet 式 「小批次先做对照实验」的实用主义,都署名。

5. 边界与局限

  • 书里的 BN 讲解基于原论文与 MIT 反驳的两极,2020 年后的再反驳(如「BN 是执行 梯度缩放的一种形式」)不在书里;
  • Dropout 在 Transformer 里的用法(注意力权重上丢、残差里丢)书里没有展开, 第 10、12 章的模型只在超参数里出现;
  • GN 一节的两派解释(作者说「组内特征天然相似」vs 书作者的怀疑)都没有定论, 读者应当成开放问题。

6. 可带走的

  1. 共适应是「强者恒强、弱者失业」的内部垄断;Dropout 用随机关节点打破它;
  2. 丢失率 0.5 正则最强;浅层 <0.2;测试时权重乘 p——三条技巧都从同一个推导里来;
  3. softmax 的 0.99 不可信;蒙特卡洛 Dropout 用多次采样换一个诚实的置信度;
  4. 归一化先问「沿哪些轴」:跨样本(BN)、跨通道(LN)、都不跨(IN)、分组(GN)、 不在数据上(WN)、让模型自选(SN);
  5. BN 的真因是平滑损失平面——「变化速度有上界」的地形,大学习率也敢走;
  6. 批次小、序列模型、分布漂移三种场景慎用 BN:统计量失去代表性;
  7. 发现「官方理由」与「实验证据」冲突时,MIT 式的拆台实验比权威结论更值得押注。

7. 原文地图

主题原书节原文位置
篇首:三类正则与家族总览第三篇篇首 / 6.2text/13-p241-260.txt:87(搜「早停」) · text/13-p241-260.txt:89(搜「第一个被考虑使用」) · text/13-p241-260.txt:96(搜「无法用在序列模型中」) · text/13-p241-260.txt:107(搜「噪声敏感的环境」)
共适应与 Dropout 原理6.1.1 / 6.1.2text/13-p241-260.txt:131(搜「共适应」) · text/13-p241-260.txt:134(搜「浪费了网络的宽度和深度」) · text/13-p241-260.txt:158(搜「w′ = pw」)
等价正则与三技巧6.1.2 / 6.1.3text/13-p241-260.txt:180(搜「带有正则的普通网络」) · text/13-p241-260.txt:190(搜「最强的正则效果」) · text/13-p241-260.txt:193(搜「大于 0.5」) · text/13-p241-260.txt:197(搜「p 倍的缩放」)
集成/贝叶斯与 Alpha Dropout6.1.3 Dropout 是一个正则网络text/13-p241-260.txt:203(搜「模型集成」) · text/13-p241-260.txt:215(搜「Alpha Dropout」)
CNN/RNN 的 Dropout6.1.4 / 6.1.5text/13-p241-260.txt:227(搜「临近像素之间的相似性」) · text/13-p241-260.txt:232(搜「DropBlock」) · text/13-p241-260.txt:243(搜「保留长期记忆的能力」) · text/13-p241-260.txt:251(搜「各个门上」)
变体与蒙特卡洛 Dropout6.1.6 Dropout 的变体text/13-p241-260.txt:279(搜「DropConnect」) · text/13-p241-260.txt:315(搜「自适应」) · text/13-p241-260.txt:338(搜「0.99」) · text/13-p241-260.txt:342(搜「不同模型的生成器」)
BN 官方理由与细节6.2.1 BN 详解text/13-p241-260.txt:367(搜「internel covariate shift」) · text/13-p241-260.txt:382(搜「罪魁祸首」) · text/13-p241-260.txt:393(搜「比较大的区域」) · text/13-p241-260.txt:417(搜「网络容量是不小于没」) · text/13-p241-260.txt:472(搜「以通道为单位」)
MIT 反驳与损失平面6.2.2 BN 的背后原理text/13-p241-260.txt:490(搜「还能增大 ICS」) · text/13-p241-260.txt:504(搜「余弦夹角」) · text/13-p241-260.txt:511(搜「平滑了损失平面」) · text/13-p241-260.txt:517(搜「斜率的斜率」) · text/13-p241-260.txt:525(搜「lp-norm」)
BN 使用边界与作者态度6.2.3 小结text/13-p241-260.txt:574(搜「谨慎使用 BN」) · text/13-p241-260.txt:579(搜「没有一点关系吗」)
LN 对照与结论6.3 LNtext/14-p261-275.txt:25(搜「独立于批次的算法」) · text/14-p261-275.txt:89(搜「反而会减慢收敛速度」) · text/14-p261-275.txt:117(搜「破坏了卷积学习到的特征」) · text/14-p261-275.txt:124(搜「更不容易损失信息」)
WN6.4 WNtext/14-p261-275.txt:135(搜「解耦成了参数向量」) · text/14-p261-275.txt:139(搜「噪声敏感的环境」) · text/14-p261-275.txt:234(搜「对参数的初始值非常敏感」)
IN6.5 INtext/14-p261-275.txt:242(搜「每个像素独特细节的丢失」) · text/14-p261-275.txt:259(搜「得到的效果越好」)
GN 与作者的困惑6.6 GNtext/14-p261-275.txt:334(搜「介于 LN 和 IN 之间」) · text/14-p261-275.txt:357(搜「GN 和 LN 等价」) · text/14-p261-275.txt:391(搜「根据结果推导原因」) · text/14-p261-275.txt:393(搜「仍旧是最优的选择」)
SN6.7 SNtext/14-p261-275.txt:404(搜「可微的归一化层」) · text/14-p261-275.txt:460(搜「batch average」) · text/14-p261-275.txt:484(搜「健壮性」)

Footnotes

  1. 出处:「第三篇 模型优化(篇首)」(text/13-p241-260.txt:84,搜「过拟合的问」)。

  2. 出处:「第三篇 模型优化(篇首)」(text/13-p241-260.txt:87,搜「从训练过程角度出发」)。

  3. 出处:「6.1.1 什么是 Dropout」(text/13-p241-260.txt:134,搜「浪费了网络的宽度和深度」)。

  4. 出处:「6.1.2 Dropout 的数学原理」(text/13-p241-260.txt:180,搜「带有正则的普通网络」)与(text/13-p241-260.txt:180,搜「正则项为」)。

  5. 出处:「6.1.3 Dropout 是一个正则网络」(text/13-p241-260.txt:190,搜「最强的正则效果」)、(text/13-p241-260.txt:192,搜「丢失率应该低于 0.2」)与(text/13-p241-260.txt:197,搜「p 倍的缩放」)。

  6. 出处:「6.1.3 Dropout 是一个正则网络」(text/13-p241-260.txt:203,搜「模型集成」)与(text/13-p241-260.txt:209,搜「参数是共享的」)。

  7. 出处:「6.1.4 CNN 的 Dropout」(text/13-p241-260.txt:227,搜「临近像素之间的相似性」)与(text/13-p241-260.txt:232,搜「DropBlock」)。

  8. 出处:「6.1.5 RNN 的 Dropout」(text/13-p241-260.txt:243,搜「保留长期记忆的能力」)与(text/13-p241-260.txt:92,搜「一组掩码」)。

  9. 出处:「6.1.6 Dropout 的变体」(text/13-p241-260.txt:338,搜「0.99」)、(text/13-p241-260.txt:339,搜「置信度是非常不可靠的」)与(text/13-p241-260.txt:342,搜「不同模型的生成器」)。

  10. 出处:「6.2.1 BN 详解」(text/13-p241-260.txt:417,搜「网络容量是不小于没」)。

  11. 出处:「6.2.1 BN 详解」(text/13-p241-260.txt:367,搜「internel covariate shift」)与(text/13-p241-260.txt:382,搜「罪魁祸首」)。

  12. 出处:「6.2.2 BN 的背后原理」(text/13-p241-260.txt:485,搜「随机噪声」)与(text/13-p241-260.txt:490,搜「还能增大 ICS」)。

  13. 出处:「6.2.2 BN 的背后原理」(text/13-p241-260.txt:514,搜「利普希茨」)与(text/13-p241-260.txt:517,搜「斜率的斜率」)。

  14. 出处:「6.2.2 BN 的背后原理」(text/13-p241-260.txt:512,搜「均起到了平滑损失平面」)与(text/13-p241-260.txt:525,搜「lp-norm」)。

  15. 出处:「6.2.3 小结」(text/13-p241-260.txt:574,搜「谨慎使用 BN」)与(text/14-p261-275.txt:19,搜「BN 无法运行」)。

  16. 出处:「6.2.3 小结」(text/13-p241-260.txt:579,搜「没有一点关系吗」)。

  17. 出处:「6.3.3 对照实验」(text/14-p261-275.txt:89,搜「反而会减慢收敛速度」)与(text/14-p261-275.txt:117,搜「破坏了卷积学习到的特征」)。

  18. 出处:「6.3.4 小结」(text/14-p261-275.txt:124,搜「更不容易损失信息」)。

  19. 出处:「6.5 IN」(text/14-p261-275.txt:242,搜「每个像素独特细节的丢失」)与(text/14-p261-275.txt:259,搜「得到的效果越好」)。

  20. 出处:「6.6.1 GN 算法」(text/14-p261-275.txt:357,搜「GN 和 LN 等价」)。

  21. 出处:「6.6.4 小结」(text/14-p261-275.txt:391,搜「根据结果推导原因」)与(text/14-p261-275.txt:393,搜「仍旧是最优的选择」)。

  22. 出处:「6.4 WN」(text/14-p261-275.txt:139,搜「噪声敏感的环境」)与(text/14-p261-275.txt:234,搜「对参数的初始值非常敏感」)。

  23. 出处:「6.7 SN」(text/14-p261-275.txt:404,搜「可微的归一化层」)与(text/14-p261-275.txt:477,搜「BN 的权值就会很小」)。