过节福利,我们来深入理解下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\)可以取到很小的值。

  • 同理,又L2正则化损失函数:\(J = J_0 + \lambda \sum_w w^2\),同样可画出其在二维平面的图像,如下:
  • 二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此\(J_0\)与\(L\)相交时使得\(w_1\)或\(w_2\)等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。

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 正则化项的参数选择

  • L1、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之类。

参考文献

  • https://blog.csdn.net/jinping_shi/article/details/52433975
  • 《百面机器学习》

转载于:https://www.cnblogs.com/zingp/p/10375691.html

深入理解L1、L2正则化相关推荐

  1. 手推公式带你轻松理解L1/L2正则化

    文章目录 前言 L1/L2正则化原理 从数学的角度理解L1/L2正则化 从几何的角度理解L1/L2正则化 L1/L2正则化使用情形 前言 L1/L2正则化的目的是为了解决过拟合,因此我们先要明白什么是 ...

  2. L1,L2正则化分析

    1. 优化角度分析 1).L2正则化的优化角度分析 在限定的区域,找到使 最小的值. 图形表示为: 上图所示,红色实线是正则项区域的边界,蓝色实线是 的等高线,越靠里的等高圆, 越小,梯度的反方向是 ...

  3. L1 L2正则化和优化器的weight_decay参数

    L1正则和L2正则的效果有什么差异?为什么? 角度一:解空间形状 通常认为L1 正则化可以产生稀疏权值矩阵,即产生一个参数稀疏的模型. 而L2 正则化可以让模型的参数取绝对值较小的数. 考虑两种正则化 ...

  4. L1 L2 正则化区别

    文章一 文章二 机器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfit).即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,不具备良好的泛化能力.为了避免过拟合,最常用的 ...

  5. L0,L1,L2正则化浅析

    在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...

  6. L1,L2正则化理解-奥卡姆剃刀(Occam's razor)原理

    L0.L1与L2范数转自:zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的 ...

  7. 正则项的原理、梯度公式、L1正则化和L2正则化的区别、应用场景

    先对"L1正则化和L2正则化的区别.应用场景"给出结论,具体见后面的原理解释: L1正则化会产生更稀疏的解,因此基于L1正则化的学习方法相当于嵌入式的特征选择方法. L2正则化计算 ...

  8. L1正则化 L2正则化的Python 实现

    上一篇文档 https://blog.csdn.net/xingzhe2001/article/details/86316712 介绍了L1 L2正则化 本文介绍L1, L2 正则化的实现 L1正则化 ...

  9. l1、l2正则化在pytorch框架下的实现方式

    转载PyTorch训练模型添加L1/L2正则化的两种实现方式_hlld__的博客-CSDN博客_pytorch添加正则化 在使用PyTorch训练模型时,可使用三种方式添加L1/L2正则化:一种是添加 ...

  10. 权值衰减和L2正则化傻傻分不清楚?

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Divyanshu Mishra 编译:ronghuaiyang 导读 权 ...

最新文章

  1. [JSP][JSTL]页面调用函数--它${fn:}内置函数、是推断字符串是空的、更换车厢
  2. 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )
  3. Linux/UNIX网络编程之API
  4. 员工执行不力,换人还是换制度?
  5. 高性能mysql整理
  6. php循环读取mysql_PHP无限循环获取MySQL数据
  7. php json_encode 替代方法 (亦可显示中文)
  8. ArcGIS Python编程案例-电子资料链接
  9. 蓝桥杯 ADV-145 算法提高 铺地毯
  10. MongoDB 最大连接数 设置失效的异常分析
  11. 【一分钟论文】IJCAI2019 | Self-attentive Biaffine Dependency Parsing
  12. HDOJ 1166 HDU 1166 敌兵布阵 ACM 1166 IN HDU
  13. 自动按键 回车 变成_【按键大扫荡】驾驶员的“眼”
  14. qq永久封号 代码_避免在代码中永久保留这些内容
  15. windows10系统下以管理员身份进入CMD(命令提示符)的三种方法
  16. 学习笔记1——制作数据集
  17. [完]PHP 格式化显示时间 date() 函数
  18. 图像处理之_ARToolKit自定义Marker
  19. 什么是HTTP状态码 常见状态码集合
  20. Python : 程序提示SyntaxError: invalid syntax错误

热门文章

  1. Linux中的shell正则表达式详解
  2. oracle util_mail,Oracle UTL_MAIL邮件包程序使用实践
  3. 关于 OutOfMemoryError 的总结与解决方法
  4. LeetCode算法入门- Compare Version Numbers -day14
  5. 服务器主机启动不显示,服务器主机不启动怎么回事
  6. oracle安装 衍生进程已退出,linux安装oracle 出现问题
  7. guid主分区表损坏怎么办_抹盘提示进程失败,导致Win 10无法正常开机怎么办?...
  8. win执行mysql建库脚本_linux执行mysql脚本文件连接本地windows数据库
  9. c语言成绩管理系统开题报告,学生信息管理系统,开题报告(共篇).doc
  10. HTML+CSS+JS实现 ❤️感谢关注3D文字动画特效❤️