【AI知识点】正则化(Regularization)

正则化(Regularization) 是机器学习和统计学中的一种技术,用于防止模型过拟合。在训练模型时,模型可能会过度拟合训练数据,导致在新数据上的表现较差。正则化通过在优化过程中引入额外的约束或惩罚项,使模型更简单、泛化能力更强,从而避免过拟合。

1. 过拟合问题的背景

过拟合(Overfitting) 发生在模型在训练数据上表现得非常好,但在测试数据上表现不佳时。原因是模型学到了数据中的噪声或随机波动,而不是数据的基本模式。这通常发生在模型过于复杂时,比如当模型的参数过多,或者模型训练的迭代次数过多。

过拟合的表现通常是:

  • 训练集误差很小,模型在训练集上表现很好。
  • 测试集误差较大,模型在新数据上表现较差。

为了解决这个问题,我们可以通过正则化来限制模型的复杂度,使其更好地泛化到新数据上。


2. 正则化的基本原理

正则化通过在损失函数中引入一个额外的惩罚项,来限制模型的复杂度,防止模型过度拟合训练数据。正则化会迫使模型的参数变小(接近于零),从而使得模型更加平滑,避免复杂的参数设置。

目标函数的通用形式为:

目标函数 = 原始损失函数 + λ ⋅ 正则化项 \text{目标函数} = \text{原始损失函数} + \lambda \cdot \text{正则化项} 目标函数=原始损失函数+λ正则化项

其中:

  • 原始损失函数:例如,线性回归中的均方误差 (MSE)。
  • 正则化项:通常是模型参数的某种形式的范数(如 L1 或 L2 范数)。
  • λ \lambda λ:正则化强度的超参数,控制正则化项的影响大小。当 λ = 0 \lambda = 0 λ=0 时,没有正则化;当 λ \lambda λ 较大时,正则化项的影响变强。

3. 常见的正则化方法

a. L2 正则化(Ridge 回归,岭回归)

L2 正则化 是一种常见的正则化技术,它在损失函数中加入参数的平方和作为惩罚项。具体来说,L2 正则化会通过惩罚模型参数的平方和来限制模型的参数值。

对于线性回归问题,L2 正则化的目标函数为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 + \lambda \sum_{j=1}^{n} \theta_j^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2+λj=1nθj2

其中:

  • h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是模型的预测值。
  • y ( i ) y^{(i)} y(i) 是实际值。
  • θ j \theta_j θj 是模型的参数。
  • λ \lambda λ 是正则化系数,控制正则化项的大小。

L2 正则化的效果是将参数尽可能缩小,但不会将参数完全置零。因此,它适合处理高维度特征空间的数据,通过缩小参数值来避免模型过于复杂。

b. L1 正则化(Lasso 回归)

L1 正则化 是另一种正则化方法,它在损失函数中加入参数的绝对值和作为惩罚项。具体来说,L1 正则化通过惩罚模型参数的绝对值和来使某些不重要的参数值变为零。

L1 正则化的目标函数为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n ∣ θ j ∣ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 + \lambda \sum_{j=1}^{n} |\theta_j| J(θ)=2m1i=1m(hθ(x(i))y(i))2+λj=1nθj

L1 正则化有一个非常有用的性质:它可以将某些参数压缩为 0,从而实现特征选择。因此,L1 正则化不仅能够控制模型的复杂度,还能使得模型仅依赖于最重要的特征。

c. Elastic Net 正则化

Elastic Net 正则化 是 L1 和 L2 正则化的结合,它的目标是结合 L1 正则化和 L2 正则化的优点。Elastic Net 通过调整两个超参数来平衡 L1 和 L2 正则化的影响。

Elastic Net 的目标函数为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 1 ∑ j = 1 n ∣ θ j ∣ + λ 2 ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 + \lambda_1 \sum_{j=1}^{n} |\theta_j| + \lambda_2 \sum_{j=1}^{n} \theta_j^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2+λ1j=1nθj+λ2j=1nθj2

Elastic Net 在高维特征空间中表现良好,尤其适合处理高度相关的特征,因为它结合了 L1 正则化的稀疏性和 L2 正则化的稳定性。


4. 正则化的作用

a. 防止过拟合

正则化的主要作用是防止过拟合。模型在训练数据上表现过好,可能是因为学习了数据中的噪声。通过惩罚大参数值,正则化可以强迫模型更加平滑,避免过拟合。

b. 提高泛化能力

正则化使得模型更简单,因此提高了模型对新数据的泛化能力。通过限制模型的复杂度,正则化帮助模型更好地学习数据的潜在模式,而不是噪声或偶然性。

c. 特征选择

L1 正则化具有特征选择的能力。由于它可以将某些参数缩减为 0,因此可以帮助自动选择最有用的特征,并忽略不重要的特征。这在高维数据中特别有用。


5. 正则化超参数的选择

正则化强度由超参数 λ \lambda λ 控制。如何选择合适的 λ \lambda λ 值对模型性能有重要影响。通常,我们通过交叉验证(Cross-Validation) 来选择最优的正则化参数值:

  • 较大的 λ \lambda λ 会使正则化的惩罚更强,导致模型参数趋向于零,模型更简单,但可能出现欠拟合
  • 较小的 λ \lambda λ 会减弱正则化的效果,导致模型更复杂,可能会出现过拟合

