在总结正则化(Regularization)之前,我们先谈一谈正则化是什么,为什么要正则化。
个人认为正则化这个字眼有点太过抽象和宽泛,其实正则化的本质很简单,就是对某一问题加以先验的限制或约束以达到某种特定目的的一种手段或操作。在算法中使用正则化的目的是防止模型出现过拟合。一提到正则化,很多同学可能马上会想到常用的L1范数和L2范数,在汇总之前,我们先看下LP范数是什么鬼。
LP范数范数简单可以理解为用来表征向量空间中的距离,而距离的定义很抽象,只要满足非负、自反、三角不等式就可以称之为距离。
LP范数不是一个范数,而是一组范数,其定义如下:
$$||x||_{p} = (\sum_{i}^{n}x_{i}^p)^{\frac{1}{p}}$$
$p$的范围是$[1, \infty)$。$p$在$(0,1)$范围内定义的并不是范数,因为违反了三角不等式。
根据$p$的变化,范数也有着不同的变化,借用一个经典的有关P范数的变化图如下:
上图表示了$p$从0到正无穷变化时,单位球(unit ball)的变化情况。在P范数下定义的单位球都是凸集,但是当$0<p<1$时,在该定义下的unit ball并不是凸集(这个我们之前提到,当$0<p<1$时并不是范数)。
那问题来了,L0范数是啥玩意?
L0范数表示向量中非零元素的个数,用公式表示如下:
$$||x||_{0} = \# (i | x_{i}\ne 0)$$
我们可以通过最小化L0范数,来寻找最少最优的稀疏特征项。但不幸的是,L0范数的最优化问题是一个NP hard问题(L0范数同样是非凸的)。因此,在实际应用中我们经常对L0进行凸松弛,理论上有证明,L1范数是L0范数的最优凸近似,因此通常使用L1范数来代替直接优化L0范数。
L1范数根据LP范数的定义我们可以很轻松的得到L1范数的数学形式:
$$||x||_{1} = \sum_{i}^{n} |x_{i}|$$
通过上式可以看到,L1范数就是向量各元素的绝对值之和,也被称为是"稀疏规则算子"(Lasso regularization)。那么问题来了,为什么我们希望稀疏化?稀疏化有很多好处,最直接的两个:
特征选择
可解释性
L2范数L2范数是最熟悉的,它就是欧几里得距离,公式如下:
$$||x||_{2} = \sqrt{\sum_{i}^{n}(x_{i})^2}$$
L2范数有很多名称,有人把它的回归叫“岭回归”(Ridge Regression),也有人叫它“权值衰减”(Weight Decay)。以L2范数作为正则项可以得到稠密解,即每个特征对应的参数$w$都很小,接近于0但是不为0;此外,L2范数作为正则化项,可以防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力。
L1范数和L2范数的区别引入PRML一个经典的图来说明下L1和L2范数的区别,如下图所示:
如上图所示,蓝色的圆圈表示问题可能的解范围,橘色的表示正则项可能的解范围。而整个目标函数(原问题+正则项)有解当且仅当两个解范围相切。从上图可以很容易地看出,由于L2范数解范围是圆,所以相切的点有很大可能不在坐标轴上,而由于L1范数是菱形(顶点是凸出来的),其相切的点更可能在坐标轴上,而坐标轴上的点有一个特点,其只有一个坐标分量不为零,其他坐标分量为零,即是稀疏的。所以有如下结论,L1范数可以导致稀疏解,L2范数导致稠密解。