总体概述:
正则:
,其中 为惩罚系数, 为线性模型的参数。表示权值的绝对值之和最小。使他变最小的趋势就是希望模型参数中为0的项多一些,即稀疏。
提到L1,自然而然会想到为什么没有L0.其实是有的。L0表示的含义是参数中非零项的个数。他的趋势也是希望模型参数会尽可能多的为0.但是实际上我们常用的却是L1或者L2.原因在于:优化L0范数很难(NP难问题),L1范数优化起来相对容易,并且L1范数是L0的最优凸近似。
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择.(一般应用于特征之间有关系,类似降维)
使用L1正则化的线性模型叫Lasso回归
- 求解方法:坐标轴下降法/最小角回归法(不能用梯度下降是因为L1的表达式含有绝对值,在等于0处不可导)
正则
- 形式: ,表式所有参数平方和再开方。对他进行最小化,产生的趋势是使得参数尽量小,即模型更简单些,但是与L1的区别是,尽量小但是达不到0.所以L2正则也叫权值衰减(weights decay)。
- 对常数项不进行惩罚,所以参数值也不能太小,容易使得常数项起主要作用而使模型发生欠拟合。
- 使用L2正则的线性模型为ridge回归,求解方法用梯度下降就可以
- L2的作用在于可以防止过拟合,提升模型的泛化能力。为什么?我的理解是L2正则使得模型参数非常小(但不为零),参数越小模型越简单(为啥越简单?我的理解是:假如参数很大,那么输入有特别小的变化的时候,计算出来的数都会有很大的变化,这就容易导致过拟合;如果每个参数都比较小,那么输入有一定的变化的时候,对输出的影响不是很大,泛化能力好),模型越简单越不容易过拟合。
加正则项相当于是对模型加先验,L1正则相当于拉普拉斯先验,L2正则相当于高斯先验
L1和L2的区别
L1和L2的正则化损失表示为如下:
对其进行可视化,假设是一个二维的模型,即只有 两个参数。
我们可以在平面上画出目标函数的等高线,约束条件为平面中半径为C的norm ball(黑色线表示,左侧是L1正则,右侧是L2正则)。等高线和norm ball第一次相交的位置,就是最优解。
可以看出,L1-ball更容易在角的位置和等高线先相交,而角位置都是在轴上,所以肯定有一个为0,这也说明了为啥L1正则会产生稀疏性。L2-ball因为没有角,所以产生稀疏的情况就很少,所以它不具有稀疏性,而只是让参数更加的趋近于0.
因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。
L1+L2
把L1和L2合在一起,就变成了ElasticNet
ElasticNet 是一种使用L1和L2先验作为正则化矩阵的线性回归模型.这种组合用于只有很少的权重非零的稀疏模型,比如:class:Lasso, 但是又能保持:class:Ridge 的正则化属性.我们可以使用 l1_ratio 参数来调节L1和L2的凸组合(一类特殊的线性组合)。
当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个.
在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性.