深度学习中的正则化——L1、L2 和 Dropout

news2024/11/15 16:42:30

正则化是一组技术,可以防止神经网络中的过度拟合,从而在面对来自问题域的全新数据时提高深度学习模型的准确性。
在本文中,我们将介绍最流行的正则化技术,称为 L1、L2 和 dropout。

文章目录

  • 1. 回顾:过拟合
  • 2.什么是正则化?
  • 3. L2正则化
  • 4. L1正则化
  • 5. 为什么 L1 和 L2 正则化有效?
    • 5. 1 Regularization 实现了什么?
  • 6. drop out
  • 7 . 总结

1. 回顾:过拟合

训练神经网络时最重要的方面之一是避免过度拟合。

然而,让我们快速回顾一下:过度拟合是指神经网络对训练数据进行很好的建模但在看到来自同一问题域的新数据时失败的现象。过度拟合是由神经网络在训练过程中拾取的训练数据中的噪声引起的,并将其作为数据的基本概念进行学习。

在这里插入图片描述
然而,这种习得的噪声对于每个训练集都是独一无二的。一旦模型看到来自同一问题域的新数据,但不包含这种噪声,神经网络的性能就会变得更差。

“为什么神经网络首先会接收到这种噪音?”

这样做的原因是这个网络的复杂度太高了。右侧图像显示了具有更高复杂性的神经网络的拟合。

在这里插入图片描述
图 1. 具有良好拟合和高方差的模型。资料来源:https 😕/www.researchgate.net/publication/332412613

具有更高复杂性的模型能够拾取和学习数据中仅由某些随机波动或错误引起的模式(噪声)。网络将能够对分布的每个数据样本进行一个一个的建模,而不会识别描述分布的真实函数。

使用真实函数生成的新任意样本与模型的拟合距离很远。我们还说该模型具有高方差。

另一方面,左侧的复杂度较低的网络通过不太努力地对每个数据模式单独建模来更好地建模分布。

在实践中,过度拟合会导致神经网络模型在训练期间表现非常好,但在面对全新数据的推理期间,表现会变得更差。

简而言之:不太复杂的神经网络不太容易过度拟合。为了防止过度拟合或高方差,我们必须使用称为正则化的东西。

2.什么是正则化?

简单来说:正则化是指一组不同的技术,可以降低神经网络模型在训练过程中的复杂度,从而防止过度拟合。

我们将在下面讨论三种非常流行且有效的正则化技术,称为L1、L2和 dropout。

3. L2正则化

L2 正则化是所有正则化技术中最常见的类型,通常也称为权重衰减或 Ride 回归。

这种正则化的数学推导,以及为什么这种方法可以减少过度拟合的数学解释,是相当长和复杂的。由于这是一篇非常实用的文章,我不想过多地关注数学。相反,我想传达这项技术背后的直觉,最重要的是如何实施它,以便您可以在深度学习项目中解决过度拟合问题。

在 L2 正则化期间,神经网络的损失函数由所谓的正则化项扩展,这里称为Ω。

在这里插入图片描述
正则化项Ω定义为权重矩阵的欧几里德范数(或 L2 范数),它是权重矩阵所有平方权重值的总和。正则化项由标量 alpha 除以二来加权,并添加到为当前任务选择的正则损失函数中。这导致损失函数的新表达式:

在这里插入图片描述
Alpha 有时称为正则化率,是我们引入神经网络的额外超参数。简单地说,alpha 决定了我们对模型进行正则化的程度。

在下一步中,我们可以计算新损失函数的梯度并将梯度放入权重的更新规则中:

在这里插入图片描述
更新规则的一些重新表述导致表达式非常像常规梯度下降期间权重的更新规则:

在这里插入图片描述
唯一的区别是,通过添加正则化项,我们从当前权重(等式中的第一项)中引入了额外的减法。

换句话说,与损失函数的梯度无关,每次执行更新时,我们都会使权重变小一点。

4. L1正则化

在 L1 正则化(也称为套索回归)的情况下,我们只需使用另一个正则化项Ω。此项是权重矩阵中权重参数的绝对值之和:
在这里插入图片描述
与前面的情况一样,我们将正则化项乘以 alpha,并将整个结果添加到损失函数中。

在这里插入图片描述
新损失函数的导数导致以下表达式,它是旧损失函数的梯度和权重值的符号乘以 alpha 的总和。

在这里插入图片描述

5. 为什么 L1 和 L2 正则化有效?

您现在可能会问自己的问题是:

“为什么所有这些都有助于减少过度拟合问题?”

让我们来解决这个问题。

请考虑 和 函数的绘图,其中表示在 L1 期间执行的操作和在 L2 正则化期间执行的操作。

在这里插入图片描述
L1 功能(红色),L2 功能(蓝色)

在 L2 正则化的情况下,我们的权重参数减小,但不一定变为零,因为曲线在零附近变得平坦。另一方面,在 L1 正则化过程中,权重总是被迫一直趋向于零。

我们也可以对此采取不同的、更数学化的观点。

