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

embedded/2024/9/26 1:23:16/

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 nnclass 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 KFoldconfig = {"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.ppmy.cn/embedded/108402.html

相关文章

Python教程:使用 Python 和 PyHive 连接 Hive 数据库

目录 1. 引言 2. 类的设计思路 2.1 类的基本结构 3. 连接到 Hive 3.1 连接方法 4. 执行查询 4.1 查询返回 DataFrame 4.2 查询返回列表 5. 基本的数据库操作 5.1 创建表 5.2 插入数据 5.3 更新数据 5.4 删除数据 6. 表的描述信息和数据库操作 6.1 获取表描述 6…

设计模式 19 观察者模式

设计模式 19 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

JVM3-双亲委派机制

目录 概述 作用 如何指定加载类的类加载器? 面试题 打破双亲委派机制 自定义类加载器 线程上下文类加载器 Osgi框架的类加载器 概述 由于Java虚拟机中有多个类加载器,双亲委派机制的核心是解决一个类到底由谁加载的问题 双亲委派机制&#xff…

创建与操作MySQL数据库

2.1 创建数据库 数据库技术主要研究如何科学地组织和存储数据,以及如何高效地获取和处理数据,它已广泛应用于各个领域。数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库可以看作一个存储数据对象的容器,这些对象包括数…

Java项目: 基于SpringBoot+mybatis+maven墙绘产品展示交易平台(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven墙绘产品展示交易平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操…

乐凡三防|国产化浪潮下的三防平板

在当前的科技环境下,国产化成为了一个热门话题,尤其在三防平板领域,国产化不仅意味着技术的自给自足,更是国家信息安全与产业自主可控的重要体现。三防平板,即具备防水、防尘、防震功能的平板电脑,其全国产…

python---爬取QQ音乐

如Cookie为非vip,仅能获取非vip歌曲 1.下载包 pip install jsonpath 2.代码 import os import time import requests from jsonpath import jsonpathdef search_and_download_qq_music(query_text):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; …

用PG Back Web轻松进行PostgreSQL备份

什么是 PG Back Web ? PG Back Web 🐘 使用用户友好的 Web 界面轻松进行 PostgreSQL 备份!🌐💾。PG Back Web 不仅仅是另一个备份工具。借助 PG Back Web,用户可以通过受 PGP 加密保护的直观 Web 界面轻松安…