【深度学习】第二门课 改善深层神经网络 Week 1 深度学习的实践层面

🚀Write In Front🚀
📝个人主页:令夏二十三
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:深度学习
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊

文章目录

文章目录

1.1 训练集、验证集和测试集

1.2 偏差和方差

 1.4 正则化


1.1 训练集、验证集和测试集

本周开始的第二门课我们将学习如何有效运行神经网络,内容涉及超参数调优,如何构建数据集,以及如何确保优化算法快速运行,从而使学习算法在合理时间内完成自学。

应用深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环该过程的效率是决定项目进展的一个关键因素,而创建高质量的训练集、验证集和测试集也有助于提高循环效率。

在深度学习中,训练集、验证集和测试集是三个不同的数据集,它们在模型的开发、评估和测试阶段扮演着关键角色:

  1. 训练集(Training Set)

    • 目的:训练集用于训练模型,即调整模型的参数(如权重和偏置)。
    • 使用:在训练过程中,模型通过前向传播计算预测,然后通过反向传播更新参数,以最小化预测和实际标签之间的差异(损失函数)。
    • 特点:训练集通常包含大部分可用数据,以便模型能够从中学习到足够的特征和模式。
  2. 验证集(Validation Set)

    • 目的:验证集用于评估模型在训练过程中的性能,并调整模型的超参数。
    • 使用:在训练过程中,模型在验证集上的性能会被定期检查,以监控模型的泛化能力,并防止过拟合。基于验证集的性能,可以调整学习率、改变网络结构或应用正则化等技术。
    • 特点:验证集是独立于训练集的,它不用于训练模型的参数。验证集的大小通常小于训练集,但足够代表数据的多样性。
  3. 测试集(Test Set)

    • 目的:测试集用于评估最终模型的性能,它提供了一个无偏的评估,反映了模型对未知数据的泛化能力。
    • 使用:在模型的超参数调整完成后,使用测试集对模型进行最终评估。测试集的性能是模型泛化能力的最终指标。
    • 特点:测试集应该是模型从未见过的数据,它不应该用于任何形式的模型训练或超参数调整。测试集的大小通常足够大,以确保评估结果的统计显著性。

总结来说,训练集用于学习模型参数,验证集用于调整超参数和监控过拟合,而测试集用于评估模型的最终性能。这三个数据集的区分和使用是确保模型有效性和可靠性的重要步骤。

 在机器学习中,我们通常将数据样本划分成训练集、验证集和测试集三部分,传统的划分比例是6 :2 :2,对于规模较大的数据集,验证集和测试集要小于数据总量的20%或10%。

1.2 偏差和方差

如果训练出一个网络,首先可以观察一下网络在训练集上的正确率,如果在训练集上表现很差,说明神经网络陷入欠拟合(高偏差),这就需要考虑更换网络结构,比如使用更深层的网络或者增长训练时间等,来解决高偏差问题;

在实现了训练集上的高正确率以后,就可以检测网络在测试集上的性能,如果网络在测试集上表现不好,说明网络陷入过拟合(高方差问题),此时可以考虑使用更多的数据集或加入正则化来解决,不过有时候也可以考虑更换网络结构。

以下三张图分别为欠拟合、适度拟合和过拟合:

其实欠拟合就是高偏差,过拟合就是高方差,可以通过以下智谱生成的内容来进一步了解:

在机器学习中,偏差(Bias)和方差(Variance)是描述模型预测误差的两个关键概念。它们是统计学习理论中的基本概念,用于解释模型在不同数据集上的表现。

偏差

  • 定义:偏差是指模型在多次训练过程中,预测结果的期望与真实结果的差异。它反映了模型在学习数据时的拟合能力。
  • 高偏差:如果模型在训练集上的表现不佳,说明模型可能存在高偏差,即模型可能过于简单,无法捕捉数据的复杂性和规律,这种情况被称为欠拟合(Underfitting)。
  • 例子:假设我们用一个线性模型来拟合非线性的数据,由于线性模型的表达能力有限,它可能无法很好地捕捉数据的真实关系,导致高偏差。

