跳转至

第 7 章:深度学习的正则化(Regularization for Deep Learning)

7.1 参数范数惩罚(Parameter Norm Penalties)

正则化是机器学习里的一个核心问题:如何让算法在训练数据之外的新输入上也表现良好。许多机器学习策略被明确设计来降低测试误差,即使代价是训练误差上升,这些策略被统称为正则化。深度学习中发展更有效的正则化策略一直是该领域的主要研究方向之一。本章在第 5 章介绍的泛化、欠拟合、过拟合、偏差、方差和正则化基础上,更详细地讨论正则化,重点放在深度模型或可作为深度模型构件的那些模型上。第 5.2.2 节曾定义正则化为"对学习算法做的任何旨在降低其泛化误差(而非训练误差)的修改"。一些正则化策略给模型加额外约束(例如限制参数取值),另一些在目标函数中加额外项,可视为对参数值的软约束。如果精心选择,这些额外约束与惩罚能改善测试集上的性能;有时它们编码某种具体先验,有时仅表达"更简单的模型类更可能泛化"的通用偏好;某些场合惩罚和约束是把一个欠定问题变良定的必要手段;还有一些称为集成方法的形式,把多个解释训练数据的假设组合起来。

深度学习中大多数正则化策略都基于正则化估计器:靠牺牲偏差换取方差的下降。一个有效的正则化器应能显著降低方差,同时不过度增大偏差。第 5 章讨论泛化与过拟合时区分了三种情形:模型族(1)排除了真实数据生成过程,对应欠拟合并引入偏差;(2)正好匹配真实数据生成过程;(3)包含了生成过程但也包含许多其他可能的生成过程,对应方差主导估计误差的过拟合区域。正则化的目标就是把模型从第三种情形推到第二种情形。实践中复杂模型族并不一定包含目标函数或真实数据生成过程,甚至也不一定包含其良好近似——我们几乎从不能接触到真实数据生成过程,所以也无法确切知道被估计的模型族是否包含它。深度学习所应用的大多数领域(图像、音频序列、文本)真实生成过程几乎肯定在模型族之外,因为我们其实是在试图把一个"数据生成过程"这个方块塞进"模型族"这个圆孔。

这意味着控制模型复杂度不是简单找"大小合适、参数数量合适"的模型。相反,在实际深度学习场景中我们几乎总是发现:泛化误差最小的那个模型是一个被恰当正则化了的大模型。寻找这样的大而深、且被恰当正则化的模型,正是本章要综述的多种策略之主题。

7.1.1 L2 参数正则化(L2 Parameter Regularization)

L2 参数范数惩罚(亦称权重衰减,weight decay)是最常见最简单的参数范数惩罚之一,它通过向目标函数添加正则化项 \(\Omega(\theta) = \frac{1}{2} \|w\|_2^2\) 把权重推向原点。在其他学术圈里,L2 正则化也称为岭回归(ridge regression)或 Tikhonov 正则化。考察正则化目标函数梯度可以洞悉权重衰减的行为:若假定没有偏置参数(即 \(\theta\) 就是 \(w\)),则总目标函数为

\[ \tilde{J}(w; X, y) = \frac{\alpha}{2} w^\top w + J(w; X, y) \]

对应参数梯度为 \(\nabla_w \tilde{J}(w; X, y) = \alpha w + \nabla_w J(w; X, y)\)。做一步梯度下降更新权重时,更新规则相当于

\[ w \leftarrow (1 - \epsilon \alpha) w - \epsilon \nabla_w J(w; X, y) \]

也就是说每步在做常规梯度更新之前,先把权重向量以常数因子乘性缩小。整个训练过程呢?为简化分析,在使无正则化训练代价最小的权重 \(w^* = \arg\min_w J(w)\) 邻域内对目标函数做二次近似:若目标函数真的是二次的(如同线性回归配合均方误差),该近似是精确的。近似 \(\hat{J}\) 给出

\[ \hat{J}(\theta) = J(w^*) + \frac{1}{2}(w - w^*)^\top H (w - w^*) \]

其中 \(H\)\(J\) 关于 \(w\)\(w^*\) 处求值的 Hessian 矩阵;因为 \(w^*\) 是极小点,\(\hat{J}\) 没有一阶项,\(H\) 是半正定的。\(\hat{J}\) 的极小点出现在其梯度 \(H(w - w^*) = 0\) 处。

为研究权重衰减的效应,在 (7.7) 中加入权重衰减的梯度项后求带正则化版本 \(\hat{J}\) 的极小点,用 \(\tilde{w}\) 表示该极小点位置,可得

\[ \alpha \tilde{w} + H(\tilde{w} - w^*) = 0 \;\;\Rightarrow\;\; (H + \alpha I) \tilde{w} = H w^* \;\;\Rightarrow\;\; \tilde{w} = (H + \alpha I)^{-1} H w^* \]

\(H\) 是实对称矩阵,可分解为对角阵 \(\Lambda\) 和正交特征向量基 \(Q\)(即 \(H = Q\Lambda Q^\top\)),代入 (7.10) 后得到

\[ \tilde{w} = Q(\Lambda + \alpha I)^{-1} \Lambda Q^\top w^* \]

可见权重衰减的效应是沿着 \(H\) 的特征向量轴对 \(w^*\) 重缩放:与 \(H\)\(i\) 个特征向量对齐的分量被乘以 \(\frac{\lambda_i}{\lambda_i + \alpha}\) 缩放。在 Hessian 特征值相对较大的方向(即 \(\lambda_i \gg \alpha\))正则化效应较小;在特征值很小的方向(\(\lambda_i \ll \alpha\))该分量被缩到接近零。图 7.1 给出该效应的几何直观:实线椭圆是无正则化目标函数的等值线,虚线圆是 L2 正则项的等值线,两组竞争目标在 \(\tilde{w}\) 处达到平衡;在 \(w_1\) 方向上 Hessian 特征值小,目标函数沿水平方向偏离 \(w^*\) 也不怎么增加,所以正则器在此轴上有强效应、把 \(w_1\) 拉近零;在 \(w_2\) 方向上目标函数对偏离 \(w^*\) 极敏感、对应高曲率的大特征值,因此权重衰减对 \(w_2\) 的位置影响相对小。只有"对减小目标函数确有贡献"的方向上的参数分量才被相对完整地保留;Hessian 小特征值意味着沿此方向移动不会显著增大梯度,权重向量的这些不重要分量在训练过程中被衰减掉。

把这种抽象二次代价函数的分析接到机器学习:线性回归的真实代价函数是二次的,因此可做同样分析,得到用训练数据表示的同一结果特例。对线性回归,代价函数是平方误差之和 \((Xw - y)^\top (Xw - y)\),加 L2 正则化后变成 \((Xw - y)^\top (Xw - y) + \frac{\alpha}{2} w^\top w\),解的正规方程相应从 \(w = (X^\top X)^{-1} X^\top y\) 变为 \(w = (X^\top X + \alpha I)^{-1} X^\top y\)。原矩阵 \(X^\top X\)\(m^{-1} X^\top X\) 协方差矩阵成比例,L2 正则化相当于在 \(X^\top X\) 上对角线加 \(\alpha\),新矩阵对角元对应各输入特征的方差。因此 L2 正则化使学习算法"感知"到输入 \(X\) 的方差被提高了,于是把那些与输出目标协方差低、不及该额外方差的特征对应的权重收缩。一般来说更一般地也可把参数正则化到不为零的某特定点 \(w^{(o)}\),但零作为默认值是合理的,因为我们并不总是知道正确值应偏正还是偏负;将零设为默认相比其他任意点通常对结果影响不大。

7.1.2 L1 正则化(L1 Regularization)

L2 权重衰减是权重衰减最常见的形式,但还有其他惩罚模型参数大小的方式,其中一种就是 L1 正则化。形式上,对模型参数 \(w\) 的 L1 正则化定义为

\[ \Omega(\theta) = \|w\|_1 = \sum_i |w_i| \]

即各参数绝对值之和。L1 与 L2 一样通过超参数 \(\alpha\) 缩放惩罚项 \(\Omega\) 控制正则化强度,正则化目标函数是 \(\tilde{J}(w; X, y) = \alpha \|w\|_1 + J(w; X, y)\),对应梯度(实际是次梯度)为 \(\nabla_w \tilde{J}(w; X, y) = \alpha \,\mathrm{sign}(w) + \nabla_w J(X, y; w)\),其中 \(\mathrm{sign}(w)\) 是逐元素取 \(w\) 的符号。

从梯度可见 L1 与 L2 的差别:L1 正则化对梯度的贡献不再随每个 \(w_i\) 线性缩放,而是一个与 \(\mathrm{sign}(w_i)\) 同号、绝对值等于 \(\alpha\) 的常数项。其后果是 L1 的二次近似下没有像 L2 那样干净的代数解——二次近似的目标函数中 L1 引入绝对值项,使求导后解在 \(|w_i^*| = \alpha / H_{i,i}\) 附近不光滑,所以代数解不是闭式可表达的。该简单线性模型的二次代价函数可以用 Taylor 级数表示(或视为更复杂模型代价函数的截断 Taylor 近似),梯度为 \(\nabla_w \hat{J}(w) = H(w - w^*)\),其中 \(H\) 仍是 \(J\) 关于 \(w\)\(w^*\) 处的 Hessian。因 L1 在一般 Hessian 下没有干净代数表达,再进一步假设 Hessian 是对角的 \(H = \mathrm{diag}([H_{1,1}, \ldots, H_{n,n}])\),每个 \(H_{i,i} > 0\)(当输入特征已用 PCA 等方法去相关时该假设成立)。L1 正则化目标函数的二次近似可分解为对各参数求和

\[ \hat{J}(w; X, y) = J(w^*; X, y) + \sum_i \left[ \frac{1}{2} H_{i,i} (w_i - w_i^*)^2 + \alpha |w_i| \right] \]

最小化该近似代价函数可得解析解(对每个维度 \(i\)):

\[ w_i = \mathrm{sign}(w_i^*) \max\left\{ |w_i^*| - \frac{\alpha}{H_{i,i}}, 0 \right\} \]

