深度学习 12 正则化

news2025/1/10 1:40:23

1. 对于高方差(过拟合),有以下几种方式:

  • 获取更多的数据,使得训练能够包含所有可能出现的情况

  • 正则化(Regularization)

  • 寻找更合适的网络结构

2. 对于高偏差(欠拟合),有以下几种方式:

  • 扩大网络规模,如添加隐藏层或者神经元数量

  • 寻找合适的网络架构,使用更大的网络结构,如AlexNet

  • 训练时间更长一些

3. 正则化的方式(防止过拟合)

  • L2正则化(L1正则化使用很少)

  • Dropout正则化

  • 早停止法(Early Stopping)

  • 数据增强(增加数据维度或者变换数据形状)


一 偏差与方差

1 数据集划分

首先我们对机器学习当中涉及到的数据集划分进行一个简单的复习

  • 训练集(train set):用训练集对算法或模型进行训练过程;

  • 验证集(development set):利用验证集(又称为简单交叉验证集,hold-out cross validation set)进行交叉验证选择出最好的模型

  • 测试集(test set):最后利用测试集对模型进行测试,对学习方法进行评估。

小数据量的时代,如 100、1000、10000 的数据量大小,可以将数据集按照以下比例进行划分:

  • 无验证集的情况:70% / 30%

  • 有验证集的情况:60% / 20% / 20%

而在如今的大数据时代,拥有的数据集的规模可能是百万级别的,所以验证集和测试集所占的比重会趋向于变得更小。

  • 100 万数据量:98% / 1% / 1%

  • 超百万数据量:99.5% / 0.25% / 0.25%

以上这些比例可以根据数据集情况选择。

2 偏差与方差的意义

偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。

泛化误差可分解为偏差、方差与噪声,泛化性能是由学习算法的能力数据的充分性以及学习任务本身的难度所共同决定的。

  • 偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力

  • 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响

  • 噪声:表达了在当前任务上任何学习算法所能够达到的期望泛化误差的下界,即刻画了学习问题本身的难度

那么偏差、方差与我们的数据集划分到底有什么关系呢?

  • 1、训练集的错误率较小,而验证集/测试集的错误率较大,说明模型存在较大方差,可能出现了过拟合

  • 2、训练集和测试集的错误率都较大,且两者相近,说明模型存在较大偏差,可能出现了欠拟合

  • 3、训练集和测试集的错误率都较小,且两者相近,说明方差和偏差都较小,这个模型效果比较好。

所以我们最终总结,方差一般指的是数据模型得出来了,能不能对未知数据的扰动预测准确。而偏差说明在训练集当中就已经误差较大了,基本上在测试集中没有好的效果

所以如果我们的模型出现了较大的方差或者同时也有较大的偏差,该怎么去解决?

3 解决方法

