深度学习调参大法

目录

  • trick 1:深度学习调参核心点
  • trick 2:关于 深度学习Model选型问题
  • trick 3:关于数据
  • trick 4:关于调参
    • 4.1 关于 Loss function 调参策略
    • 4.2 关于 Learning rate 和 batch size 调参策略
    • 4.3 关于 Epoch number 和 early stopping 调参策略
    • 4.4 关于 Optimizer 调参策略
    • 4.5 关于 Activation function 调参策略
    • 4.6 关于 Weights initialization 调参策略
    • 4.7 关于 Regularization 调参策略
    • 4.8 关于 Validation 调参策略
  • trick 5:模型训练过拟合和欠拟合问题?
    • 5.1 欠拟合(Underfitting)
    • 5.2 过拟合(Overfitting)
  • trick 6:模型参数初始化方法
  • trick 7:Normalization 选择问题
  • 模型输出层选择问题
  • trick 8:随机数种子设定问题
  • trick 9:cross validation问题
  • trick 10:新模型开发前期问题
  • trick 11:badcase 分析问题

1. trick 1:深度学习调参核心点

首先需要牢记一个点:模型选型和数据质量决定了任务的底线,而调参只是锦上添花的工作

先overfit 再trade off,首先保证你的模型capacity能够过拟合,再尝试减小模型,各种正则化方法;

2. trick 2:关于 深度学习Model选型问题

深度学习Model选型是一个综合考虑多个因素的过程,旨在找到最适合特定任务和数据集的模型。以下是一些关键步骤和考虑因素:

  • 理解任务需求
  1. 任务类型:首先要明确任务是分类、回归、生成、排序还是其他,比如文本相似度计算、图像识别、自然语言处理等。
  2. 数据特性:考虑数据的维度、规模、结构(如图像、文本、时序数据等)和质量。
  • 模型容量
  1. 选择一个与数据复杂度相匹配的模型大小。模型过于简单可能导致欠拟合,而过于复杂则可能过拟合。
  2. 考虑模型的参数数量和可调整范围。
  • 数据复杂度
  1. 样本数量和特征维度会影响模型选择。大数据集通常能支持更复杂的模型。
  2. 数据的时间或空间结构,以及多样性,也是选择模型时的重要考量。
  • 先验知识与预训练模型
  1. 利用领域知识选择合适的模型结构,例如在NLP任务中,预训练的Transformer模型(如BERT, Sentence-BERT)常被用于文本相似度计算。
  2. 预训练模型可以在特定任务上提供强大的初始化,加速训练过程并提高性能。
  • 计算资源
  1. 考虑可用的GPU、内存和计算时间。复杂模型往往需要更多资源。
  2. 在资源有限的情况下,轻量级模型或模型压缩技术可能是更好的选择。
  • 模型可解释性

对于某些应用,模型的可解释性至关重要。决策树、线性模型相对容易解释,而深度神经网络可能较难解释。

  • 评估与验证
  1. 设计合适的评价指标,如准确率、F1分数、AUC-ROC等,确保模型性能可量化。
  2. 使用交叉验证来可靠地估计模型泛化能力,并避免过拟合或欠拟合。
  3. 实施正则化技术(如权重衰减、dropout)以控制模型复杂度。
  • 实验与调优
  1. 初始可尝试几个不同的模型架构,进行快速原型设计。
  2. 根据初步实验结果,逐步精细化调优选定的模型,包括调整超参数、网络结构等。
  • 框架与工具

选择合适的深度学习框架(如TensorFlow、PyTorch、Keras等),考虑其易用性、社区支持、生态系统等因素。

所以说深度学习模型选型是一个迭代且实践驱动的过程,需要不断地实验、评估与调整,直至找到满足特定需求的最佳模型。