考虑 \(w_i^* > 0\) 的情形。有两种情况:当 \(w_i^* \le \alpha / H_{i,i}\) 时,正则化目标下最优值就是 \(w_i = 0\)\(J\)\(i\) 方向上的贡献被 L1 推 \(w_i\) 趋零的力压倒,\(J\) 项在二次近似下小于 \(\alpha |w_i|\) 提供的惩罚);当 \(w_i^* > \alpha / H_{i,i}\) 时正则化不会把 \(w_i\) 拉到零,只是把它朝零的方向平移 \(H_{i,i} / \alpha\) 的距离。\(w_i^* < 0\) 时类似,只是 L1 惩罚使 \(w_i\) 朝正方向平移 \(H_{i,i} / \alpha\) 或者为零。

与 L2 相比,L1 正则化产生更稀疏的解。此处"稀疏"指许多参数的最优值为零。L1 引起的稀疏是与 L2 在性质上不同的行为。回到 (7.13) 给出 L2 解 \(\tilde{w}\),在引入的对角正定 \(H\) 假设下 \(\tilde{w}_i = \frac{H_{i,i}}{H_{i,i} + \alpha} w_i^*\)\(w_i^*\) 非零时 \(\tilde{w}_i\) 仍非零——L2 正则化不会使参数变稀疏,L1 在 \(\alpha\) 足够大时则可以。L1 的稀疏性被广泛用作特征选择机制:著名的 LASSO(Tibshirani, 1995)模型将 L1 惩罚与线性模型和最小二乘代价函数结合,L1 惩罚使一部分权重为零,意味着对应特征可被安全丢弃;这与 L2 缩放所有权重但不让任何一个归零形成鲜明对比。

按 5.6.1 节 MAP 贝叶斯推断的解释:L2 正则化等价于权重上各向同性高斯先验的 MAP 推断;L1 惩罚 \(\alpha \Omega(w) = \alpha \sum_i |w_i|\) 等价于权重 \(w \in \mathbb{R}^n\) 上各向同性 Laplace 先验的对数先验项(公式 3.26),即

\[ \log p(w) = \sum_i \log \mathrm{Laplace}(w_i; 0, \frac{1}{\alpha}) = -\alpha \|w\|_1 + n \log \alpha - n \log 2 \]

从关于 \(w\) 的最大化角度看,与 \(w\) 无关的 \(\log \alpha - \log 2\) 项可忽略。直观上看 Laplace 分布在 0 处有锐峰而在两翼指数衰减,这使 MAP 推断倾向于把权重集中在 0 附近而不像高斯先验那样只是把权重连续向 0 收缩,从而产生"恰好为 0"的最优解。

7.2 范数惩罚作为约束优化(Norm Penalties as Constrained Optimization)

考虑被参数范数惩罚正则化后的代价函数

\[ \tilde{J}(\theta; X, y) = J(\theta; X, y) + \alpha \Omega(\theta) \]

回想 4.4 节,可通过构造广义 Lagrange 函数来最小化带约束函数(由原目标函数加一组惩罚组成;每项惩罚是 KKT 乘子和表示约束是否被满足的函数的乘积)。要把 \(\Omega(\theta)\) 约束到小于某常数 \(k\),可构造广义 Lagrange 函数

\[ \mathcal{L}(\theta, \alpha; X, y) = J(\theta; X, y) + \alpha (\Omega(\theta) - k) \]

约束问题的解为 \(\theta^* = \arg\min_\theta \max_{\alpha, \alpha \ge 0} \mathcal{L}(\theta, \alpha)\)。如 4.4 节所述求解此问题需要同时修改 \(\theta\)\(\alpha\);4.5 节给出了线性回归加 L2 约束的完整示例。许多不同过程可行——有的用梯度下降,有的用梯度为零处的解析解——但所有过程中 \(\alpha\) 必须在 \(\Omega(\theta) > k\) 时增大、\(\Omega(\theta) < k\) 时减小;所有正的 \(\alpha\) 都鼓励 \(\Omega(\theta)\) 缩小,最优的 \(\alpha^*\) 既鼓励 \(\Omega(\theta)\) 缩小又不至于过强以使 \(\Omega(\theta) < k\)。例如 SGD 训练中当训练集上过 \(\Omega(\theta) > k\) 时就增大 \(\alpha\)\(\Omega(\theta) < k\) 时减小 \(\alpha\) 是一种可行模式。

为洞悉约束效应,可固定 \(\alpha^*\) 把问题视为仅关于 \(\theta\) 的函数:

\[ \theta^* = \arg\min_\theta \mathcal{L}(\theta, \alpha^*) = \arg\min_\theta J(\theta; X, y) + \alpha^* \Omega(\theta) \]

这恰与最小化 \(\tilde{J}\) 的正则化训练问题一样。因此可把参数范数惩罚视为对权重施加约束:若 \(\Omega\) 是 L2 范数,权重被约束在 L2 球内;若 \(\Omega\) 是 L1 范数,权重被约束在 L1 范数受限的区域。通常我们并不知道用系数 \(\alpha^*\) 的权重衰减所施加约束区域的大小,因为 \(\alpha^*\) 的值并不直接告诉 \(k\)。原则上可以解出 \(k\),但 \(k\)\(\alpha^*\) 的关系依赖于 \(J\) 的形式;虽不知道约束区域的确切大小,仍可通过增减 \(\alpha\) 粗略控制——\(\alpha\) 更大约束区域更小,\(\alpha\) 更小约束区域更大。

有时我们更愿意用显式约束而非惩罚。如 4.4 节所述可修改 SGD 类算法:对 \(J(\theta)\) 做一步下降后把 \(\theta\) 投影回最近满足 \(\Omega(\theta) < k\) 的点。这在知道合适的 \(k\) 并不想花时间找对应 \(\alpha\) 时有用。另一个偏好显式约束加投影而非惩罚的理由是:惩罚会使非凸优化陷入小 \(\theta\) 对应的局部极小。神经网络中通常表现为一些"死单元"(dead units)——它们对网络所学函数贡献很小,因为输入或输出它们的权重都很小。带权重范数惩罚训练时,这些配置可能是局部最优的,即使能通过把权重变大来显著降低 \(J\)。显式约束加投影在这些情况下效果好得多,因为它不鼓励权重接近原点,只在权重变大要离开约束区域时才起作用。

最后显式约束加投影还有一项优势:能为优化过程带来稳定性。高学习率时可能出现正反馈环——大权重引起大梯度、大梯度又引起对权重的更大更新;如果这些更新持续增大权重的大小,\(\theta\) 会迅速远离原点直至数值溢出。显式约束加投影能阻止这种反馈环把权重幅度无界增大。Hinton et al. (2012c) 推荐把约束与高学习率结合使用,以在保持稳定性的同时快速探索参数空间。Hinton et al. (2012c) 还特别推荐 Srebro and Shraibman (2005) 的策略:约束神经网络每层权重矩阵的每一列的范数,而非整个权重矩阵的 Frobenius 范数;按列约束范数能防止任何单个隐藏单元权重过大。如果把该约束改写为 Lagrange 函数中的惩罚项,类似 L2 权重衰减但每个隐藏单元的权重都有独立的 KKT 乘子,每个 KKT 乘子被独立动态更新以使每个隐藏单元满足约束;实际中按列范数限制始终被实现为显式约束加投影。

7.3 正则化与欠定问题(Regularization and Under-Constrained Problems)

在某些情况下正则化是使机器学习问题有良好定义的必要条件。许多机器学习中的线性模型(线性回归、PCA)依赖矩阵 \(X^\top X\) 求逆;\(X^\top X\) 不可逆时无法进行——这可能在数据生成分布在某些方向上真无方差,或因样本数(\(X\) 的行)少于输入特征数(\(X\) 的列)导致这些方向上未观测到方差时出现。许多形式的正则化对应改为求逆 \(X^\top X + \alpha I\),该正则化矩阵保证可逆。

这些线性问题在相关矩阵可逆时有闭式解。也有可能一个无闭式解的问题是欠定的,例如把逻辑回归应用于线性可分分类问题。若权重向量 \(w\) 能完美分类,则 \(2w\) 也能完美分类并对应更高的似然;迭代优化过程(如 SGD)会持续增大 \(w\) 的幅度,理论上永不停止;实际中数值实现的梯度下降最终会达到数值溢出所需的足够大权重,其后行为将取决于程序员对非实数值的处理方式。大多数正则化形式都能保证迭代方法应用于欠定问题时收敛,例如权重衰减会使梯度下降在似然斜率等于权重衰减系数时停止增大权重幅度。

用正则化解决欠定问题的思想不局限于机器学习,相同的思想对几个基本线性代数问题也有用。第 2.9 节中我们用 Moore-Penrose 伪逆解欠定线性方程组,回想伪逆 \(X^+\) 的一种定义为

\[ X^+ = \lim_{\alpha \searrow 0} (X^\top X + \alpha I)^{-1} X^\top \]

此时 (7.29) 可被识别为做带权重衰减的线性回归——它正是 (7.17) 在正则化系数趋于零时的极限。因此可把伪逆解释为用正则化稳定欠定问题。

7.4 数据集增强(Dataset Augmentation)

让机器学习模型泛化更好的最好办法是在更多数据上训练。实践中数据量是有限的,绕开这个限制的一种方法是为训练集创造假数据并加入;对某些机器学习任务来说创造新假数据相当直接。

这种方法最容易用于分类。分类器需把复杂高维输入 \(x\) 总结为单一类别身份 \(y\),这意味着分类器面临的主要任务是对大量变换保持不变。我们能通过对训练集中的 \(x\) 输入做变换轻易生成新的 \((x, y)\) 对。该方法不易推广到许多其他任务:例如对密度估计任务而言,除非已经解决了密度估计问题,否则很难生成新假数据。

数据集增强在特定分类问题——物体识别——上是特别有效的技术。图像是高维的并包含巨大变化因素,其中许多可以轻易模拟。在各方向上对训练图像做几个像素的平移,常常能大幅改善泛化,即使模型已通过第 9 章描述的卷积和池化被设计为部分平移不变。其他操作(旋转、缩放)也已证明相当有效。必须小心不要使用会改变正确类别的变换——例如 OCR 任务需要区分 bd、区分 69,因此水平翻转和 180° 旋转对这些任务来说不适合作为数据集增强手段。还有些我们希望分类器对其不变但不便执行的变换,例如平面外旋转不能通过对输入像素的简单几何操作来实现。数据集增强在语音识别任务上也有效(Jaitly and Hinton, 2013),例如对声学特征加噪声或变形。

