L1与L2的区别

目录

L1与L2为何能解决过拟合的问题:

Lasso 回归和岭回归:

L1与L2的区别:


L1与L2为何能解决过拟合的问题:

L1与L2都是正则化,它们的公式如下:

  • L1 范数
    当 p=1 时,是 L1 范数,其表示某个向量中所有元素绝对值的和。
  • L2 范数
    当 p=2 时,是 L2 范数, 表示某个向量中所有元素平方和再开根, 也就是欧几里得距离公式。

它们都可以解决过拟合的问题,具体是为什么可以解决呢?

原因有两点:

  1.  来自知乎上一种比较直观和简单的理解, 模型过于复杂是因为模型尝试去兼顾各个测试数据点, 导致模型函数如下图,处于一种动荡的状态, 每个点的到时在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。


而加入正则能抑制系数过大的问题。如下公式, 是岭回归的计算公式。

如果发生过拟合, 参数 \omega 一般是比较大的值, 加入惩罚项后, 只要控制 λ 的大小,当 λ 很大时,参数就会变得很小,即达到了约束数量庞大的特征的目的。

   2、从贝叶斯的角度来分析, 正则化是为模型参数估计增加一个先验知识,先验知识会引导损失函数最小值过程朝着约束方向迭代。 L1 正则是拉普拉斯先验,L2 是高斯先验。整个最优化问题可以看做是一个最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计。

Lasso 回归和岭回归:

线性回归是用mse函数作为损失函数,公式如下:

Lasso 的全称为 least absolute shrinkage and selection operator,又译最小绝对值收敛和选择算子、套索算法。

Lasso 回归对MSE加入 L1 正则化,其 cost function 如下:

岭回归对MSE加入 L2 正则化,其 cost function 如下:

Lasso 回归和岭回归的同和异:

  • 相同:
    • 都可以用来解决标准线性回归的过拟合问题。
  • 不同:
    • lasso 回归可以用来做 feature selection,而 岭回归 不行。或者说,lasso 更容易使得权重变为 0,而 岭回归 更容易使得权重接近 0,也就是说,最终的模型会包含所有的预测因子,因此在模型可解释性方面,L1要比L2更具有可解释性。
    • 从贝叶斯角度看,lasso(L1 正则)等价于参数 w 的先验概率分布满足拉普拉斯分布,而 岭回归(L2 正则)等价于参数 w 的先验概率分布满足高斯分布。具体参考博客 从贝叶斯角度深入理解正则化 -- Zxdon 。

 

L1与L2的区别:

L1正则化比L2正则化更易于得到稀疏解

左侧的图表示的是了L1,右侧表示的L2,等高线和方形区域的切点更有可能在坐标轴上,而等高线和圆形区域的切点在坐标轴上的概率很小。这就是为什么 lasso(L1 正则化)更容易使得部分权重取 0,使权重变稀疏;而岭回归(L2 正则化)只能使权重接近 0,很少等于 0。

L1:服从的是拉普拉斯分布,图如下所示:

它的优良性质是能产生稀疏性,导致 W 中许多项变成零。 稀疏的解除了计算量上的好处之外,更重要的是更具有 “可解释性”。

L2:服从的是正态分布。L2可以使得模型的解偏向于范数较小的 W,通过限制 W 范数的大小实现了对模型空间的限制,从而在一定程度上避免了过拟合(因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』) 。不过 ridge regression 并不具有产生稀疏解的能力,得到的系数仍然需要数据中的所有特征才能计算预测结果,从计算量上来说并没有得到改观。

参考链接:https://www.cnblogs.com/wuliytTaotao/p/10837533.html

https://www.cnblogs.com/USTC-ZCC/p/10123610.html

 

### FLASH上锁时L1和L2区别 在讨论FLASH上锁时L1和L2区别之前,需要明确L1和L2缓存的基本概念以及它们在系统中的角色。L1缓存通常位于CPU内部,具有较小的容量但极高的访问速度,而L2缓存则具有更大的容量,但访问速度稍慢[^3]。 #### 1. 缓存失效数据加载 当FLASH被锁定时,意味着对存储器的直接写入或修改操作受到限制。在这种情况下,如果需要从FLASH中读取数据,系统会依赖缓存机制来优化性能。具体来说: - **L1缓存**:由于其快速响应特性,L1缓存会在首次请求数据时尝试提供所需信息。如果未命中(即数据不在L1缓存中),系统将触发一个加锁机制,确保只有一个线程负责从FLASH或数据库中加载数据,并将其更新到L1和L2缓存中[^1]。 - **L2缓存**:在L1缓存未命中的情况下,其他线程可以继续从L2缓存中获取数据,从而避免多个线程同时访问底层存储设备导致性能下降。 #### 2. 缓存穿透问题 在FLASH上锁的情况下,可能会出现缓存穿透问题,即恶意攻击或频繁访问不存在的数据可能导致缓存层被击穿。为了解决这一问题: - L1和L2缓存采用二级缓存策略,确保即使L1缓存未能命中,L2缓存仍能提供一定程度的保护,防止两个Redis实例同时被击穿[^1]。 #### 3. OneNANDFLASH的关系 OneNAND作为一种特殊的存储技术,通过集成SRAM缓存来模拟本地执行代码(XIP)的功能。尽管SRAM提供了极高的读写速度,但由于其晶体管利用效率低,无法实现大容量存储。因此,在FLASH上锁时,OneNAND的SRAM缓存可能类似于L1缓存的角色,用于临时存储关键数据,而主存储区域则扮演L2缓存的角色[^2]。 #### 4. 验证程序是否烧录到FLASH 为了验证程序是否成功烧录到FLASH中,可以通过设置特定的GPIO引脚状态进入Boot模式,并检查程序是否正常执行。这种验证方法缓存机制无关,但在实际应用中可以结合使用以确保系统的稳定性和可靠性[^4]。 ```python # 示例代码:验证FLASH烧录状态 def verify_flash_programmed(gpio_pins): # 设置GPIO引脚状态 for pin in gpio_pins: set_gpio(pin, HIGH) # 检查程序是否运行 if is_program_running(): return True return False gpio_pins = [84, 85, 86, 87] result = verify_flash_programmed(gpio_pins) print("Flash verification result:", result) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值