深度学习中的正则化简介

        机器学习中的一个核心问题是设计不仅在训练数据上表现好,并且能在新输入上泛化好的算法。在机器学习中,许多策略显式地被设计为减少测试误差(可能会以增大训练误差为代价)。这些策略被统称为正则化。深度学习工作者可以使用许多不同形式的正则化策略。在深度学习的背景下,大多数正则化策略都会对估计进行正则化。估计的正则化以偏差的增加换取方差的减少。一个有效的正则化是有利的”交易”,也就是能显著减少方差而不过度增加偏差。

        1. 参数范数惩罚

        许多正则化方法通过对目标函数J添加一个参数范数惩罚Ω(θ),限制模型(如神经网络、线性回归或逻辑回归)的学习能力。我们将正则化后的目标函数记为J’:J’(θ;X,y)=J(θ;X,y)+αΩ(θ),其中α∈[0,∞)是权衡范数惩罚项Ω和标准目标函数J(X;θ)相对贡献的超参数。将α设为0表示没有正则化。α越大,对应正则化惩罚越大。

        当我们的训练算法最小化正则化后的目标函数J’时,它会降低原始目标J关于训练数据的误差并同时减少参数θ的规模(或在某些衡量下参数子集的规模)。选择不同的参数范数Ω会偏好不同的解法。

        我们需要说明一下,在神经网络中我们通常只对每一层仿射变换的权重做惩罚而不对偏置做正则惩罚。精确拟合偏置所需的数据通常比拟合权重少得多。每个权重会指定两个变量如何相互作用。我们需要在各种条件下观察这两个变量才能良好地拟合权重。而每个偏置仅控制一个单变量。这意味着,我们不对其进行正则化也不会导致太大的方差。另外,正则化偏置参数可能会导致明显的欠拟合。因此,我们使用向量w表示所有应受范数惩罚影响的权重,而向量θ表示所有参数(包括w和无需正则化的参数)。在神经网络的情况下,有时希望对网络的每一层使用单独的惩罚,并分配不同的α系数。拟合多个超参数的代价很大,因此为了减少搜索空间,我们会在所有层使用相同的权重衰减。

        L2参数正则化:权重衰减(weight decay)的L2参数范数惩罚。这个正则化策略通过向目标函数添加一个正则项Ω(θ)=1/2‖w‖22,使权重更加接近原点。

        为了简单起见,我们假定其中没有偏置参数,因此θ就是w。这样一个模型具有以下总的目标函数:

        与之对应的梯度为:

        使用单步梯度下降更新权重,即执行以下更新:

        可以看到,加入权重衰减后会引起学习规则的修改,即在每步执行通常的梯度更新之前先收缩权重向量(将权重向量乘以一个常数因子)。这是单个步骤发生的变化。

        L2正则化能让学习算法”感知”到具有较高方差的输入x,因此与输出目标的协方差较小(相对增加方差)的特征的权重将会收缩。

        L1参数正则化:对模型参数w的L1正则化被定义为:即各个参数的绝对值之和。

        与L2权重衰减类似,我们也可以通过缩放惩罚项Ω的正超参数α来控制L1权重衰减的强度。因此,正则化的目标函数J’(w;X,y)如下所示:J’(w;X,y)=α‖w‖1+J(w;X,y)。

        相比L2正则化,L1正则化会产生更稀疏(sparse)的解。此处稀疏性指的是最优值中的一些参数为0。和L2正则化相比,L1正则化的稀疏性具有本质的不同。由L1正则化导出的稀疏性质以及被广泛地用于特征选择(feature selsection)机制。特征选择从可用的特征子集选择出有意义的特征,化简机器学习问题。

        2. 作为约束的范数惩罚:约束神经网络层的权重矩阵每列的范数,而不是限制整个权重矩阵的Frobenius范数。分别限制每一列的范数可以防止某一隐藏单元有非常大的权重。如果我们将此约束转换成Lagrange函数中的一个惩罚,这将与L2权重衰减类似但每个隐藏单元的权重都具有单独的KKT乘子。每个KKT乘子分别会被动态更新,以使每个隐藏单元服从约束。在实践中,列范数的限制总是通过重投影的显示约束来实现。

        3. 正则化和欠约束问题

        4. 数据集增强

        让机器学习模型泛化得更好的最好办法是使用更多的数据进行训练当然,在实践中,我们拥有的数据量是很有限的。解决这个问题的一种方法是创建假数据并添加到训练集中。对于一些机器学习任务,创建新的假数据相当简单。对分类来说这种方法是最简单的。分类器需要一个复杂的高维输入x,并用单个类别标识y概括x。这意味着分类面临的一个主要任务是要对各种各样的变化保持不变。我们可以轻易通过转换训练集中的x来生成新的(x,y)对。这种方法对于其它许多任务来说并不那么容易。例如,除非我们已经解决了密度估计问题,否则在密度估计任务中生成新的假数据是很困难的。

        数据集增强对一个具体的分类问题来说是特别有效的方法:对象识别。图像是高维的并包括各种巨大的变化因素,其中有许多可以轻易地模拟。即使模型已使用卷积和池化技术对部分平移保持不变,沿训练图像每个方向平移几个像素的操作通常可以大大改善泛化。许多其它操作如旋转图像或缩放图像也已被证明非常有效。我们必须要小心,不能使用会改变类别的转换

        数据集增强对语音识别任务也是有效的。

        在神经网络的输入层注入噪声,也可以被看作是数据增强的一种方式。对于许多分类甚至一些回归任务而言,即使小的随机噪声被加到输入,任务仍应该是能够被解决的。然而,神经网络被证明对噪声不是非常健壮。改善神经网络健壮性的方法之一是简单地将随机噪声添加到输入再进行训练。输入噪声注入是一些无监督学习算法的一部分,如去噪自编码器。向隐藏单元施加噪声也是可行的,这可以被看作在多个抽象层上进行的数据集增强。最近表明,噪声的幅度被细心调整后,该方法是非常高效的。正则化策略Dropout可以被看作是通过与噪声相乘构建新输入的过程。

        在比较机器学习基准测试的结果时,考虑其采取的数据集增强是很重要的。通常情况下,人工设计的数据集增强方案可以大大减少机器学习技术的泛化误差。将一个机器学习算法的性能与另一个进行对比时,对照实验是必要的。在比较机器学习算法A和机器学习算法B 时,应该确保这两个算法使用同一人工设计的数据集增强方案进行评估。假设算法A在没有数据集增强时表现不佳,而B结合大量人工转换的数据后表现良好。在这样的情况下,很可能是合成转化引起了性能改进,而不是机器学习算法B比算法A更好。有时候,确定实验是否已经适当控制需要主观判断。例如,向输入注入噪声的机器学习算法是执行数据集增强的一种形式。通常,普适操作(例如,向输入添加高斯噪声)被认为是机器学习算法的一部分,而特定于一个应用领域(如随机地裁剪图像)的操作被认为是独立的预处理步骤。

        5. 噪声鲁棒性

        对于某些模型而言,向输入添加方差极小的噪声等价于对权值施加范数惩罚。在一般情况下,噪声注入远比简单地收缩参数强大,特别是噪声被添加到隐藏单元时会更加强大。

        另一种正则化模型的噪声使用方式是将其加到权重。这项技术主要用于循环神经网络。在某些假设下,施加于权重的噪声可以被解释为与更传统的正则化形式等同,鼓励要学习的函数保持稳定。

        向输出目标注入噪声:大多数数据集的y标签都有一定错误。错误的y不利于最大化logp(y|x)。避免这种情况的一种方式是显式地对标签上的噪声进行建模。例如,我们可以假设,对于一些小常数ε,训练集标记y是正确的概率是1-ε,(以ε的概率)任何其它可能的标签也可能是正确的。这个假设很容易就能解析地与代价函数结合,而不用显示地抽取噪声样本。

        6. 半监督学习:在半监督学习的框架下,P(x)产生的未标记样本和P(x,y)中的标记样本都用于估计P(y|x)或者根据x预测y。在深度学习的背景下,半监督学习通常指的是学习一个表示h=f(x)。学习表示的目的是使相同类中的样本有类似的表示。无监督学习可以为如何在表示空间聚集样本提供有用线索。在输入空间紧密聚集的样本应该被映射到类似的表示。在许多情况下,新空间上的线性分类器可以达到较好的泛化。这种方法的一个经典变种是使用主成分分析作为分类前(在投影后的数据上分类)的预处理步骤。

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

        从深度学习的观点看,底层的先验知识如下:能解释数据变化(在与之相关联的不同任务中观察到)的因素中,某些因素是跨两个或更多任务共享的。

        8. 提前终止(early stopping):当训练有足够的表示能力甚至会过拟合的大模型时,我们经常观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升。这意味着如果我们返回使验证集误差最低的参数设置,就可以获得更好的模型(因此,有希望获得更好的测试误差)。在每次验证集误差有所改善后,我们存储模型参数的副本。当训练算法终止时,我们返回这些参数而不是最新的参数。当验证集上的误差在事先指定的循环次数内没有进一步改善时,算法就会终止。这种策略被称为提前终止。这可能是深度学习中最常用的正则化形式。它的流行主要是因为有效性和简单性。

        我们可以认为提前终止是非常高效的超参数选择算法。按照这种观点,训练步数仅是另一个超参数。通过提前终止自动选择超参数的唯一显著的代价是训练期间要定期评估验证集。另一个提前终止的额外代价是需要保持最佳的参数副本。这种代价一般是可忽略的,因为可以将它存储在较慢较大的存储器上(例如,在GPU内存中训练,但将最佳参数存储在主存储器或磁盘驱动器上)。由于最佳参数的写入很少发生而且从不在训练过程中读取,这些偶发的慢写入对总训练时间的影响不大。

        提前终止是一种非常不显眼的正则化形式,它几乎不需要改变基本训练过程、目标函数或一组允许的参数值。这意味着,无需破坏学习动态就能很容易地使用提前终止。相对于权重衰减,必须小心不能使用太多的权重衰减,以防网络陷入不良局部极小点(对应于病态的小权重)。提前终止可单独使用或与其它的正则化策略结合使用。提前终止需要验证集,这意味着某些训练数据不能被馈送到模型。为了更好地利用这一额外的数据,我们可以在完成提前终止的首次训练之后,进行额外的训练。在第二轮额外的训练步骤中,所有的训练数据都被包括在内。提前终止对较少训练过程的计算成本也是有用的。除了由于限制训练的迭代次数而明显减少的计算成本,还带来了正则化的益处(不需要添加惩罚项的代价函数或计算这种附加项的梯度)。提前终止比权重衰减更具有优势,提前终止能自动确定正则化的正确量,而权重衰减需要多个训练实验测试其超参数的不同值。

        9. 参数绑定和参数共享:正则化一个模型(监督模式下训练的分类器)的参数,使其接近另一个无监督模式下训练的模型(捕捉观察到的输入数据的分布)的参数。这种构造架构使得许多分类模型中的参数能与之对应的无监督模型的参数匹配。参数范数惩罚是正则化参数使其彼此接近的一种方式,而更流行的方法是使用约束:强迫某些参数相等。由于我们将各种模型或模型组件解释为共享唯一的一组参数,这种正则化方法通常被称为参数共享(parameter sharing)。和正则化参数使其接近(通过范数惩罚)相比,参数共享的一个显著优点是,只有参数(唯一一个集合)的子集需要被存储在内存中。对于某些特定模型,如卷积神经网络,这可能可以显著减少模型所占用的内存。

        目前为止,最流行和广泛使用的参数共享出现在应用于计算机视觉的卷积神经网络(CNN)中。自然图像有许多统计属性是对转换不变的。例如,猫的照片即使向右边移了一个像素,仍保持猫的照片。CNN通过在图像多个位置共享参数来考虑这个特性。相同的特征(具有相同权重的隐藏单元)在输入的不同位置上计算获得。这意味着无论猫出现在图像中的第i列或第i+1列,我们都可以使用相同的猫探测器找到猫。参数共享显著降低了CNN模型的参数数量,并显著提高了网络的大小而不需要相应地增加训练数据。

        10. 稀疏表示:权重衰减直接惩罚模型参数。另一种策略是惩罚神经网络中的激活单元,稀疏化激活单元。这种策略间接地对模型参数施加了复杂惩罚。含有隐藏单元的模型在本质上都能变得稀疏。

        11. Bagging和其它集成方法

        Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。这是机器学习中常规策略的一个例子,被称为模型平均(model averaging)。采用这种策略的技术被称为集成方法。模型平均奏效的原因是不同的模型通常不会在测试集上产生完全相同的误差。不同的集成方法以不同的方式构建集成模型。例如,集成的每个成员可以使用不同的算法和目标函数训练完全不同的模型。Bagging是一种允许重复多次使用同一种模型、训练算法和目标函数的方法。

        神经网络的解能达到足够多的变化意味着他们可以从模型平均中受益(即使所有模型都在同一数据集上训练)。神经网络中随机初始化的差异、小批量的随机选择、超参数的差异或不同输出的非确定性实现往往足以使得集成中的不同成员具有部分独立的误差。模型平均是一个减少泛化误差的非常强大可靠的方法。在作为科学论文算法的基准时,它通常是不鼓励使用的,因为任何机器学习算法都可以从模型平均中大幅获益(以增加计算和存储为代价)。

        机器学习比赛中的取胜算法通常是使用超过几十种模型平均的方法。不是所有构建集成的技术都是为了让集成模型比单一模型更加正则化。例如,一种被称为Boosting的技术构建比单个模型容量更高的集成模型。通过向集成逐步添加神经网络,Boosting已经被应用于构建神经网络的集成。通过逐渐增加神经网络的隐藏单元,Boosting也可以将单个神经网络解释为一个集成。

        12. Dropout:提供了正则化一大类模型的方法,计算方便但功能强大。在第一种近似下,Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。Bagging涉及训练多个模型,并在每个测试样本上评估多个模型。当每个模型都是一个很大的神经网络时,这似乎是不切实际的,因为训练和评估这样的网络需要花费很多运行时间和内存。通常我们只能集成五至十个神经网络,如Szegedyet al.集成了六个神经网络赢得ILSVRC,超过这个数量就会迅速变得难以处理。Dropout提供了一种廉价的Bagging集成近似,能够训练和评估指数级数量的神经网络

        具体而言,Dropout训练的集成包括所有从基础网络除去非输出单元后形成的子网络。具体来说,在训练中使用Dropout时,我们会使用基于小批量的学习算法和较小的步长,如梯度下降等。我们每次在小批量中加载一个样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。对于每个单元,掩码是独立采样的。掩码值为1的采样概率(导致包含一个单元)是训练开始前一个固定的超参数。它不是模型当前参数值或输入样本的函数。通常在每一个小批量训练的神经网络中,一个输入单元被包括的概率为0.8,一个隐藏单元被包括的概率为0.5.然后,我们运行和之前一样的前向传播、反向传播以及学习更新。

        更正式地说,假设一个掩码向量μ指定被包括的单元,J(θ, μ)是由参数θ和掩码μ定义的模型代价。那么Dropout训练的目标是最小化EμJ(θ, μ)。期望包含多达指数级的项,但我们可以通过抽样μ获得梯度的无偏估计。

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

        在Bagging的情况下,每一个模型在其相应训练集上训练到收敛。在Dropout的情况下,通常大部分模型都没有显式地被训练,因为通常父神经网络会很大,以致于到宇宙毁灭都不可能采样完所有的子网络。取而代之的是,在单个步骤中我们训练一小部分的子网络,参数共享会使得剩余的子网络也能有好的参数设定。这些是仅有的区别。除了这些,Dropout与Bagging算法一样。例如,每个子网络中遇到的训练集确实是替换采样的原始训练集的一个子集。Bagging集成必须根据所有成员的累积投票做一个预测。在这种背景下,我们将这个过程称为推断(inference)。

        Dropout比其它标准的计算开销小的正则化方法(如权重衰减、过滤器范数约束和稀疏激活的正则化)更有效。Dropout也可以与其它形式的正则化合并,得到进一步的提升。

        计算方便是Dropout的一个优点。训练过程中使用Dropout产生n个随机二进制数与状态相乘,每个样本每次更新只需O(n)的计算复杂度。根据实现,也可能需要O(n)的存储空间来持续保存这些二进制数(直到反向传播阶段)。使用训练好的模型推断时,计算每个样本的代价与不使用Dropout是一样的,尽管我们必须在开始运行推断前将权重除以2。

        Dropout的另一个显著优点是不怎么限制适用的模型或训练过程。几乎在所有使用分布式表示且可以用随机梯度下降训练的模型上都表现很好。包括前馈神经网络、概率模型,如受限玻尔兹曼机,以及循环神经网络。许多效果差不多的其他正则化策略对模型结构的限制更严格。

        只有极少的训练样本可用时,Dropout不会很有效。在只有不到5000的样本的Alternative Splicing数据集上,贝叶斯神经网络比Dropout表现得更好。当有其它未分类的数据可用时,无监督特征学习也比Dropout更有优势。

        使用Dropout训练时的随机性不是这个方法成功的必要条件。随机性对实现Dropout的正则化效果不是必要的,同时也不是充分的。

        13. 对抗训练(adversarial training):我们可以通过对抗训练减少原有独立同分布的测试集的错误率----在对抗扰动的训练集样本上训练网络。

        对抗样本(adversarial examples):在数据集中通过故意添加细微的干扰所形成的输入样本,受干扰之后的输入导致模型以高置信度给出一个错误的输出。

        14. 切面距离、正切传播和流形正切分类器

        切面距离(tangent distance)算法:是一种非参数的最近邻算法,其中使用的度量不是通用的欧几里得距离,而是根据邻近流行关于聚集概率的知识导出的。

        正切传播(tangent prop)算法:训练带有额外惩罚的神经网络分类器,使神经网络的每个输出f(x)对已知的变化因素是局部不变的。这些变化因素对应于沿着的相同样本聚集的流行的移动。正切传播不仅用于监督学习,还在强化学习中有所应用。正切传播与数据集增强密切相关。

        流形正切分类器:无限知道切线向量的先验

        以上内容摘自:  《深度学习中文版》

        GitHub: https://github.com/fengbingchun  

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/79910284