正则化是机器学习中对原始损失函数引入惩罚项,以防止过拟合或提高模型泛化性能的一类方法的统称
一、参数范数惩罚
二、L1参数正则化
L1范数为各个参数的绝对值之和
作用:
- 使部分权重变为0,去除某些特征,产生稀疏模型
稀疏模型作用:
- 稀疏化正则化项一个最重要的优势就在于实现特征的自动选择。所谓稀疏性,说白了就是模型的很多参数是0。通常机器学习中特征数量很多,例如文本处理时,如果将一个词组作为一个特征,那么特征数量会达到上万个。但是只有少数特征对该模型有贡献,绝大部分特征是没有贡献的。在最小化目标函数时,需要考虑这些额外的特征,虽然能获得更小的训练误差,但在预测阶段,模型会考虑这些无用的特征,从而可能干扰模型的正确预测。
- 这种模型就是所谓的泛化性能不强,有过拟合的嫌疑。如果通过稀疏化正则化项得到一个稀疏模型,很多参数是0,此时我们就可以只关注系数是非零值的特征。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。这就是稀疏模型与特征选择的关系。
三、L2参数正则化
加入超参数λ和L2范数
目的:
使参数变得更小,提高泛化能力
相比于L1正则化,L2正则化的函数L与第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么L1正则化能产生稀疏性,而L2正则化不能产生稀疏性的原因了。
正则化的作用:主要是为了防止过拟合。
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,泛化能力强,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强。
越是复杂的模型,越是尝试对所有样本进行拟合,包括异常点。这就会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。
为什么L2正则化能够得到值很小的参数???
可以看到,由于学习率 ,且这两个值一般都是很小的正数,所以 ,所以每次θ在更新的时候都会减小, λ越大,衰减的越快,这也是L2正则化可以获得更小的权重值的原因。
正如在线性回归中的应用,L2正则化就是在损失函数中加入一个L2范数和一个超参数λ,L2范数用这种符号表示,它的意思是对于向量 w 中的各个数先求平方再加和。线性回归中加入的对于 求平方和就是一个L2范数。超参数λ则用于控制参数惩罚的程度。
我们在举个例子,来展示L2正则化如何解决过拟合的现象
将上述公式分为两部分,左边部分即为原始的损失函数,右边部分为L2正则化项(注意:正则化项中不包含)。 λ为超参数,是人为设定的。为了最小化整个损失函数,那么就要减小 ~ 的值。对于上图中的那种过拟合状态,加入正则项后, ~ 减小,也就是使得权重衰减,这样就会降低高阶项对于整个函数的影响,使得估计函数变得比较平滑。
可以想象一种极端的情况,如果 λ为无穷大,那么 ~ 趋近于0,那么整个式子就只剩一个 ,为一条和y轴垂直的直线,这种状态为严重的欠拟合状态。可以看到,当λ为0时,即为原来的状态,此时过拟合。所以会有一个恰当的λ使得模型处于既不过拟合又不欠拟合的状态。
在未加入L2正则化发生过拟合时,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,在某些很小的区间里,函数值的变化很剧烈,也就是某些w值非常大。为此, L2正则化的加入惩罚了权重变大的趋势,逼迫所有w尽可能趋向零但不为零(L2正则化的导数趋于零),导致权重较为平滑。
四、数据集增强
使用更多的样本数据训练模型可以获得更好的泛化性能,然而,实践中我们很难获得更多的训练数据。一种解决方法是人为创造一些合理的假数据并把它们添加到训练集。
这样的方法对于分类任务来说是最简单的。一个分类器需要有能力把一个复杂高维的输入x映射到单一类目的输出y ,因此分类器需要对大量x的变换保持预测结果的不变,即对于相似的输入需要有相同的输出。因此,我们可以轻易地转换训练集中的 x 来生成新的 (x,y)对。例如,对于图像识别任务来说,像素的部分平移、缩放、旋转操作并不会改变图片中物体对语义表达,因而我们可以使用这些操作来生存新对训练数据。数据集增强对于语音识别任务也是有效的。
另一种数据集增强的方法是向网络的输入层注入噪声。神经网络已被证明对噪声不是非常健壮。简单地将随机噪声施加到输入再进行训练可以改善神经网络的健壮性。对于某些模型,在模型的输入上添加方差极小的噪声等价于对权重施加范数惩罚(Bishop)。
研究表明,将噪声施加到网络的隐藏层也是有效的,这可以被看成是在多个抽象层上进行数据集增强。著名的Dropout方法可以看作是对隐藏层输出乘以一个噪声后输出到下一层。