交叉验证可以帮助我们在模型的偏差-方差权衡(Bias-Variance Tradeoff) 之间找到最佳平衡。


6. 正则化在深度学习中的应用

在深度学习中,正则化同样扮演重要角色,尤其是在训练深度神经网络时,模型的参数往往非常多,容易出现过拟合。常用的正则化技术包括:

a. 权重衰减(Weight Decay)

权重衰减 实际上与 L2 正则化是等价的,都是通过添加参数的平方和作为正则化项来约束模型。二者常常被互换使用。

  • 权重衰减 更常用在优化器的实现中,比如 Adam、SGD 等优化算法中会引入权重衰减参数来直接影响梯度更新。在这些优化器的梯度更新规则中,权重衰减通过对模型参数进行小幅度的调整,使得每次更新时参数都会缩小一部分。
    • 例如,带有权重衰减的 SGD 的更新公式如下:
      θ t + 1 = θ t − η ( ∇ θ t L ( θ t ) + λ θ t ) \theta_{t+1} = \theta_t - \eta (\nabla_{\theta_t} L(\theta_t) + \lambda \theta_t) θt+1=θtη(θtL(θt)+λθt)
      其中 η \eta η 是学习率, λ θ t \lambda \theta_t λθt 是正则化(权重衰减)的影响项。
  • L2 正则化 通常是通过对损失函数增加 L2 范数惩罚项的形式出现。

b. Dropout

Dropout 是一种用于神经网络的正则化技术。在训练过程中,Dropout 随机将一些神经元的输出设为 0,使得每次训练使用不同的网络结构。这种方法能够防止神经元之间的共适应现象,增强模型的泛化能力。

  • 应用:Dropout 常用于深度神经网络的中间层,尤其是卷积神经网络(CNN)和循环神经网络(RNN)。
  • 神经元之间的共适应现象:在标准神经网络中,某些神经元可能会形成依赖关系,导致网络只适应特定的特征组合。通过 Dropout,网络每次训练时使用不同的神经元子集,迫使每个神经元在不同的上下文中独立学习特征,从而防止这些“共适应”现象。

下图中左边是标准的神经网络(全连接神经网络),右边是使用了 Dropout 技术的神经网络。

在这里插入图片描述
图片来源:https://paperswithcode.com/method/dropout

c. 数据增强(Data Augmentation)

数据增强(Data Augmentation)是一种提升机器学习模型泛化能力的技术,主要用于在有限的数据集上扩展训练数据。通过对现有数据进行一定的变换操作,生成新的数据样本,数据增强可以有效地提高模型的鲁棒性和性能,特别是在图像、文本和语音等领域中。常见的增强方式包括:

  1. 图像领域:对图片进行旋转、翻转、缩放、平移、颜色调整等操作来生成新的样本。
  2. 文本领域:对句子进行同义词替换、随机删除或插入单词、打乱词序等。
  3. 语音领域:对音频进行变速、添加噪声、改变音量等操作。

数据增强的核心思想是通过人为增加数据的多样性,来减少模型对特定模式的依赖,进而提高模型在新数据上的表现能力。


7. 正则化的实际应用

a. 线性回归

线性回归中,正则化可以有效避免模型对数据过拟合。例如,Lasso 回归可以在处理高维数据时通过将一些系数缩减为零,自动执行特征选择。

b. 逻辑回归

逻辑回归中,正则化同样重要,尤其是在处理大量特征时,L1 正则化可以选择最重要的特征,而 L2 正则化可以使模型更加平滑和稳健。

c. 神经网络

神经网络中,模型往往有大量的参数,正则化可以帮助防止模型过拟合训练数据,从而提高模型的泛化能力。


8. 总结

正则化(Regularization) 是机器学习中防止过拟合、提高泛化能力的重要工具。通过限制模型的复杂度,正则化能够帮助我们构建在新数据上表现更好的模型。常用的正则化方法包括 L2 正则化(Ridge 回归)、L1 正则化(Lasso 回归)和 Elastic Net,它们适用于不同的数据场景和模型需求。

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

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

相关文章

【开发心得】筑梦上海:项目风云录(6)

目录 会海跳槽 票务开启 漂泊在外的日子 未完待续 会海跳槽 随着时刻表的出炉,意味着大规模的界面开发逐步进入正规。项目组里陆陆续续引进了8个人,最多的时候,同时有10个人在现场。“松工”为我们准备的办公室坐的满满当当,…

Maven 高级之分模块设计与继承、聚合

在软件开发中,随着项目规模的扩大,代码量和复杂度不断增加,传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题,模块化开发应运而生,而 Maven 正是模块化开发的利器,它提供的继承和聚合机制为构建和…

wc命令:统计文本行数、单词数、字节数

一、命令简介 ​wc​(word count)是一个在类 Unix 系统中常用的命令行工具,用于统计文本文件的 行数​、单词数 ​和 字节数​。 ​​ ‍ 二、命令参数 ​wc​ 命令的基本语法如下: wc [选项] 文件选项: ​-c​…