向神经网络输入注入噪声(Sietsma and Dow, 1991)也可视为一种数据增强形式。对许多分类甚至一些回归任务,任务在输入加小幅随机噪声后仍应可解;然而神经网络对噪声并不特别鲁棒(Tang and Eliasmith, 2010)。提升神经网络鲁棒性的一种简单方法是在训练时给输入加随机噪声。输入噪声注入是无监督学习算法(如去噪自编码器 Vincent et al., 2008)的一部分——去噪自编码器的目标就是从被破坏的输入重建原输入,等价于把"对输入噪声鲁棒"作为监督信号。噪声注入在加到隐藏单元时也起作用,可视为在多个抽象层次上做数据集增强。Poole et al. (2014) 最近证明该方法在噪声幅度被仔细调节时能非常有效——噪声太小起不到正则化作用,噪声太大会破坏信号,因此该方法的实际效果高度依赖调参。Dropout(一种将在 7.12 节描述的强大正则化策略)可被视作通过乘以噪声来构造新输入的过程。

比较机器学习基准结果时必须把数据集增强的效果考虑进去。手工设计的数据集增强方案通常能大幅降低机器学习技术的泛化误差。要比较不同机器学习算法性能需做受控实验:比较算法 A 和算法 B 时,须确保两者用同样的手工数据集增强方案评估。设想算法 A 在无增强时表现差而算法 B 配合大量输入合成变换时表现好;很可能性能提升来自合成变换本身而非机器学习算法 B。判断实验是否被恰当控制有时需要主观判断。例如给输入注入噪声的机器学习算法实际上在做一种数据集增强;通常那些通用操作(如给输入加高斯噪声)被视为机器学习算法的一部分,而针对特定应用域的操作(如随机裁剪图像)则被视为单独的预处理步骤。

7.5 噪声鲁棒性(Noise Robustness)

7.4 节把对输入加噪声作为数据集增强策略加以讨论。对某些模型来说,在模型输入端加无穷小方差噪声等价于对权重范数施加惩罚(Bishop, 1995a,b)。一般情形下需要记住噪声注入可以比简单收缩参数强大得多,尤其当噪声被加到隐藏单元时。给隐藏单元加噪声是重要话题以至于应单独讨论;7.12 节描述的 dropout 算法就是这一思路的主要发展。

另一种在正则化模型中使用噪声的方式是把噪声加到权重上。这项技术主要在循环神经网络背景下被使用(Jim et al., 1996; Graves, 2011)。这可被解释为关于权重的贝叶斯推断的随机实现:贝叶斯学习把模型权重视为不确定的,用一个反映该不确定性的概率分布表示;给权重加噪声是反映该不确定性的实用随机化方法。给权重加噪声也可(在某些假设下)被解释为等价于更传统形式正则化,鼓励所学函数稳定。考虑回归设定:希望训练一个把特征 \(x\) 映射到标量的函数 \(\hat{y}(x)\),使用模型预测 \(\hat{y}(x)\) 与真值 \(y\) 之间的最小二乘代价

\[ J = E_{p(x, y)} \left( \hat{y}(x) - y \right)^2 \]

训练集由 \(m\) 个标注样本 \(\{(x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)})\}\) 组成。现假设每次呈现输入时还伴随一个对网络权重的随机扰动 \(\epsilon_W \sim \mathcal{N}(\epsilon; 0, \eta I)\);记受扰动模型为 \(\hat{y}_{\epsilon_W}(x)\)。即使注入噪声,我们仍希望最小化网络输出的平方误差,相应目标函数变为

\[ \tilde{J}_W = E_{p(x, y, \epsilon_W)} (\hat{y}_{\epsilon_W}(x) - y)^2 = E_{p(x, y, \epsilon_W)} \left[ \hat{y}_{\epsilon_W}^2(x) - 2 y \hat{y}_{\epsilon_W}(x) + y^2 \right] \]

对小 \(\eta\),带加性权重噪声(协方差 \(\eta I\))的 \(J\) 最小化等价于 \(J\) 加上一个正则化项 \(\eta \, E_{p(x, y)} \|\nabla_W \hat{y}(x)\|_2^2\)。这种正则化鼓励参数进入权重小幅扰动对输出影响较小的区域;换言之,它把模型推向对权重小变化相对不敏感的位置,寻找不仅是极小点而且是被平坦区域包围的极小点(Hochreiter and Schmidhuber, 1995)。在线性回归的简化情形(\(\hat{y}(x) = w^\top x + b\))中该正则化项塌缩为 \(\eta \, E_{p(x)} \|x\|_2^2\),不是参数的函数,因此不对 \(\tilde{J}_W\) 关于参数的梯度有贡献。

7.5.1 在输出目标处注入噪声(Injecting Noise at the Output Targets)

大多数数据集在 \(y\) 标签上都有些错误,在 \(y\) 是错时最大化 \(\log p(y | x)\) 是有害的。防止这种情况的一种方式是显式建模标签上的噪声,例如可以假设对小常数 \(\epsilon\),训练集标签 \(y\) 以概率 \(1 - \epsilon\) 正确,否则其他可能标签中的任何一个都可能正确。该假设易于解析地(而不是显式采样噪声地)合并到代价函数中。例如标签平滑对带 \(k\) 个输出值的 softmax 模型做正则化:用 \(\frac{\epsilon}{k-1}\)\(1 - \epsilon\) 分别替代硬分类目标 0 和 1,标准交叉熵损失可与这些软目标一起使用。带 softmax 分类器和硬目标的最大似然学习实际上可能永不收敛——softmax 永远无法精确预测 0 或 1 的概率,于是会不断学习更大更极端预测的权重。其他正则化策略(如权重衰减)可阻止这种情况。标签平滑的优势是在不阻止正确分类的前提下阻止追求过硬的概率。该策略自 1980 年代起就已被使用,至今仍是现代神经网络的显著特征(Szegedy et al., 2015)。

7.6 半监督学习(Semi-Supervised Learning)

在半监督学习范式中,来自 \(P(x)\) 的无标签样本和来自 \(P(x, y)\) 的有标签样本都被用来估计 \(P(y | x)\) 或从 \(x\) 预测 \(y\)。深度学习背景下半监督学习通常指学习一个表示 \(h = f(x)\),目标是要让同类的样本在表示空间中相似。无监督学习能提供关于如何在表示空间中分组样本的有用线索:输入空间中紧密聚类的样本应被映射到相似表示。在新空间上的线性分类器在许多情况下能获得更好的泛化(Belkin and Niyogi, 2002; Chapelle et al., 2003)。该方法的一个长期存在的变体是在应用分类器之前用主成分分析作投影预处理。

也可以不把无监督和监督部分分开,而是构造 \(P(x)\)\(P(x, y)\) 的生成模型与 \(P(y | x)\) 的判别模型共享参数的模型,然后可让监督准则 \(-\log P(y | x)\) 与无监督/生成准则(如 \(-\log P(x)\)\(-\log P(x, y)\))做权衡。生成准则表达了对监督学习问题解的一种特定先验信念(Lasserre et al., 2006),即 \(P(x)\) 的结构与 \(P(y | x)\) 的结构以一种被共享参数化捕捉的方式相关联。通过控制生成准则在总准则中的比例,可以找到比纯生成或纯判别训练准则更好的折中(Lasserre et al., 2006; Larochelle and Bengio, 2008)。Salakhutdinov and Hinton (2008) 描述了一种为回归用核机器学习核函数的方法,其中用无标签样本建模 \(P(x)\) 大幅改善了 \(P(y | x)\)。关于半监督学习的更多信息见 Chapelle et al. (2006)。

7.7 多任务学习(Multi-Task Learning)

多任务学习(Caruana, 1993)是一种通过汇集来自多个任务的样本(可视为对参数的软约束)来改善泛化的方法。正如额外的训练样本对模型参数施加更多压力使其趋向泛化良好的值,当模型部分在任务间共享时,那部分模型被更强约束在好值上(假设共享是合理的),通常产生更好的泛化。

图 7.2 展示了一种多任务学习常见形式:不同监督任务(给定 \(x\) 预测 \(y^{(i)}\))共享同一输入 \(x\) 以及某个捕捉公共因子池的中间层表示 \(h^{(\text{shared})}\)。模型通常可分为两类部分和参数:(1)任务特定参数(只从其任务样本中受益以达到好的泛化,对应图 7.2 中神经网络的上层);(2)跨所有任务共享的通用参数(从所有任务的汇集数据中受益,对应图 7.2 中神经网络的下层)。图 7.2 说明常见情形是任务共享同一输入但涉及不同目标随机变量:深度网络下层(无论监督前馈还是含向下箭头的生成组件)可在这些任务间共享,而任务特定参数(与进出 \(h^{(1)}\)\(h^{(2)}\) 的权重相关)可在这些共享表示上学习得到 \(h^{(\text{shared})}\)。底层假设是存在解释输入 \(x\) 变化的公共因子池,而每个任务只与这些因子的一个子集相关。本例中额外假设顶层隐藏单元 \(h^{(1)}\)\(h^{(2)}\) 分别专门处理各自任务(分别预测 \(y^{(1)}\)\(y^{(2)}\)),而 \(h^{(\text{shared})}\) 在所有任务间共享。在无监督学习上下文中,顶层因子中有的与任何输出任务都无关(\(h^{(3)}\)):它们解释输入变化的一部分但与预测 \(y^{(1)}\)\(y^{(2)}\) 无关。