3. trick 3:关于数据

  • 数据量太大时,可以采取以下几种策略来有效管理和处理数据,确保模型训练的可行性:
  1. 数据采样
    1. 随机采样:从整个数据集中随机抽取一部分作为训练数据,可以是无放回或有放回采样。
    2. 分层采样:确保每个类别或重要属性在采样数据中都有代表性,适用于分类任务。
  1. Mini-Batch训练:将数据集分成多个小批量(mini-batches),每次仅使用一个小批量数据来更新模型参数,减少了内存需求并加速了训练过程。
  2. 在线学习或流式学习:不一次性加载所有数据,而是让数据一批批地通过模型,适合处理不断增长或内存限制严格的场景。
  3. 硬盘/外部存储读取:只加载当前需要训练的数据到内存,其余数据存储在硬盘上,按需读取。例如,使用tf.data.Dataset(TensorFlow)或PyTorch的DataLoader实现。
  4. 数据集划分与分布式训练:将数据集分割并在多个GPU或计算节点上并行训练,利用分布式训练框架如Horovod、PyTorch的torch.nn.parallel.DistributedDataParallel或TensorFlow的tf.distribute.Strategy。
  5. 数据压缩与降维:对数据进行压缩处理,如图像的量化、特征选择或降维(PCA、t-SNE等),减少内存占用。
  6. 增量学习或持续学习:模型不是一次性训练完成,而是逐步学习新数据,每次迭代只添加或更新部分数据,适用于数据流持续到来的情况。
  7. 使用TFRecords或其他高效的文件格式:将数据序列化为高效的二进制格式,如TensorFlow的TFRecords,这有助于减少读取时间和内存使用。
  8. 近似方法和算法优化:对于特定类型的模型(如推荐系统中的矩阵分解),使用近似算法减少计算复杂度和内存需求。
  9. 硬件升级与云服务:如果条件允许,增加物理内存或使用高性能计算资源,甚至迁移到云服务,如Google Cloud、AWS或Azure,它们提供了灵活的计算和存储资源。

  • 数据量太小时,可以采取以下几种策略来有效管理和处理数据,确保模型训练的可行性:
  1. 数据增强
    1. 对现有数据进行变换以生成新的样本,如图像旋转、翻转、缩放、裁剪、色彩调整等,适用于计算机视觉任务。
    2. 文本数据可以通过同义词替换、句式转换、文本摘要等方式增强。
    3. 语音数据可以通过改变速度、音调、添加背景噪音等方法增加多样性。
  1. 迁移学习
    1. 使用预训练模型作为起点,这些模型在大型数据集上已经学习到了通用特征,然后在自己的小数据集上进行微调。
    2. 只对模型的最后一层或几层进行训练,保留前面的层不变,这样可以利用预训练模型的强大表示能力。
  1. 集成学习:训练多个模型并将它们的预测结果结合起来,可以是bagging、boosting等方法,这有助于减少方差,提高模型稳健性。
  2. 正则化:使用L1、L2正则化或Dropout等技术防止模型过拟合,使模型在小数据集上表现更好。
  3. 半监督学习或自监督学习:半监督学习利用少量有标签数据和大量无标签数据进行训练;自监督学习则让模型从无标签数据中自我生成监督信号,减少对大量标注数据的依赖。
  4. 生成模型:利用GANs(生成对抗网络)、VAEs(变分自编码器)等生成模型来合成新的数据样本,尤其是图像或文本数据。
  5. 主动学习:一种迭代方法,模型在训练过程中主动选择最有价值的样本请求人工标注,从而高效增加数据质量和数量。
  6. 模型精简:选择小型网络结构或进行模型剪枝,减少模型复杂度,使得小数据集也足以训练。
  7. 重采样技术:对于类别不平衡的数据集,可以通过过采样少数类或欠采样多数类来平衡数据,提高训练效率。
  8. 仿真数据生成:根据业务逻辑或领域知识创建仿真数据,尤其是对于难以收集真实数据的情况。
  • 一定要进行数据预处理,把数据分布分散到均值为0,方差为1的区间,利于训练模型

注:数据增强要结合任务本身来设计

4. trick 4:关于调参

调参一定要做好笔记,每次只调1个参数。有哪些参数可以调呢?

4.1. 关于 Loss function 调参策略

是Model和数据之外,第三重要的参数。具体使用MSE、Cross entropy、Focal还是其他自定义,需要具体问题具体分析。

4.2. 关于 Learning rate 和 batch size 调参策略
  1. Learningrate和batch size是两个重要的参数,而且二者也是相互影响的,在反向传播时直接影响梯度。一般情况下,先调batchsize,再调learning rate。
  2. batch size不能太大,也不能太小,一般设置为16的倍数。
    1. 太小会浪费计算资源,
    2. 太大则会浪费内存;
    3. 特殊情况:batch size 在表示学习,对比学习领域一般越大越好,显存不够上累计梯度,否则模型可能不收敛… 其他领域看情况;
  1. 如果使用微调,则learningrate设置:
    1. 一般nlp bert类模型在1e-5级别附近,warmup,衰减;
    2. cv类模型在1e-3级别附近,衰减;具体需要多尝试一下。
  1. learningrate设置上有很多trick,包括cosing learning rate,warmup,衰减等。