对于 L2,您可以考虑求解一个方程,其中权重值的平方和等于或小于值s。s是正则化项α的每个可能值都存在的常数。对于两个权重值W1和W2,该等式如下所示:w1^2 + w2^2 ≤ s

另一方面,L1 正则化可以被认为是权重值的模之和小于或等于值s的方程。这看起来像以下表达式:|W1| + |W2| ≤ s

基本上,引入的 L1 和 L2 正则化方程是约束函数,我们可以将其可视化:

在这里插入图片描述
左图显示了 L1 正则化的约束函数(绿色区域),右图显示了 L2 正则化的约束函数。红色椭圆是梯度下降过程中使用的损失函数的轮廓。在等高线的中心有一组最优权重,损失函数具有全局最小值。

在 L1 和 L2 正则化的情况下,W1 和 W2 的估计由椭圆与绿色约束区域相交的第一个点给出。

由于 L2 正则化具有圆形约束区域,交点一般不会出现在轴上,因此 W1 和 W2 的估计值将完全不为零。

在 L1 的情况下,约束区域为带角的菱形。因此,损失函数的轮廓通常会在轴上与约束区域相交。然后发生这种情况,估计值之一(W1 或 W2)将为零。

在高维空间中,许多权重参数将同时为零。

5. 1 Regularization 实现了什么?

  • 执行 L2 正则化鼓励权重值趋向于零(但不完全为零)
  • 执行 L1 正则化鼓励权重值为零

直观地说,较小的权重会减少隐藏神经元的影响。在那种情况下,那些隐藏的神经元变得可以忽略不计,神经网络的整体复杂性得到降低。

如前所述:不太复杂的模型通常会避免数据中的建模噪声,因此不会出现过度拟合。

但你必须要小心。选择正则化项α 时。目标是在模型的低复杂性和准确性之间取得适当的平衡

  • 如果您的 alpha 值太高,您的模型会很简单,但您会面临数据欠拟合的风险。您的模型不会充分了解训练数据以做出有用的预测。
  • 如果您的 alpha 值太低,您的模型将更加复杂,并且您将面临过度拟合数据的风险。您的模型将对训练数据的特殊性了解太多,并且无法泛化到新数据。

6. drop out

除了 L2 和 L1 正则化之外,另一种著名且强大的正则化技术称为 dropout 正则化。dropout 正则化背后的过程非常简单。

简而言之,dropout 意味着在以某种概率P进行训练期间,神经网络的神经元在训练期间被关闭。让我们看一个直观的例子。

在这里插入图片描述
假设在左侧我们有一个没有 dropout 的前馈神经网络。使用 dropout 假设随机神经元在训练期间被关闭的概率P=0.5将导致右侧的神经网络。

在这种情况下,您可以观察到大约一半的神经元不活跃并且不被视为神经网络的一部分。正如您所观察到的,神经网络变得更简单了。

神经网络的更简单版本会降低复杂性,从而减少过度拟合。在每个前向传播和权重更新步骤中应用具有特定概率P的神经元去激活。

7 . 总结

  • 过度拟合发生在更复杂的神经网络模型中(很多层,很多神经元)
  • 通过使用 L1 和 L2 正则化以及 dropout 可以降低神经网络的复杂性
  • L1 正则化强制权重参数变为零
  • L2 正则化迫使权重参数趋向于零(但永远不会完全为零)
  • 更小的权重参数使一些神经元可以忽略 → 神经网络变得不那么复杂 → 更少的过度拟合
  • 在 dropout 期间,一些神经元以随机概率P停用→ 神经网络变得不那么复杂 → 不那么过度拟合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【并发编程】AQS ReentrantLock 底层实现原理

