机器学习(深度学习)缓解过拟合的方法——正则化及L1L2范数详解

本文主要是介绍机器学习(深度学习)缓解过拟合的方法——正则化及L1L2范数详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习(深度学习)缓解过拟合的方法——正则化

    • L1范数和L2范数
      • L1范数
      • L2范数

过拟合的本质:模型对于噪声过于敏感,把训练样本里的噪声当做特征进行学习,以至于在测试集的表现不好,加入正则化后,当输入有轻微的改动,结果受到的影响较小。
正则化的方法主要有以下几种:

  1. 参数范数惩罚,比较好理解,将范数加入目标函数(损失函数),常见的有一范数,二范数
  2. 数据集增强
  3. 添加噪声
  4. earlystopping,当验证集的效果下降,而训练集还未收敛,提前终止训练
  5. 模型的融合,bagging方法
  6. Dropout(类似于bagging多个神经网络)
  7. Batch Normalization
  8. 简化网络结构
    本文接下来将详细介绍L1范数和L2范数,其他的正则化方法比较好理解,就不在详述

L1范数和L2范数

有监督的机器学习问题主要有两个任务:最小化误差和规则化参数。最小化误差主要是为了让模型拟合我们的训练数据,规则化参数是防止模型过分拟合训练数据。因为参数太多,会导致我们的模型复杂度上升,容易过拟合,也就是我们的训练误差会很小。但训练误差小并不是我们的最终目标,我们的目标是希望模型的测试误差小,也就是能准确的预测新的样本。所以,我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能(也就是测试误差也小),而模型“简单”就是通过规则函数来实现的。

L1范数

L1范数是指向量中各个元素绝对值之和,并且有使权值稀疏的特点。从数学的角度来讲,任何的规则化算子,如果他在Wi=0的地方不可微,并且可以分解为一个“求和”的形式,那么这个规则化算子就可以实现稀疏。这说是这么说,W的L1范数是绝对值,|w|在w=0处是不可微。
参数稀疏最大的好处在于特征的选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。

L2范数

L2范数的一个最大的特点是可以解决过拟合的问题。L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单?我的理解是:比如模型把噪声考虑进去,会导致过拟合,但是噪声通常都是很小的,为了让噪声在模型的拟合中起作用,需要对噪声项乘以一个很大的系数。而二范数就避免了这种事情的发生。L2正则化之后w更新的时候前面的系数是小于1的,所以是权重衰减,而过拟合的函数变化都比较剧烈,所以局部导数大,即系数大,而L2可以衰减系数,所以有正则化效果
L2范数还要一个好处是可以解决优化过程中矩阵求逆很困难的情况,其实道理也很简单,之前求解矩阵逆的时候,为了追求精度,权值w会无限制的取很大,但是当结果稍微改变一丁点的时候,为了尽可能的拟合,W也会改变很大。加入二范数限制权值的大小,可以很好地缓解这个问题。

我们从几何的概念来考虑一下
在这里插入图片描述
如上图所示,L1范数和每个坐标相交的地方都有“角”出现,注意在角的位置会产生稀疏,而L2范数没有“角”,所以产生稀疏的概率就比较小了。
总结一下:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge是一种规则化。

这篇关于机器学习(深度学习)缓解过拟合的方法——正则化及L1L2范数详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

java连接opcua的常见问题及解决方法

《java连接opcua的常见问题及解决方法》本文将使用EclipseMilo作为示例库,演示如何在Java中使用匿名、用户名密码以及证书加密三种方式连接到OPCUA服务器,若需要使用其他SDK,原理... 目录一、前言二、准备工作三、匿名方式连接3.1 匿名方式简介3.2 示例代码四、用户名密码方式连接4

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

Java中的record使用详解

《Java中的record使用详解》record是Java14引入的一种新语法(在Java16中成为正式功能),用于定义不可变的数据类,这篇文章给大家介绍Java中的record相关知识,感兴趣的朋友... 目录1. 什么是 record?2. 基本语法3. record 的核心特性4. 使用场景5. 自定

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