在详细介绍L1与L2之前,先讲讲正则化的应用场景。
所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。
造成过拟合的本质原因是模型学习的太过精密,导致连训练集中的样本噪声也一丝不差的训练进入了模型。
所谓欠拟合(under-fitting),与过拟合恰好相反,模型学习的太过粗糙,连训练集中的样本数据特征关系(数据分布)都没有学出来。
解决过拟合的方法主要有以下几种:
本文着重讲解解决过拟合问题的两大正则方法L1(Lasso)与L2(Ridge)。
在介绍L1、L2之前,我们稍微谈一下L0。在谈L0之前还要稍微讲一下何为范数。
我们知道距离的定义是一个宽泛的概念,只要满足非负、自反、三角不等式就可以称之为距离。范数是一种强化了的距离概念,它在定义上比距离多了一条数乘的运算法则。有时候为了便于理解,我们可以把范数当作距离来理解。
L-P范数
与闵可夫斯基距离的定义一样,L-P范数不是一个范数,而是一组范数,其定义如下:
根据P 的变化,范数也有着不同的变化,一个经典的有关P范数的变化图如下:
上图表示了p从无穷到0变化时,三维空间中到原点的距离(范数)为1的点构成的图形的变化情况。以常见的L-2范数(p=2)为例,此时的范数也即欧氏距离,空间中到原点的欧氏距离为1的点构成了一个球面。
L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。这太直观了,太露骨了吧,换句话说,让参数W是稀疏的。OK,看到了“稀疏”二字,大家都应该从当下风风火火的“压缩感知”和“稀疏编码”中醒悟过来,原来用的漫山遍野的“稀疏”就是通过这玩意来实现的。但你又开始怀疑了,是这样吗?看到的papers世界中,稀疏不是都通过L1范数来实现吗?脑海里是不是到处都是的影子呀!几乎是抬头不见低头见。没错,这就是这节的题目把L0和L1放在一起的原因,因为他们有着某种不寻常的关系。那我们再来看看L1范数是什么?它为什么可以实现稀疏?为什么大家都用L1范数去实现稀疏,而不是L0范数呢?
L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization)。现在我们来分析下这个价值一个亿的问题:为什么L1范数会使权值稀疏?有人可能会这样给你回答“它是L0范数的最优凸近似”。实际上,还存在一个更美的回答:任何的规则化算子,如果它在的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。这说是这么说,W的L1范数是绝对值,|w|在w=0处是不可微,但这还是不够直观。这里因为我们需要和L2范数进行对比分析。
既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题,L0为一个0-1跃阶函数,低于1范数的都不是凸的),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。
OK,来个一句话总结:L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。
让我们的参数稀疏有什么好处呢?这里扯两点:
除了L1范数,还有一种更受宠幸的规则化范数是L2范数:。它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。这用的很多吧,因为它的强大功效是改善机器学习里面一个非常重要的问题:过拟合。至于过拟合是什么,上面也解释了,就是模型训练时候的误差很小,但在测试的时候误差很大,也就是我们的模型复杂到可以拟合到我们的所有训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力很差。擅长背诵知识,却不懂得灵活利用知识。
L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。L2的作用就是让所有的参数都接近于0,个人理解,L2的优越性并不主要体现在让参数变小上,关键是在于让所有的参数比较均衡。也就是说所有的特征的表达能力都差不多。这样就不至于让模型对某个特征特别敏感,也就是说在测试集上运行的时候,即使某个特征上有噪声异常突出,但对于整体模型的输出而言,并不会被这个噪声带偏特别多。
L2范数的好处是什么呢?这里也扯上两点:
关于L2在condition number优化角度的处理,篇幅问题,会再开一篇。
The main difference between L1 and L2 regularization is that L1 can yield sparse models while L2 doesn't. Sparse model is a great property to have when dealing with high-dimensional data, for at least 2 reasons.
- Model compression: increasingly important due to the mobile growth
- Feature selection: it helps to know which features are important and which features are not or redundant.
What is the difference between L1 and L2 regularization? How does it solve the problem of overfitting? Which regularizer to use and when?
翻译过来就是,L1与L2正则化的主要差别在于L1正则化可以产出稀疏的模型但L2正则化不行。稀疏模型具有更好的特性去处理高维的数据特征,至少有以下两个原因成立:
For simplicity, let's just consider the 1-dimensional case.
L2-regularized loss function is smooth. This means that the optimum is the stationary point (0-derivative point). The stationary point of F can get very small when you increase , but still won't be 0 unless .
L1-regularized loss function is non-smooth. It's not differentiable at 0. Optimization theory says that the optimum of a function is either the point with 0-derivative or one of the irregularities (corners, kinks, etc.). So, it's possible that the optimal point of F is 0 even if 0 isn't the stationary point of f. In fact, it would be 0 if is large enough (stronger regularization effect). Below is a graphical illustration.In multi-dimensional settings: if a feature is not important, the loss contributed by it is small and hence the (non-differentiable) regularization effect would turn it off.
翻译过来就是:
简单来说,我们只考虑一维情形。L2正则化的损失函数是光滑的,这意味着它的最优点是一个固定的点(在损失函数导数为0处),如果我们增大,那么这个点的函数值会变得很小。但它不会是0,除非。
L1正则化的损失函数是是不光滑的,在处不可导,最优化理论告诉我们,函数的最优点在导数为0处或者非规则点(不可导的点)处取到。有可能作为函数的最优点,即使不是可导的。事实上,当足够大的时候(强正则影响),最优点确实会在处取到。
在高维情形下:如果一个特征是不重要的,那么它对于损失函数的影响就很小,即这个特征的权值即使很大,但对于损失函数的影响很小,但对于正则项的影响就很大了。此时在正则项的作用下,就会把这个特征给turn off掉(L1即为取0过滤掉,L2即为取一个很小的权重值)。
如果认真看完了上面一大段分析的话,对于L1正则与L2正则的原理应该是可以搞懂了(为什么L1是让部分参数变为0,而L2是让参数都趋向于0)。
实际上,对于L1和L2规则化的代价函数来说,我们可以写成以下形式:
也就是说,我们要将模型空间限制在w的一个L1-ball 中。为了便于可视化,我们考虑两维的情况,在(w1, w2)平面上可以画出目标函数的等高线,而约束条件则成为平面上半径为C的一个 norm ball 。等高线与 norm ball 首次相交的地方就是最优解:
彩色的圈就是min要最小化的损失函数等高线图。最中心就是损失函数误差最小的点。左图的正方形边界及内部点就是L1正则化所产生的约束条件。如何理解为什么是一个正方形:L1正则化的定义,画出来就是这个样子。
同理,L2正则化是一个圆形,也是这么来的。
可以看到,L1-ball 与L2-ball 的不同就在于L1在和每个坐标轴相交的地方都有“角”出现,而目标函数的测地线除非位置摆得非常好,大部分时候都会在角的地方相交。注意到在角的位置就会产生稀疏性,例如图中的相交点就有w1=0,而更高维的时候(想象一下三维的L1-ball 是什么样的?)除了角点以外,还有很多边的轮廓也是既有很大的概率成为第一次相交的地方,又会产生稀疏性。
相比之下,L2-ball 就没有这样的性质,因为没有角,所以第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么L1-regularization 能产生稀疏性,而L2-regularization 不行的原因了。
因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。
试想一下,在上图中,如果不加正则化项,那么最优参数对应的等高线离中心点的距离可能会更近,加入正则化项后使得训练出的参数对应的等高线离中心点的距离不会太近,也不会太远。从而避免了过拟合。
离中心越近说明误差越小,这样就越容易过拟合,正则项保证了在误差允许的范围内却不过与逼近中心点,即保持较好的泛化能力。
参考文章:
机器学习中的范数规则化之(一)L0、L1与L2范数
What is the difference between L1 and L2 regularization? How does it solve the problem of overfitting? Which regularizer to use and when?
几种范数的简单介绍
L2正则化方法