深度学习

《深度学习》之第七章正则化

2017-08-06  本文已影响570人  凤翔天下

正则化是增强模型泛化能力,减少测试误差的策略;它可以在不过度增加偏差的情况下显著的减少方差。

  1. 参数范数惩罚
参数范数惩罚正则化

L2范数:w的平均平方和, 也叫weight decay(权重衰减),绝对值偏大权重会受到更大惩罚,使得所有权重倾向比较小。

L2范数正则化的理解

L2(或权重衰减)正则化对最佳 w 值的影响。实线椭圆表示没有正则化目标的等值线。虚线圆圈表示 L2 正则化项的等值线。在 w ̃ 点,这两个竞争目标达到平衡。目标函数 J 的 Hessian 的第一维特征值很小。当从 w∗ 水平移动时,目标函数不会增加得太多。因为目标函数对这个方向没 有强烈的偏好,所以正则化项对该轴具有强烈的影响。正则化项将 w1 拉向零。而目标函数对沿着第二维远离 w∗ 的移动非常敏感。对应的特征值较大,表示高曲率。因此,权重衰减对 w2 的位置影响相对较小。

L1范数:w的平均绝对值之和。它会让很多权重变为0,产生稀疏的解。 这种特性也导致L1经常用在特征选择上。

  1. 作为约束的范数惩罚

如果我们想约束 Ω(θ) 小于某个常数 k,我们可以构建广义 Lagrange 函数:

带条件的约束的目标函数

我们可以把参数范数惩罚看 作对权重强加的约束。如果 Ω 是 L2 范数,那么权重就是被约束在一个 L2 球中。如 果 Ω 是 L1 范数,那么权重就是被约束在一个 L1 范数限制的区域中。

  1. 正则化和欠约束问题
    很多机器学习的方法需要对X'X是可逆的,但实际中X'X很可能是个奇异矩阵。 正则化的许多形式对应求逆 X'X + aI, 这个正则化矩阵可以保证是可逆的。

  2. 数据集增强
    让机器学习模型泛化得更好的最好办法是使用更多的数据进行训练。当然,在 实践中,我们拥有的数据量是很有限的。解决这个问题的一种方法是创建假数据并添加到训练集中。比如:图片翻转,剪切,缩放,旋转等。

  3. 噪声鲁棒性

  4. 半监督学习

  5. 多任务学习
    多任务学习是通过合并几个任务中的样例(可以视为对参数施加的软约束)来提高泛化的一种方式。额外的训练样本以同样的方式将模型的参数推向泛化更好的方向,当模型的一部分在任务之间共享时,模型的这一部分更多地被约束为良好的值(假设共享是合理的),往往能更好地泛化。

  6. 提前终止
    当训练有足够的表示能力甚至会过拟合的大模型时,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。这意味着如果我们返回使验证集误差最低的参数设置,就可以获得更好的模型 (因此,有希望获得更好的测试误差)。在每次验证集误差有所改善后,我们存储模型参数的副本。当验证集上的误差在事先指定的循环次数内没有进一步改善时,算法终止。

提前终止的训练示意图
  1. 参数绑定和参数共享
    卷积神经网络就是参数共享的列子

  2. 稀疏表示
    前文所述的权重衰减直接惩罚模型参数。另一种策略是惩罚神经网络中的激活 单元,稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。

  3. Bagging 和其他集成方法
    Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。这是机器学习中常规策略的一个例子,被称为模型平均(model averaging)。采用这种策略的技术被称为集成方法。
    模型平均(model averaging)奏效的原因是不同的模型通常不会在测试集上产 生完全相同的误差。

不同的集成方法以不同的方式构建集成模型。例如,集成的每个成员可以使用 不同的算法和目标函数训练成完全不同的模型。
Bagging是一种允许重复多次使用同 一种模型、训练算法和目标函数的方法。具体来说,Bagging涉及构造 k 个不同的数据集。每个数据集从原始数据集中重 复采样构成,和原始数据集具有相同数量的样例。这意味着,每个数据集以高概率 缺少一些来自原始数据集的例子,还包含若干重复的例子(如果所得训练集与原始数据集大小相同)。模型 i 在数据集 i 上训练。每个数据集所含样本的差异导致了训练模型之间的差异。

神经网络的解能达到足够多的变化,可以从模型平均中受益 (即使所有模型都在同一数据集上训练)。神经网络中随机初始化的差异、小批量的随机选择、 超参数的差异或不同输出的非确定性实现往往足以使得集成中的不同成员具有部分独立的误差。

  1. Dropout
    Dropout(Dropout) 提供了正则化一大类模型的方 法,计算方便但功能强大。在第一种近似下,Dropout可以被认为是集成大量深层神 经网络的实用Bagging方法。Bagging涉及训练多个模型,并在每个测试样本上评估多个模型。当每个模型都是一个很大的神经网络时,这似乎是不切实际的,因为训 练和评估这样的网络需要花费很多运行时间和内存。

在Bagging的情况下,所有模型都是独立的;Dropout的情况下,所有模型共享参数,其中每个模型继承父神经网络参数 的不同子集。参数共享使得在有限可用的内存下表示指数级数量的模型变得可能。

Dropout优点:计算方便,不限制适用的模型或训练过程,几乎在所有使用分布式表示且可以用随机梯度下降训练的模型上都表现很好。

因为Dropout减少了模型的有效容量。为了抵消这种影响,我们必须增大模型规模和更多的训练数据。对于非常大的数据集,正则化带来的泛化误差减少得很小,好处有限; 而使用Dropout和更大模型可能超过正则化带来的好处!
同时也要注意:只有极少的训练样本时,Dropout不会很有效。

Dropout可以被看成是一种纯粹高效近似Bagging的方法。更进一步的,Dropout不仅仅是训练一个Bagging的集成模型,并且是共享隐藏单元的集成模型。这意味着无论其他隐藏单元是否在模型中,每个隐藏单元必须都能够表现良好。隐藏单元必须准备好进行模型之间的交换和互换。Dropout正则化每个隐藏单元不仅是一个很好的特征,更要在许多情况下是良好的特征。相比独立模型Bagging集成获得泛化误差,Dropout会带来额外的改进。

  1. 对抗训练
    在精度达到人类水平的神经网络上可以通过优化过程故意构造数据点,其上的误差率接近100%! 模型在这个输入点 x′ 的输出与附近的数据 点 x 非常不同。在许多情况下,x′ 与 x 非常近似,人类观察者不会察觉原始样本和对抗样本(adversarial example)之间的差异,但是网络会作出非常不同的预测。
对抗样本实例
  1. 切面距离、正切传播和流形正切分类器
上一篇下一篇

猜你喜欢

热点阅读