4.3. 关于 Epoch number 和 early stopping 调参策略
  1. Epoch number和Early stopping是息息相关的,需要输出loss看一下,到底是什么epoch时效果最好,及时early stopping;
  2. Epoch越大,会浪费计算资源;epoch太小,则训练模型提取特征没到极致;
  3. 此外,也要明自Epoch、lteration、batchsize的关系。

注:

  1. 不要过早的early stopping,有时候收敛平台在后段
  2. 对于数据量巨大的推荐系统的模型来说一个epoch足矣,再多就会过拟合。
4.4. 关于 Optimizer 调参策略
  1. Adam和SGDM是最常用的两个,前者能快速收敛,后者收敛慢但最终精度更高。现在大家会先使用Adam快速收敛,后面再用SGDM提升精度。
  2. 如果必须二选一的话,我会推荐Adam。

注:nlp,抽象层次较高或目标函数非常不平滑的任务优先使用adam,其他可以尝试下sgd(一般需要的迭代次数高于sgd)

4.5. 关于 Activation function 调参策略
  1. ReLu、Sigmoid、Softmax、Tanh是最常用的4个激活函数。
  2. 对于输出层,常用sigmoid和softMax激活函数,中间层Q常用ReLu激活函数,RNN常用Tanh激活函数。
4.6. 关于 Weights initialization 调参策略
  1. 预训练参数是最好的参数初始化方式,其次是Xavir。
4.7. 关于 Regularization 调参策略

Dropout虽然思想很简单,但效果出奇的好,现在大部分任务都需要使用预训练型,要注意型内部dropout ratio是一个很重要的参数,首选0.5,使用默认值不一定最优,有时候dropoutreset到0有奇效;

4.8. 关于 Validation 调参策略
  1. 在 Validation 筛选模型参数时,可以除loss函数外,设置某种规则引导模型向某个想要的方向去更新参数。

5. trick 5:模型训练过拟合和欠拟合问题?

模型训练过程中的过拟合(Overfitting)和欠拟合(Underfitting)是两个常见的问题,它们影响模型的泛化能力,即模型在未见过的新数据上的表现。

5.1. 欠拟合(Underfitting)
  • 欠拟合(Underfitting)判断:欠拟合发生时,模型无法捕捉数据中的底层模式,导致模型在训练数据上表现不佳,同时在测试数据上的表现也会较差
  • 欠拟合(Underfitting)发生原因:其主要原因是模型过于简单,不足以表达数据集中的复杂关系。欠拟合的迹象包括训练误差和验证误差都很高,且两者接近。
  • 解决欠拟合的方法包括:
  1. 增加模型复杂度:通过增加网络层数、节点数或使用更复杂的模型结构来提高模型的表达能力。
  2. 增加特征:引入更多相关特征,帮助模型更好地理解数据。
  3. 调整模型参数:优化模型参数设置,如学习率、批次大小等,以促进更好的学习。
  4. 减少正则化强度:如果使用了正则化但模型依然欠拟合,可能需要减小正则化参数。
5.2. 过拟合(Overfitting)
  • 过拟合(Overfitting)危害:过拟合的特征是训练误差很低,而验证或测试误差较高
  • 过拟合(Overfitting)发生原因:过拟合则是模型在训练数据上表现过于优秀,以至于它学习到了训练数据中的噪声和偶然特性,而不是数据的真实分布。这导致模型在未见过的测试数据上的表现显著下降。
  • 解决过拟合(Overfitting)的方法包括:
  1. 增加训练数据:更多的数据可以帮助模型更好地泛化。
  2. 正则化:通过在损失函数中加入正则项(如L1、L2正则化),限制模型参数的大小,避免参数过度优化训练数据中的细节。
  3. 早停法(Early Stopping):在验证集上的性能不再提升时停止训练。
  4. 交叉验证:使用K折交叉验证等方法更准确地评估模型性能,避免过拟合。
  5. Dropout:随机“丢弃”一部分神经元,减少模型对特定训练样本的依赖。
  6. 数据增强:通过变换原始数据生成额外的训练样本,增加模型的泛化能力。
  7. 简化模型:减少模型复杂度,如减少神经网络的层数或节点数,避免不必要的复杂性。

