机器学习7-全连接神经网络3-过拟合与超参数

news2025/2/3 16:32:27

机器学习6-全连接神经网络3-过拟合欠拟合

  • 过拟合
    • 应对过拟合-最优方案:获取更多的训练数据
    • 应对过拟合-次优方案:正则化
    • 应对过拟合-次优方案2:随机失活
    • 综合考量
  • 超参数
    • 超参数优化方法

过拟合

在这里插入图片描述

  • 机器学习的根本问题是优化和泛化的问题。
  • 优化——是指调节模型以在训练数据上得到最佳性能;
  • 泛化------指训练好的模型在前所未见的数据上的性能好坏。
    训练初期:
    优化和泛化是相关的:训练集上的误差越小,验证集上的误差也越小,集上的误差也越小,模型的泛化能力逐渐增强

训练后期:
模型在验证集上的错误率不再降低,转而开始变高。模型出现过拟合,开始学习仅和训练数据有关的模式。

最优方案——获取更多的训练数据
次优方案——调节模型允许存储的信息量或者对模型允许存储的信息加以
约束,该类方法也称为正则化

在机器学习和数据科学领域,提高模型性能通常涉及多种策略。你提到的两种方案——获取更多的训练数据和正则化——是实践中非常常见且有效的方法。下面将详细解释这两种方案,并探讨它们在不同情境下的适用性。

应对过拟合-最优方案:获取更多的训练数据

原理
更多的训练数据意味着模型可以学习到更多关于数据分布的特征,从而提高泛化能力。大数据集有助于减少过拟合的风险,因为模型有更多的机会学习到数据中的真实模式,而不是噪声。

优点

  • 提高模型的泛化能力。
  • 减少过拟合的风险。
  • 在一些情况下,可以简化模型设计,因为大数据集本身就能提供足够的信息来支持复杂问题的解决。

挑战

  • 数据收集可能耗时、耗力且昂贵。
  • 数据质量和标签的准确性需要保证。
  • 数据存储和处理能力可能受到限制。

应对过拟合-次优方案:正则化

在这里插入图片描述

原理
正则化是通过在损失函数中添加一个惩罚项来约束模型的复杂度,从而防止模型在训练数据上过拟合。正则化方法包括L1正则化(Lasso)、L2正则化(Ridge) 等。L21正贝损失对于大数值的权值向量进行严厉惩罚,鼓励更加分散的权重向量;使模型倾向于使用所有输入特征做决策,此时的模型泛化性能好!

应对过拟合-次优方案2:随机失活

  • 随机失活:让隐层的神经元以一定的概率不被激活。
  • 实现方式:训练过程中,对某一层使用Dropout,就是随机将该层的一些输出舍弃(输出值设置为0),这些被舍弃的神经元就好像被网络删除了一样。
  • 随机失活比率( Dropout ratio) :是被设为0的特征所占的比例,通常在0.2——0.5范围内。

例:假设某一层对给定输入样本的返回值应该是向量:[0.2,0.5,1.3,0.8,1.1]。,
使用Dropout后,这个向量会有几个随机的元素变成:[0,0.5,1.3, 0, 1.1]。

随机失活为什么能够防止过拟合呢?
在这里插入图片描述

随机失活的应用
在这里插入图片描述

测试阶段与训练阶段的输出值不一致

import numpy as np

# 神经元保持激活状态的概率,该值越高失活的单元就越少
P = 0.5

# 定义训练函数
def train(x, W1, b1, W2, b2, W3, b3):
    # 计算第一层输出
    H1 = np.maximum(0, np.dot(W1, x) + b1)
    # 生成第一层的mask
    U1 = (np.random.rand(*H1.shape) < P).astype(float)
    # 第一层dropout操作
    H1 *= U1
    # 计算第二层输出
    H2 = np.maximum(0, np.dot(W2, H1) + b2)
    # 生成第二层的mask
    U2 = (np.random.rand(*H2.shape) < P).astype(float)
    # 第二层dropout操作
    H2 *= U2
    # 计算输出层输出
    out = np.dot(W3, H2) + b3
    return out, H1, H2  # 可以根据需要返回中间层输出用于调试或可视化

# 定义预测函数
def predict(x, W1, b1, W2, b2, W3, b3):
    # 注意:在预测时通常不使用dropout,但为了与train函数保持一致,这里仍保留权重和偏置的变量名
    H1 = np.maximum(0, np.dot(W1, x) + b1) * P
    H2 = np.maximum(0, np.dot(W2, H1) + b2) * P
    out = np.dot(W3, H2) + b3
    return out

# 初始化权重和偏置
input_size = 3
hidden_size1 = 4
hidden_size2 = 4
output_size = 1

