当前位置:网站首页>Tips and tricks for Neural Networks 深度学习训练神经网络的技巧总结(不定期更新)
Tips and tricks for Neural Networks 深度学习训练神经网络的技巧总结(不定期更新)
2022-07-23 13:32:00 【iioSnail】
文章目录
本文说明
本文主要是记录一下深度学习过程中的遇到的一些技巧的总结,这样在训练模型时如果效果不好就过来看看有哪些可以用上。不定期更新(等学到了新知识就会更新一下)
Debug 技巧
Overfit一个简单的Batch
在实际训练之前,先找找一个简单的Batch,尝试训练它,使model可以overfit这个batch。如果模型不能成功的把loss降到接近0,说明模型有问题。
常见的错误有如下:
- loss逐渐变大:看看是哪个符号写反了
- loss暴增:可能是学习率太大了,导致发散
- loss上下波动(oscillate):可以尝试减小学习率,并且检查数据中的是不是有错误的Label,或者数据增强(Data Augmentation)的方式有问题
- loss后面降不动了(plateau):可以尝试增加学习率,去掉Regulation
TODO,第4点存在疑问
数据处理
平衡数据
数据不平衡:有些类别的数据太多,这些类别称为majority class;而有些类别数据又太少,这些类别称为minority class
常用处理方法:
- Undersample: 直接删除一些 majority class 的数据
- Oversample:自己造一些minority class的数据,例如,①使用SMOTE(Synthetic Minority Over-sampling Technique),②数据增强(Data Augmentation)
Set the bias of the output layer
For unbalanced datasets, the initial guesses of the network inevitably fall short. Even though the network learns to account for this, setting a better bias at model creation can reduce training times. For the sigmoid layer, the bias can be calculated as (for two classes):
bias = log(pos/negative)
When you create the model, you set this value as the initial bias.
数据增强(Data Augmentation)
图片增强
采用Random image cropping and patching (RICAP) 方法。思路为:随机裁剪多个图片的中一部分,然后把它们拼接为一个图片,同时混合这些图片的标签。

Cutout:随机的把图片的一个区域遮挡起来(像素值全部设为0)。用于模拟真实图片的物体可能被其他物体遮挡住了

random erasing:类似cutout,区别在于,cutout是把图片中随机抽中的矩形区域的像素值置为0,相当于裁剪掉,random erasing是用随机数或者数据集中像素的平均值替换原来的像素值。而且,cutout每次裁剪掉的区域大小是固定的,Random erasing替换掉的区域大小是随机的。