个人经验:如果过拟合,首先是dropout,然后batchnorm,过拟合越严重dropout+bn加的地方就越多,有些直接对embedding层加,有奇效。

6. trick 6:模型参数初始化方法

linear/cnn一般选用kaiminguniform 或者normalize,embedding一般选择截断normalize,论文很多,可以去看看。

7. trick 7

7.1. Normalization 选择问题

GN,BN和LN都是在神经网络训练时的归一化方法,BN即Batch Normalization,LN即Layer Normalization。

  • BatchNorm:batch方向做归一化,计算NHW的均值
  • LayerNorm:channel方向做归一化,计算CHW的均值
  • InstanceNorm:一个channel内做归一化,计算H*W的均值
  • GroupNorm:先将channel方向分group,然后每个group内做归一化,计算(C//G)HW的均值

GN与LN和IN有关,这两种标准化方法在训练循环(RNN / LSTM)或生成(GAN)模型方面特别成功。

  • 如何选择:序列输入上LN,非序列上BN
7.2. 模型输出层选择问题

基于banckbone 构建层次化的neck一般都比直接使用最后一层输出要好,reduce function一般attention 优于简单pooling,多任务需要构建不同的qkv

8. trick 8:随机数种子设定问题

随机数种子设定好,否则很多对比实验结论不一定准确

9. trick 9:cross validation问题

cross validation方式要结合任务设计,数据标签设计,其中时序数据要避免未来信息泄漏

10. trick 10:新模型开发前期问题

做新模型的时候,最开始不要加激活函数,不要加batchnorm,不要加dropout,先就纯模型。然后再一步一步的实验,不要过于信赖经典的模型结构(除非它是预训练的),比如加了dropout一定会有效果,或者加了batchnorm一定会有提升所以先加上,首先你要确定你的模型处于什么阶段,到底是欠拟合还是过拟合,然后再确定解决手段。

11. trick 11:badcase 分析问题

对于图像和nlp,效果一直不提高,可以尝试自己标注一些模型经常分错的case,然后加入训练会有奇效。

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

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

相关文章

数据结构模板代码合集(不完整)

P3368 【模板】树状数组 2 #include <bits/stdc.h> using namespace std; const int maxn 5e5 7;int n, m, s, t; int ans; int a[maxn]; struct node{int l, r;int num; }tr[maxn * 4];void build(int p, int l, int r){tr[p] {l, r, 0};if(l r){tr[p].num a[l];r…

TCP全连接队列与 tcpdump 抓包

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;计算机网络高效通关之路 欢迎大家点赞收藏评论&#x1f60a; 目录 listen第二个参数详解 全连接队列与半连接队列半开放连接队列&#xff08;SYN队列&#xff09;全连接队列&#xff08;接受队列…

【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API

目录 1.MySQL事务处理机制 1.1.autocommit 1.2.autocommit的设置与查看 1.3.使用示例 2.事务操作API 2.1.设置事务提交模式——mysql_autocommit() 2.2.提交事务——mysql_commit() 2.3.事务回滚——mysql_rollback() 3.错误处理的API 3.1.返回错误的描述——mysql_er…

15.6 JDBC数据库编程6——可滚动和可更新的ResultSet

目录 15.6 引言 15.6.1 可滚动的ResultSet 15.6.1 可更新的ResultSet 15.6 引言 可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录&#xff0c;还可以向后访问结果集中记录。可更新的ResultSet是指不但可以访问结果集中的记录&#xff0c;还可以更新…

关于移动硬盘复制文件0x80071AC3错误解决方法

一、问题详情 新入手的西部数据移动硬盘在复制文件到手机是没有问题的&#xff0c;但是在电脑复制文件的时候&#xff0c;电脑弹出0x80071AC3错误&#xff0c;没办法复制文件&#xff0c;也没办法新建文件夹。 二、原因 因为卷有问题&#xff0c;请运行chkdsk并重试。 三、解…

使用Vue.js构建响应式Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

SLAM|1. 相机投影及相机畸变

一个能思考的人&#xff0c;才真是一个力量无边的人。——巴尔扎克 本章主要内容&#xff1a; 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定 本节主要介绍在照相机拍摄过程中&#xff0c;现实物体如何跟照片上的像素关联起来&#xff0c;具体涉及相机成像的物…

LabVIEW换流变换器智能巡检系统

基于LabVIEW的换流变换器智能巡检系统通过自动化检测和数据分析&#xff0c;提高换流变换器的运行效率和可靠性&#xff0c;降低人工维护成本。 项目背景&#xff1a; 换流变压器作为电力系统的重要组成部分&#xff0c;其性能的可靠性直接影响到整个电网的稳定运行。然而&…

Spring Boot:植物健康的智能守护者

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Python基于amazon/chronos-t5-base的预训练模型离线对时间系列数据的未来进行预测

Python基于预训练模型对时间系列数据的未来进行预测 导入库 %matplotlib inline import matplotlib.pyplot as plt import numpy as np import pandas as pd import torch from chronos import ChronosPipeline from tqdm.auto import tqdm from autogluon.timeseries import…

【Java】使用iText依赖生成PDF文件

文章目录 使用iText实现PDF文件生成1. 需求2 . 添加依赖3. 核心4. 实战案例&#xff1a;生成录用通知书4.1 整体架构4.2 初始化PDF文档4.3 配置中文字体4.4 添加背景图片4.5 添加文本内容4.6 处理文档生成 5. 关键技巧与注意事项5.1 字体处理5.2 图片处理5.3 布局控制5.4 异常处…

探索人工智能在自然语言处理中的应用

探索人工智能在自然语言处理中的应用 前言1. 机器翻译2. 情感分析3. 智能客服4. 文本生成未来展望 结语 前言 在信息爆炸的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为人工智能&#xff08;AI&#xff09;的一个重要分支&#xff0c;正以前所未有的速度改变着…

LabVIEW提高开发效率技巧----节省内存

在LabVIEW开发过程中&#xff0c;内存管理是保障程序稳定性和性能的关键。本文将详细介绍如何通过队列处理来节省内存&#xff0c;尤其是如何通过解耦释放不再需要的数据&#xff0c;防止内存泄漏。通过多个实际例子&#xff0c;从不同角度探讨队列处理在大数据量或长时间运行的…

苹果瑕疵数据集苹果质量数据集YOLO格式VOC格式 深度学习 目标检测 数据集

一、数据集概述 数据集名称&#xff1a;2类苹果图像数据集 数据集包含两类样本&#xff1a;正常苹果和有瑕疵的苹果。正常苹果样本代表完好的苹果&#xff0c;而有瑕疵的苹果样本代表苹果表面可能存在的损伤、瑕疵或病害。每个样本都经过详细标记和描述&#xff0c;以便训练模…

大语言模型数据类型与环境配置

文章目录 前言一、环境安装二、大语言模型数据类型1、基本文本指令数据类型2、数学指令数据类型3、几何图形指令数据类型4、多模态指令数据类型5、翻译指令数据类型 三、vscode配置 前言 简单给出环境安装与数据类型及vscode运行配置&#xff0c;其中vscode运行配置是便于我们…

专业135+总分400+西安交通大学815869(原909)信号与系统考研经验电子信息与通信工程,真题,大纲,参考书

经过将近一年的考研复习&#xff0c;终于梦圆西安交大&#xff0c;今年专业课815(和专硕869&#xff08;原909&#xff09;差不多)信号与系统135&#xff0c;总分400&#xff0c;回想这一年的复习还有很多经验和大家分享&#xff0c;希望可以对大家复习有所帮助&#xff0c;少走…

3.cpp基本数据类型

cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型&#xff1a;存储真值 true 或假值 false&#xff0c;C语言编译器C99以上支持。 C语言的bool类型&#xff1a;要添加 #include <stdbool.h>头文件 #includ…

数据库相关知识点

1. 数据库分片与分区 分片&#xff08;Sharding&#xff09;&#xff1a;这是一种将数据水平分割的技术&#xff0c;每个分片包含数据的一个子集。分片通常用于提高数据库的扩展性和性能&#xff0c;特别是在处理大量数据时。通过将数据分布在多个分片上&#xff0c;可以并行处…

ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)

【版权所有&#xff0c;文章允许转载&#xff0c;但须以链接方式注明源地址&#xff0c;否则追究法律责任】【创作不易&#xff0c;点个赞就是对我最大的支持】 前言 仅作为学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01; 目录 前…

Maven基础知识

一、Maven的概述 maven 是什么&#xff1f; 是一个项目管理工具&#xff0c;它包含了一个项目对象模型&#xff0c;一组标准集合&#xff0c;一个项目的生命周期&#xff0c;一个依赖管理系统&#xff0c;和用来运行定义在生命周期阶段和插件目标的逻辑。 二、Maven的依赖管理…