Datawhale X 李宏毅苹果书 AI夏令营(深度学习 之 实践方法论)

news2024/9/21 18:47:29

1、模型偏差

模型偏差是指的是模型预测结果与真实值之间的差异,这种差异不是由随机因素引起的,而是由模型本身的局限性或训练数据的特性所导致的。

简单来讲,就是由于初期设定模型,给定的模型计算能力过弱,导致在通过梯度下降法进行优化以得到损失最小的函数过程中,模型表现太差,结果如同想要在大海里面捞针(一个损失低的函数),结果针根本就不在海里。
在这里插入图片描述

1.1、解决方案:

  • 重新设计一个模型,给模型更大的灵活性增加更多特征;
  • 通过增加模型的隐藏层数、神经元数量或采用更复杂的网络结构来提高模型的拟合能力;
  • 通过结合多个模型的预测结果来提高整体预测的准确性和稳定性;

2、优化问题

一般会使用梯度下降法找最优拟合函数,往往无法找到一个真的可以让损失很低的参数。当训练数据的损失不够低的时候,需要考虑的是 到底是模型的偏差,还是优化的问题。可能可能选择的模型已经够灵活了,但是优化梯度下降力度不够;可能是学习率设置时使用固定学习率,在优化后期出现了“震荡”/“停滞”。
在这里插入图片描述

2.1、解决方案

  • 结合多个模型比较,通过比较不同的模型来判断模型现在到底够不够大。(可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM))

在这里插入图片描述

3、过拟合

过拟合(Overfitting)是深度学习中一个常见的问题,指的是模型在训练数据上表现得太好,以至于它学习了训练数据中的噪声和细节,而这些噪声和细节并不适用于新的、未见过的数据。结果,模型在训练集上表现优异,但在测试集或实际应用中的泛化能力却很差。
在这里插入图片描述

3.1、解决方案一:增加训练集数据

往往是最有效的

如图,当训练集数据增加时,直观上看,模型的灵活性被限制住了,更不容易过拟合训练集数据;实际上,更多的训练集数据,更能够反应真实的数据分布,由此训练得到的模型也更能够在测试集上有不错的结果。
在这里插入图片描述

解决方案二:限制模型

  • 给模型比较少的参数;
  • 用更少的特征;
  • 正则化(regularization)
    L1正则化和L2正则化:通过在损失函数中添加一个正则项(通常是权重向量的L1或L2范数),来限制模型的复杂度。 Dropout:在训练过程中随机丢弃一部分神经元,以减少神经元之间的共适应关系,从而防止过拟合。
import torch.optim as optim
# 在定义优化器的时候使用weight_decay参数进行L2正则化
optimizer = optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-4)
  • 丢弃法(dropout)
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 256)
        # 定义dropout层
        self.dropout = nn.Dropout(p=0.5)
        self.fc2 = nn.Linear(256, 10)
    
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.dropout(x)
        x = self.fc2(x)
        return x
  • 早停法(Early Stopping)

    在训练过程中监控模型在验证集上的表现,一旦性能开始下降,就停止训练。
    在这里插入图片描述

3.2、交叉验证

比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。比如 90% 的数据作为训练集,有 10% 的数据作为验证集。用training set中的数据训练模型,用validation set中的数据挑选模型。

理想上就用验证集挑就好,有过比较好的基线(baseline)算法以后,就不要再去动它了,就可以避免在测试集上面过拟合。

k 折交叉验证

from sklearn.model_selection import KFold

config = {
    "k_fold": 5,
    "num_epochs": 50,
    "batch_size": 16,
    "learning_rate": 0.001
}
# 定义KFold交叉验证器
kfold = KFold(n_split=k_folds, shuffle=True)
for fold, (train_idx, val_idx) in enumerate(kfold.split(x)):
    X_train, X_val = X[train_idx], X[val_idx]
    y_train, y_val = y[train_idx], y[val_idx]
    
    train_dataset = TensorDataset(X_train, y_train)
    val_dataset = TensorDataset(X_val, y_val)
    
    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
    val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
    ...

4、不匹配

数据不匹配问题:数据分布不匹配是指在不同数据集之间存在较大差异,这通常会导致在一个数据集上训练好的模型在另一个数据集上表现不佳。这种不匹配可能源于数据采集的环境、设备、时间等因素的差异,以及数据本身的性质、规模、类别分布等因素的不同。

