为什么L1正则化导致稀疏解「建议收藏」

一、从数据先验的角度首先你要知道L1范式和L2范式是怎么来的,然后是为什么要把L1或者L2正则项加到代价函数中去.L1,L2范式来自于对数据的先验知识.如果你认为,你现有的数据来自于高斯分布,那么就应该在代价函数中加入数据先验P(x),一般由于推导和计算方便会加入对数似然,也就是log(P(x)),然后再去优化,这样最终的结果是,由于你的模型参数考虑了数据先验,模型效果当然就更好.哦对了,如果你…

大家好,又见面了,我是你们的朋友全栈君。

一、从数据先验的角度
首先你要知道L1范式和L2范式是怎么来的,然后是为什么要把L1或者L2正则项加到代价函数中去.L1,L2范式来自于对数据的先验知识.如果你认为,你现有的数据来自于高斯分布,那么就应该在代价函数中加入数据先验P(x),一般由于推导和计算方便会加入对数似然,也就是log(P(x)),然后再去优化,这样最终的结果是,由于你的模型参数考虑了数据先验,模型效果当然就更好.哦对了,如果你去看看高斯分布的概率密度函数P(x),你会发现取对数后的log(P(x))就剩下一个平方项了,这就是L2范式的由来–高斯先验.同样,如果你认为你的数据是稀疏的,不妨就认为它来自某种laplace分布.不知你是否见过laplace分布的概率密度函数,我贴出一张维基上的图
在这里插入图片描述

作者:amnesia
链接:https://www.zhihu.com/question/37096933/answer/70668476
来源:知乎

二、从数据计算的角度

但为什么L1正则会产生稀疏解呢?这里利用公式进行解释。
假设只有一个参数为w,损失函数为L(w),分别加上L1正则项和L2正则项后有:
在这里插入图片描述
假设L(w)在0处的倒数为d0,即
在这里插入图片描述

则可以推导使用L1正则和L2正则时的导数。
引入L2正则项,在0处的导数
在这里插入图片描述
引入L1正则项,在0处的导数
在这里插入图片描述

可见,引入L2正则时,代价函数在0处的导数仍是d0,无变化。而引入L1正则后,代价函数在0处的导数有一个突变。从d0+λ到d0−λ,若d0+λ和d0−λ异号,则在0处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即w=0处。
这里只解释了有一个参数的情况,如果有更多的参数,也是类似的。因此,用L1正则更容易产生稀疏解。

来自https://blog.csdn.net/f156207495/article/details/82794151?utm_source=copy

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128768.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月12日 下午6:20
下一篇 2022年4月12日 下午6:40


相关推荐

  • OpenClaw +飞书保姆级部署教程,养小龙虾的最佳方式!

    OpenClaw +飞书保姆级部署教程,养小龙虾的最佳方式!

    2026年3月13日
    2
  • 第三周的任务

    第三周的任务08 06 08 101 熟悉项目的详细流程 具体到 dao 操作 sql 2 对 bugclose7374 进行修改 完成的任务 1 项目的客户端的各个模块已经基本熟悉 1 1 具体 对公司项目的代码仔细阅读并且已经根据代码画出流程图 和代码具体执行的流程图 2 bugclose 公司比较新的 bug 已经解决了 解决的

    2026年3月18日
    3
  • linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用

    linux查看端口是否被占用的命令是,Linux如何查看端口是否被占用Linux如何查看端口是否被占用Linux如何查看端口是否被占用?下面为大家推荐两种检测方法,对Linux系统不熟悉的小伙伴可以看看。1、使用lsof命令lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:lsof-i:port_…

    2025年7月15日
    4
  • OpenClaw安装配置全攻略(安装使用全记录)

    OpenClaw安装配置全攻略(安装使用全记录)

    2026年3月13日
    3
  • 怎么关闭135 445端口_高危端口关闭方法

    怎么关闭135 445端口_高危端口关闭方法关闭135,139,445高危端口方法方法一:防火墙关闭高危端口其一:拒绝所有IP访问135、139、445端口1、打开“控制面板”→打开“系统和安全”→打开“系统和安全”→打开“windows防火墙”2、点击“高级设置”3、选中“入站规则”→鼠标右点击“新建规则”4、选择“端口”–>下一步5、在红色框中特定本地端口输入“135,139,445” –下一步…

    2022年10月17日
    3
  • git命令删除分支_git删除一个分支

    git命令删除分支_git删除一个分支git命令删除分支应用场景:有时我们已经在gitlab或者gitee上面已经删除分支,但是本地编辑器gitbranch的时候依然有该分支,我们想删除;亦或者想在本地直接删除远程的分支假设,你想删除本地testone分支gitbranch查看本地分支,比如:testonetesttwo两个分支gitcheckouttesttwo切换到testtwo分支,因为你想删除testone执行gitbranch-dtestone即可另外:

    2022年8月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号