深度学习探索-基础篇-正则化篇

2024-06-21 07:04

本文主要是介绍深度学习探索-基础篇-正则化篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、正则化介绍
    • 1.1 正则化的简介
    • 1.2 正则化的方法介绍
    • 1.3 正则化的用途
  • 二、正则化的详细介绍
    • 2.1 L1正则化
    • 2.2 L2正则化
      • 2.2.1 L2正则化的工作原理
      • 2.2.2 如何在训练中应用L2正则化
      • 2.2.3 L2正则化的效果
    • 2.3 Weight Decay
    • 2.4 Dropout

一、正则化介绍

1.1 正则化的简介

在深度学习领域中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现良好,但在未见过的数据上表现较差的情况,这可能是因为模型学习到了训练数据中的噪声或者细节,而无法泛化到新数据。

正则化的本质是通过修改学习算法,使其降低泛化误差而非训练误差。正则化是在损失函数的基础上加入一个正则项(或罚项),这个正则项通常是对模型参数的某种惩罚,例如L1范数或L2范数。 这样做的目的是在不改变模型复杂度的情况下,减小某些参数的值,从而减少模型对训练数据的过度拟合

1.2 正则化的方法介绍

  1. 权重衰减(Weight Decay):一种简单的正则化方法,通过在损失函数中加入模型权重的平方和作为惩罚项,以约束模型的学习能力。
  2. L1正则化:通过对权重进行L1范数惩罚,使得部分权重为零,从而实现模型稀疏化,有助于特征选择。
  3. L2正则化:通过对权重进行L2范数惩罚,限制权重的大小,防止权重过大导致过拟合。
  4. Dropout:在训练过程中随机地将一些神经元的输出设置为0,从而强制模型去学习多个独立的子模型,减少神经网络的复杂性,提高模型的泛化能力。

1.3 正则化的用途

  1. 防止过拟合:通过限制模型的复杂度,确保模型在训练数据上表现良好时,也能在新数据上保持良好的泛化能力。
  2. 提高模型的泛化能力:通过减少模型对训练数据的依赖,使模型能够更好地应对未知数据。
  3. 增强模型的鲁棒性:通过引入额外的约束或惩罚项,使模型在面对不同的输入数据时更加稳定和可靠。

二、正则化的详细介绍

2.1 L1正则化

在深度学习和更广泛的机器学习领域中,L1正则化是一种用于控制模型复杂度和防止过拟合的技术。过拟合是指模型在训练数据上表现得过于出色,以至于它开始捕捉数据中的噪声或偶然的细节,这会导致模型在未见过的数据上的性能下降。

L1正则化通过在模型的损失函数中添加一个额外的项来实现,这个项被称为正则化项。正则化项基于模型权重的L1范数,即所有权重绝对值的总和。具体来说,如果 w w w 代表模型的权重向量,那么L1正则化项可以表示为:

λ ∥ w ∥ 1 = λ ∑ i = 1 n ∣ w i ∣ \lambda \|w\|_1 = \lambda \sum_{i=1}^{n} |w_i| λw1=λi=1nwi

这里, λ \lambda λ 是正则化参数,控制正则化项对总体损失的影响程度, n n n 是权重的数量。较大的 λ \lambda λ 值意味着正则化项对最终损失的贡献更大,从而导致模型权重的值更小。

L1正则化的一个关键特性是它倾向于产生稀疏的权重向量,也就是说,许多权重会被精确地推至零。 这是因为L1范数的梯度在权重接近零时是恒定的,这有助于权重进一步向零移动。这种效果有利于特征选择,因为它可以自动消除不重要的特征,从而使模型更简单,更易于解释,并且减少计算成本。

下面是L1正则化如何影响梯度下降更新过程的简化示例。假设我们有一个损失函数 L L L ,并且我们正在使用梯度下降法来最小化它。在没有正则化的情况下,权重 w w w 的更新规则如下:

w : = w − α ∂ L ∂ w w := w - \alpha \frac{\partial L}{\partial w} w:=wαwL

其中 α \alpha α 是学习率。引入L1正则化后,更新规则变为:

w : = w − α ( ∂ L ∂ w + λ sign ( w ) ) w := w - \alpha \left( \frac{\partial L}{\partial w} + \lambda \text{sign}(w) \right) w:=wα(wL+λsign(w))

这里的 sign ( w ) \text{sign}(w) sign(w) 函数返回 w w w 的符号,即如果 w > 0 w > 0 w>0 ,则 sign ( w ) = 1 \text{sign}(w) = 1 sign(w)=1 ,如果 w < 0 w < 0 w<0 ,则 sign ( w ) = − 1 \text{sign}(w) = -1 sign(w)=1 ,如果 w = 0 w = 0 w=0 ,则 sign ( w ) \text{sign}(w) sign(w) 可以被定义为任何值,但通常定义为0。

关键:

Q1. 如何理解:L1正则化的一个关键特性是它倾向于产生稀疏的权重向量,也就是说,许多权重会被精确地推至零。

