当前位置: 首页 > news >正文

常见的正则化方法以及L1,L2正则化的简单描述

深度学习中的正则化是通过在模型训练过程中引入某些技术来防止模型过拟合的一种策略。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据上表现不佳。正则化通过限制模型的复杂度或对模型参数施加约束,从而提高模型的泛化能力。

常见的正则化技术包括:

  1. L1正则化(Lasso)L2正则化(Ridge)

    • L1正则化:通过对损失函数中添加参数的绝对值来抑制模型的某些权重,从而使某些权重归零。这种方法有助于特征选择。
    • L2正则化:通过对损失函数中添加参数的平方和来抑制过大的权重,从而使模型更平滑。
  2. Dropout: Dropout是一种在训练期间随机“丢弃”一部分神经元,使其不参与计算的技术。通过这种方式,网络避免了过度依赖某些神经元,从而增强了模型的泛化能力。

  3. 数据增强: 数据增强通过对原始训练数据进行随机变换(如旋转、裁剪、缩放等)来扩充训练集的多样性,减少模型对某些特定数据的依赖。

  4. 早停法(Early Stopping): 早停法是在训练过程中监测验证集的性能,当验证误差开始增加时停止训练。这避免了模型继续拟合训练集中的噪声或细节,防止过拟合。

  5. Batch Normalization: 通过对每一批输入的数据进行归一化,Batch Normalization能使得模型训练更加稳定,并有助于防止过拟合。

通过这些正则化方法,可以有效地提升模型的泛化能

L1正则化(Lasso)和L2正则化(Ridge)是深度学习和机器学习中常用的正则化技术,主要用于防止模型过拟合。它们通过在损失函数中添加惩罚项,对模型参数施加一定的约束,减少模型复杂度。以下是它们的详细介绍:

1. L1正则化(Lasso)

L1正则化通过在损失函数中添加权重系数的绝对值和来实现正则化,即在损失函数中加上如下项:

  • 作用:L1正则化倾向于将某些权重系数压缩为零,从而实现特征选择。通过这种方式,模型可以简化为只使用重要的特征,而不依赖无关的或多余的特征。

  • 优点:L1正则化适合处理高维数据集,因为它可以通过将不重要的特征权重设为零,进行自动特征选择。

  • 应用场景:在高维数据集或特征较多的情况下,L1正则化非常有用,因为它能够使得模型更具解释性,并降低计算复杂度。

2. L2正则化(Ridge)

L2正则化通过在损失函数中添加权重系数的平方和来实现正则化,即在损失函数中加上如下项:

  • 作用:L2正则化不会将权重系数压缩为零,但会均匀地缩小所有权重的大小。它通过限制权重的幅度,防止模型对某些特定特征的过度依赖,从而减少过拟合的风险。

  • 优点:L2正则化适合那些特征较多且特征之间存在相关性的情况,它能确保所有特征都对模型的预测有一定的贡献,并使模型更加平滑。

  • 应用场景:L2正则化更适合用于特征之间存在多重共线性的问题。因为它不会完全忽略特征,而是对权重进行均匀的缩放,从而使模型更加稳健。

L1和L2的主要区别

  • 权重处理

    • L1正则化更倾向于产生稀疏模型,许多权重被压缩为零,进行特征选择。
    • L2正则化则缩小权重的数值,但通常不会使它们完全为零。
  • 模型简化

    • L1正则化可以自动简化模型,保留对结果最有用的特征。
    • L2正则化则通过平滑权重来防止模型过拟合,而不会丢弃特征。
  • 公式差异

    • L1正则化的惩罚项是权重绝对值的和。
    • L2正则化的惩罚项是权重平方的和。

在实际应用中,可以根据数据集的特征和问题类型来选择使用L1或L2正则化,有时也会结合两者(Elastic Net)以兼具稀疏性和稳定性。

力,使其在新数据上的表现更加稳健。

举个例子大家就明白了

假设我们在做线性回归,模型的目标是预测房屋价格。输入特征是房屋的面积(平方英尺)和房间数量,输出是房价。模型的基本形式如下:

其中:

  • y^\hat{y}y^​ 是预测的房价
  • x1x_1x1​ 是房屋的面积
  • x2x_2x2​ 是房间数量
  • w1w_1w1​ 和 w2w_2w2​ 是模型的参数(权重)
  • bbb 是偏置(截距)

我们希望通过最小化预测值 y^\hat{y}y^​ 和真实房价之间的误差来找到最优的 w1w2​。损失函数一般是误差的平方和,称为均方误差(MSE):

引入正则化:

如果模型的权重太大,可能会导致过拟合。为了避免过拟合,我们可以在损失函数中加入正则化项,即对 w1w_1w1​ 和 w2w_2w2​ 的大小进行约束。

1. L1 正则化(Lasso)

L1 正则化的目标是将一些不重要的特征权重压缩到零,这样模型会变得更简单。L1 正则化的损失函数如下:

  • 理解:L1 正则化会对每个权重的绝对值进行惩罚,假如 w1 或 w2太大,模型会通过增大损失值的方式“惩罚”它们,逼迫权重缩小甚至压缩为 0。

2. L2 正则化(Ridge)

