深度学习中的正则化

以下内容由我的CSDN博客迁移。

上一节我们说了神经网络设计的基本组件和过程,下面我们再学习一下正则化策略。(主要参考《深度学习》) 深度学习模型不仅要在训练数据上表现好,还要能在新的输入上泛化很好。因此有许多策略被显式地设计来减少测试误差(可能以增大训练误差为代价)。这些策略被称为正则化。

一、参数范数惩罚

许多正则化方法通过对目标函数\(J\)添加一个参数范数惩罚\(\Omega(\theta)\)。限制模型的学习能力。即: \[\tilde J(\boldsymbol{\theta; X, y})=J(\boldsymbol{\theta; X, y})+\alpha\Omega(\boldsymbol \theta)\] 其中\(\alpha\)是超参数,越大对应的正则化惩罚越大。

我们通常只对权重作惩罚而不对偏置惩罚,因为精确拟合偏置所需的数据远少于权重,因此我们不惩罚它也不会造成太大误差。此外,如果正则化偏置参数可能导致明显的欠拟合。

同时,由于神经网络的层数很多,我们一般会在所有层使用相同参数的权重衰减。

1. \(L^2\)参数正则化

通常被称为权重衰减的\(L^2\)参数范数惩罚,这个策略是\(\Omega(\theta)={1\over 2}\|w\|^2_2\), 使权重更接近原点(接近其他点也同样有正则效果,且越接近真实值越好,但一般我们不知道真实值,因此通常选择原点)。有些文章也可能将\(L^2\)称为岭回归或 Tikhonov 正则。 因此目标函数变为: \[\tilde J(\boldsymbol{\theta; X, y})=J(\boldsymbol{\theta; X, y})+{\alpha \over 2}w^Tw\] 对应的梯度为\[\nabla_w \tilde J(\boldsymbol{\theta; X, y})=\nabla_wJ(\boldsymbol{\theta; X, y})+\alpha \boldsymbol w\]

具体来说,\(L^2\)正则化的效果如图所示,实线椭圆表示没有正则化目标的等值线,虚线表示\(L^2\)正则化的等值线。在\(\tilde w\)点两个竞争目标达到平衡。而\(w^*\)代表着最优值。我们可以看到最优值水平移动时目标函数不会增加太多,因为目标函数对这个方向没有强烈的偏好,因此正则化对该轴有强烈的影响。反之亦然。

只有在显著减小目标函数方向上的参数会保留的相对完好。在无助于目标函数减小的方向(对应 Hessian 矩阵较小的特征值)上改变参数不会显著增加梯度,因此这种它会在训练过程中因正则化逐渐衰减掉。

2. \(L^1\)正则化

定义为\(\Omega(\theta)=\|w\|_1=\sum_i|w_i|\), 即各个参数的绝对值之和。 目标函数变为: \[\tilde J(\boldsymbol{\theta; X, y})=J(\boldsymbol{\theta; X, y})+\alpha\|w\|_1\]

对应的梯度(实际上是次梯度)为 \[\nabla_w \tilde J(\boldsymbol{\theta; X, y})=\nabla_wJ(\boldsymbol{\theta; X, y})+\alpha\text{sign}(\boldsymbol w)\]

相比\(L^2\)正则化,\(L^1\)会产生更稀疏的解。即最优值中的一些参数为 0 . 因此\(L^1\)被广泛地运用于特征选择机制,特征选择从可用的特征子集中选择出有意义的特征。

之前我们说明了很多正则策略实际上是MAP贝叶斯推断,特别是\(L^2\)正则化相当于权重是高斯先验的 MAP 贝叶斯推断。 而对于\(L^1\)正则化,它与通过 MAP 贝叶斯推断最大化的对数先验项是等价的,并且权重先验是各向同性的拉普拉斯分布。

二、作为约束的范数惩罚

