当前位置: 首页 > article >正文

【NLP 12、深度学习15条调参经验】

反正是绚烂,反正是到来

反正是背负慢慢凋残的孤独

耀眼的孤独,义无反顾的孤独

                                —— 24.12.9

深度学习15条调参经验

1.调参

调参是锦上添花的事,而底线取决于模型的选择和数据的清洗

2.关于model

① 尽量不要自己手写模型,找一个没有bug或者已经走通的模型自己去修改

② 当数据量少的时候,最好使用带预训练参数(如Imagenet)的模型微调

3.关于数据

① 数据量太大的情况下,可以先用1/10,1/100的数据去估算一下训练或者推理时间,心里有个底

② 视觉问题一定要使用数据增强

③ 一定要进行数据预处理,把数据分布分散到均值0,方差为1的区间,利于训练模型

4.关于调参

有哪些参数可以调节呢?

Loss function(损失函数)

Learning rate(学习率)

Batch size(训练批次的大小)

Epoch number(训练轮数)

Optimizer(优化器)

Activation function(激活函数)

Weights initialization(权重初始化)

使用Regularization(正则化)

Validation(验证集)

使用的GPU个数

5.关于Loss function 损失函数

Loss function(损失函数)Model(模型)数据之外,第三重要的参数。具体使用MSE(均方差损失函数)、Cross entropy(交叉熵损失函数)、Focal(焦点损失函数)还是其他自定义,需要具体问题具体分析。

6.关于 Learning rate 学习率 和 batch size 批次大小

(1)Learning rate(学习率)训练批次(batch size)是两个重要的参数,而且二者也是相互影响的,在反向传播时直接影响梯度。一般情况下,先调batch size,再调learning rate

(2)batch size不能太大,也不能太小,太小会浪费计算资源太大则会浪费内存;一般设置为16的倍数

(3)如果使用微调,则learning rate(学习率)设置为0.0001较好。learning rate设置上有很多trick(技巧),包括cosine learning rate(余弦退火学习率)等。

7.关于Epoch number和early stopping

(1)Epoch number(模型训练过程中所经历的完整数据集遍历次数) 和 Early stopping(早期停止)是息息相关的,需要输出loss看一下,到底是什么epoch时效果最好,及时early stopping。

(2)Epoch(模型完整遍历一次训练数据集)越大,会浪费计算资源,epoch太小,则训练模型提取特征没到极致。

(3)此外,也要明白Epoch模型完整遍历一次训练数据集)、lteration(一次参数更新的过程)、batch size(批次大小)的关系,一个 Epoch 意味着模型对整个训练数据集完整遍历一次。假设训练数据集包含 N个样本,Batch size 设为 m,则在一个 Epoch 里的 Iteration 次数为 N / m (若N不能被m 整除则向上取整)。

8.关于Optimizer 优化器

(1)AdamSGDM是最常用的两个,前者能快速收敛,后者收敛慢但最终精度更高。现在大家会先使用Adam快速收敛,后面再用SGDM提升精度。

(2)如果必须二选一的话,我会推荐Adam

9.关于Activation 激活函数

(1)ReLu、Sigmoid、Softmax、Tanh是最常用的4个激活函数

(2)对于输出层,常用 sigmoid softMax 激活函数,中间层常用 ReLu 激活函数,RNN(循环神经网络)常用Tanh激活函数。

10.关于Regularization 正则化

预训练参数是最好的参数切始化方式,其次是Xavir.

11.关于Weights initialization 权重初始化

Dropout虽然思想很简单,但效果出奇的好,首选0.5.

12.Batch normalization 批量归一化 很好用

13.loss的证明

如果在train(训练)模型时,loss可以降到非常低,那么模型的学习能力是够的,如果train能达到,Validation(验证集)达不到,则说明模型泛化能力不强

14.调参一定要做好笔记,每次只调节一个参数

15.如何在验证集上筛选模型参数

Validation(验证集)筛选模型参数时,可以除loss函数外,设置某种规则引导模型向某个想要的方向去更新参数


http://www.kler.cn/a/429367.html

相关文章:

  • 微服务拆分
  • postgresql分区表相关问题处理
  • 内存与缓存:保姆级图文详解
  • HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
  • Subprocess check_output returned non-zero exit status 1
  • 【C语言】_求字符串长度函数strlen
  • 【Golang】Go语言编程思想(四):测试与性能调优
  • 字符串知识
  • C语言专题之结构体的使用
  • 锐捷网络设备常用命令(交换机、路由器)
  • “掌握AWD:解密全轮驱动的终极性能“
  • amazon亚马逊滑动识别验证码
  • Python Web 开发:FastAPI 依赖注入与中间件应用
  • PHP期末复习(通过30道填空题梳理知识点)
  • 十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能
  • 零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)
  • 嵌入式驱动开发详解4(内核定时器)
  • sessionStorage对象--JSON数组--使用花括号{}直接定义对象--丝滑小连招:----客户端缓存之一
  • 【linux】shell(32)-循环控制
  • C#导出数据库到Excel文件(.NET)
  • Mac Open in terminal 总是打开vscode
  • 计算机网络-IPSec VPN工作原理
  • ejb组件(rmi) webservice平台(xml)
  • ChatUI使用.引导<基于react使用><全网唯一>
  • C++中的多线程及其之后的周边
  • XML与HTML的区别汇总