
过节福利,咱们来深刻理解下L1与L2正则化。机器学习
1 正则化的概念
- 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提升模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数+额外项,经常使用的额外项通常有两种,英文称做\(ℓ1-norm\)和\(ℓ2-norm\),中文称做L1正则化和L2正则化,或者L1范数和L2范数(实际是L2范数的平方)。
L1正则化和L2正则化能够看作是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数作一些限制。对于线性回归模型,使用L1正则化的模型叫作Lasso回归,使用L2正则化的模型叫作Ridge回归(岭回归)。函数
线性回归L1正则化损失函数:
\[\min_w [\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda \|w\|_1 ]........(1)\]性能
线性回归L2正则化损失函数:
\[\min_w[\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda\|w\|_2^2] ........(2)\]学习
- 公式(1)(2)中\(w\)表示特征的系数(\(x\)的参数),能够看到正则化项是对系数作了限制。L1正则化和L2正则化的说明以下:
- L1正则化是指权值向量\(w\)中各个元素的绝对值之和,一般表示为\(\|w\|_1\)。
- L2正则化是指权值向量\(w\)中各个元素的平方和而后再求平方根(能够看到Ridge回归的L2正则化项有平方符号),一般表示为\(\|w\|_2^2\)。
- 通常都会在正则化项以前添加一个系数\(\lambda\)。Python中用\(\alpha\)表示,这个系数须要用户指定(也就是咱们要调的超参)。
2 正则化的做用
- L1正则化可使得参数稀疏化,即获得的参数是一个稀疏矩阵,能够用于特征选择。
- 稀疏性,说白了就是模型的不少参数是0。一般机器学习中特征数量不少,例如文本处理时,若是将一个词组(term)做为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,可是若是代入这些特征获得的模型是一个稀疏模型,不少参数是0,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,即便去掉对模型也没有什么影响,此时咱们就能够只关注系数是非零值的特征。这至关于对模型进行了一次特征选择,只留下一些比较重要的特征,提升模型的泛化能力,下降过拟合的可能。
- L2正则化能够防止模型过拟合(overfitting);必定程度上,L1也能够防止过拟合。
3 L1正则化与稀疏性
- 事实上,”带正则项”和“带约束条件”是等价的。
为了约束w的可能取值空间从而防止过拟合,咱们为该最优化问题加上一个约束,就是w的L1范数不能大于m:
\[ \begin{cases} \min \sum_{i=1}^{N}(w^Tx_i - y_i)^2 \\ s.t. \|w\|_1 \leqslant m. \end{cases}........(3) \]测试
- 问题转化成了带约束条件的凸优化问题,写出拉格朗日函数:
\[ \sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda (\|w\|_1-m)........(4)\]
设\(W_*\)和\(\lambda_*\)是原问题的最优解,则根据\(KKT\)条件得:
\[ \begin{cases} 0 = \nabla_w[\sum_{i=1}^{N}(W_*^Tx_i - y_i)^2 + \lambda_* (\|w\|_1-m)] \\ 0 \leqslant \lambda_*. \end{cases}........(5) \]优化
- 仔细看上面第一个式子,与公式(1)实际上是等价的,等价于(3)式。
- 设L1正则化损失函数:\(J = J_0 + \lambda \sum_{w} |w|\),其中\(J_0 = \sum_{i=1}^{N}(w^Tx_i - y_i)^2\)是原始损失函数,加号后面的一项是L1正则化项,\(\lambda\)是正则化系数。
- 注意到L1正则化是权值的绝对值之和,\(J\)是带有绝对值符号的函数,所以\(J\)是不彻底可微的。机器学习的任务就是要经过一些方法(好比梯度降低)求出损失函数的最小值。当咱们在原始损失函数\(J_0\)后添加L1正则化项时,至关于对\(J_0\)作了一个约束。令\(L=\lambda \sum_w|w|\),则\(J=J_0+L\),此时咱们的任务变成在\(L\)约束下求出\(J_0\)取最小值的解。
- 考虑二维的状况,即只有两个权值\(w_1\)和\(w_2\),此时\(L=|w_1|+|w_2|\)对于梯度降低法,求解\(J_0\)的过程能够画出等值线,同时L1正则化的函数\(L\)也能够在\(w_1\)、\(w_2\)的二维平面上画出来。以下图:

- 上图中等值线是\(J_0\)的等值线,黑色方形是\(L\)函数的图形。在图中,当\(J_0\)等值线与\(L\)图形首次相交的地方就是最优解。上图中\(J_0\)与\(L\)在\(L\)的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是\((w_1,w_2)=(0,w_2)\)。能够直观想象,由于\(L\)函数有不少突出的角(二维状况下四个,多维状况下更多),\(J_0\)与这些角接触的机率会远大于与\(L\)其它部位接触的机率,而在这些角上,会有不少权值等于\(0\),这就是为何L1正则化能够产生稀疏模型,进而能够用于特征选择。
而正则化前面的系数\(\lambda\),能够控制\(L\)图形的大小。\(\lambda\)越小,\(L\)的图形越大(上图中的黑色方框);\(\lambda\) 越大,\(L\)的图形就越小,能够小到黑色方框只超出原点范围一点点,这是最优势的值\((w_1,w_2)=(0,w_2)\)中的\(w_2\)能够取到很小的值。spa
- 同理,又L2正则化损失函数:\(J = J_0 + \lambda \sum_w w^2\),一样可画出其在二维平面的图像,以下:

二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。所以\(J_0\)与\(L\)相交时使得\(w_1\)或\(w_2\)等于零的机率小了许多,这就是为何L2正则化不具备稀疏性的缘由。.net
4 L2正则化为何能防止过拟合
- 拟合过程当中一般都倾向于让权值尽量小,最后构造一个全部参数都比较小的模型。由于通常认为参数值小的模型比较简单,能适应不一样的数据集,也在必定程度上避免了过拟合现象。能够设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果形成很大的影响;但若是参数足够小,数据偏移得多一点也不会对结果形成什么影响,专业一点的说法是抗扰动能力强。
- 为何L2正则化能够得到值很小的参数?
- (1) 以线性回归中的梯度降低法为例。假设要求的参数为\(\theta\),\(h \theta (x)\)是咱们的假设函数,那么线性回归的代价函数以下:
\[ J_{\theta} = \frac{1}{2n}\sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)})^2 ........(6)\]
- (2)在梯度降低中\(\theta\)的迭代公式为:
\[\theta_j = \theta_j - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)}........(7)\]
- (3) 其中\(\alpha\)是learning rate。 上式是没有添加L2正则化项的迭代公式,若是在原始代价函数以后添加L2正则化,则迭代公式为:
\[\theta_j = \theta_j(1- \alpha \frac{\lambda}{n}) - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)} ........(8)\]
- 其中\(\lambda\)就是正则化参数。从上式能够看到,与未添加L2正则化的迭代公式相比,每一次迭代,\(\theta_j\)都要先乘以一个小于1的因子,从而使得\(\theta_j\)不断减少,所以总得来看,\(\theta\)是不断减少的。
最开始也提到L1正则化必定程度上也能够防止过拟合。以前作了解释,当L1的正则化系数很小时,获得的最优解会很小,能够达到和L2正则化相似的效果。
5 正则化项的参数选择
- L一、L2的参数\(\lambda\)如何选择好?
- 以L2正则化参数为例:从公式(8)能够看到,λ越大,\(\theta_j\)衰减得越快。另外一个理解能够参考L2求解图, \(\lambda\)越大,L2圆的半径越小,最后求得代价函数最值时各参数也会变得很小;固然也不是越大越好,太大容易引发欠拟合。
- 经验
从0开始,逐渐增大\(\lambda\)。在训练集上学习到参数,而后在测试集上验证偏差。反复进行这个过程,直到测试集上的偏差最小。通常的说,随着\(\lambda\)从0开始增大,测试集的误分类率应该是先减少后增大,交叉验证的目的,就是为了找到误分类率最小的那个位置。建议一开始将正则项系数λ设置为0,先肯定一个比较好的learning rate。而后固定该learning rate,给\(\lambda\)一个值(好比1.0),而后根据validation accuracy,将λ增大或者减少10倍,增减10倍是粗调节,当你肯定了\(\lambda\)的合适的数量级后,好比\(\lambda= 0.01\),再进一步地细调节,好比调节为0.02,0.03,0.009之类。
参考文献