由于共享参数可大幅提高统计强度(与单任务模型相比,共享参数对应样本数成比例增加),可获得更好泛化和泛化误差界(Baxter, 1995)。当然这只有在关于不同任务间统计关系的某些假设成立时才发生,即确实存在某些跨任务共享的东西。从深度学习的角度看,底层先验信念是:在与不同任务相关的数据变化解释因子中,有些跨两个或多个任务共享。多任务学习不限于是图 7.2 所示的"任务共享输入并各有不同目标随机变量"形式,也可以有其他变体(如多任务在输出层之上有各自的可分离目标头),但核心思想一致:通过共享下层使被共享部分的参数统计强度提升。从贝叶斯角度看,多任务学习相当于在不同任务的模型参数间放置一个共享先验——若任务的某些结构相似,则共享先验让数据稀少任务也能借到数据丰富任务的统计强度。

7.8 提前停止(Early Stopping)

训练有足够表示能力以过拟合任务的大模型时,常观察到训练误差随时间稳步下降但验证集误差开始回升(参见图 7.3 的 MNIST maxout 网络示例),这种行为很可靠。这意味着可以通过把参数恢复到验证集误差最低时的设置来获得验证集误差更小(因此希望测试集误差也更小)的模型:每次验证集误差改善时存一份参数副本;训练算法终止时返回这些参数而非最新参数。算法在若干次迭代内验证误差没有比最佳记录改善时终止,这套元算法更正式地写在算法 7.1 中。

该策略称为提前停止(early stopping),可能是深度学习中最常用的正则化形式。它的流行既源于有效性也源于简单性。可以把提前停止视为一种非常高效的超参数选择算法:按此观点训练步数只是另一个超参数,图 7.3 中该超参数有 U 形验证集性能曲线;大多数控制模型容量的超参数都有这样的 U 形曲线(图 5.3)。在提前停止情形下我们通过决定模型能走多少步来拟合训练集来控制有效容量。大多数超参数必须用昂贵的猜测+检查过程选择,预先设定再跑训练几步看效果。"训练时间"超参数是唯一的——按定义一次训练就尝试了该超参数的多个值;自动选择该超参数(通过提前停止)的唯一显著代价是训练期间定期评估验证集。理想情况下这与训练过程并行在独立机器、独立 CPU 或独立 GPU 上进行。若无此资源,可通过使用相比训练集较小的验证集或减少评估频率、降低最优训练时间的分辨率估计来减少这些周期性评估的代价。

提前停止的额外代价是需要保存一份最佳参数副本。该代价通常可忽略,因为把这些参数存于更慢、容量更大的存储形式是可接受的(例如在 GPU 内存中训练但把最优参数存于主机内存或磁盘)。最佳参数写入不频繁且训练期间不读,这些偶发慢写对总训练时间影响很小。提前停止是非常不打扰的正则化形式,它几乎不需修改基础训练过程、目标函数或允许的参数取值集合。这意味容易使用提前停止而不损害学习动力学;相比之下权重衰减须小心不要使用过多以免让网络陷于病态小权重对应的坏局部极小。提前停止可单独使用也可与其他正则化策略结合使用;即使使用改变目标函数鼓励更好泛化的正则化策略,最佳泛化也极少出现在训练目标的局部极小处。

提前停止需要一个验证集,意味着部分训练数据未被喂给模型。为最佳利用这部分数据可在初始的提前停止训练完成后做额外训练:在第二步额外训练中所有训练数据被纳入。这里有两种基本策略。一种策略(算法 7.2)是再次用随机初始化模型并对所有数据重新训练:第二次训练跑与提前停止步骤在第一步所确定的最优步数相同的步数。该过程有些细节:例如并不清楚重训时应使用相同的参数更新数还是相同的数据集遍历数;第二次训练时由于训练集变大,每次数据集遍历所需的参数更新数更多。

另一种策略是保留第一轮训练得到的参数,然后继续训练但这次使用所有数据。此时我们不再有"何时停止"的步数指导,可改为监控验证集上的平均损失函数,并继续训练直到它低于第一步提前停止时训练集目标的值。该策略避免从头重训模型的高代价,但表现没那么好——例如没有保证验证集上的目标值会达到目标值,因此该策略甚至不保证终止。该过程在算法 7.3 中更正式地给出。提前停止还很有用因为它降低了训练过程的计算成本。除了因限制训练迭代数带来的成本下降外,它的好处还包括不需在代价函数中添加惩罚项或计算这些项的梯度就实现了正则化。

提前停止如何作为正则化:到目前为止我们只通过验证集误差呈 U 形曲线的学习曲线来支持"提前停止是正则化策略"的论断。提前停止实际机制是什么?Bishop (1995a) 和 Sjöberg and Ljung (1995) 认为提前停止的效果是把优化过程限制在初始参数 \(\theta_0\) 附近一个相对较小的参数空间体积内(如图 7.4)。更具体地,假设做 \(\tau\) 步优化(对应 \(\tau\) 次训练迭代),学习率为 \(\epsilon\);可把乘积 \(\epsilon \tau\) 视为有效容量的度量。假设梯度有界,则限制迭代数和学习率也限制从 \(\theta_0\) 出发可达的参数空间体积。从这种意义上看,\(\epsilon \tau\) 行为上像是权重衰减系数的倒数。

事实上可证明在带二次误差函数的简单线性模型和简单梯度下降下,提前停止等价于 L2 正则化。为与经典 L2 正则化比较,考察一个只有线性权重(\(\theta = w\))的简单设定;用经验最优权重 \(w^*\) 邻域内的二次近似对代价函数 \(J\) 建模:

\[ \hat{J}(\theta) = J(w^*) + \frac{1}{2}(w - w^*)^\top H (w - w^*) \]

其中 \(H\)\(J\) 关于 \(w\)\(w^*\) 处的 Hessian;由 \(w^*\)\(J\) 的极小点知 \(H\) 是半正定。在局部 Taylor 近似下梯度为 \(\nabla_w \hat{J}(w) = H(w - w^*)\)

接下来研究训练中参数向量所走轨迹。为简化设初始参数向量为零(\(w^{(0)} = 0\);对神经网络来说为获得隐藏单元间的对称破缺不能把所有参数初始化为 0 见 6.2 节,但论证对任何其他初值 \(w^{(0)}\) 都成立)。通过分析 \(\hat{J}\) 上的梯度下降研究 \(J\) 上梯度下降的近似行为:

\[ w^{(\tau)} = w^{(\tau-1)} - \epsilon \nabla_w \hat{J}(w^{(\tau-1)}) = w^{(\tau-1)} - \epsilon H (w^{(\tau-1)} - w^*) \]
\[ \Rightarrow w^{(\tau)} - w^* = (I - \epsilon H)(w^{(\tau-1)} - w^*) \]

将表达式改写到 \(H\) 的特征向量空间,利用 \(H = Q\Lambda Q^\top\) 分解(\(\Lambda\) 对角、\(Q\) 正交特征向量基):

\[ Q^\top (w^{(\tau)} - w^*) = (I - \epsilon \Lambda) Q^\top (w^{(\tau-1)} - w^*) \]

假设 \(w^{(0)} = 0\)\(\epsilon\) 足够小使 \(|1 - \epsilon \lambda_i| < 1\),则 \(\tau\) 步参数更新后参数轨迹为

\[ Q^\top w^{(\tau)} = [I - (I - \epsilon \Lambda)^\tau] Q^\top w^* \]

L2 正则化下 \(Q^\top \tilde{w}\) 的 (7.13) 表达式可改写为 \(Q^\top \tilde{w} = (\Lambda + \alpha I)^{-1} \Lambda Q^\top w^* = [I - (\Lambda + \alpha I)^{-1} \alpha] Q^\top w^*\)。比较两式可见若超参数 \(\epsilon\)\(\alpha\)\(\tau\) 被选为满足

\[ (I - \epsilon \Lambda)^\tau = (\Lambda + \alpha I)^{-1} \alpha \]

则在目标函数的二次近似下 L2 正则化与提前停止是等价的。进一步取对数并用 \(\log(1 + x)\) 级数展开,可得若所有 \(\lambda_i\) 都小(\(\epsilon \lambda_i \ll 1\)\(\lambda_i / \alpha \ll 1\)),有

\[ \tau \approx \frac{1}{\epsilon \alpha}, \quad \alpha \approx \frac{1}{\tau \epsilon} \]

即在这些假设下训练迭代数 \(\tau\) 起与 L2 正则化参数成反比的作用,\(\tau \epsilon\) 的倒数起权重衰减系数的作用。对应目标函数显著曲率方向的参数被正则化得比曲率较小的方向少。当然在提前停止情形下这实际意味着对应显著曲率方向的参数倾向于相对对应低曲率方向的参数更早被学到。

本节推导表明长度为 \(\tau\) 的轨迹终止于对应 L2 正则化目标最小值的点。提前停止当然不仅仅是限制轨迹长度;它通常还涉及监控验证集误差以在空间内某个特别好的点停止轨迹。提前停止相比权重衰减的优势是它能自动确定正确的正则化量,而权重衰减需要多次不同超参数值的训练实验。

7.9 参数绑定与参数共享(Parameter Tying and Parameter Sharing)

到目前为止本章讨论给参数加约束或惩罚时,总是相对于某个固定区域或点。例如 L2 正则化(权重衰减)惩罚模型参数偏离固定值零。但有时我们可能需要其他方式来表达关于模型参数合适取值的先验知识:有时我们可能不确切知道参数应取什么值,但凭领域与模型架构的知识知道模型参数之间应存在某种依赖。

我们常常想表达的一种常见依赖是某些参数应彼此接近。考虑下述情景:有两个模型做同样的分类任务(类别集合相同)但输入分布略有不同。形式上有参数 \(w^{(A)}\) 的模型 A 和参数 \(w^{(B)}\) 的模型 B;两个模型把输入映射到两个不同但相关的输出 \(\hat{y}^{(A)} = f(w^{(A)}, x)\)\(\hat{y}^{(B)} = g(w^{(B)}, x)\)。假设任务足够相似(也许输入输出分布相似)以致我们相信模型参数应彼此接近:\(\forall i, w_i^{(A)}\) 应接近 \(w_i^{(B)}\)。我们可通过正则化利用这一信息,具体用形如 \(\Omega(w^{(A)}, w^{(B)}) = \|w^{(A)} - w^{(B)}\|_2^2\) 的参数范数惩罚;这里用了 L2 惩罚其他选择也可行。

这种方法由 Lasserre et al. (2006) 提出,他们把一个以监督方式训练为分类器的模型的参数正则化为接近另一个以无监督方式训练(以捕捉观察输入数据分布)的模型的参数;架构被构造成使分类器模型中的许多参数可与无监督模型中的对应参数配对(例如监督分类器和无监督密度模型的下层表示层是一一对应的)。其直觉是:监督分类器倾向于学得对类别判别有用的特征,无监督模型倾向于学得能解释输入分布的特征;如果两者学到的下层表示接近,则监督模型被鼓励去利用那些对解释输入分布也有用的特征——这是一种把无监督学习的信息"注入"到监督训练中的正则化机制。

虽然参数范数惩罚是一种让参数彼此接近的正则化方法,但更流行的方式是使用约束——强制参数集合相等。这种正则化方法常被称为参数共享,因为我们把不同模型或模型组件视为共享同一组参数集合。参数共享相比让参数彼此接近(通过范数惩罚)的显著优势是只需在内存中存储一部分参数(唯一集合)。在某些模型如卷积神经网络中,这可显著降低模型的内存占用——例如同样的卷积核在图像不同空间位置被重用,参数数量相对全连接层下降数个量级。

卷积神经网络:迄今最广为使用且范围最广的参数共享发生在计算机视觉的卷积神经网络(CNN)中。自然图像有许多对平移不变的统计性质(例如猫的图像向右平移一个像素仍是一张猫的图像)。CNN 通过在多个图像位置间共享参数来利用此性质:同一特征(带相同权重的隐藏单元)在输入的不同位置被计算;这意味着无论猫出现在图像的列 \(i\) 还是列 \(i+1\),都能用同一只猫检测器找到它。参数共享使 CNN 能大幅降低唯一模型参数数量,并在不需相应增加训练数据的情况下显著扩大网络规模;它仍是把领域知识有效纳入网络架构的最佳范例之一。CNN 将在第 9 章更详细地讨论。

7.10 稀疏表示(Sparse Representations)

权重衰减直接对模型参数加惩罚。另一种策略是对神经网络单元的激活加惩罚,鼓励激活稀疏;这间接地对模型参数施加了复杂惩罚。7.1.2 节已讨论 L1 惩罚如何引起参数稀疏——许多参数变为零(或接近零)。表示稀疏则描述另一种情形:表示的许多元素为零(或接近零)。可在线性回归语境下用简化视角说明该区别:

\[ \begin{bmatrix} 18 \\ 5 \\ 15 \\ -9 \\ -3 \end{bmatrix} = \begin{bmatrix} 4 & 0 & 0 & -2 & 0 & 0 \\ 0 & 0 & -1 & 0 & 3 & 0 \\ 0 & 5 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & -1 & 0 & -4 \\ 1 & 0 & 0 & 0 & -5 & 0 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \\ -2 \\ -5 \\ 1 \\ 4 \end{bmatrix}, \quad y \in \mathbb{R}^m,\; A \in \mathbb{R}^{m \times n},\; x \in \mathbb{R}^n \]

第一个表达式是稀疏参数化线性回归模型的例子。

\[ \begin{bmatrix} -14 \\ 1 \\ 19 \\ 2 \\ 23 \end{bmatrix} = \begin{bmatrix} 3 & -1 & 2 & -5 & 4 & 1 \\ 4 & 2 & -3 & -1 & 1 & 3 \\ -1 & 5 & 4 & 2 & -3 & -2 \\ 3 & 1 & 2 & -3 & 0 & -3 \\ -5 & 4 & -2 & 2 & -5 & -1 \end{bmatrix} \begin{bmatrix} 0 \\ 2 \\ 0 \\ 0 \\ -3 \\ 0 \end{bmatrix}, \quad y \in \mathbb{R}^m,\; B \in \mathbb{R}^{m \times n},\; h \in \mathbb{R}^n \]

第二个是带数据 \(x\) 的稀疏表示 \(h\) 的线性回归;\(h\)\(x\) 的函数,以某种方式表示 \(x\) 中的信息但用稀疏向量完成。表示正则化通过我们用于参数正则化的同类机制实现。

表示的范数惩罚正则化通过向损失函数 \(J\) 添加对表示的范数惩罚实现,惩罚记为 \(\Omega(h)\),正则化损失函数记为

\[ \tilde{J}(\theta; X, y) = J(\theta; X, y) + \alpha \Omega(h) \]

其中 \(\alpha \in [0, \infty)\) 权衡范数惩罚项的相对贡献,\(\alpha\) 越大对应正则化越强。正如 L1 对参数的惩罚引起参数稀疏,L1 对表示元素的惩罚引起表示稀疏:\(\Omega(h) = \|h\|_1 = \sum_i |h_i|\)。L1 惩罚只是能产生稀疏表示的惩罚之一,其他包括从表示的 Student-t 先验导出的惩罚(Olshausen and Field, 1996; Bergstra, 2011)以及 KL 散度惩罚(Larochelle and Bengio, 2008)——后者对表示元素被限制在单位区间内(如 sigmoid 输出 \(h_i \in [0, 1]\))时尤其有用,可表达"使某些 \(h_i\) 接近 0、其他接近 1"这类先验。Lee et al. (2008) 和 Goodfellow et al. (2009) 都给出了基于把若干样本的平均激活 \(\frac{1}{m} \sum_i h^{(i)}\) 正则化为接近某目标值(如每项 .01 的向量)的策略示例——这类正则化鼓励每层单元在群体意义上"低活跃"(每单元平均激活 1%),与 L1 单元级稀疏互补。

其他方法通过对激活值的硬约束获得表示稀疏。例如正交匹配追踪(orthogonal matching pursuit, Pati et al., 1993)以如下约束优化问题的解 \(h\) 对输入 \(x\) 编码:

\[ \arg\min_{h, \|h\|_0 < k} \|x - W h\|_2 \]

其中 \(\|h\|_0\)\(h\) 的非零项个数。当 \(W\) 被约束为正交时该问题可被高效求解——正交性使每个 \(h_i\) 的贡献独立于其他,可贪心地逐个选取对残差解释力最大的特征。该方法常称为 OMP-k,\(k\) 的值指定允许的非零特征数。Coates and Ng (2011) 证明 OMP-1(只允许一个非零特征)作为深度架构的特征提取器在实践中非常有效;这一发现挑战了"必须用深层非线性模型"才能学得好的常见假设,说明即使是线性编码器配以恰当的特征选择机制也能在很多任务上竞争。任何有隐藏单元的模型本质上都可被变稀疏。贯穿全书的许多场景都会看到稀疏正则化的使用,例如在第 13 章的监督与无监督表示学习中。

7.11 Bagging 与其他集成方法(Bagging and Other Ensemble Methods)

Bagging(bootstrap aggregating 的简写)是一种通过组合多个模型来降低泛化误差的技术(Breiman, 1994)。其想法是分别训练若干不同模型,然后让所有模型对测试样本的输出投票。这是机器学习中称为模型平均(model averaging)的一般策略的实例;使用该策略的技术统称为集成方法(ensemble methods)。模型平均有效的原因是不同模型通常不会在测试集上犯完全相同的错误;只要这些错误不是完全相关的,集成平均后的误差会按 \(\frac{1}{k} v + \frac{k-1}{k} c\) 缩小。

考虑一个由 \(k\) 个回归模型组成的集合。设每个模型在每个样本上的误差为 \(\epsilon_i\),误差服从零均值多变量正态分布且方差 \(E[\epsilon_i^2] = v\)、协方差 \(E[\epsilon_i \epsilon_j] = c\)。则所有集成模型平均预测的误差为 \(\frac{1}{k} \sum_i \epsilon_i\)。集成预测器的期望平方误差为

\[ E\left[\left(\frac{1}{k} \sum_i \epsilon_i\right)^2\right] = \frac{1}{k^2} E\left[\sum_i \epsilon_i^2 + \sum_{j \ne i} \epsilon_i \epsilon_j\right] = \frac{1}{k} v + \frac{k-1}{k} c \]

误差完全相关且 \(c = v\) 时,均方误差退化为 \(v\),模型平均完全无帮助;误差完全不相关且 \(c = 0\) 时,集成期望平方误差仅为 \(\frac{1}{k} v\)。这意味着集成期望平方误差随集成大小线性下降;平均而言集成至少与任一成员表现相当,若成员犯独立错误则集成表现显著优于成员。

不同集成方法以不同方式构造集成。例如集成的每个成员可由完全不同种类的模型使用不同算法或目标函数训练得到。Bagging 是一种允许相同种类模型、训练算法和目标函数被多次重用的方法。具体而言 bagging 涉及构造 \(k\) 个不同数据集:每个数据集与原数据集样本数相同但通过从原数据集有放回采样构造。这意味着高概率下每个数据集缺少原数据集中的一些样本并包含若干重复样本(理论上从大小为 \(m\) 的原数据集中有放回采样 \(m\) 次,每个样本不被选中的概率为 \((1 - 1/m)^m \approx 1/e \approx 0.368\),故平均而言原数据集约 \(1 - 1/e \approx 63.2\%\) 的样本会出现在所得训练集中)。模型 \(i\) 在数据集 \(i\) 上训练;哪些样本被包含在每个数据集中的差异导致训练模型之间的差异(参见图 7.5 的 8 检测器示例——8 顶上/底下的环成为判别特征)。神经网络能到达足够多样的解点,因此即使所有模型都在同一数据集上训练也常能从模型平均中获益:随机初始化不同、minibatch 随机选择不同、超参数不同或非确定性实现的神经网络的不同结果都足以使集成成员犯部分独立的错误;这是 bagging 在神经网络时代仍被持续使用的重要原因——传统 bagging 需要用重采样制造数据差异,神经网络自身的不确定性已经能提供类似的去相关。

模型平均是降低泛化误差非常强大可靠的方法。在为科学论文做算法基准时通常不鼓励使用它,因为任何机器学习算法都能以更高计算和内存为代价从模型平均中实质获益;因此基准比较通常用单模型进行。机器学习竞赛通常由对几十个模型做模型平均的方法获胜,最近的显著例子是 Netflix Grand Prize(Koren, 2009)——获胜方案融合了上百个独立模型,把推荐系统的均方误差显著推低。并非所有构造集成的方法都设计为使集成比个体模型更正则化,例如 boosting(Freund and Schapire, 1996b,a)构造的是容量比个体模型更大的集成。Boosting 已被用于通过增量向集成添加神经网络来构建神经网络集成(Schwenk and Bengio, 1998);boosting 也被用于把单个神经网络解释为集成(Bengio et al., 2006a),通过增量向神经网络添加隐藏单元——这种解释把 boosting 训练过程重述为构造一个"渐进式变宽"的神经网络。

7.12 Dropout(Dropout)

Dropout(Srivastava et al., 2014)提供了一种计算上廉价但强大的方法对一大类模型做正则化。粗略近似下,dropout 可被视为使 bagging 实际可行于由非常多的、大的神经网络组成的集成的方法。Bagging 涉及训练多个模型并在每个测试样本上评估多个模型;当每个模型都是大神经网络时这看起来不切实际,因为训练和评估这些网络在运行时间和内存上都代价高昂。常见做法是使用五到十个神经网络的集成(Szegedy et al. (2014a) 用六个赢得了 ILSVRC),但再多就迅速变得难以处理。Dropout 提供了对指数多个神经网络 bagged 集成的廉价近似。

具体而言 dropout 训练由所有可通过从基础网络中移除非输出单元而形成的子网络所组成的集成(如图 7.6)。在大多数现代神经网络(基于一系列仿射变换和非线性)中,我们可通过把某单元的输出值乘以零来有效地从网络中移除该单元。该过程对像 RBF 网络这类以"单元状态与某参考值之差"作为输入的模型需稍作修改;这里为简单起见以乘零来描述 dropout 算法,但可平凡地修改以适用于其他"移除单元"的操作。

回想用 bagging 学习时,我们定义 \(k\) 个不同模型,对训练集有放回采样构造 \(k\) 个不同数据集,然后模型 \(i\) 在数据集 \(i\) 上训练。Dropout 旨在近似该过程但使用指数大的神经网络集合。具体而言为用 dropout 训练,我们使用基于 minibatch 的、能做小步的学习算法(如 SGD)。每次把一个样本加载到 minibatch 时,我们随机采样一个不同的二进制掩码并应用到网络中所有输入和隐藏单元;每个单元的掩码独立于其他所有单元被采样。采样掩码值为 1(导致单元被包含)的概率是一个在训练开始前固定的超参数,它不是当前模型参数值或输入样本的函数。通常输入单元以 0.8 概率被包含,隐藏单元以 0.5 概率被包含。然后像通常一样运行前向传播、反向传播和学习更新。图 7.7 展示了用 dropout 做前向传播的过程。

更形式地,假设掩码向量 \(\mu\) 指定哪些单元被包含,\(J(\theta, \mu)\) 定义由参数 \(\theta\) 和掩码 \(\mu\) 决定的模型代价,则 dropout 训练由最小化 \(E_\mu J(\theta, \mu)\) 组成。期望包含指数多项,但可通过采样 \(\mu\) 值获得其梯度的无偏估计。

Dropout 训练与 bagging 训练并不完全相同。Bagging 情形下模型都是独立的;dropout 情形下模型共享参数,每个模型从父神经网络继承不同参数子集。这种参数共享使表示指数多模型时仅需可控量内存。Bagging 情形下每个模型在其各自训练集上训练到收敛;dropout 情形下大多数模型通常根本不被显式训练——通常模型大到在宇宙寿命内采样所有可能子网络是不可行的;只对一小部分可能子网络各做一步训练,参数共享使其余子网络获得好的参数设置。差异仅此而已;除此之外 dropout 遵循 bagging 算法;例如每个子网络遇到的训练集的确是对原训练集有放回采样得到的子集。

为做预测,bagged 集成必须从所有成员累积投票。称此过程为该上下文中的推断(inference)。迄今为止对 bagging 和 dropout 的描述不要求模型是显式概率的。现在假设模型的角色是输出一个概率分布。Bagging 情形下每个模型 \(i\) 产生一个概率分布 \(p^{(i)}(y | x)\),集成的预测由所有这些分布的算术平均给出

\[ \frac{1}{k} \sum_{i=1}^k p^{(i)}(y | x) \]

Dropout 情形下每个由掩码向量 \(\mu\) 定义的子模型定义一个概率分布 \(p(y | x, \mu)\),所有掩码的算术平均为 \(\sum_\mu p(\mu) p(y | x, \mu)\),其中 \(p(\mu)\) 是训练时用于采样 \(\mu\) 的概率分布。因该求和包含指数多项,除模型结构允许某种简化外一般不可精确计算;目前已知深度神经网络不允许任何可处理的简化。改为可用采样做近似,对许多掩码的输出取平均;即使 10-20 个掩码也常足以获得好性能。

然而还有更好的方法,允许我们以仅一次前向传播为代价获得对整个集成预测的良好近似。方法是改用几何平均而非集成成员预测分布的算术平均。Warde-Farley et al. (2014) 给出论据和经验证据表明在此情形下几何平均表现与算术平均相当。多个概率分布的几何平均不保证是概率分布,为保证结果是概率分布,我们施加子模型不把概率 0 赋给任何事件的要求并把结果分布重归一化。由几何平均直接定义的非归一化概率分布为

\[ \tilde{p}_{\text{ensemble}}(y | x) = \sqrt[2^d]{\prod_\mu p(y | x, \mu)} \]

其中 \(d\) 是可被丢弃的单元数。这里为简化使用 \(\mu\) 上的均匀分布,非均匀分布也可行。预测时必须把集成重归一化:

\[ p_{\text{ensemble}}(y | x) = \frac{\tilde{p}_{\text{ensemble}}(y | x)}{\sum_{y'} \tilde{p}_{\text{ensemble}}(y' | x)} \]

dropout 的一个关键洞见(Hinton et al., 2012c)是我们可通过在单个模型中评估 \(p(y | x)\) 来近似 \(p_{\text{ensemble}}\):保留所有单元但把离开单元 \(i\) 的权重乘以包含单元 \(i\) 的概率。该修改的动机是捕捉来自该单元输出的正确期望值,称此方法为权重缩放推断规则(weight scaling inference rule)。该近似推断规则在深度非线性网络中的准确性目前尚无理论论证,但经验上表现很好。因通常用 \(1/2\) 的包含概率,权重缩放规则通常等价于在训练结束时把权重除以 2 然后像平常一样使用模型。达到同样结果的另一方式是在训练期间把单元状态乘以 2。无论哪种方式,目标都是使测试时单元的期望总输入大致与训练时相同,即使训练时平均一半的单元缺失。

对许多没有非线性隐藏单元的模型类,权重缩放推断规则是精确的。考虑一个简单例子——有 \(n\) 个输入变量由向量 \(v\) 表示的 softmax 回归分类器:

\[ P(y = y | v) = \mathrm{softmax}(W^\top v + b)_y \]

可通过输入与二进制向量 \(d\) 的逐元素乘来索引子模型族:

\[ P(y = y | v; d) = \mathrm{softmax}(W^\top (d \odot v) + b)_y \]

集成预测器由对所有集成成员预测的几何平均做重归一化定义:

\[ P_{\text{ensemble}}(y = y | v) = \frac{\tilde{P}_{\text{ensemble}}(y = y | v)}{\sum_{y'} \tilde{P}_{\text{ensemble}}(y = y' | v)} \]

其中 \(\tilde{P}_{\text{ensemble}}(y = y | v) = \sqrt[2^n]{\prod_{d \in \{0,1\}^n} P(y = y | v; d)}\)。为看权重缩放规则是精确的,可简化 \(\tilde{P}_{\text{ensemble}}\)

\[ \tilde{P}_{\text{ensemble}}(y = y | v) = \sqrt[2^n]{\prod_{d \in \{0,1\}^n} \mathrm{softmax}(W^\top (d \odot v) + b)_y} \]

把 softmax 展开后分子分母的指数逐项对齐,可化简为 \(\propto \exp(\frac{1}{2} W_{y,:}^\top v + b_y)\)。代回 (7.58) 可得一个权重为 \(\frac{1}{2} W\) 的 softmax 分类器。

权重缩放规则在其他设定中也精确,包括有条件正态输出的回归网络以及无非线性隐藏层的深度网络。然而对有非线性的深度模型权重缩放规则仅是近似;虽然该近似尚未被理论刻画但经验上常效果很好。Goodfellow et al. (2013a) 实验发现权重缩放近似(在分类准确率上)能比 Monte Carlo 近似集成预测器工作得更好;即使 Monte Carlo 近似被允许采样多达 1,000 个子网络时也如此。Gal and Ghahramani (2015) 发现有些模型用 20 个样本和 Monte Carlo 近似获得更好分类准确率。看来推断近似方式的最优选择是问题相关的。Srivastava et al. (2014) 证明 dropout 比其他标准计算廉价正则化器(权重衰减、滤波器范数约束、稀疏活动正则化)更有效。Dropout 也可与其他形式正则化结合以获得进一步提升。

Dropout 一个优势是计算上非常便宜。训练期间使用 dropout 对每个样本的每个更新仅需 \(O(n)\) 计算(生成 \(n\) 个随机二进制数并与状态相乘)。根据实现可能还需 \(O(n)\) 内存来存储这些二进制数直到反向传播阶段。在训练好的模型上做推断的每样本成本与不使用 dropout 时相同,尽管必须付出训练结束时把权重除以 2 这一次性的代价。Dropout 另一个显著优势是它不显著限制可用模型或训练过程的类型;它几乎能与使用分布式表示并能用 SGD 训练的任何模型良好配合,包括前馈神经网络、概率模型如受限玻尔兹曼机(Srivastava et al., 2014)以及循环神经网络(Bayer and Osendorfer, 2014; Pascanu et al., 2014a)。许多其他相当强度的正则化策略对模型架构施加更严限制。