方差

  • 定义:方差是指模型在不同训练数据集上的表现差异,它反映了模型对训练数据的敏感程度。
  • 高方差:如果模型在训练集上的表现很好,但在验证集或测试集上的表现不佳,说明模型可能存在高方差,即模型可能过于复杂,对训练数据中的随机噪声也进行了学习,这种情况被称为过拟合(Overfitting)。
  • 例子:一个拥有大量参数和深度的神经网络在训练集上可能能够达到非常高的准确率,但如果直接将其应用于未见过的数据,其表现可能会大幅下降,这是因为模型学习到了训练数据中的特定特征和噪声,而没有捕捉到更一般的规律。

为了更好地理解偏差和方差,可以考虑以下例子:

  • 例子1:线性回归模型

    • 偏差:如果数据本身是非线性的,线性回归模型可能无法很好地捕捉数据的真实关系,导致高偏差。
    • 方差:如果线性回归模型包含大量的特征(可能包括一些无关的特征),并且没有适当的正则化,它可能会对训练数据中的噪声进行学习,导致高方差。
  • 例子2:决策树模型

    • 偏差:一个浅层的决策树可能无法很好地捕捉数据的复杂关系,导致高偏差。
    • 方差:一个深层的决策树可能会对训练数据中的特定样本和噪声进行过度拟合,导致高方差。

在实际应用中,我们希望找到一个平衡点,即模型既不过于简单也不过于复杂,以实现良好的泛化能力。这通常涉及到模型选择、特征工程和正则化等技术。

 1.4 正则化

神经网络陷入过拟合,可以通过加入正则化来解决,下面是关于正则化的介绍:

在深度学习中,正则化是一种用于防止模型过拟合的技术。过拟合发生在模型对训练数据学习得太好,以至于它捕捉到了数据中的噪声和特定特征,而无法泛化到新的、未见过的数据。正则化通过对模型施加一些约束或惩罚,鼓励模型学习更简单的、泛化能力更强的模式。

正则化的主要目的是减少模型的复杂性,使得模型不会过分依赖于训练数据中的特定特征。这样,模型就能更好地识别数据中的潜在模式,并在面对新数据时表现得更加稳健。

常见的正则化方法包括:

  1. L1正则化(Lasso Regularization)

    • 通过添加权重向量的绝对值之和的惩罚项来减少模型复杂性。
    • 可以导致某些特征的权重变为零,从而实现特征选择。
  2. L2正则化(Ridge Regularization)

    • 通过添加权重向量的平方之和的惩罚项来减少模型复杂性。
    • 会使权重分散到多个特征上,而不是集中在少数特征上。
  3. L1/L2正则化(Elastic Net Regularization)

    • 是L1和L2正则化的结合,通过混合惩罚项来减少模型复杂性。
    • 允许同时进行特征选择和权重分散。
  4. Dropout

    • 在训练过程中随机地将网络中的一部分神经元暂时从网络中移除。
    • 强制网络学习更加鲁棒的特征,减少对特定神经元的依赖。
  5. 早停(Early Stopping)

    • 在验证集上的性能不再提高时停止训练。
    • 防止模型在训练数据上过度训练,从而减少过拟合的风险。
  6. 数据增强(Data Augmentation)

    • 通过对训练数据进行各种变换(如旋转、缩放、裁剪等)来增加数据的多样性。
    • 使得模型能够从更多的角度和场景中学习特征,提高泛化能力。

 常见的正则化分为L2正则化和L1正则化,前者使用的是参数的二范数而后者使用的是一范数:

L1 正则化会导致参数的稀疏化(就是存在比较多的0),因此现在越来越多会使用 L2 正则化。而在描述矩阵的时候这个范数则被称为 Frobenius 范数,描述的是矩阵中每个元素的平方和。