W1 = np.random.randn(hidden_size1, input_size) * 0.01
b1 = np.zeros((hidden_size1, 1))
W2 = np.random.randn(hidden_size2, hidden_size1) * 0.01
b2 = np.zeros((hidden_size2, 1))
W3 = np.random.randn(output_size, hidden_size2) * 0.01
b3 = np.zeros((output_size, 1))

# 示例输入
x = np.random.rand(input_size, 1)  # 假设输入是一个三维向量

# 训练并获取输出
output, H1_val, H2_val = train(x, W1, b1, W2, b2, W3, b3)
print("Training Output:", output)

# 预测
prediction = predict(x, W1, b1, W2, b2, W3, b3)
print("Prediction:", prediction)

在训练阶段直接除以概率P,测试阶段不用除以概率P。

综合考量

优点

  • 在不增加额外数据的情况下,提高模型的泛化能力。
  • 通过控制模型的复杂度,有助于减少过拟合。
  • 可以作为模型训练过程中的一个调整参数,灵活应用于不同的模型架构。

挑战

  • 需要仔细调整正则化参数以找到最佳平衡点,这可能需要多次实验。

  • 正则化可能会限制模型的性能,尤其是在数据量充足且模型复杂度适当的情况下。

  • 对于某些类型的模型(如深度学习模型),正则化的效果可能不如增加数据量显著。

  • 数据量不足:在数据量严重不足的情况下,获取更多数据通常是首选方案。如果数据收集不可行或成本过高,正则化可以作为一个有效的替代方案。

  • 模型复杂度过高:当模型复杂度过高且数据量相对不足时,正则化尤为重要。通过约束模型的复杂度,可以减少过拟合的风险。

  • 计算资源限制:在处理大规模数据集时,计算资源的限制可能成为一个问题。在这种情况下,正则化可以作为一种减轻计算负担的策略,同时保持模型的性能。

总之,获取更多的训练数据和正则化是提高模型性能的两种有效策略。在实际应用中,应根据具体情境和数据特点灵活选择和应用这两种方法。

超参数

  • 网络结构——隐层神经元个数,网络层数,非线性单元选择等
  • 优化相关———学习率、dropout比率、正则项强度等

在这里插入图片描述

  • 学习率过大,训练过程无法收敛
  • 学习率偏大,在最小值附近震荡,达不到最优
  • 学习率太小,收敛时间较长
  • 学习率适中,收敛快、结果好

超参数优化方法

  • 网格搜索法:
    1.每个超参数分别取几个值,组合这些超参数值,形成多组超参数;
    2.在验证集上评估每组超参数的模型性能;
    3.选择性能最优的模型所采用的那组值作为最终的超参数的值。

  • 随机搜索法
    1.参数空间内随机取点,每个点对应一组超参数;
    2.在验证集上评估每组超参数的模型性能;
    3.选择性能最优的模型所采用的那组值作为最终的超参数的值。

在这里插入图片描述
在这里插入图片描述

  • 粗搜索:利用随机法在较大范围里采样超参数训练一个周期,依据验证集正确率缩小超参数范围。
  • 精搜索:利用随机法在前述缩小的范围内采样超参数;运行模型五到十个周期,选择验证集上精度最高的那组超参数。

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

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

相关文章

【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙

目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活…

pytorch生成对抗网络

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 生成对抗网络&#xff08;GAN&#xff0c;Generative Adversarial Network&#xff09;是一种深度学习模型&#xff0c;由两个神经网络组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff0…

Baklib在企业知识管理领域的领先地位与三款竞品的深度剖析

内容概要 在现代企业中&#xff0c;知识管理已成为提高工作效率和推动创新的重要手段。Baklib作为一款领先的知识中台&#xff0c;以其集成化和智能化的特性&#xff0c;帮助企业在这一领域取得了显著成就。该平台具备强大的知识收集、整理、存储和共享功能&#xff0c;通过构…

2 MapReduce

2 MapReduce 1. MapReduce 介绍1.1 MapReduce 设计构思 2. MapReduce 编程规范3. Mapper以及Reducer抽象类介绍1.Mapper抽象类的基本介绍2.Reducer抽象类基本介绍 4. WordCount示例编写5. MapReduce程序运行模式6. MapReduce的运行机制详解6.1 MapTask 工作机制6.2 ReduceTask …

测压表压力表计量表针头针尾检测数据集VOC+YOLO格式4862张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4862 标注数量(xml文件个数)&#xff1a;4862 标注数量(txt文件个数)&#xff1a;4862 …

吴恩达深度学习——优化神经网络