当管理遇上AI,工作效率翻了3倍!

最近这段时间,很多企业都开始降薪、裁员。 在降本增效的大背景下,企业但凡有什么大动作,压力往往都会转嫁到管理者的身上。 一方面,要调大家的状态,处理团队中的各种琐事;另一方面,要及时响应…

【ESP32】Arduino开发 | Timer定时器+定时器闹钟例程

有关定时器外设的详细介绍在ESP-IDF的对应文章中,跳转栏目目录可以找到。 1. API 1.1 启动定时器 hw_timer_t * timerBegin(uint8_t timer, uint16_t divider, bool countUp); timer:定时器序号(ESP32有4个硬件定时器,所以可填序…

SpringBoot赋能旅游管理:系统设计与实现

第三章 系统分析 3.1可行性分析 对所有的系统来说,都有可能会受到时间和空间上的制约。所以,我们在设计每一个项目的时候,必须对该系统实行可行性分析,这样不但能够降低项目的危害,还能改降低人力、物力和财力的损耗。…

【CKA】十六、监控Pod度量指标

16、监控Pod度量指标 1. 考题内容: 2. 答题思路: 题目意思是:找出label有namecpu-user的CPU最高的Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt文件里 3. 官网地址: https://kubernetes.io/zh-…

LeetCode 54 Spiral Matrix 解题思路和python代码

题目: Given an m x n matrix, return all elements of the matrix in spiral order. Example 1: Input: matrix [[1,2,3],[4,5,6],[7,8,9]] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] Output: [1,2,3,4,8,1…

反射在Go语言中的具体应用场景

在Go语言中,反射(Reflection)是一种强大的特性,它允许程序在运行时检查、修改和操作变量的类型信息。 尽管反射在性能上通常不如直接操作,但它在某些特定场景下非常有用。 反射在Go语言中的具体应用场景:…

基于JAVA的鲜花商城管理系统(源码+定制+讲解)鲜花商城管理系统、鲜花商城管理平台、鲜花商城信息管理、鲜花商城系统开发与应用、鲜花在线商城管理系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

基于Springboot海宝海鲜餐厅系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

旅游管理智能化转型:SpringBoot系统设计与实现

第四章 系统设计 4.1系统结构设计 对于本系统的开发设计,先自上向下,将一个完整的系统分解成许多个小系统来进行实现;再自下向上,将所有的“零件”组装成一个大的、完整的系统。因此这里面的许多个小功能块都要对将要实现的功能进…

微软GraphRAG实战解析:全局理解力如何超越传统RAG

微软近日开源了新一代RAG框架GraphRAG,以解决当前RAG在大型语料库上全局理解问题。当前RAG主要聚焦于局部检索能力,即根据查询语句在向量库中匹配部分知识,然后通过大型语言模型合成这些检索到的信息,生成一个自然流畅的回答。相信…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段:创建新的虚拟环境 第一步:查看有多少个虚拟环境 conda env list 第二步:创建一个新的虚拟环境,起个名字:nlpbase 打开anconda prompt终端,输入命令: conda create -n nlpbase python3.10 第三步…

数据仓库拉链表

数仓拉链表是数据仓库中常用的一种数据结构,用于记录维度表中某个属性的历史变化情况。在实际应用中,数仓拉链表可以帮助企业更好地进行数据分析和决策。 数仓拉链表(Slowly Changing Dimension, SCD)是一种用于处理维表中数据变化…

MATLAB中lsqminnorm函数用法

目录 语法 说明 示例 求解具有无限个解的线性系统 指定容差以减少含噪数据的影响 切换显示低秩矩阵警告 lsqminnorm函数的功能是线性方程的最小范数最小二乘解。 语法 X lsqminnorm(A,B) X lsqminnorm(A,B,tol) X lsqminnorm(___,rankWarn) 说明 X lsqminnorm(A,B…

[单master节点k8s部署]34.ingress 反向代理(一)

ingress是k8s中的标准API资源,作用是定义外部流量如何进入集群,并根据核心路由规则将流量转发到集群内的服务。 ingress和Istio工作栈中的virtual service都是基于service之上,更细致准确的一种流量规则。每一个pod对应的service是四层代理&…

YOLO11改进|卷积篇|引入线性可变形卷积LDConv

目录 一、【LDConv】卷积1.1【LDConv】卷积介绍1.2【LDConv】核心代码 二、添加【LDConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【LDConv】卷积 1.1【LDConv】卷积介绍 下图是【LDCNV】的结构图,让我们简单分析…

JumperServer入门

一、安装部署 官方安装文档:快速入门 - JumpServer 文档 机器准备 CentOS7 ip 角色 192.168.252.145 主节点 192.168.252.146 被控节点1 192.168.252.148 被控节点2 安装JumperServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver…

集合框架03:List接口介绍及使用

1.视频链接:13.08 List接口使用(1)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?p8&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 2.代码示例 package com.yundait.Demo01;import java.util.ArrayList; import java…