我们也可以构造一个广义 Lagrange 函数来最小化带约束的函数,来对参数进行约束。例如我们想要参数范数惩罚小于某个值k那么可以构造: \[\mathcal L(\theta, \alpha; X, y)=J(\theta; X, y)+\alpha(\Omega(\theta)-k)\] 约束问题的解为 \[\theta^*=\argmin_\theta \max_{\alpha, \alpha\geqslant0}\mathcal L(\theta, \alpha)\]

  • 我们很多时候更希望使用显式的限制,而不是惩罚。例如我们可以修改学习算法,使其先计算\(J(\theta)\)的下降步,然后将\(\theta\)投影到满足\(\Omega(\theta)<k\)的最近点。当我们知道什么样的 k 是合适的时候,这个方法很有用。另外,使用惩罚强加约束可能导致目标函数非凸而使算法陷入局部极小。在神经网络中,具体表现为“死亡单元”,它们对网络的学习没有什么影响。
  • 最后,重投影的显式约束对优化过程增加了一定的稳定性。如果学习率较高,就很可能进入正反馈,即大的权重引导大梯度,然后使得权重获得较大更新。若这些更新持续增加权重的大小。就会发生溢出。重投影可以防止这种反馈不断持续。
  • Hinton 推荐一种策略:约束神经网络层的权重矩阵每列的范数,而不是限制整个权重矩阵的 Frobenius 范数。这可以防止某一隐藏单元权重过大。(经常通过重投影来实现)

三、数据集增强

让模型泛化得更好的最好办法就是使用更多的数据进行训练。但现实中我们的数据集是有限的,因此我们可以创建一下假数据并添加到训练集中。

对分类问题这种方法是最简单的,我们可以通过转换训练集中的x来生成新的数据。 而对于其他问题,这种方法并不容易,因为数据生成过程很难去猜测。

尤其是在对象识别领域,数据增强很有用。图象是高维的并包含各种巨大的变化因素,其中有许多可以轻松模拟。比如平移,旋转等操作,都能大大提高泛化。此外,数据增强对于语音识别任务也很有效。

在神经网络的输入层注入噪声也是一种数据增强的方式。神经网络被证明对于噪声不是非常健壮,因此改善它的健壮性的方法之一是简单地将随机噪声添加到输入再进行训练。随后介绍的一种策略 Dropout 就可以看作通过与噪声相乘构建新输入的过程。

四、噪声鲁棒性

我们知道将可以将噪声用于输入作为数据增强的策略,对某些模型,这等价于对权重施加范数惩罚。在一般情况下,注入噪声远比简单地收缩参数强大。

一种噪声的使用方式是将其添加到权重。这主要用于循环神经网络,这可以被解释为关于权重的贝叶斯推断的随即实现。因为贝叶斯学习过程将权重视为不确定的,并且可以通过概率分布表示这种不确定性。向权重添加噪声就是反映这种不确定性的实用方法。

另一种是向输出目标注入噪声。大多数数据集的 y 标签都有一定的错误,不利于最大化 \(\log p(y|x)\)。避免这种情况的方法就是显式地对标签上的噪声进行建模,例如我们可以假设训练集标记 y 是正确的概率是\(1-\epsilon\)其中ε是很小的常数。标签平滑通过把确切分类目标从0和1替换成\(\epsilon \over k-1\)\(1-\epsilon\), 正则化具有 k 个输出的 softmax 模型。标准交叉熵损失可以用在这些非确切目标的输出上。标签平滑的优势就是能够防止模型追求确切概率而不影响模型学习正确分类。

五、半监督学习

在半监督学习的框架下,\(P(\bold x)\)产生的未标记样本和\(P(\bold{x, y})\)中的标记样本都用于估计\(P(\bold {y|x)}\).

无监督学习可以为如何在表示空间聚集样本提供有用的线索。在输入空间紧密聚集的样本应该被映射到类似的表示。此时可以让在新空间上的分类器有较好的泛化。一个经典的变种就是使用主成分分析作为分类前的预处理步骤。

我们可以构建这样的模型,其中生成模型\(P(\bold x)\)\(P(\bold {x, y})\)和判别模型\(P(\bold {y|x})\)共享参数,而不用分离无监督和监督部分。我们同时权衡监督模型准则\(-\log P(\bold {y|x})\)和无监督或生成模型准则。生成模型准则表达了对监督学习问题解的特殊形式的先验知识。因此我们可以获得比纯生成模型或纯判别训练准则更好的权衡。

六、多任务学习

多任务学习是通过合并几个任务中的样例来提高泛化。当模型的一部分被多个额外任务共享时,这部分将被约束成良好的值(共享合理),通常泛化能力更好。

深度网络的较低层可以进行多任务共享,因为能解释数据变化的因素中,某些因素是跨两个或更多任务共享的。因为共享参数,统计强度大大提高,并能改善泛化和泛化误差的范围。

七、提前终止

当训练有足够的表示能力甚至会过拟合的大模型时,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。如图

因此我们只要返回使验证集误差最低的参数设置,就可以获得更好的测试误差。这种策略称为提前终止,它在深度学习中十分流行因为它有效且简单。