解决方案

针对数据分布不匹配问题,可以采取以下多种方法来解决:

  • 数据增强:
    对数据集进行一定的变换,如旋转、翻转、缩放、裁剪、添加噪声等,以增加数据的多样性,从而使模型更具鲁棒性。这种方法可以模拟真实世界中数据的各种变化,提高模型对未知数据的适应能力。
  • 迁移学习:
    利用在一个数据集上训练好的模型,通过微调(fine-tuning)或特征提取(feature extraction)的方式,将其应用到另一个数据集上。这种方法可以充分利用已有模型的知识,减少在新数据集上训练模型的时间和资源消耗,同时减少数据分布不匹配带来的影响。
  • 样本增强:
    如果两个数据集中的样本类别分布不均匀,可以通过过采样(oversampling)或欠采样(undersampling)等方法来平衡样本类别。过采样是增加少数类样本的数量,而欠采样是减少多数类样本的数量,以达到类别平衡的目的。这种方法可以提高模型在不同类别上的泛化能力。
  • 领域适应方法:
    通过在不同数据集之间学习领域适应的特征表示,可以减少数据分布不匹配带来的影响。例如,可以使用对抗训练(adversarial training)或领域对抗神经网络(Domain-Adversarial Neural Network, DANN)等方法来学习领域不变的特征表示。这些方法可以在保留数据主要特征的同时,减少领域差异对模型性能的影响。
  • 动态调整模型:
    在训练过程中监控模型在不同数据集上的表现,并根据实时表现调整学习率、更新策略等超参数。这种方法可以根据模型的实时反馈来动态调整训练过程,提高模型的泛化能力。
  • 模型优化:
    进一步优化模型结构和算法,提高模型的准确性和泛化能力。例如,可以采用更复杂的网络结构、更先进的优化算法等来提高模型的性能。
  • 多模态数据处理:
    将不同类型的数据进行融合和处理,提高模型的复杂度和适应性。例如,在图像分类任务中,可以结合文本、声音等多模态数据来提高分类的准确性。

这些方法可以在不同程度上提高模型的泛化能力和性能表现。在实际应用中,可以根据具体问题和数据集的特点选择合适的方法来解决不匹配问题。

在这里插入图片描述
补充学习地址:
李宏毅《机器学习/深度学习》2021课程

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

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

相关文章

vector的实现

目录 1.vector的底层 2.vector构造函数的实现 ①构造函数 ②拷贝构造 3.访问函数实现 3.1迭代器iterator 3.2下标[]访问 4.析构函数和计算size、capacity、swap简单函数的实现 ①析构函数: ②计算size: ③计算capacity: ④swap函…

嵌入式软件--51单片机 DAY 3

一、独立按键 按键的作用相当于一个开关,按下时接通(或断开),松开后断开(或接通)。 (1)需求 通过SW1、SW2、SW3、SW4四个独立按键分别控制LED1、LED2、LED3、LED4的亮灭&#xff0…

爬虫数据解析

## 数据解析 聚焦爬虫 爬取页面中指定的页面内容 编码流程 指定url发起请求获取响应数据数据解析持久化存储 数据解析分类 正则bs4xpath(***) 数据解析原理概述 解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储进行指定标签的定…

最小生成树的两种算法模板

第一种模板&#xff1a; 思路&#xff1a;对于prime算法来说其实与朴素的dij算法差不多&#xff0c;都是找到最近的点然后更新其他的点 模板&#xff1a; #include<bits/stdc.h>using namespace std;const int N 100010;int n; int g[110][110]; int dis[110]; int st…

VMware Workstation 17.6 Pro 发布下载,新增功能概览

VMware Workstation 17.6 Pro 发布下载&#xff0c;新增功能概览 VMware Workstation 17.6 Pro for Windows & Linux - 领先的免费桌面虚拟化软件 基于 x86 的 Windows、Linux 桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-workstation-17/…

Linux日志-wtmp日志

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具&#xff0c;它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…

B端系统门门清之:QMS-质量管理,泰山之重。

质量重于泰山&#xff0c;QMS&#xff08;质量管理系统&#xff09;在生产企业的经营中非常重要&#xff0c;质量的积累可以成就一个企业&#xff0c;想要毁掉一个企业&#xff0c;也是瞬间的事情&#xff0c;本文就和大家重点分享一下QMS系统。 一、什么是QMS系统&#xff0c…

SpringCloud开发实战(二):通过RestTemplate实现远程调用

目录 SpringCloud开发实战&#xff08;一&#xff09;&#xff1a;搭建SpringCloud框架 RestTemplate介绍 RestTemplate 是 Spring 框架中的一个类&#xff0c;它用于促进 HTTP 请求的发送和接收&#xff0c;并且简化了与 RESTful 服务的交互。RestTemplate 提供了许多便利的方…

C++ 学习 2024.9.3

封装栈与队列 栈: #include <iostream>using namespace std;class Stack { private:int *a; //动态数组存储元素int size; //栈容量int top; //栈顶元素索引 public://有参构造Stack(int size):size(size),top(-1){anew int[size];}//析构~Stack(){delete[]a…

八月二十九日(day 39)docker6

1.前端&#xff08;nginx&#xff09; [rootlocalhost ~]# docker pull nginx //拉取nginx镜像 [rootlocalhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 5ef79149e0ec 2 we…

【Godot4.3】基于纯绘图函数自定义的线框图控件

概述 同样是来自2023年7月份的一项实验性工作&#xff0c;基于纯绘图函数扩展的一套线框图控件。初期只实现了三个组件&#xff0c;矩形、占位框和垂直滚动条。 本文中的三个控件类已经经过了继承化的修改&#xff0c;使得代码更少。它们的继承关系如下&#xff1a; 源代码 W…

抽象和接口

a.抽象&#xff08;abstract&#xff09; 1. 定义 a. 抽象类&#xff1a;在普通类里增加了抽象方法。 b. 抽象方法&#xff1a;没有具体的执行方法&#xff0c;没有方法体的方法。 2. 总结 a. 因为抽象方法没有方法体&#xff0c;无法执行&#xff0c;所以不能…

WEB服务与虚拟主机/IIS中间件部署

WWW&#xff08;庞大的信息系统&#xff09;是基于客户机/服务器⽅式的信息发现技术和超⽂本技术的综合。网页浏览器//网页服务器 WWW的构建基于三项核⼼技术&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;⽤于在Web服务器和客户端之间传输数据。HTML&#xff1a;⽤…

xml转txt,适应各种图片格式,如jpg,png,jpeg,PNG,JPEG等

xml转txt&#xff0c;适应各种图片格式&#xff0c;如jpg&#xff0c;png&#xff0c;jpeg&#xff0c;PNG&#xff0c;JPEG等 import xml.etree.ElementTree as ET import os import cv2 import numpy as np import globclasses []def convert(size, box):dw 1. / (size[0]…

力扣面试150 旋转链表 闭链成环

Problem: 61. 旋转链表 &#x1f468;‍&#x1f3eb; 力扣官解 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode nex…

一小时教你学会C语言系统!C语言实战教程-学生信息管理系统源码

本次教程带大家做一个C语言学生信息管理系统&#xff0c;带教程视频 C语言实战教程-XX管理系统 期末C语言课设不会做&#xff1f; 想学习一下怎么用C语言做出一个完整的系统&#xff1f;完整的步骤是怎么样的&#xff1f; 本教程就教你怎么从0搭建一个系统并且完美运行起来…

Python基础语法(多进程开发进程建数据共享进程锁进程池)

Python基础语法文章导航&#xff1a; Python基础&#xff08;01初识数据类型&变量&#xff09;Python基础&#xff08;02条件&循环语句&#xff09;Python基础&#xff08;03字符串格式化&运算符&进制&编码&#xff09;Python基础&#xff08;04 基础练习…

93.游戏的启动与多开-进程枚举多开检测

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;92.游戏的启动与多开-多开检测概述 枚举多开检测在事前检测用的很少&#xff0c;在事中…

Https配置免费SSL证书

本文目录 前言一、前提1.1 服务器1.2 域名 二、Certbot简介2.1 Apache服务器2.2 Nginx服务器 三、自动更新证书四、效果 前言 HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的…

【重学 MySQL】二、MySQL 介绍

【重学 MySQL】二、MySQL 介绍 MySQL 概述MySQL 的主要特点MySQL 的应用场景结论 MySQL 发展史初始创建与发布开源与快速成长重要版本发布收购与变革分支与竞争持续发展与现代应用 关于 MySQL8.0主要新特性和改进兼容性和迁移应用场景总结 为什么选择 MySQLOracle VS MySQL基本…