学习笔记-L1与L2正则化

2020-03-02  本文已影响0人  Pluto_wl

当模型过拟合时,我们常常使用正则化去减轻模型的复杂度。它主要在损失函数后添加正则项去约束模型。

L1与L2正则化

L1 norm :loss(y_i, \hat y_i|w)= loss(y_i,\hat y_i|w)+\lambda \left \| w \right \|_1\left \| w \right \|_1表示参数wL1范式。

L2 norm :loss(y_i, \hat y_i|w)= loss(y_i,\hat y_i|w)+\lambda \left \| w \right \|_{2}^{2}, \left \| w \right \|_{2}表示参数wL2范式。

L1使参数为0的原因
假设参数矩阵是二维的,即(w_1,w_2), L1正则化相当于定义了一个矩形的解空间,L2正则化定义了圆形的解空间。可以从图中看到,L1正则化解空间棱角分明,更容易在在坐标轴处与目标函数的等高线相切。可以想象在高维的参数矩阵中,棱角会密密麻麻,在棱角处总会产生一个或多个w=0。所以含有L1正则化项的目标函数的最优解中,有很多参数的值都为0,即得到稀疏模型。

来自于参考文献3

L2使参数变小的原因
假设损失函数为均方差损失函数,f(x)表示模型,\theta表示模型参数,为计算简单,只使用样本i进行损失函数的计算。
J(\theta)=\frac{1}{2}(f(x)_i-y_i)^2
使用梯度下降法对参数更新

加入L2正则后
J(\theta)=\frac{1}{2}(f(x_i)-y_i)^2+ \frac{1}{2} \lambda \left \| \theta \right \|_2^2
使用梯度下降法对参数更新

比较两者的参数更新函数,可以看到加入L2正则化后,等号右边的\theta多乘了一项小于0的数,所以\theta会越来越小

L1和L2参数的选择

  1. 根据经验选择
  2. 使用交叉验证的方式选择

L1正则化的问题

岭回归与Lasso回归

岭回归
Ridge回归:又叫岭回归。在线性回归的损失函数上加L2正则化,其公式入下:
J(\theta) = \frac{1}{2}(f(X) -Y)^2 + \frac{1}{2}\lambda||\theta||_2^2

使用梯度下降法求参数\theta时,参数利用下方公式进行更新,lr为学习率
\mathbf\theta= \mathbf\theta -\lambda (f(X)^T(f(X) - Y) + lr *\theta)
岭回归的代价函数仍然是一个凸函数,因此可以利用梯度等于0的方式求得全局最优解(正规方程)。换句话说,使用最小二乘法更新参数时,可以直接求出\theta的解析解(解的具体函数形式,从解的表达式中就可以算出任何对应值)
\theta = (f(X)^Tf(X) + \lambda E)^{-1}f(X)^TY

上述正规方程与一般线性回归的正规方程相比,多了一项λE,其中E表示单位矩阵。假如X^TX是一个奇异矩阵(不满秩),添加这一项后可以保证该项可逆。由于单位矩阵的形状是对角线上为1其他地方都为0,看起来像一条山岭,因此而得名。

Lasso回归
Lasso回归:在线性回归的损失函数上加L1正则化,公式如下:
J(\mathbf\theta) = \frac{1}{2}(X-Y)^2 + \alpha||\theta||_1
由于L1正则化可以使参数矩阵稀疏,达到特征选择的效果。但同时也带来了Lasso损失函数不是连续可导的,原因是当我们对损失函数求导时,\frac{\mathrm{d(J(\theta))} }{\mathrm{d} (||\theta||)}是个分段函数,需要考虑当\theta >0,\theta<0\theta=0这三种情况。通常使用坐标下降法来对求得Lasso的参数。

Lasso 求导 b
c
我们得到当的时候,w的参数就更新为0

elastic net

根据上文我们知道l1正则化具有特征选择的功能,但是当多个特征具有很强的相关性时,它是否能选择出最好的特征呢?这显示是不能的。
举例说明一下:假设特征可以分为两组t1(x1,x3,x5),t2(x2,x4)。当选取特征x1与x2时,模型效果最好,但是L1正则是随机选则的特征,有可能是x3,x4,也有可能是其他。
解决这个问题的方法是同时使用L1正则和L2正则。

  1. grouped selection
  2. 结合了L1和L2正则化的优点,从下图中可以看到,Elastic Net的解空间综合了L1和L2的特点


    d

参考文献

1.《统计学习方法》第二版 李航

  1. https://blog.csdn.net/vincent2610/article/details/53408088
  2. https://cloud.tencent.com/developer/article/1456966
  3. https://www.cnblogs.com/pinard/p/6018889.html (强烈推荐)
  4. https://www.cnblogs.com/Belter/p/8536939.html (推荐)

心声:刚开始写博客真的好难啊!感觉自己写的既不清楚了又没条理。再接再厉!

上一篇下一篇

猜你喜欢

热点阅读