我们可以认为提前终止是一种高效的超参数选择算法,我们通过控制拟合训练集的步数来控制模型的有效容量。“训练时间”是唯一只要跑一次训练就能尝试很多值的超参数,通过提前终止自动选择超参数的唯一显著代价就是要定期评估验证集。 另一个额外代价是需要保持最佳的参数副本,但一般我们没有这种存储上的顾虑。

八、稀疏表示

前文所述的权重衰减直接惩罚模型参数,另一种策略是惩罚神经网络中的激活单元,稀疏化激活单元。

表示的正则化可以使用参数正则化中同种类型的机制实现。也是对损失函数J添加对表述的范数惩罚来实现的。 \[\tilde J(\boldsymbol{\theta; X, y})=J(\boldsymbol{\theta; X, y})+\alpha\Omega(\boldsymbol h)\] 正如对参数的\(l^1\)惩罚会诱导参数的稀疏性,对表示元素的\(L^1\)惩罚诱导稀疏的表。其他方法还有从表示上的Student-t先验导出的惩罚和KL散度惩罚。

还有一些方法通过激活值的硬性约束来获得表示稀疏。例如,正交匹配追踪通过解决以下约束优化问题将输入值 x 编码成表示 h \[\argmin_{h, \|h\|_0<k}\|x-Wh\|^2\] 通常被称为OMP-k,经证明,OMP-1 可以成为深度架构中非常有效的特征提取器。

九、Bagging和其他集成方法

Bagging(bootstrap aggregating) 是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。这被称为模型平均,采用这种策略的技术称为集成方法。它之所以奏效是因为不同的模型通常不会在测试集上产生完全相同的误差。

具体来说, Bagging 涉及构造 k 个不同的数据集,每个数据集从原始数据集中重复采样构成,和原始数据集具有相同数量的样例,因此每个数据集很可能缺失一些原数据集中的数据,并有若干重复的例子。模型 i 在数据集 i 上训练,每个数据集所包含的差异导致了训练模型间的差异。

神经网络能找到足够多的不同的解,因此它们可以从模型平均中受益,神经网络随机初始化的差异,小批量的随机选择,超参数的差异或不同输出的非确定性实现可以使得不同模型具有差异。

还有一种集成技术称为Boosting的技术,构建比单个模型容量更高的集成模型。通过逐渐增加神经网络的隐藏单元,Boosting 也可以将单个神经网络解释为一个基础。

十、Dropout

Dropout 可以被认为是集成大量深层神经网络的实用 Bagging 方法。当 Bagging 的每个模型都是很大的时候,训练和评估需要花费很多运行时间和内存。通常我们只能集成少数的模型,但 Dropout 提供了一种廉价的 Bagging 集成近似,能够训练和评估指数级数量的神经网络。

具体来说,Dropout 训练的集成包括所有从基础网络除去输出单元后形成的子单元,如图所示。我们只需将一些单元的输出乘零就能删除一个单元。

类似于 Bagging , 当我们在训练中使用 Dropout 时,我们每次在小批量中加载一个样本,然后随机抽样应用于网络所有输入和隐藏单元的不同二值掩码。对于每个单元,掩码是独立采样的,概率为一个超参数。

但 Dropout 又和 Bagging 训练不太一样。在 Bagging 的情况下,所有模型都是独立的;在 Dropout 的情况下,所有模型共享参数。参数共享使得在有限客用的内存下表示指数级数量的模型变得可能。Bagging 集成必须根据所有成员的积累投票做一个预测。

Dropout 的一个优点是计算方便,另一个优点是不怎么限制适用的模型或训练过程。但值得注意的是, Dropout 减少了模型的有效容量,因此我们需要增大模型的容量。这就导致了我们可能有很大的计算代价。训练数据较少时,Dropout 也不会很有效。

Dropout 强大的大部分原因来自施加到隐藏单元的掩码噪声。这可以看作对输入内容的信息高度智能化、自适应破坏的一种形式,而不是对输入原始值的破坏。另一个重要方面是噪声是乘性的,乘性噪声不会病态地解决噪声鲁棒性问题(单纯增大表示)。

十一、对抗训练

我们发现,如果在精度达到人类水平的神经网络上通过优化过程故意构造数据点,它的误差率很高。即使新输入的和原始几乎相同。

人类观察者不会察觉原始样本和对抗样本的差异,但网络却会做出非常不同的预测,如图。

在正则化中,我们可以通过对抗训练减少原有独立同分布的测试集的错误率——在对抗扰动的训练集样本上训练网络。


以上内容如有谬误还请告知。