对于图2.18中的例子,在损失函数中增加对高次项的惩罚可以避免过拟合。具体来说,对于有 m 个样本的训练集 D ,在原损失函数 L ( w ; x , y )中,加上惩罚项 ,其中 C 1 和 C 2 为常数:
损失函数中增加高次项的惩罚后,不仅可以最小化误差,还可以最小化 w 3 和 w 4 。例如 C 1 和 C 2 设为1000时,用损失函数训练出来的结果是 w 3 和 w 4 都约等于0,拟合曲线为图2.19中的虚线。如果没有惩罚项,训练出来的结果可能是图中实线对应的过拟合曲线。
图2.19 利用正则化解决过拟合
正则化就是在损失函数中对不想要的部分加入惩罚项
其中, θ 为正则化参数。对神经网络来说,模型参数包括权重 w 和偏置 b ,正则化过程一般仅对权重 w 进行惩罚,因此正则化项可记为 θΩ ( w )。正则化后的目标函数记为
在工程实践中,惩罚项有多种形式,对应不同的作用,包括 L 2 正则化、 L 1 正则化。
1. L 2 正则化
正则化项的数学表示为: 。
L 2 正则化可以避免过拟合时某些区间里的导数值非常大、曲线特别不平滑的情况,如图2.20所示。下面分析 L 2 正则化是如何避免过拟合的。
图2.20 过拟合时某些区间里的导数值非常大
L 2 正则化后的目标函数为
目标函数对 w 求偏导得到
以 η 为步长,单步梯度更新权重为
梯度更新中增加了权重衰减项 θ 。通过 L 2 正则化后,权重 w 会成为梯度的一部分。权重 w 的绝对值会变小,拟合的曲线就会平滑,数据拟合得更好。
2. L 1 正则化
除了 L 2 正则化之外,还有 L 1 正则化。 L 2 正则化项是所有权重 w i 的平方和, 正则化项是所有权重 的绝对值的和: 。
L 1 正则化后的目标函数为
目标函数对 w 求偏导得到
以 η 为步长,单步梯度更新权重为
L 1 正则化在梯度中加入一个符号函数,当 w i 为正数时,更新后的 w i 会变小,当 w i 为负数时,更新后的 w i 会变大。因此正则化的效果是使 w i 更接近0,即神经网络中的权重接近0,从而减少过拟合。
稀疏化是在训练时让神经网络中的很多权重或神经元为0。有些稀疏化技术甚至可以让神经网络中90%的权重或神经元为0。稀疏化的好处是,在使用该神经网络时,如果神经网络的权重或神经元为0,则可以跳过不做计算,从而降低神经网络正向传播中90%的计算量。稀疏化很多时候是通过加惩罚项来实现的。
Bagging(Bootstrap aggregating)集成学习的基本思想是:三个臭皮匠顶一个诸葛亮,训练不同的模型来共同决策测试样例的输出。Bagging的数据集是从原始数据集中重复采样获取的,数据集大小与原始数据集保持一致,可以多次重复使用同一个模型、训练算法和目标函数进行训练,也可以采用不同的模型进行训练。例如,图2.21中以前建的一个识别猫的神经网络效果不够好,可以再建两个神经网络模型来识别猫。这三个模型训练的时候可能是用不同的参数、不同的网络拓扑,也可能是一个用支持向量机、一个用决策树、一个用神经网络。具体识别的时候,可以取三个模型的均值作为输出,也可以再训练一个分类器去选择什么情况下该用三个模型中的哪一个。通过Bagging集成学习可以减少神经网络的识别误差。
图2.21 Bagging集成方法
L 2 和 L 1 正则化是在目标函数中增加一些惩罚项,而Dropout正则化 [52] 则是在训练阶段随机删掉一些隐层的节点,在计算的时候无视这些连接。Dropout正则化也可以避免过拟合,因为过拟合通常是由于神经网络模型太复杂了。Dropout丢掉一些隐层节点可能会带来意想不到的效果,降低神经网络模型的复杂度,还能避免过拟合。如图2.22所示,基础的神经网络模型可以丢掉部分节点子集形成子网络。例如,可以丢掉 h 2 和 x 2 ,也可以丢掉一些边或者丢掉一些神经元。
图2.22 Dropout示例 [53]
具体来讲,首先设置一个掩码向量 µ , µ 的每一项分别对应网络的一个输入或隐层的一个节点,然后随机对掩码 µ 进行采样,如图2.23所示。网络中的每个节点乘以相应的掩码后,沿着网络的其余部分继续向前传播。通常,输入节点的采样概率为0.8;隐层节点的采样概率为0.5,即可能有一半的隐层节点没有采样就丢掉了。在训练的过程中丢掉一些东西,可能反而会为训练带来更好的效果。而在测试阶段,Dropout会使用所有的节点,但对节点的输出乘以采样概率。
图2.23 Dropout的掩码示例 [53]
除本节介绍的方法外,正则化相关的方法还有很多,每年人工智能领域的顶级国际会议上都有很多相关的文章,比如提前终止、多任务学习、数据增强、参数共享等。提前终止是指,当训练较大的网络模型时,能够观察到训练误差会随着时间的推移降低而在验证集上的误差却再次上升,因此在训练过程中一旦验证误差不再降低且达到预定的迭代次数,就可以提前终止训练。多任务学习通过多个相关任务的同时学习来减少神经网络的泛化误差。数据增强使用更多的数据进行训练,可对原数据集进行变换以形成新数据集并将其添加到训练数据中。参数共享是强迫两个模型(例如,监督模式下的训练模型和无监督模式下的训练模型)的某些参数相等,使其共享唯一的一组参数。
总体上讲,当一个神经网络的训练结果不好时,其实有很多正则化技术可以尝试。具体如何使用这些正则化技术,需要结合习题深入地细化学习。