L0、L1与L2范数

时间:2021-08-28 09:50:41

参考:http://blog.csdn.net/vividonly/article/details/50723852

http://www.cnblogs.com/little-YTMM/p/5879093.html

http://blog.csdn.net/zouxy09/article/details/24971995

引子

在介绍L0/L1/L2范数之前,先做个铺垫:L0/L1/L2范数有什么用?为什么要引入L0/L1/L2范数。

监督机器学习问题,就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据,也就是能使模型“简单”,使模型稀疏、低秩、平滑等,从而具有更好的泛化能力。

规则化符合奥卡姆剃刀(Occam's razor)原理:在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。从贝叶斯估计的角度来看,规则化项对应于模型的先验概率。民间还有个说法就是,规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term)。

监督学习可以看做最小化下面的目标函数:

L0、L1与L2范数

第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了。不同的loss函数,具有不同的拟合特性。

规则化函数Ω(w)也有很多种选择,一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。常见的都聚集在:L0范数、L1范数、L2范数等。


L0范数

L0范数表示参数中非零元素的个数:

也就是如果我们使用L0范数,即希望参数w是稀疏的(大部分元素都是0,只有几个非零参数对应的特征对结果有影响)所以可以用于ML中做稀疏编码,特征选择。通过最小化L0范数,来寻找最少最优的稀疏特征项。既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解

实现参数的稀疏有什么好处吗?

一是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据就只能呵呵了。二是可以特征选择,选择参数非零的特征即可,而且使整个模型获得更好的可解释性,只有几个非零参数对结果有影响,更好解释。

L1范数 -- (Lasso Regression)

L1正则化表示各个参数绝对值之和。

L1正则化之所以可以防止过拟合,是因为L1范数就是各个参数的绝对值相加得到的,参数值大小和模型复杂度是成正比的。因此复杂的模型,其L1范数就大,最终导致损失函数就大,说明这个模型就不够好。L1范数的解通常是稀疏性的。

参数值越小代表模型越简单吗?

是的。越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

L2范数 -- (Ridge Regression)

L2正则化标识各个参数的平方的和的开方值,也就是欧氏距离,在正则项上没有添加sqrt根号是为了更加容易优化

L2正则化可以防止过拟合的原因和L1正则化一样,只是形式不太一样。L2范数越小,可以使得参数的每个元素都很小,接近于0,但L1范数不同的是他不会让参数等于0而是接近于0,有参数平滑的作用
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。L1能产生稀疏性,而L2不行。在所有特征中只有少数特征起重要作用的情况下,选择Lasso比较合适,因为它能自动选择特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用Ridge也许更合适。

L1正则化的优点是优化后的参数向量往往比较稀疏;L2正则化的优点是其正则化项处处可导。

贝叶斯先验

从贝叶斯先验的角度看,加入正则项相当于加入了一种先验。即当训练一个模型时,仅依靠当前的训练数据集是不够的,为了实现更好的泛化能力,往往需要加入先验项。

  • L1范数相当于加入了一个Laplacian先验;
  • L2范数相当于加入了一个Gaussian先验。
    如下图所示:
    L0、L1与L2范数