一、概述 synchronized上锁机制是通过对象头来实现的,通过锁升级的过程来完成加锁。(https://blog.csdn.net/zhangting19921121/article/details/106002751) 但是synchronized锁升级的过程犹如一个黑盒,我们无法掌控。因此&…

常见的损失函数

1. 损失函数、代价函数与目标函数 损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差。   代价函数(Cost Function):是定义在整个训练集上的,是所有样本误差的平均…

07_openstack之安全组与浮动IP

目录 一、环境准备 二、浮动IP 1、浮动IP介绍 2、创建和分配浮动IP 三、安全组 1、安全组介绍 2、创建安全组 3、给云主机绑定安全组 一、环境准备 部署openstack私有云环境:02_openstack私有云部署_桂安俊kylinOS的博客-CSDN博客 创建项目和用户&#xf…

Mac电脑系统降级至10.15 Catalina(2020末代intel)

目录起因前期准备降级系统步骤&#xff08;联网&#xff09;选定开机阶段需要按的快捷键进入简化的macOS激活锁页面macOS实用工具页面抹除磁盘安装降级系统Catalina关于从U盘重装系统相关参考博客起因 这部分碎碎念可以不看> < 20年7月买mac是为了找工作&#xff0c;找到…

[附源码]计算机毕业设计校园商铺Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计药品仓库及预警管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

libcef.dll文件丢失怎么办?丢失对电脑有什么影响?

提到电脑中的系统文件可能大家都是不太了解的&#xff0c;毕竟平时使用电脑的时候也接触不到那些复杂的文件&#xff0c;最多大家只会使用电脑上面的各种功能&#xff0c;不过虽然接触不到但是大家也要适当的了解一下&#xff0c;就比如libcef.dll文件丢失了就会造成电脑系统出…

Word2Vec详解

Word2Vec 基本思想&#xff1a;通过训练将每一个词映射成一个固定长度的向量&#xff0c;所有向量构成一个词向量空间&#xff0c;每一个向量&#xff08;单词)可以看作是向量空间中的一个点&#xff0c;意思越相近的单词距离越近。 如何把词转换为向量&#xff1f; 通常情况…

用Python做个学生管理系统,这不简简单单

前言 最近因为疫情&#xff0c;各大高校都开始放假了&#xff0c;要不就是回家上网课 我朋友的老师真有趣&#xff0c;硬是要我朋友做个学生管理系统打包成exe文件发给他&#xff0c;才能回家 这不就找上我来了&#xff0c;我写完就顺便发篇文章咯 准备工作 环境准备 Pyth…

Java基于springboot+vue的保健用品销售购物商城系统 前后端分离

随着人们生活水平的提高&#xff0c;人们对日常的保健工作也越来越重视&#xff0c;如何拥有一个更加健康的体魄成为当下很多人的一个追求&#xff0c;尤其是我国当下人口老龄化验证&#xff0c;老人因为身体机能的下降所以也要经常补充一些蛋白核矿物质。当下的年轻人也因为生…

【Java】ArrayList扩容规则

文章目录初始大小扩容规则总结初始大小 ArrayList的初始大小由你选定的构造函数决定&#xff0c;如果你使用无参构造函数&#xff0c;那么初始大小为0&#xff0c;是一个空数组。 而如果你选用有参数的构造函数&#xff0c;那么初始大小为你输入的大小 因此如果问你ArrayLis…

[附源码]计算机毕业设计基于springboot的4s店车辆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

货架穿梭车控制方案

穿梭车控制系统结构示意图 系统组成结构示意图穿梭车服务端模块 PLC设备输出的控制客户端4个电机动作的开关量信号 共8个开关量信号&#xff0c;PNP电路接口,接线端子Q3.0&#xff5e;Q3.7&#xff1b;每个继电器由两个开关量的值共同作用&#xff0c;其控制表如下&#xff1a…

黑马程序员课程SpringMVC听课笔记

目录 SpringMVC概述 入门案例 使用Servlet技术开发web程序流程 使用SpringMVC技术开发web程序流程 导入pom.xml文件 UserController SpringMvcConfig ServletContainersInitConfig POST请求中文乱码处理 代参数GET请求 请求参数与传递 普通参数&#xff1a;请求参数名…

python -- PyQt5(designer)中文详细教程(一)Qt的基本功能

在介绍PyQt5中文详细教程前&#xff0c;如有需要安装PyQt5的同学可以在此 PyQt5安装详细教程_M_Q_T的博客-CSDN博客参考安装&#xff0c;里面有详细的安装内容。 下一章内容python -- PyQt5&#xff08;designer&#xff09;中文详细教程(二)菜单和工具栏 ​​​​​​​http:…

技术人员创业的第一步分析

概述&#xff1a;看完了本文&#xff0c;基本上可以了解确认自己所掌握的技术是否适合创业&#xff0c;如果不适合&#xff0c;不如找个大公司长期停留&#xff0c;也挺好的&#xff0c;免得折腾&#xff01;————————————————————前几天和一个朋友聊天&…

资源管理的部分

估算资源的活动的资源目录概述需求&#xff1a;设计思路实现思路分析1.估算的资源的资源的分解结构&#xff1a;获取资源2.虚拟团队3.CPO模型4.团队的5.资源日历建设团队团队一般成长规律形成 指导型管理风格认可奖励培训指标管理团队关于授权情商&#xff0c;领导力等控制资源…

排障必用的4款工具,帮你缩减排障时间!-网络工程师

Zen Load Balancer Zen Load Balancer是一个基于 Debian 的发行版&#xff0c;主要用于实现 TCP 的负载均衡。如果你在工作中遇到需要服务器负载均衡的功能&#xff0c;但又没有预算的时候&#xff0c;这个工具就能帮到你了。 可通过定制的脚本来检查后端的运行状态&#xff0c…

【java】3-获取线程引用与线程的属性

1.获取线程的引用 在创建一个线程之后&#xff0c;我们很有必要去获取当前线程实例的引用&#xff0c;以便能够观察到线程的一些属性&#xff0c;或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread&#xff0c;我们便能拿到当前线程的引用 Thread.curr…

软件项目尾期,客户提新需求怎么办?

1、需求管理流程很关键 面对客户的需求要求&#xff0c;需求管理流程很关键。 在前期与用户签订合同时&#xff0c;可以增加一些相关条款&#xff0c;如限定用户提出需求变更的时间&#xff0c;规定何种情况的变更可以接受、拒绝接受或部分接受&#xff0c;还可以规定发生需求变…