AutoAugment:使用AutoAugment自动选择适合特定数据集的数据增强策略。
使用Embedding数据压缩数据
输入数据尽量不要使用 one-hot 编码,而是使用embedding压缩特征维度。
标准化(Normalization)
对于数值类型的数据,最好将其缩放到 [-1,1] 的范围中,目的是为了加快收敛。
标签平滑(LabelSmoothing)
对于分类问题,可以采用标签平滑(Label-smoothing regularization, LSR) 的方式避免过拟合。它的具体思想是降低我们对于标签的信任,例如我们可以将损失的目标值从1稍微降到0.9,或者将从0稍微升到0.1。
对标签进行平滑操作可以减小模型的overconfidence的情况,进而减小overfitting。
例如:标签为[0, 0, 0, 1, 0],对标签平滑之后,标签变为 [0.05, 0.05, 0.05, 0.8, 0.05]。
超参数
超参调节
最优先要考虑的超参数,或最重要的超参数是学习率(Learning Rate)
Batch Size
选择能被4整除的Batch Size, 或选择 2 n 2^n 2n 。
Dropout
- dropout最好控制在 20%-50%之间。因为太低影响不够,太高又容易让模型结果变差
- Use a larger network. You are likely to get better performance when dropout is used on a larger network, giving the model more of an opportunity to learn independent representations.(TODO,怎么理解这句话)
- Use dropout on incoming (visible) as well as hidden units. Application of dropout at each layer of the network has shown good results.(TODO,怎么理解这句话)
Learning Rate
- Adam据说最好的学习率是 3e-4
- 尝试采用 Warmup 的方式来调节学习率,原理为:一开始模型不太稳定,所以学习率小一点,然后慢慢增大学习率,在一定epoches后,然后再慢慢降低学习率
- 学习率应该随着batch size进行变化。batch size越大,梯度中的噪声越小,所以当batch大的时候,学习率就可以大一点,而batch size小的时候,学习率就应该小一点。例如,batch size为256时选择的学习率是0.1,当我们把batch size变为一个较大的数b时,学习率应该变为 0.1 × b/256
- 采用AdaBound(可以试一下,作者说AdaBound会让你的训练过程像adam一样快,并且像SGD一样好)。
模型构建
神经元数量
对于密集层(dense layer),输入神经元和输出神经元的数量最好都能被64整除。
卷积层
对于卷积层,输入层和输出层的channel最好都是4的倍数,或是 2 n 2^n 2n。
对于卷积层,输入和输出的数量最好可以被64整除
pad image inputs from 3 (RGB) to 4 channels(TODO,不懂)
不同尺度的特征融合(例如 YOLOv3-SPP)。
例如,将上面卷积层的输出使用不同大小的maxpooling层进行下采样,并将各自的结果融合在一起送给接下来的网络。低层特征与高层特征进行融合。即将前面卷积层的输出和后面卷积层的输出concat到一起,然后然后进行后续卷积
使用残差块(residual block)防止梯度消失。可参考ResNet
如果网络太大,可以尝试使用Depthwise Conv(DW)卷积 + Pointwise Conv(PW)卷积 来减小网络参数和计算量。可参考MobileV1
循环层(Recurrent Layer)
对于Recurrent Layer,Batch Size 和 Hidden Size 最好是4的整数,理想情况下,最好是64、128或256的倍数
对于Recurrent Layer,Batch Size最好大一些
使用预训练模型(Pretrained Model)
预训练模型:作为模型的“上游”模型,由牛逼的大厂预训练好,然后用这个模型的结果进行“下游”任务。例如:“BERT”是一个预训练模型,使用Bert可以将对Token(单词)进行Embedding,然后将其接到自己的“下游”模型上,进行特定任务的训练
使用迁移学习(Transfer Learning)
迁移学习:把别人训练好的“针对特定任务的”模型拿过来,然后把“任务”改成自己的特定任务,然后进行训练。
预训练模型和迁移学习的区别(个人理解):
预训练模型是不针对特定任务的,比如“Bert”,它针对NLP领域,但不针对具体任务,你可以拿Bert的输出再接模型进行“情感分析”、“词性标注”什么的都可以。;
但是迁移学习用的是特定任务的模型,比如张三训练了一个模型可以进行情感分析,然后你拿它这个训练好的模型,把最后几层改了,然后用于词性标注,这种是迁移学习。
模型训练
- 定期保存:训练过程中,最好定期保存模型,防止训练过程中系统崩溃等问题导致模型丢失,哭都没地方哭,只能从头开始。如果定期保存,就可以从上一个保存点(Checkpoint)开始。
- 提前停止(EarlyStopping) :为了防止发生过拟合,可以提前终止训练。常用的终止策略是:使用验证数据集来验证模型性能,如果在 n n n 个step内,模型性能没有提升,就可以终止了。
- 知识蒸馏(Knowledge Distillation) :如果要训练一个较小的模型(例如要部署在移动设备上),使用一个较大且较高准确率的预训练模型的输出作为标签比使用真实标签效果更好。
- Model EMA(Model Exponentially weighted averages):模型的参数更新不仅会考虑本次的,也会考虑之前的,可以提高模型的性能。参考链接
TODO
https://arxiv.org/abs/1708.02002 section 3.3
nn.init.kaiming_normal_
class weights
参考资料
Tips and tricks for Neural Networks: https://towardsdatascience.com/tips-and-tricks-for-neural-networks-63876e3aad1a
Tips For Using Dropout: https://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/
深度神经网络模型训练中的 tricks(原理与代码汇总):https://mp.weixin.qq.com/s/qw1mDd1Nt1kfU0Eh_0dPGQ
边栏推荐
- Circuit structure and output mode of GPIO port of 32-bit single chip microcomputer
- 动态规划背包问题之多重背包详解
- 深度学习卷积神经网络论文研读-AlexNet
- go语言多返回值以及返回错误类型
- C#入门系列(二十八) -- LINQ的查询语法
- 阿里平头哥CPU技术生态负责人陈炜:平头哥的发展之路
- Liupeng, vice president of copu: China's open source has approached or reached the world's advanced level in some areas
- 移动、电信、联通:5G To B的花式解法
- Introduction to Huawei's new version of datacom certification
- ESP8266-NodeMCU——从苏宁API获取实时天气
猜你喜欢

Using "soup.h1.text" crawler to extract the title will be one more\

The new business form of smart civil aviation has emerged, and Tupo digital twin has entered the civil aviation flight network of the Bureau

百度编辑器上传图片设置自定义目录

Priyanka Sharma, general manager of CNCF Foundation: read CNCF operation mechanism

CNCF基金会总经理Priyanka Sharma:一文读懂CNCF运作机制

NodeJs实现token登录注册(KOA2)

一款非常棒的开源微社区轻论坛类源码

Study note 7 -- traffic environment behavior prediction

COPU副主席刘澎:中国开源在局部领域已接近或达到世界先进水平

Summary of after class homework of Microcomputer Principle and technical interface
随机推荐
Introduction to Huawei's new version of datacom certification
Scale Match for Tiny Person Detection
SurFace家族选购参照
COPU副主席刘澎:中国开源在局部领域已接近或达到世界先进水平
Detector: detect objects with recursive feature pyramid and switchable atolos convolution
uni-app进阶之认证【day12】
TS encapsulates the localstorage class to store information
How does MySQL query data that is not in the database?
Four cores of browser
Scale Match for Tiny Person Detection
It's not safe to open an account at qiniu business school
百度编辑器上传图片设置自定义目录
Bag of Tricks for Image Classification with Convolutional Neural Networks(卷积神经网络在图像分类中的技巧)
What are the principal guaranteed financial products with an annual interest rate of about 6%?
微机原理与技术接口笔记
docker 安装redis
深度学习卷积神经网络论文研读-AlexNet
Complete knapsack explanation of dynamic programming knapsack problem
go语言的基础语法(变量、常量、基本数据类型,for、switch,case、数组、slice(切片)、make和new、map)
FreeRTOS个人笔记-挂起/解挂任务