在没有正则化的情况下,模型可能分配非零权重给所有特征,即使某些特征实际上并不重要。然而,当应用L1正则化时,正则化项会惩罚大权重,尤其是那些对模型贡献较小的特征的权重。由于L1正则化基于权重的绝对值,它会在权重接近零时产生一个恒定的梯度,这意味着这些权重在每一步梯度下降中都会朝着零的方向移动。因此,不重要的特征权重逐渐减小,直至变为零。这也意味着L1正则化具备特征筛选的能力

2.2 L2正则化

在深度学习以及更广泛的机器学习领域中,L2正则化是一种常用的防止模型过拟合的技术。它的核心思想是在模型的损失函数中添加一个额外的项,这个项惩罚模型参数(权重)的大小,从而鼓励模型寻找较小的权重值,这样可以减少模型的复杂度,提高模型的泛化能力。

2.2.1 L2正则化的工作原理

L2正则化项基于模型权重的L2范数,也就是权重向量各个元素平方的和再开平方。在深度学习中,我们通常只计算平方和而不进行开方操作,因为开方不会改变优化方向,同时可以节省计算资源。L2正则化项可以表示为:

λ ∥ w ∥ 2 2 = λ ∑ i = 1 n w i 2 \lambda \|w\|^2_2 = \lambda \sum_{i=1}^{n} w_i^2 λw22=λi=1nwi2

其中 w w w 是权重向量, λ \lambda λ 是正则化参数,用来控制正则化项对总损失函数的影响程度。较大的 λ \lambda λ 值会使正则化项对总损失的贡献更大,从而导致模型权重的值更小。

2.2.2 如何在训练中应用L2正则化

在训练神经网络时,L2正则化项被加到损失函数上。如果 J ( w ) J(w) J(w) 是没有正则化项的损失函数,那么加上L2正则化后的损失函数 J r e g ( w ) J_{reg}(w) Jreg(w) 可以表示为:

J r e g ( w ) = J ( w ) + λ ∥ w ∥ 2 2 J_{reg}(w) = J(w) + \lambda \|w\|^2_2 Jreg(w)=J(w)+λw22

在梯度下降的更新步骤中,L2正则化会影响权重的更新规则。没有正则化时,权重的更新规则是:

w : = w − α ∂ J ∂ w w := w - \alpha \frac{\partial J}{\partial w} w:=wαwJ

其中 α \alpha α 是学习率。而在L2正则化下,权重更新规则变为:

w : = w − α ( ∂ J ∂ w + 2 λ w ) w := w - \alpha \left( \frac{\partial J}{\partial w} + 2\lambda w \right) w:=wα(wJ+2λw)

可以看到,L2正则化项在更新过程中起到了“权重衰减”的作用,它会使得权重在每次更新时都朝向零的方向稍微移动一点,但这并不像L1正则化那样会把权重精确地推至零。

2.2.3 L2正则化的效果

L2正则化的主要效果是平滑权重,它鼓励模型参数分布在一个较小的范围内,而不是让某些参数变得非常大。这有助于减少模型的波动性,使得模型对输入数据的变化更加稳健,从而降低过拟合的风险。此外,L2正则化有助于模型在参数空间中找到一个“平均”解决方案,这通常意味着更好的泛化性能

2.3 Weight Decay

Weight Decay本质上是一种实现L2正则化的方法,但是它是在权重更新步骤中直接应用的,而不是通过修改损失函数来实现。

2.4 Dropout

Dropout是深度学习中一种非常流行的正则化技术,由Geoffrey Hinton和他的团队在2012年提出。其主要目的是减少神经网络的过拟合问题,增强模型的泛化能力。在训练过程中,Dropout通过随机“丢弃”(即设置为0)网络中的一部分神经元,从而模拟训练多个不同的神经网络,这样可以防止神经元之间过于依赖彼此,增强网络的鲁棒性和泛化能力。

在训练阶段,Dropout以一个固定的概率p(通常称为dropout比率或丢弃概率)随机地将网络中的神经元的输出置为0,而存活下来的神经元的输出则被放大1/(1-p)倍,以保持前向传播的期望值不变。在测试阶段,所有神经元都活跃,但它们的权重会被乘以(1-p),这是因为在训练时每个神经元的输出都被放大了,所以在测试时需要相应地缩小。

同时,在dropout的基础上也衍生出了许多相关技术:

  • DropBlock: DropBlock是一种针对卷积神经网络的扩展,它不是随机丢弃单个神经元,而是随机地丢弃神经元的连续区域,这样可以强制网络学习更鲁棒的特征。
  • Spatial Dropout: 空间Dropout主要应用于卷积神经网络(CNN),它不是独立地丢弃每个神经元,而是按通道或特征图的方式整块地丢弃神经元,这样可以保持特征图之间的空间关系。

这篇关于深度学习探索-基础篇-正则化篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080528

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas