机器学习日记(三):浅谈L1正则化与L2正则化

前言

监督学习问题无非就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是为了防止我们的模型过分拟合我们的训练数据。 因为参数太多,会导致我们的模型复杂度上升,容易产生过拟合,也就是我们的训练误差会很小。但训练误差小并不是我们的最终目标,我们的目标是希望模型的测试误差小,也就是能准确的预测新的样本。所以,我们需要保证模型在“简单”的基础上最小化训练误差,这样得到的参数才具有较好的泛化性能,而模型“简单”就是通过规则函数来实现的。另外,规则项的使用还可以约束我们的模型的特性。这样就可以将人对这个模型的先验知识融入到模型的学习当中,强行地让学习到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。要知道,有时候人的先验是非常重要的。前人的经验会让你少走很多弯路,这就是为什么我们平时学习最好找个大牛带带的原因,一句点拨可以为我们拨开眼前乌云,还我们一片晴空万里,醍醐灌顶。对机器学习也是一样,如果被我们人稍微点拨一下,它肯定能更快的学习相应的任务。只是由于人和机器的交流目前还没有那么直接的方法,目前这个媒介只能由规则项来担当了。

一、欠拟合与过拟合

  • 欠拟合:所建的机器学习模型在训练数据上表现不佳。

  • 过拟合:所建的机器学习模型在训练样本中表现得过于优越,导致在测试数据集中表现不佳。

回想下我们的模型,假如我们采用梯度下降算法将模型中的损失函数不断减少,那么最终我们会在一定范围内求出最优解,最后损失函数不断趋近0。那么我们可以在所定义的损失函数后面加入一项永不为0的部分,那么最后经过不断优化,损失函数还是会存在。其实这就是所谓的“正则化”。

一般来说,监督学习可以看做最小化下面的目标函数:

\[\omega^{*}=arg\mathop{min}\limits_{\omega}\sum_iL(y_i,f(x_i,\omega))+\lambdaΩ(\omega)\]

其中,\(\sum_iL(y_i,f(x_i,\omega))\) 是我们的损失函数,\(Ω(\omega)\) 是我们的正则化项。

常见的正则化方法包括L1正则化和L2正则化。

二、什么是范数

我们知道距离的定义是一个宽泛的概念,只要满足非负、自反、三角不等式就可以称之为距离。范数是一种强化了的距离概念,它在定义上比距离多了一条数乘的运算法则。有时候为了便于理解,我们可以把范数当作距离来理解。

在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小。一种非严密的解释就是,对应向量范数,向量空间中的向量都是有大小的,这个大小如何度量,就是用范数来度量的,不同的范数都可以来度量这个大小,就好比米和尺都可以来度量远近一样;对于矩阵范数,我们知道,通过运算 \(AX=B\),可以将向量 \(X\) 变化为 \(B\),矩阵范数就是来度量这个变化大小的。

这里简单地介绍以下几种向量范数的定义和含义。

2.1 L-P范数

L-P范数不是一个范数,而是一组范数,其定义如下:

\[L_p=||\omega||_p=(\sum_{i=1}^n|\omega_i|^p)^{\frac{1}{p}}\]

根据P 的变化,范数也有着不同的变化,一个经典的有关P范数的变化图如下:

上图表示了p从无穷到0变化时,三维空间中到原点的距离(范数)为1的点构成的图形的变化情况。

2.2 L0范数

当P=0时,也就是L0范数,由上面可知,L0范数并不是一个真正的范数,它主要被用来度量向量中非零元素的个数。用上面的L-P定义可以得到L-0的定义为:

\[||\omega||_0=(\sum_{i=1}^n|\omega_i|^0)^{\frac{1}{0}}\]

这里就有点问题了,我们知道非零元素的零次方为1,但零的零次方,非零数开零次方都不知道是什么,很不好说明L0的意义,所以在通常情况下,大家都用来表示向量 \(x\) 中非零元素的个数。

2.3 L1范数

L1范数是我们经常见到的一种范数,它的定义如下:

\[||\omega||_1=\sum_{i=1}^n|\omega_i|\]

表示向量 \(x\) 中非零元素的绝对值之和。

对于L1范数,它的优化问题如下:

\[min\ \ ||\omega||_1\]

由于L1范数的天然性质,对L1优化的解是一个稀疏解,因此L1范数也被叫做稀疏规则算子。通过L1可以实现特征的稀疏,去掉一些没有信息的特征。例如在对用户的电影爱好做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如身高体重等可能都是无用的,利用L1范数就可以过滤掉。

2.4 L2范数