对于高方差(过拟合),有以下几种方式:

  • 获取更多的数据,使得训练能够包含所有可能出现的情况

  • 正则化(Regularization

  • 寻找更合适的网络结构

对于高偏差(欠拟合),有以下几种方式:

  • 扩大网络规模,如添加隐藏层或者神经元数量

  • 寻找合适的网络架构,使用更大的网络结构,如AlexNet

  • 训练时间更长一些

不断尝试,直到找到低偏差、低方差的框架。

二 正则化(Regularization)

正则化,即在损失函数中加入一个正则化项(惩罚项),惩罚模型的复杂度,防止网络过拟合

1 逻辑回归的L1与L2正则化

L1是直线距离, L2是平方再开方

由于 L1 正则化最后得到 w 向量中将存在大量的 0,使模型变得稀疏化,因此 L2 正则化更加常用。

2 正则化项的理解

在损失函数中增加一项,那么其实梯度下降是要减少损失函数的大小,对于L2或者L1来讲都是要去减少这个正则项的大小,那么也就是会减少W权重的大小。这是我们一个直观上的感受。

3 神经网络中的正则化

 4 正则化为什么能够防止过拟合

正则化因子设置的足够大的情况下,为了使成本函数最小化,权重矩阵 W 就会被设置为接近于 0 的值,直观上相当于消除了很多神经元的影响,那么大的神经网络就会变成一个较小的网络。

三 Dropout正则化

Droupout:随机的对神经网络每一层进行丢弃部分神经元操作

对于网络的每一层会进行设置保留概率,即keep_prob。假设keep_prob为0.8,那么也就是在每一层所有神经元有20% 的概率直接失效,可以理解为0.

1 Inverted droupout

这种方式会对每层进行如下代码操作

# 假设设置神经元保留概率
keep_prob = 0.8
# 随机建立一个标记1 or 0的矩阵,表示随机失活的单元,占比20%
dl = np.random.rand(al.shape[0], al.shape[1]) < keep_prob
# 让a1对应d1的为0地方结果为0
al = np.multiply(al, dl)

# 为了测试的时候,每一个单元都参与进来
al /= keep_prob
  • 训练练的时候只有占比为pp的隐藏层单元参与训练。

  • 增加最后一行代码的原因,在预测的时候,所有的隐藏层单元都需要参与进来,就需要测试的时候将输出结果除以以pp使下一层的输入规模保持不变。

 2 droupout为什么有效总结

加入了 dropout 后,输入的特征都存在被随机清除的可能,所以该神经元不会再特别依赖于任何一个输入特征,也就是不会给任何一个输入特征设置太大的权重。通过传播过程,dropout 将产生和 L2 正则化相同的收缩权重的效果

  • 对于不同的层,设置的keep_prob大小也不一致,神经元较少的层,会设keep_prob为 1.0,而神经元多的层则会设置比较小的keep_prob

  • 通常被使用在计算机视觉领域,图像拥有更多的特征,场景容易过拟合,效果被实验人员证明是很不错的。

调试时候使用技巧:

  • dropout 的缺点是损失函数无法被明确定义,因为每次会随机消除一部分神经元,所以参数也无法确定具体哪一些,在反向传播的时候带来计算上的麻烦,也就无法保证当前网络是否损失函数下降的。如果要使用droupout,会先关闭这个参数,保证损失函数是单调下降的,确定网络没有问题,再次打开droupout才会有效。

四 其它正则化方法

  • 早停止法(Early Stopping)

  • 数据增强

1 早停止法(Early Stopping)

通常不断训练之后,损失越来越小。但是到了一定之后,模型学到的过于复杂(过于拟合训练集上的数据的特征)造成测试集开始损失较小,后来又变大。模型的w参数会越来越大,那么可以在测试集损失减小一定程度之后停止训练

但是这种方法治标不治本,得从根本上解决数据或者网络的问题。

2 数据增强

  • 数据增强

指通过剪切、旋转/反射/翻转变换、缩放变换、平移变换、尺度变换、对比度变换、噪声扰动、颜色变换等一种或多种组合数据增强变换的方式来增加数据集的大小。

  • 数据增强类别

那么我们应该在机器学习过程中的什么位置进行数据增强?在向模型输入数据之前增强数据集。

  • 离线增强。预先进行所有必要的变换,从根本上增加数据集的规模(例如,通过翻转所有图像,保存后数据集数量会增加2倍)。

  • 在线增强,或称为动态增强。可通过对即将输入模型的小批量数据的执行相应的变化,这样同一张图片每次训练被随机执行一些变化操作,相当于不同的数据集了。

那么我们的代码中也是进行这种在线增强。

  • 数据增强技术

下面一些方法基础但功能强大的增强技术,目前被广泛应用。

  • 翻转:tf.image.random_flip_left_right

    • 你可以水平或垂直翻转图像。一些架构并不支持垂直翻转图像。但,垂直翻转等价于将图片旋转180再水平翻转。下面就是图像翻转的例子。

  • 旋转:rotate

  • 剪裁:random_crop

    • 随机从原始图像中采样一部分,然后将这部分图像调整为原始图像大小。这个方法更流行的叫法是随机裁剪。

  • 平移、缩放等等方法

数据增强的效果是非常好的,比如下面的例子,绿色和粉色表示没有数据增强之前的损失和准确率效果,红色和蓝色表示数据增强之后的损失和准确率结果,可以看到学习效果也改善较快。

那么TensorFlow 官方源码都是基于 vgginception论文的图像增强介绍,全部通过tf.image相关API来预处理图像。并且提供了各种封装过tf.image之后的API。那么TensorFlow 官网也给我们提供了一些模型的数据增强过程。

总结

  • 掌握偏差与方差的意义

  • 掌握L2正则化与L1正则化的数学原理

    • 权重衰减

  • 掌握droupout原理以及方法

    • Inverted droupout

  • 知道正则化的作用

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

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

相关文章

【C语言进阶】只看此篇,让你学会动态内存管理

目录 前言 一、为什么存在动态内存分配 二、动态内存函数的介绍 1 、malloc和free 2、 calloc 3 、realloc 三、常见的动态内存错误 四、动态内存管理笔试题 1 题目1&#xff1a; 2 题目2&#xff1a; 3 题目3&#xff1a; 4 题目4&#xff1a; 五、C/C程序的…

5.10回溯法--圆排列问题--排列树

圆排列问题描述 给定n个大小不相等的圆&#xff0c;要将这n个大小不相等的圆排进一个矩形框中&#xff0c;且要求个个圆都与矩形框的最底边相切。要找出最小长度的圆排列。 问题分析 排列排列&#xff0c;解空间是一个排列树。 设开始时&#xff0c;a[n]储存n个圆的半径&…

笔试强训48天——day26

文章目录一. 单选1.在单处理器系统中&#xff0c;如果同时存在有12个进程&#xff0c;则处于就绪队列中的进程数量最多为&#xff08;&#xff09;2.在系统内存中设置磁盘缓冲区的主要目的是&#xff08;&#xff09;3.下列选项中&#xff0c;会导致进程从执行态变为就绪态的事…

时间复杂度空间复杂度

算法效率数据结构算法时间复杂度大O的渐进表示法三种时间复杂度几道例题一.简单递归二结合代码来判断时间复杂度空间复杂度我们程序猿开始的时候肯定听了不少的:数据结构和算法,那么阿涛就给大家说说自己的拙见吧.数据结构 数据结构就是我们用来组织数据的方式,比如我们可以把…

JVM-【面试题】-垃圾收集算法+垃圾收集器,以后就不用担心对象那些事了

一、垃圾收集算法在jvm里对可回收的对象在不同的垃圾收集器里&#xff0c;有不同的回收算法&#xff0c;具体的可以分为这四种&#xff1a;分代收集算法、复制算法、标记清除算法、标记整理算法1.1 分代收集算法当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有…

【NI Multisim 14.0操作实例——最小锁存器电路】

目录 序言 &#x1f525;1.设置工作环境 &#x1f525;2.设置原理图图纸 &#x1f525; 3.设置图纸的标题栏 &#x1f525; 4. 增加元器件 &#x1f525; 5. 放置总线 &#x1f525; 6. 添加总线分支 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路…

ELasticSearch监控之Cerebro安装

文章目录安装包下载安装使用点击nodes 查看各节点状态点击rest发送可以发送请求查询数据安装包下载 https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.tgzgit地址&#xff1a;https://github.com/lmenezes/cerebro 安装 将要包移动到/opt目录解…

Unity 3D 导入三维模型||Unity 3D 动画系统简介(Mecanim)

将三维模型导入 Unity 3D 是游戏开发的第一步。 下面以 3ds Max 为例&#xff0c;演示从三维建模软件中将模型导入 Unity 3D 的过程&#xff0c;具体步骤如下。 在 3ds Max 中创建房子模型。执行 Export → Export 命令导出 fbx 模型。设置保存路径以及文件名。选择默认设置选…

【transformers】tokenizer用法(encode、encode_plus、batch_encode_plus等等)

tranformers中的模型在使用之前需要进行分词和编码&#xff0c;每个模型都会自带分词器&#xff08;tokenizer&#xff09;&#xff0c;熟悉分词器的使用将会提高模型构建的效率。 string tokens ids 三者转换 string → tokens tokenize(text: str, **kwargs)tokens → strin…

安卓车机系统adb shell cmd 源码原理分析

hi&#xff0c;粉丝朋友们大家好&#xff01; 上一次视频分享了input专题课中input命令在android 12的更新&#xff0c;因为原来课程是基于android 10 &#xff08;可以加我扣&#xff1a;2102309716 优惠购买&#xff09; https://ke.qq.com/course/package/77595?tuin7d4eb3…

联合证券|金融部门开年推出新方案 改善优质房企资产负债状况

当时&#xff0c;努力促进房地产与金融正常循环是金融部门的工作要点之一。记者日前了解到&#xff0c;为遵循落实中心经济工作会议布置&#xff0c;有用防范化解优质头部房企危险&#xff0c;改进财物负债情况&#xff0c;有关部门起草了《改进优质房企财物负债表计划举动计划…

【计算机体系结构基础】流水线异常处理和提高流水线效率的技术(一)

流水线中的异常 异常的来源 外部事件指令执行中的错误数据完整性的问题地址转换异常系统调用陷入需要软件修正的运算 异常可以分为&#xff1a;可恢复异常和不可恢复异常 不可恢复异常&#xff1a;系统硬件出现严重故障&#xff0c;异常处理后系统面临重启。 解决办法&#x…

Spring Boot Apollo监听namespace并更新配置Bean(附源码)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 如果我们使用的配置中心是apollo的话我们经常会遇到这样的问题&#xff0c;就是动态更新配置Bean 动态更新配置bean 动态更新配置bean其实是很简单的&…

Python学习笔记-PyQt6消息窗

对话框是界面编程中重要的窗体&#xff0c;一般用于提示或者一些其他特定操作。一、使用QDialog显示通用消息框直接使用QDialog类&#xff0c;可以及通过对话框进行通用对话框显示&#xff0c;亦可以通过自定义设置自己需要的对话框。# _*_ coding:utf-8 _*_import sysfrom PyQ…

MySQL主从复制的原理是什么?

主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行(也叫重做)&#xff0c;从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制&#xff0c; 从库同时也可以作为其他从服务器的主…

Python批量下载某网站贵得要shi文档 并保存为PDF

人生苦短&#xff0c;我用Python 基本开发环境&#x1f4a8; Python 3.6Pycharm 相关模块的使用&#x1f4a8; import requests import parsel import re import os import pdfkit需要使用到一个软件 wkhtmltopdf 这个软件的作用就是把html文件转成PDF 想要把文档内容保存…

人工智能轨道交通行业周刊-第30期(2023.1.9-1.15)

本期关键词&#xff1a;贵阳智慧车站、城轨智能化汇总、隧道巡检、信创厂商、手语数字人 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与…

煤矿人员工服着装智能识别监测系统 yolov5架构

煤矿人员工服着装智能识别监测系统通过pythonyolov5深度学习网络架构&#xff0c;对画面中人员是否正确着装实时分析&#xff0c;发现违规着装立即抓拍存档告警。我们选择当下YOLO最新的卷积神经网络YOLOv5来进行识别检测。按照官方给出的数目&#xff0c;现版本的YOLOv5每个图…

数据库概述杂谈之章节回顾

数据与数据之间联系的模型表示 网状模型用“图”结构来表示数据及数据之间的联系层次模型用“树”结构来表示数据及数据之间的联系关系模型用“关系&#xff08;二维表&#xff09;”结构来表示数据及数据之间的联系对象模型用“对象”数据结构来表示数据及数据之间的联系 数…

SPI协议与GPIO模拟SPI的实现

SPI定义 SPI&#xff08;Serial Peripheral Interface, 串口外设接口&#xff09;&#xff0c;它用于MCU与各种外围设备以串行方式进行通信&#xff0c;速度最高可达25MHz以上。 SPI接口主要应用在EEPROM、 FLASH、实时时钟、网络控制器、 OLED显示驱动器、 AD转换器&#xf…