加入正则化项以后的代价函数可以被写作:

还有一种比较实用的正则化方法是 Dropout(随机失活)正则化方法,整体思路就是对网络中的节点随机分配概率,按照分配的概率随机地将网络中部分节点进行失活从而得到一个规模更小的网络来降低过拟合可能性。这里介绍一种比较常用的部署方法——反向随机失活(Inverted dropout):

比如现在需要有一个3层网络,那么在每一轮训练过程(一次前向传播+一次反向传播)中,分别给三层神经网络的每个神经元计算一个是否丢弃的随机数,这里以第二层为例来说明,比如第二层共有5个神经元,那么就可以随机5个在[0,1]之间均匀分布的随机数,然后给定一个keep_prob对刚刚的随机数组进行0-1二值化,此时得到的0-1数组就作为该层神经元的“掩码”,0对应的神经元在本次训练中就不起作用。不过为了补偿神经元数量衰减造成的网络输出均值的改变,这里会手动给该层神经元剩余网络的输出除以**keep_prob**。每次训练的时候都会对每个层重新计算这个随机数组,使得每次参与训练的神经元数目都不会特别多,神经网络“更加简单”,以此来降低过拟合可能性。

不过要注意的就是上述正则化方法只在训练的时候有用,不要在测试的使用启用随机失活正则化。从直观上来理解,随机失活机制的存在强迫神经元不能过分信任上一级任何一个神经元的输出,而是应该更加平均地“多听取各方意见”从而起到缩减范数的效果,这一点和 F 范数正则化在思路上其实是比较类似的。

在进行随机失活正则化的时候,每一层神经网络的keep_prob可以选择得不一样,这一点相较于范数正则化更加灵活。一般而言不会对输入层神经元进行随机失活

不过随机失活正则化会带来的问题就是代价函数的定义就显得不是很明确,所以调试神经网络性能的时候就会比较痛苦()。

还有一些其他的正则化方法,比如数据增强其实也是一种正则化手段:

还有一种正则化方法是在训练过程中寻找合适的实际提早结束训练(Early stopping),这种时机的查找一般通过观测验证集表现来实现,当发现验证集误差开始上升的时候就说明网络已经逐渐开始过拟合了所以可以停止训练了。

为了加快训练速度还需要做的一步就是对输入数据进行归一化,这里主要做的就是平移(零均值)和缩放(同方差),这在机器学习中提及过,也就不再赘述。

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

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

相关文章