L2范数是我们最常见最常用的范数了,我们用的最多的欧氏距离就是一种L2范数,它的定义如下:

\[||\omega||_2=\sqrt{\sum_{i=1}^n|\omega_i|^2}\]

表示向量 \(x\) 元素的平方和再开平方。

L2范数通常会被用来做优化目标函数的正则化项,防止模型为了迎合训练集而过于复杂造成的过拟合情况,从而提高模型的泛化能力。

三、L1正则化

\[\omega^{*}=arg\mathop{min}\limits_{\omega}\sum_iL(y_i,f(x_i,\omega))+\lambda||\omega||_1\]

从上面的分析中我们可以了解到L1正则化可以实现稀疏。但为什么要稀疏?让我们的参数稀疏有什么好处呢?

  • 特征选择(Feature Selection):

    • 大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,\(x_i\) 的大部分元素(也就是特征)都是和最终的输出 \(y_i\) 没有关系或者不提供任何信息的,在最小化目标函数的时候考虑 \(x_i\) 这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确 \(y_i\) 的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
  • 可解释性(Interpretability):

    • 另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是 \(y\) ,然后我们收集到的数据 \(x\) 是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是回归模型:\(y=\omega_1\*x_1+\omega_2\*x_2+\ldots+\omega_{1000}\*x_{1000}+b\) 。通过学习,如果最后学习到的 \(\omega^{\*}\) 就只有很少的非零元素,例如只有5个非零的 \(\omega_i\),那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个 \(\omega_i\) 都非0,医生面对这1000种因素,累觉不爱。

四、L2正则化

\[\omega^{*}=arg\mathop{min}\limits_{\omega}\sum_iL(y_i,f(x_i,\omega))+\lambda||\omega||_2\]

L2正则化的强大功效是改善机器学习里面一个非常重要的问题:过拟合。 至于过拟合是什么,上面也解释了,就是模型训练时候的误差很小,但在测试的时候误差很大,也就是我们的模型复杂到可以拟合到我们的所有训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力很差。擅长背诵知识,却不懂得灵活利用知识。

为什么L2能防止过拟合呢? 过拟合的时候,拟合函数的系数往往非常大,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。我们让L2范数的规则项 \(||\omega||_2\) 最小,可以使得 \(\omega\) 的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。

五、L1、L2正则化直观解释

左图为L1正则化,右图为L2正则化

为了更加直观的了解为什么L1正则化可以实现稀疏、L2正则化可以有效防止过拟合,这里我们只考虑二维的情况,即只有两个权值 \(\omega_1,\omega_2\)

此时 \(L1=|\omega_1|+|\omega_2|\),在图像上表现为菱形。而\(L2=\omega_1^2+\omega_2^2\),在图像上表现为圆。

当我们每次取一组 \(\omega_1,\omega_2\) 时,代价函数都会有对应的输出值。我们将代价函数的值用等值线来表示。最内层的等值线(图中表现为紫色)即最优化的结果。

再来回顾一下我们的目标:我们现在的目标是不仅原曲线的值要小(越来越接近中心的紫色圈圈),还要使得这个菱形或圆越小越好。 那么还和原来一样的话,过中心紫色圈圈的那个菱形明显很大,因此我们要取到一个恰好的值。那么如何求值呢?

以同一条原曲线目标等值线来说,现在以最外圈的红色等值线为例,我们看到,对于红色曲线上的每个点都可以做一个菱形,根据上图可知,当这个菱形与某条等值线相切(仅有一个交点)的时候,这个菱形最小,对比上图相割的较大的两个菱形对应的1范数更大。

有了上面的说明,我们可以看出,最终加入L1范数得到的解,一定是某个菱形和某条原函数等值线的切点。现在有个比较重要的结论来了,我们经过观察可以看到,几乎对于很多原函数的等值曲线,和某个菱形相切的时候及其容易相交在坐标轴(比如上图)。也就是说最终的结果,解的某些维度及其容易是0,比如上图最终解是 \(\omega = (0,x)\)这也就是我们所说的L1更容易得到稀疏解(解向量中0比较多)的原因。

(注:以上分析仅从直观上理解,有关具体证明可参考Google、baidu)

当加入L2正则化的时候,分析和L1正则化是类似的,也就是说我们仅仅是从菱形变成了圆形而已,同样还是求原曲线和圆形的切点作为最终解。当然与L1范数比,我们这样求的L2范数的从图上来看,不容易交在坐标轴上,但是仍然比较靠近坐标轴。因此这也就是我们所说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0)。 ****** #### 参考链接 + 机器学习中正则化项L1和L2的直观理解