L2 正则化通过将权重的平方和添加到损失函数中来抑制大权重。L2 正则化的损失函数如下:

  • 理解:L2 正则化则会对权重的平方进行惩罚,虽然不会将权重压缩为 0,但会让它们变得更小、更平滑。模型会倾向于分散权重,使它们不会太大。

计算示例:

假设我们有以下简单的数据:

面积 (平方英尺) x1x_1x1​房间数量 x2x_2x2​实际房价 yyy
10003300000
12004350000
15005400000

假设我们有一个初始模型 w1=200w_1 = 200w1​=200、w2=10000w_2 = 10000w2​=10000,现在计算 L1 和 L2 正则化对模型的影响。

1. 没有正则化(普通线性回归):

总结:

  • L1 正则化通过让一些权重趋向于零,从而减少不必要的特征,简化模型。
  • L2 正则化通过让权重整体变小,避免某些权重过大,从而减少过拟合的风险。

在实际应用中,L1 更适合做特征选择,而 L2 更适合处理权重过大的问题。有时我们可以结合两者的优势,使用 Elastic Net 正则化,兼具稀疏性和权重缩小的效果。

L1 正则化对每个权重 www 的更新,在原有的梯度更新基础上,施加了一个与权重符号相关的减小量。简单来说,L1 正则化的惩罚项是权重 www 的绝对值,因此对不同符号的权重,影响也不同。具体来说:

在没有正则化的情况下,权重更新的规则是根据梯度来调整,即:

而当加入 L1 正则化时,权重的更新规则会增加一个正则化项:

这意味着,对于正的权重,L1 正则化会让权重减少(施加一个负的额外项),对于负的权重,L1 正则化会让权重增加(施加一个正的额外项),从而将权重的数值逐渐压缩向 0。

总结来说,L1 正则化通过在每次更新时,根据权重的符号施加一个固定大小的惩罚,这使得较小的权重更容易被压缩到 0,从而产生稀疏的特征选择效果。

L2 正则化的更新机制

L2 正则化会将损失函数中加入权重的平方项作为惩罚项。对于每个权重 www,L2 正则化的更新规则是:

可以看到,L2 正则化对每个权重的更新,施加了一个额外的 λ⋅w\lambda \cdot wλ⋅w 项,这个额外项是根据权重的大小和方向(正负号)调整的。具体来说:

因此,L2 正则化是根据权重的大小比例减少权重值的,而不是像 L1 正则化那样施加一个固定的惩罚。L2 正则化使所有的权重都被缩小,但不会把某些权重压缩到 0,这意味着模型不会变得稀疏。

总结 L1 和 L2 的区别

  • L1 正则化 会施加一个与权重符号相关的固定减小量,逐步将较小的权重压缩到 0,产生稀疏效果。
  • L2 正则化 施加的是与权重大小成比例的减小量,会让权重整体减小,但不会让权重变为 0,更多地是让权重的值变小,起到平滑模型的作用。

因此,虽然 L2 正则化也会对每个权重施加惩罚,但它不会产生稀疏性,而是通过减小权重的幅度来控制模型复杂度。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ELK学习笔记(三)——使用Filebeat8.15.0收集日志
  • 【大模型理论篇】大模型周边自然语言处理技术(NLP)原理分析及数学推导(Word2Vec、TextCNN、FastText)
  • 常见的pytest二次开发功能
  • 垃圾回收概述及算法
  • 机器学习之 PCA降维
  • 外排序之文件归并排序实现
  • 解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧
  • Maven项目父模块POM中不应包含实际依赖(dependency)
  • 【Clickhouse】Clickhouse数据库简介
  • 如何选择web服务
  • Spring Boot Admin集成与自定义监控告警
  • HOT100(九)多维动态规划
  • EmguCV学习笔记 VB.Net 11.3 DNN其它
  • Ubuntu上安装libdc1394-22-dev出现无法定位安装包的解决办法
  • ④JdbcTemplate与声明式事务
  • 【个人向】《HTTP图解》阅后小结
  • AngularJS指令开发(1)——参数详解
  • echarts的各种常用效果展示
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript的使用你知道几种?(上)
  • java概述
  • js如何打印object对象
  • LeetCode29.两数相除 JavaScript
  • QQ浏览器x5内核的兼容性问题
  • SQLServer之创建数据库快照
  • vagrant 添加本地 box 安装 laravel homestead
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 深度解析利用ES6进行Promise封装总结
  • 深度学习入门:10门免费线上课程推荐
  • 什么软件可以剪辑音乐?
  • 数组的操作
  • 通过npm或yarn自动生成vue组件
  • 微信公众号开发小记——5.python微信红包
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 优化 Vue 项目编译文件大小
  • 最简单的无缝轮播
  • 第二十章:异步和文件I/O.(二十三)
  • ​渐进式Web应用PWA的未来
  • #define、const、typedef的差别
  • $.ajax()方法详解
  • (C#)一个最简单的链表类
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (zhuan) 一些RL的文献(及笔记)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET 5种线程安全集合
  • .NET Core 版本不支持的问题
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net MVC + EF搭建学生管理系统
  • .net wcf memory gates checking failed
  • .NET 直连SAP HANA数据库