本文来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 优化样本大小mini-batch 优化梯度下降法动量梯度下降法指数加权平均概念偏差纠正 动量梯度下降法 RMSpropAdam优化算法 优化学习率局部最优问题&#xff08;了解&#xff09; 优…

揭秘算法 课程导读

目录 一、老师介绍 二、课程目标 三、课程安排 一、老师介绍 学问小小谢 我是一个热爱分享知识的人&#xff0c;我深信知识的力量能够启迪思考&#xff0c;丰富生活。 欢迎每一位对知识有渴望的朋友&#xff0c;如果你对我的创作感兴趣&#xff0c;或者我们有着共同的兴趣点&…

17.[前端开发]Day17-形变-动画-vertical-align

1 transform CSS属性 - transform transform的用法 表示一个或者多个 不用记住全部的函数&#xff0c;只用掌握这四个常用的函数即可 位移 - translate <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta ht…

Python的那些事第五篇:数据结构的艺术与应用

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 目录 一、列表&#xff08;List&#xff09;&#xff1a;动态的容器 二、元组&#xff08;Tuple&#xff09;&#xff1a;不可变的序列 三、字典&#xff08;Dict&#xff09;&#xff1a;键值对的集合 四、集合&#xf…

Linux:线程池和单例模式

一、普通线程池 1.1 线程池概念 线程池&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价&…

【算法-位运算】位运算遍历 LogTick 算法

文章目录 1. 引入2. LogTick 优化遍历过程3. 题目3.1 LeetCode3097 或值至少为 K 的最短子数组 II3.2 LeetCode2411 按位或最大的最小子数组长度3.3 LeetCode3209 子数组按位与值为 K 的数目3.4 LeetCode3171 找到按位或最接近 K 的子数组3.5 LeetCode1521 找到最接近目标值的函…

【memgpt】letta 课程4:基于latta框架构建MemGpt代理并与之交互

Lab 3: Building Agents with memory 基于latta框架构建MemGpt代理并与之交互理解代理状态,例如作为系统提示符、工具和agent的内存查看和编辑代理存档内存MemGPT 代理是有状态的 agents的设计思路 每个步骤都要定义代理行为 Letta agents persist information over time and…

Python的那些事第九篇:从单继承到多继承的奇妙之旅

Python 继承&#xff1a;从单继承到多继承的奇妙之旅 目录 Python 继承&#xff1a;从单继承到多继承的奇妙之旅 一、引言 二、继承的概念与语法 三、单继承 四、多继承 五、综合代码示例 六、总结 一、引言 在编程的世界里&#xff0c;继承就像是一场神奇的魔法&#…

pandas(三)Series使用

一、Series基础使用 import pandasd {x:100,y:200,z:300} s1 pandas.Series(d) #将dict转化为Series print(s1)print("") l1 [1, 2, 3] l2 [a, b, c] s2 pandas.Series(l1, indexl2) #list转为Series print(s2)print("") s3 pandas.Series([11…

Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)

文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、使用Chatbox进行交互5.1 下载Chatbox安装包…

如何用微信小程序写春联

​ 生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production​​ 2、修改 app.json …

2025最新在线模型转换工具onnx转换ncnn,mnn,tengine等

文章目录 引言最新网址地点一、模型转换1. 框架转换全景图2. 安全的模型转换3. 网站全景图 二、转换说明三、模型转换流程图四、感谢 引言 在yolov5&#xff0c;yolov8&#xff0c;yolov11等等模型转换的领域中&#xff0c;时间成本常常是开发者头疼的问题。最近发现一个超棒的…

算法每日双题精讲 —— 前缀和(【模板】一维前缀和,【模板】二维前缀和)

在算法竞赛与日常编程中&#xff0c;前缀和是一种极为实用的预处理技巧&#xff0c;能显著提升处理区间和问题的效率。今天&#xff0c;我们就来深入剖析一维前缀和与二维前缀和这两个经典模板。 一、【模板】一维前缀和 题目描述 给定一个长度为 n n n 的整数数组 a a a&…

记8(高级API实现手写数字识别

目录 1、Keras&#xff1a;2、Sequential模型&#xff1a;2.1、建立Sequential模型&#xff1a;modeltf.keras.Sequential()2.2、添加层&#xff1a;model.add(tf.keras.layers.层)2.3、查看摘要&#xff1a;model.summary()2.4、配置训练方法&#xff1a;model.compile(loss,o…

88.[4]攻防世界 web php_rce

之前做过&#xff0c;回顾&#xff08;看了眼之前的wp,跟没做过一样&#xff09; 属于远程命令执行漏洞 在 PHP 里&#xff0c;system()、exec()、shell_exec()、反引号&#xff08;&#xff09;等都可用于执行系统命令。 直接访问index.php没效果 index.php?sindex/think\a…