基于SSM的宠物领养平台(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的宠物领养平台(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

排序算法--直接选择排序

前提: 选择排序:选择排序(Selection sort)是一种比较简单的排序算法。它的算法思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 话不多说,直接放图…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因:Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面(学习路线) 数据:数据预处理与数据增强模型:如何构建模型模…

机器学习之基于Jupyter中国环境治理投资数据分析及可视化

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 机器学习之基于Jupyter中国环境治理投资数据分析及可视化项目是一个结合了机器学习和数据可视化技术的项目&#xf…

AMD GPU体系知识大全

AMD(Advanced Micro Devices)在GPU领域同样具有丰富的产品线和架构体系,以下是一个关于AMD GPU体系的概览: 架构系列: Vega架构:发布于2017年,特点是采用高带宽缓存控制器(HBCC&…

JavaScript百炼成仙自学笔记——11

函数七重关之四(闭包) function add(){return function(){} } function test(){var a 0;return function(){console.log(a);} } 这样子调用:test()(); 这就是闭包! 这样做有什么好处呢? //先获取这个内部函数 var i…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址: SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

富文本编辑器 iOS

https://gitee.com/klkxxy/WGEditor-mobile#wgeditor-mobile 采用iOS系统浏览器做的一款富文本编辑器工具。 原理就是使用WKWebView加载一个本地的一个html文件,从而达到编辑器功能的效果! 由于浏览器的一些特性等,富文本编辑器手机端很难做…

链表的回文结构(详解)

链表的回文结构(详解) 题目: 链表的回文结构 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表…

Web前端一套全部清晰 ⑥ day4 CSS.1 基础选择器、文字控制属性

后来的我不在抱怨 所有的事与愿违都是我能力或者判断力不足 仅此而已 —— 24.5.1 一、CSS定义 1. 将CSS放在html文件的<style>标签中 层叠样式表(Cascading style Sheets&#xff0c;缩写为 CSS)&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现(美…

轴承故障检测(分类任务)+傅里叶变化+CNN+matlab

1 介绍 使用西储大学的轴承数据集&#xff0c;其实用哪个都行&#xff0c;可能最后的精度会不一样&#xff0c;先读取数据&#xff0c;然后使用傅里叶转换为图像&#xff0c;然后搭建cnn模型&#xff0c;将图像大小转换为模型使用的大小&#xff0c;例如resnet50&#xff0c;输…

机器学习每周挑战——二手车车辆信息交易售价数据

这是数据集的截图 目录 背景描述 数据说明 车型对照&#xff1a; 燃料类型对照&#xff1a; 老规矩&#xff0c;第一步先导入用到的库 第二步&#xff0c;读入数据&#xff1a; 第三步&#xff0c;数据预处理 第四步&#xff1a;对数据的分析 第五步&#xff1a;模型建…

【linuxC语言】空洞文件

文章目录 前言一、空洞文件1.1 空洞文件的介绍1.2 用途 二、示例代码总结 前言 在 Linux 系统编程中&#xff0c;空洞文件是一种特殊类型的文件&#xff0c;它包含了逻辑上的空洞&#xff0c;也就是说文件中的某些部分并没有实际写入数据。尽管文件在逻辑上可能非常大&#xf…

docker系列9:容器卷挂载(下)

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…

【JVM】内存调优——内存泄漏、内存溢出

内存调优 什么是内存泄漏、内存泄漏&#xff1f; 内存泄漏&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收。内存溢出&#xff1a;内存的使用量超过了Java虚拟机可以分配的上限&#xff…

如何让 PDF 书签从杂乱无序整洁到明丽清新

1、拉取书签&#xff08;详细步骤看文末扩展阅读&#xff09; 原状态 —— 杂乱无序 自动整理后的状态 —— 错落有致&#xff0c;但摩肩接踵 2、开始整理 全选自动整理后的书签&#xff0c;剪切 访问中英混排排版优化 - 油条工具箱 https://utils.fun/cn-en 1 粘贴 → 2 …

020、Python+fastapi,第一个Python项目走向第20步:ubuntu 24.04 docker 安装mysql8、redis(一)

系列文章 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 docker安装起来比较方便&#xff0c;不影响系统整体&#xff0c;和前面虚拟环境有异曲同工之妙&#xff0c;今天把老笔记本T400拿出来装了个ubuntu24…

Covalent Network(CQT)为 Arbitrum 生态提供 250 万美元的资助,以促进 Web3 的创新与发展

Covalent Network&#xff08;CQT&#xff09;作为 Web3 领先的“数据可用性”层&#xff0c;宣布将提供 250 万美元的资金以支持 Arbitrum 生态项目&#xff0c;包括 Arbitrum One、Nova、Orbit 或 Stylus。此举旨在通过提供资源和帮助&#xff0c;推动利用 Arbitrum 网络上 C…

【JVM】JMM 内存模型

JMM 概述 内存模型 java[内存模型](Java Memory Model) 和 [内存结构]JMM规定了在多线程下对共享数据的读写时&#xff0c;对数据的原子性 有序性 可见性的规则和保障。 原子性 原子性问题: i和i–不是原子性操作! 所以一个i指令会在执行过程中被另一个线程执行! 问题分…