虽然对特定模型应用 dropout 的每步成本可忽略,在完整系统中使用 dropout 的总成本可能显著。因为 dropout 是一种正则化技术,它降低模型有效容量。为抵消该效应必须增大模型规模。通常使用 dropout 时验证集最优误差低得多,但代价是模型更大、训练算法迭代数更多。对非常大的数据集正则化对泛化误差的减小有限,此时使用 dropout 和更大模型的计算成本可能超过正则化的收益。当标注训练样本极少时 dropout 效果较差:在 Alternative Splicing Dataset(Xiong et al., 2011,可用样本少于 5,000)上贝叶斯神经网络(Neal, 1996)优于 dropout(Srivastava et al., 2014)。当额外无标签数据可用时无监督特征学习能比 dropout 获益。Wager et al. (2013) 证明对线性回归应用 dropout 等价于 L2 权重衰减,每个输入特征有不同权重衰减系数;每个特征权重衰减系数的量级由其方差决定。类似结果对其他线性模型成立;对深度模型 dropout 不等价于权重衰减。

dropout 训练中使用的随机性对方法成功不是必要的,它只是近似对所有子模型求和的一种手段。Wang and Manning (2013) 推导了对该边缘化的解析近似,他们的近似称为 fast dropout,由于梯度计算中随机性降低而收敛更快。该方法也能在测试时作为比权重缩放近似对所有子网络平均的更原则(但计算更贵)的近似。Fast dropout 已被用于在小神经网络问题上几乎匹配标准 dropout 的性能,但尚未产生显著改进或被应用于大问题。

正如随机性不是实现 dropout 正则化效应的必要条件,它也不充分。为证明这一点,Warde-Farley et al. (2014) 设计了称为 dropout boosting 的对照实验,该方法设计为使用与传统 dropout 完全相同的掩码噪声但缺乏其正则化效应。Dropout boosting 联合训练整个集成以在训练集上最大化对数似然;按传统 dropout 类比 bagging 的意义,该方法类比 boosting。预期之中 dropout boosting 的实验显示相比把整个网络作为单模型训练几乎没有正则化效应。这证明把 dropout 解释为 bagging 相比把 dropout 解释为对噪声的鲁棒性具有超越后者的价值。bagged 集成的正则化效应只有当被随机采样的集成成员被独立训练好时才能实现。

Dropout 启发了其他训练共享权重的指数大模型集的随机方法。DropConnect 是 dropout 的特例,其中每个"单个标量权重与单个隐藏单元状态的乘积"被视为可被丢弃的单元(Wan et al., 2013)。随机池化是用于构建卷积网络集成的随机池化形式(见 9.3 节),每个卷积网络关注每张特征图的不同空间位置。到目前为止 dropout 仍是最广泛使用的隐式集成方法。

Dropout 的关键洞见之一是:训练一个有随机行为的网络并通过对多个随机决策求平均来预测,实现了一种带参数共享的 bagging 形式。前面我们把 dropout 描述为对通过包含/排除单元而形成的模型集成的 bagging。然而该模型平均策略无需基于包含/排除;原则上任何类型的随机修改都是允许的。实践中我们必须选择神经网络能学会抵抗的修改族。理想情况下还应使用允许快速近似推断规则的模型族。我们可把任何由向量 \(\mu\) 参数化的修改形式视为训练由所有可能 \(\mu\) 值对应的 \(p(y | x, \mu)\) 组成的集成。\(\mu\) 不必有有限多个值;例如 \(\mu\) 可为实值。Srivastava et al. (2014) 证明把权重乘以 \(\mu \sim \mathcal{N}(1, I)\) 能优于基于二进制掩码的 dropout。因 \(E[\mu] = 1\),标准网络自动实现集成中的近似推断而不需任何权重缩放。

目前为止我们纯粹把 dropout 描述为执行有效近似 bagging 的手段。然而还有一种比这更进一步的 dropout 视角。Dropout 训练的不仅是一个 bagged 模型集成,还是一个共享隐藏单元的模型集成;这意味着每个隐藏单元必须能独立于模型中其他隐藏单元良好工作。隐藏单元必须准备好在不同模型间被交换。Hinton et al. (2012c) 的灵感来自生物学:有性繁殖通过在不同生物间交换基因产生进化压力,使基因不仅要好,而且要能容易地在不同生物间交换。这样的基因和特征对其环境变化非常鲁棒因为它们无法错误地适应任何单个生物或模型的非寻常特征。Dropout 因此把每个隐藏单元正则化为不仅是一个好特征,而且是一个在许多上下文都好用的特征。Warde-Farley et al. (2014) 比较了 dropout 训练与大集成训练,得出结论:相比独立模型的集成 dropout 提供了对泛化误差的额外改进。

理解 dropout 很重要的一点是其力量的大部分来自掩码噪声被施加到隐藏单元这一事实。这可被视作一种对输入信息内容的高度智能、自适应破坏,而非对输入原始值的破坏。例如若模型学到一个隐藏单元 \(h_i\) 通过找鼻子来检测人脸,则丢弃 \(h_i\) 对应擦除图像中有鼻子的信息。模型必须学到另一个 \(h_i\),要么冗余地编码鼻子的存在、要么通过另一特征(如嘴)检测人脸。给输入加非结构噪声的传统噪声注入技术不能随机地从人脸图像中擦除鼻子的信息,除非噪声幅度大到几乎擦除图像中所有信息。破坏提取出的特征而非原始值,使破坏过程能利用模型迄今学到的关于输入分布的所有知识。dropout 另一重要方面是噪声是乘性的;若噪声是固定尺度的加性,ReLU 隐藏单元 \(h_i\) 加上噪声 \(\epsilon\) 后只要把 \(h_i\) 学得非常大即可使加性噪声 \(\epsilon\) 相比之下不重要。乘性噪声不允许这种对噪声鲁棒性问题病态解的存在。

另一个深度学习算法——批归一化——以一种在训练时对隐藏单元引入加性和乘性噪声的方式重新参数化模型。批归一化的主要目的是改进优化,但噪声可有正则化效应,有时使 dropout 变得不必要。批归一化在 8.7.1 节进一步描述。

7.13 对抗训练(Adversarial Training)

在许多情形下神经网络在 i.i.d. 测试集上已接近人类水平。自然要问这些模型是否获得了对任务的真正人类水平理解。为探查网络对底层任务的理解水平,我们可以搜索模型误分类的样本。Szegedy et al. (2014b) 发现即使达到人类水平准确率的神经网络在被故意构造(用优化过程搜索输入 \(x\) 附近的 \(x'\),使模型在 \(x'\) 上的输出与在 \(x\) 上极不同时)的样本上错误率近 100%。在许多情形下 \(x'\)\(x\) 如此相似以至人类观察者分不清原样本与对抗样本,但网络给出极不同的预测(参见图 7.8 的 GoogLeNet + ImageNet 熊猫示例——以 57.7% 置信度分类为"熊猫"的原图,加上 \(0.007 \times \mathrm{sign}(\nabla_x J(\theta, x, y))\) 这种人眼不可察觉的扰动后,被以 99.3% 置信度分类为"长臂猿")。对抗样本有许多超出本章范围的含义(如计算机安全),但在正则化背景下有意义因为可以通过对训练集的被对抗扰动样本做训练(对抗训练,Szegedy et al., 2014b; Goodfellow et al., 2014b)来降低原 i.i.d. 测试集的错误率。

Goodfellow et al. (2014b) 证明这些对抗样本的主要原因之一是过度线性。神经网络主要由线性构件构成;某些实验中它们实现的整体函数因此被证明是高度线性的。线性函数易于优化;不幸的是线性函数在有大量输入时其值可以变化得非常快:若对每个输入改变 \(\epsilon\),有权重 \(w\) 的线性函数可变化多达 \(\epsilon \|w\|_1\),若 \(w\) 高维(数百万参数)则可能非常大;这是对抗样本在 \(\epsilon\) 极小(如 0.007)时就能使模型输出发生质变的根本原因。对抗训练通过鼓励网络在训练数据邻域内局部常数来阻止这种高度敏感的局部线性行为;这可被视为把局部常数先验显式引入监督神经网络的方式。对抗训练有助于说明在大函数族上使用激进正则化的力量:纯线性模型如逻辑回归不能抵抗对抗样本因它们被迫是线性性的——逻辑回归本身就是线性函数,再加正则化也只能在权重空间内缩放权重而无法改变"输入线性函数"这一结构;神经网络能表示从近线性到近局部常数的函数,因此能灵活地捕捉训练数据中的线性趋势的同时学会抵抗局部扰动。

对抗样本也提供了实现半监督学习的手段。在未与数据集中标签关联的点 \(x\) 处,模型自身分配某标签 \(\hat{y}\)。模型的标签 \(\hat{y}\) 可能不是真标签,但如果模型高质量则 \(\hat{y}\) 提供真标签的概率高。我们可寻找使分类器输出标签 \(y'\)\(y' \ne \hat{y}\))的对抗样本 \(x'\)。用不是真标签而是由训练模型提供的标签生成的对抗样本称为虚拟对抗样本(Miyato et al., 2015)。分类器随后可被训练为对 \(x\)\(x'\) 赋相同标签;这鼓励分类器学习一个对无标签数据所在流形上任意位置的小变化都鲁棒的函数。该方法的动机假设是不同类别通常位于不相交的流形上,小扰动不应能从一个类别流形跳到另一类别流形——这与 7.14 节讨论的流形假设有共同的形式化基础。

7.14 切线距离、切线传播与流形切线分类器(Tangent Distance, Tangent Prop, and Manifold Tangent Classifier)

许多机器学习算法旨在通过假设数据位于低维流形附近来克服维数灾难(见 5.11.3 节)。利用流形假设的早期尝试之一是切线距离算法(Simard et al., 1993, 1998):它是一个非参最近邻算法,所用度量不是通用欧氏距离而是从概率集中的流形附近得出的距离。假设我们试图分类样本且同一流形上的样本共享同一类别;既然分类器应对应于沿流形运动的局部变化因素不变,使用 \(x_1\)\(x_2\) 之间作为最近邻距离的应是它们分别所属流形 \(M_1\)\(M_2\) 之间的距离——虽然这在计算上可能困难(需解一优化问题找 \(M_1\)\(M_2\) 上最近点对),一种有意义的廉价替代是用 \(x_i\) 处的切平面近似 \(M_i\) 并度量两个切线之间或切线与一点之间的距离;这可通过(流形维度下的)低维线性系统解出。当然该算法需要指定切线向量。

在类似精神下,切线传播算法(Simard et al., 1992)(图 7.9)通过额外惩罚训练神经网络分类器使每个输出 \(f(x)\) 对已知变化因素局部不变。这些变化因素对应于同类样本集中流形附近的运动。通过要求 \(\nabla_x f(x)\)\(x\) 处的已知流形切向量 \(v^{(i)}\) 正交来实现局部不变,等价地通过加正则化惩罚使 \(f\)\(v^{(i)}\) 方向的方向导数小:

\[ \Omega(f) = \sum_i \left( (\nabla_x f(x))^\top v^{(i)} \right)^2 \]

该正则化器当然可被合适的超参数缩放;对多数神经网络需对许多输出求和而非仅这里为简化描述的单个输出 \(f(x)\)。与切线距离算法一样,切线向量是先验给定的,通常从变换(平移、旋转、缩放)对图像的效果的形式化知识中导出。切线传播不仅用于监督学习(Simard et al., 1992)还用于强化学习语境(Thrun, 1995)。

切线传播与数据集增强密切相关。两种情形下算法使用者通过对一组变换的指定编码其对任务的先验知识,这些变换不应改变网络的输出。区别在于数据集增强情形下网络被显式训练为能正确分类通过施加超过无穷小量这些变换所创造的不同输入;切线传播不要求显式访问新输入点,而以解析方式正则化模型使其抵抗对应于指定变换的方向的扰动。虽然这种解析方法在概念上优雅,但有两个主要缺点。第一它只正则化模型抵抗无穷小扰动;显式数据集增强则赋予对较大扰动的抵抗。第二无穷小方法给基于 ReLU 的模型带来困难,这些模型只能通过关闭单元或缩小权重来缩小其导数,不能像 sigmoid 或 tanh 单元那样通过在较大权重下饱和在高值上来缩小其导数。数据集增强与 ReLU 良好配合因为不同 ReLU 子集可对每个原输入的不同变换版本激活。

切线传播也与 double backprop(Drucker and LeCun, 1992)和对抗训练(Szegedy et al., 2014b; Goodfellow et al., 2014b)相关。Double backprop 正则化使 Jacobian 偏小;对抗训练找接近原输入的输入并训练模型在这些输入与原输入上产生同样输出。切线传播和用人工指定变换的数据集增强都要求模型应对输入某些指定变化方向不变;double backprop 和对抗训练都要求模型应对输入的所有变化方向(只要变化小)不变。正如数据集增强是切线传播的非无穷小版本,对抗训练是 double backprop 的非无穷小版本。

流形切线分类器(Rifai et al., 2011c)消除了先验已知切线向量的需要。第 14 章会看到自编码器可估计流形切线向量;流形切线分类器利用该技术避免需要用户指定的切线向量。如图 14.10 所示这些估计的切线向量超越图像几何产生的经典不变量(平移、旋转、缩放),并包括因特定对象而异(如移动身体部位)必须被学到的因子。流形切线分类器算法简单:(1)通过无监督学习用自编码器学习流形结构;(2)用这些切线如 (7.67) 一样正则化神经网络分类器。

本章描述了用于正则化神经网络的大多数通用策略。正则化是机器学习的中心主题,因此将在大多数后续章节中被周期性地重新讨论。机器学习的另一中心主题是优化,将在下一章描述。

本章个人批注

本章是 Goodfellow 全书第一次系统地把"正则化"作为独立主题展开。读完后最深的印象是:作者把"正则化"拆成了三类互不重叠的策略——参数约束(7.1–7.4、7.9–7.10)、训练过程约束(7.5、7.8、7.13)、集成/隐式集成(7.11–7.12)——而每种策略背后都隐含一个一致的核心:用某种方式限制有效模型容量,使优化过程不能完全利用过大的参数族,从而把模型从高方差区域拉到低方差区域。这个统一视角在 7.1 的开篇就点出来了("controlling the complexity is not a simple matter of finding the model of the right size"),整章都在反复验证。

7.1.1 的 Hessian 特征分解推导是本章最数学的一段,但读下来其实很清晰:L2 的核心效果就是 \(\frac{\lambda_i}{\lambda_i + \alpha}\) 这个缩放因子,Hessian 特征值小的方向(对目标函数不敏感、对应"无关"方向)被强力压制,特征值大的方向(对应"重要"方向)被保留。这把 weight decay 在二次近似下解释得非常彻底。7.1.2 的 L1 soft-thresholding 公式 \(w_i = \mathrm{sign}(w_i^*) \max\{|w_i^*| - \alpha / H_{i,i}, 0\}\) 也很漂亮——它直接说明了"为什么 L1 稀疏而 L2 不稀疏"的微观机制:L1 在 \(|w_i^*| \le \alpha / H_{i,i}\) 时直接归零,L2 永远只是按比例收缩。

7.3 把伪逆 \(X^+ = \lim_{\alpha \searrow 0} (X^\top X + \alpha I)^{-1} X^\top\) 解释为"正则化稳定欠定问题"是一个特别值得记住的统一观点:Moore-Penrose 伪逆不是凭空发明的,它就是带无穷小权重衰减的线性回归。类似的"概念回流"在 7.8 末尾也很明显——作者在二次近似下严格证明"提前停止 \(\tau\) 步"等价于"L2 权重衰减 \(\alpha = 1 / (\tau \epsilon)\)",把两个看起来完全不同的正则化策略在数学上统一起来。

7.8 的提前停止这部分在工程上有最直接的指导意义:作者花了很大篇幅论证提前停止是最便宜也最不打扰训练过程的正则化形式,缺点是需要一个验证集;针对"如何把验证集数据也用上"给出了两种算法 7.2 和 7.3。算法 7.3 那段"even not guaranteed to terminate"的批评让我重新审视了自己以前对"训练到验证集 loss 低于训练集 loss 的早期值"这种做法的信心——它确实没有终止保证。

7.12 Dropout 是本章最长、也是信息密度最高的一节。我读后把它拆成四块:(a)它是"指数大 bagged 集成的参数共享近似"(这一身份在 7.12.1 整段反复强调);(b)训练时是采样 \(\mu\) 最小化 \(E_\mu J(\theta, \mu)\);(c)推断时权重缩放规则在 softmax 这类无非线性隐藏层模型下严格成立,在有非线性的深度模型下是经验性近似;(d)dropout 的真正力量来自乘性噪声施加在隐藏单元上,这强制每个隐藏单元成为"在许多上下文都好用的特征",生物学类比是 sexual reproduction 推动基因"可交换"。

第(d)点是本章最具原创性的洞见。我以前只把 dropout 理解为"数据增强 + 模型平均",但 Warde-Farley 2014 的 dropout boosting 对照实验表明:使用相同掩码噪声但训练整个集成的对数似然几乎没有正则化效应,这反过来说明"独立训练"和"共享参数"才是 dropout 的核心机制,而不仅仅是噪声。ReLU 上"乘性噪声"vs"加性噪声"的讨论也很关键——如果噪声是加性且固定尺度,ReLU 单元可以通过把 \(h_i\) 学得非常大来让噪声不重要,乘性噪声不允许这种"逃避"。

7.11 末尾关于 boosting 与 bagging 的对比也值得注意:bagging 集成比成员更正则化(减方差),boosting 集成比成员容量更大(减偏差)。这给了"为什么 boosting 容易过拟合"一个直接的形式化解释。

7.13 的对抗训练部分读起来很顺——Szegedy 2014b 那个 GoogLeNet 熊猫变长臂猿的例子(\(+0.007 \times \mathrm{sign}(\nabla_x J)\))至今仍是这个领域最震撼的图。Goodfellow 2014b 给出的"高度线性导致对抗脆弱性"是后续大量 adversarial robustness 工作的起点。虚拟对抗样本(Miyato 2015)作为半监督学习手段也很巧妙——它把"模型在无标签数据邻域内的稳定性"作为额外监督信号,等于把"局部常数"先验直接灌进损失函数。

7.14 的切线距离 / 切线传播 / 流形切线分类器在脉络上是收尾:作者用一整节说明"局部不变性"这个更一般的设计原则如何在四种算法中分别被实现(解析切线 vs 经验扰动;先验指定 vs 自编码器学习)。它也再次点出数据集增强是切线传播的非无穷小版本、对抗训练是 double backprop 的非无穷小版本——这种"算法-算法对偶关系"是本章我最喜欢的论述风格。

最后想提两个读时的小疑惑:(i)7.2 末尾 Hinton 2012c 的"按列范数约束"在 2016 年后已经被 batch normalization 大量取代,但作者没明说这点;(ii)7.8 二次近似等价于 L2 的推导中假设 \(w^{(0)} = 0\),对神经网络这个假设不成立,作者在脚注中说"argument holds for any other initial value"但没给严格证明——这在严谨性上稍微减分。

与上下章的衔接(一段话)

从全书结构看,第 5 章给出了泛化、欠拟合、过拟合、偏差、方差以及"正则化 = 任何修改学习算法以降低泛化误差而非训练误差"的工作定义,第 6 章把前馈网络的代价函数和输出单元展开并已经把"权重衰减是正则化"作为已知,第 7 章正是沿着第 5 章给出的工作定义系统展开深度学习专属的正则化策略。章末作者预告下一章"另一中心主题是优化"——确实下一章是第 8 章数值优化,把第 7 章反复出现的"训练算法 / 梯度下降 / SGD"前提具体落到优化方法学上。再之后第 9 章卷积网络会回到 7.4 提到的"图像上平移不变性"以及 7.9 提到的 CNN 是参数共享的范例,而 7.12 的 dropout 在 ResNet 时代已被 batch normalization 部分替代,第 8.7.1 节会正面处理这个关系;7.13 的对抗训练和 7.14 的流形切线分类器则在第 14 章自编码器 / 流形学习处再次出现。从这个意义上看第 7 章是全书的"方法论中心":它把前面所有模型(前馈网络、RNN、CNN、Autoencoder)都需要的工具(防止过拟合)系统过一遍,给后续各章提供可调用的策略库。