21个深度学习调参的实用技巧

文 | AI_study

源 | AI算法与图像处理


导读

在学习人工智能的时候,不管是机器学习还是深度学习都需要经历一个调参的过程,参数的好坏直接影响着模型效果的好坏。本文总结了在深度学习中21个实用的调参的技巧,快来学习吧!

这篇文章在国外知名的网站 medium 上面获得了一千多的赞,给出了很多建议,同时也备注了论文的来源,所以这么优质的文章,大家一定要多多宣传哈

训练深度神经网络是困难的。它需要知识和经验,以适当的训练和获得一个最优模型。在这篇文章中,我想分享我在训练深度神经网络时学到的东西。以下提示和技巧可能对你的研究有益,并可以帮助你加速网络架构或参数搜索。

现在,让我们开始吧……

整理自:
https://towardsdatascience.com/a-bunch-of-tips-and-tricks-for-training-deep-neural-networks-3ca24c31ddc8

1

在你开始建立你的网络体系结构,你需要做的第一件事是验证输入到网络的数据,确保输入(x)对应于一个标签(y)。在预测的情况下,确保真实标签(y)正确编码标签索引(或者one-hot-encoding)。否则,训练就不起作用。

2

决定是选择使用预模型还是从头开始训练你的网络?

  • 如果问题域中的数据集类似于ImageNet数据集,则对该数据集使用预训练模型。使用最广泛的预训练模型有VGG net、ResNet、DenseNet或Xception等。有许多层架构,例如,VGG(19和16层),ResNet(152, 101, 50层或更少),DenseNet(201, 169和121层)。注意:不要尝试通过使用更多的层网来搜索超参数(例如VGG-19, ResNet-152或densen -201层网络,因为它在计算量很大),而是使用较少的层网(例如VGG-16, ResNet-50或densen -121层)。选择一个预先训练过的模型,你认为它可以用你的超参数提供最好的性能(比如ResNet-50层)。在你获得最佳超参数后,只需选择相同但更多的层网(如ResNet-101或ResNet-152层),以提高准确性。

    ImageNet:http://www.image-net.org/challenges/LSVRC/2012/
    VGG net :https://arxiv.org/abs/1409.1556
    ResNet:https://arxiv.org/abs/1512.03385
    DenseNet:https://arxiv.org/abs/1608.06993
    Xception :https://arxiv.org/abs/1610.02357

  • 微调几层,或者如果你有一个小的数据集,只训练分类器,你也可以尝试在你要微调的卷积层之后插入Dropout层,因为它可以帮助对抗网络中的过拟合。

    Dropout:
    http://jmlr.org/papers/v15/srivastava14a.html

  • 如果你的数据集与ImageNet数据集不相似,你可以考虑从头构建并训练你的网络。

3

在你的网络中始终使用归一化层(normalization layers)。如果你使用较大的批处理大小(比如10个或更多)来训练网络,请使用批标准化层(BatchNormalization)。否则,如果你使用较小的批大小(比如1)进行训练,则使用InstanceNormalization层。请注意,大部分作者发现,如果增加批处理大小,那么批处理规范化会提高性能,而当批处理大小较小时,则会降低性能。但是,如果使用较小的批处理大小,InstanceNormalization会略微提高性能。或者你也可以尝试组规范化(GroupNormalization)。

BatchNormalization:
https://arxiv.org/abs/1502.03167
InstanceNormalization:
https://arxiv.org/abs/1607.08022
GroupNormalization:
https://arxiv.org/abs/1803.08494

4

如果你有两个或更多的卷积层(比如Li)对相同的输入(比如F)进行操作(参考下面的示意图理解),那么在特征连接后使用SpatialDropout。由于这些卷积层是在相同的输入上操作的,因此输出特征很可能是相关的。因此,SpatialDropout删除了那些相关的特征,并防止网络中的过拟合。

注意: 它主要用于较低的层而不是较高的层。

SpatialDropout:
https://arxiv.org/abs/1411.4280

5

为了确定你的网络容量,尝试用一小部分训练例子来超载你的网络(andrej karpathy的提示)。如果它没有超载,增加你的网络容量。在过拟合后,使用正则化技巧如L1、L2、Dropout或其他技术来对抗过拟合。

L1:https://keras.io/regularizers/
L2:https://keras.io/regularizers/
Dropout:
http://jmlr.org/papers/v15/srivastava14a.html

6

另一种正则化技术是约束或限制你的网络权值。这也有助于防止网络中的梯度爆炸问题,因为权值总是有界的。与L2正则化相反,在你的损失函数中惩罚高权重,这个约束直接正则化你的权重。你可以在Keras中轻松设置权重约束:

from keras.constraints import max_norm
# add to Dense layers
model.add(Dense(64, kernel_constraint=max_norm(2.)))
# or add to Conv layers
model.add(Conv2D(64, kernel_constraint=max_norm(2.)))

7

对数据进行均值减法有时会产生非常糟糕的效果,特别是对灰度图像进行减法(我个人在前景分割领域就遇到过这个问题)。

8

在训练前和训练期间,确保打乱训练数据,以防你不能从时序数据中获取有用信息。这可能有助于提高您的网络性能。

9

如果你的问题域与稠密预测(dense prediction)相关(如语义分割),我建议你使用膨胀残差网络作为预训练模型,因为它最适合稠密预测。

Dilated Residual Networks:
https://arxiv.org/abs/1705.09914

10

要捕获对象周围的上下文信息,可以使用多尺度特性的池化模块。该思想成功地应用于语义分割或前景分割中。

semantic segmentation:
https://arxiv.org/abs/1802.02611

foreground segmentation:

https://arxiv.org/abs/1808.01477

11

Opt-out void labels(或模糊区域)从您的损失或精度计算,如果有。这可以帮助你的网络在预测时更有信心。

12

如果你有高度不平衡的数据问题,在训练期间应用类别加权操作。换句话说,给稀少的类更多的权重,但给主要类更少的权重。使用sklearn可以很容易地计算类权重。或者尝试使用过采样和欠采样技术重新采样你的训练集。这也可以帮助提高预测的准确性。

sklearn:

http://scikit-learn.org/stable/modules/generated/

sklearn.utils.class_weight.compute_class_weight.html


OverSampling and UnderSampling techniques:
https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis

13

选择一个正确的优化器。有许多流行的自适应优化器,如Adam, Adagrad, Adadelta,或RMSprop等。SGD+动量被广泛应用于各种问题领域。有两件事需要考虑:

第一,如果你关心快速收敛,使用自适应优化器,如Adam,但它可能会陷入局部极小,提供了糟糕的泛化(下图)。

第二,SGD+momentum可以实现找到全局最小值,但它依赖于鲁棒初始化,而且可能比其他自适应优化器需要更长的时间来收敛(下图)。我建议你使用SGD+动量,因为它能达到更好的最佳效果。

14

有三个学习率起点(即1e- 1,1e -3和1e-6)。如果您对预训练模型进行微调,请考虑小于1e-3(比如1e-4)的低学习率。如果您从头开始训练您的网络,请考虑一个大于或等于1e-3的学习率。您可以尝试这些起点,并调整它们,看看哪个是最好的,选择那个。还有一件事,您可以考虑通过使用 Learning Rate Schedulers来降低训练过程中的学习率。这也可以帮助提高网络性能。

Learning Rate Schedulers:
https://keras.io/callbacks/#learningratescheduler

15

除了Learning Rate Schedule 外,即在一定的次数后降低学习率,还有另一种方式,我们可以由一些因素减少学习率,如果验证损loss在某些epoch(比如5)停止改善,减小学习率和如果验证损失停止改善在某些epoch(比如10),停止训练过程。这可以通过在Keras中使用early stop的ReduceLROnPlateau很容易做到。

ReduceLROnPlateau:
https://keras.io/callbacks/#
reducelronplateauEarlyStopping:
https://keras.io/callbacks/#earlystopping

16

如果您在dense prediction领域工作,如前景分割或语义分割,您应该使用跳过连接,因为对象边界或有用的信息会由于最大池化操作或strided convolutions而丢失。这也可以帮助您的网络轻松地学习特征空间到图像空间的特征映射,有助于缓解网络中的消失梯度问题。

skip connections:
https://arxiv.org/abs/1505.04597

17

数据越多越好!总是使用数据增强,如水平翻转,旋转,缩放裁剪等。这可以帮助大幅度提高精确度。

18

你必须要有一个高速的GPU来进行训练,但是这有点昂贵。如果你想使用免费的云GPU,我推荐使用谷歌Colab。如果你不知道从哪里开始,看看我之前的文章或者尝试各种云GPU平台,如Floydhub或Paperspace等。

Google Colab:
https://colab.research.google.com/notebooks/welcome.ipynb#recent=true
使用教程:
https://towardsdatascience.com/a-comprehensive-guide-on-how-to-fine-tune-deep-neural-networks-using-keras-on-google-colab-free-daaaa0aced8f
Floydhub:
https://www.floydhub.comPaperspace:https://www.paperspace.com

19

在ReLU之前使用最大池化来节省一些计算。由于ReLU阈值的值为0:f(x)=max(0,x)和最大池化只有max激活:f(x)=max(x1,x2,…,xi),使用Conv > MaxPool > ReLU 而不是Conv > ReLU > MaxPool。

例如,假设我们有两个从Conv来的激活值(即0.5和-0.5):

  • 因此MaxPool > ReLU = max(0, max(0.5,-0.5)) = 0.5

  • 和ReLU > MaxPool = max(max(0,0.5), max(0,-0.5)) = 0.5

    看到了吗?这两个操作的输出仍然是0.5。在这种情况下,使用MaxPool > ReLU可以节省一个max 操作。

20

考虑采用深度可分离卷积运算,与常规的卷积运算相比,该运算速度快,且参数数量大大减少。

Depthwise Separable Convolution:
https://arxiv.org/abs/1610.02357

21

最后但并非最不重要的是不要放弃。相信自己,你能做到!如果你还没有得到高精度,调整你的hyper-parameters,网络体系结构或训练数据,直到你得到你正在寻找的准确性。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

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

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

相关文章

从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!

如何从程序员进阶到架构师?今天完整的把我积累的经验和技能分享给大家! 作者:陈睿|优知学院创始人 数据结构算法程序 数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及其之间的关系有…

Python 爬虫系列教程一爬取批量百度图片

原文地址:https://blog.csdn.net/qq_40774175/article/details/81273198 很久之前就学习了Python的爬虫了,也用来做过一些项目(主要是一些课程项目),但时间比较紧,一直没有空把它写下来,这个暑假…

论文浅尝 | 利用知识图谱嵌入和图卷积网络进行长尾关系抽取

论文笔记整理:王狄烽,南京大学硕士,研究方向为关系抽取、知识库补全。链接:https://arxiv.org/pdf/1903.01306.pdf发表会议:NAACL2019动机现有的利用远程监督进行实体关系抽取的方法大多关注于如何对训练数据进行降噪&…

人脑是怎么防止梯度消失和梯度爆炸的?

文 | 极市平台源 | 知乎问答导读梯度消失和梯度爆炸一直是深度学习的难点,而人脑有接近900亿个神经元,可以说是一个非常规模庞大的网络。那么人脑是如何防止梯度消失和梯度爆炸的?观点一作者丨冒蓝火的加特林感觉这个问题跟我的科研方向有一点…

史上最全java架构师技能图谱(下)

“java架构史上最全技能图谱分为上下两篇,这是java架构史上最全图谱下篇,包含: 大数据以及性能、设计模式、UML、中间件、分布式集群、负载均衡、通讯协议、架构设计等技术图谱等章节。 如果需要上篇内容:数结构算法、java进阶、…

Git基本指令

一、创建本地仓库进行版本控制 在工作区 local_repository 新建readme.txt文件: git init :初始化一个空的本地仓库,并在本地仓库生成了.git 文件git add readme.txt :将文件放到暂存区,表示这个文件受git管理git co…

LeetCode 21. 合并两个有序链表(单链表)

文章目录1. 题目信息2. 解题1. 题目信息 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4来源&#xff1a…

一文读懂最强中文NLP预训练模型ERNIE

基于飞桨开源的持续学习的语义理解框架ERNIE 2.0,及基于此框架的ERNIE 2.0预训练模型,在共计16个中英文任务上超越了BERT和XLNet, 取得了SOTA效果。本文带你进一步深入了解ERNIE的技术细节。 一:ERNIE 简介 1.1 简介 Google 最近提出的 BER…

BERT原理、代码、相关模型、精调技巧,看这个就够了

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术2018 年 10 月,由 Google 推出的 BERT 模型一鸣惊人,刷爆了各路榜单,甚至超越了人类基线分数,实现了 NLP 领域里程碑式的突破。 如今,对于 NLP 算法…

论文浅尝 | 利用 KG Embedding 进行问题回答

论文笔记整理:吴杨,浙江大学计算机学院,知识图谱、NLP方向。http://research.baidu.com/Public/uploads/5c1c9a58317b3.pdf动机本文主要针对基于知识库的问题回答中的简单问题,也就是问题的答案只涉及KG中的一跳,此类问…

想成为阿里160万年薪的P8架构师?你必须掌握如下6大技能体系!

程序设计和开发 数据结构和算法:常用数据结构,排序,检索等 面向对象编程、设计模式,掌握建模语言和建模工具:UML、MVC编程思想 高质量编码能力:重用性,低耦合,可扩展性&#xff0c…

技术动态 | 知识图谱的策展

作者:Jiaoyan Chen, Senior Researcher, Department of Computer Science, University of Oxford, Research interests: Knowledge Base, Knowledge-based Learning, Machine Learning Explanation.知识图谱在众多的领域中发挥了重要作用,比如聊天机器人…

21届校招薪资曝光:严重倒挂老员工!

源 | 量子位一开始,还以为是科技互联网公司招聘的新把式。因为就在最近,一张美团应届生薪资的截图,在各大社区和校招群里火了。仅仅算法岗、开发岗的薪资白菜价,就有27k15.5,算下来,年薪就有41万。虽然这两…

从Java程序员进阶到架构师,6大核心技能要领详解

“ java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计。 希望能真正帮助到从程序员进阶到架构师之路的朋友。 数据结构和算法 算法分…

领域应用 | ​英文抗生素药物医学知识图谱 IASO1.0 版发布 线上试用正式启动

本文转载自公众号:PKU自然语言处理前沿。近日,由北京大学互联网信息工程研发中心(CIRE)开发的英语医学知识图谱英文抗生素药物医学知识图谱IASO1.0发布,面向公众正式开放试用。IASO是利用自然语言处理与文本挖掘技术&a…

谷歌大改Transformer注意力,速度大涨,显存大降!

源 | 机器之心导读考虑到 Transformer 对于机器学习最近一段时间的影响,这样一个研究就显得异常引人注目了。Transformer 有着巨大的内存和算力需求,因为它构造了一个注意力矩阵,需求与输入呈平方关系。谷歌大脑 Krzysztof Choromanski 等人最…

阿里P7架构师要求:Web核心+开源框架+大型网站架构!含面试题目!

阿里P7技能(一):数据结构和算法: 常用数据结构:链表、堆与栈、哈希表等,常用的排序等。 掌握:精通 阿里P7技能(二):java高级 java相关的高级特性&#xff1…

LeetCode 986. 区间列表的交集

文章目录1. 题目信息2. 解题1. 题目信息 给定两个由一些闭区间组成的列表&#xff0c;每个区间列表都是成对不相交的&#xff0c;并且已经排序。 返回这两个区间列表的交集。 &#xff08;形式上&#xff0c;闭区间 [a, b]&#xff08;其中 a < b&#xff09;表示实数 x …

论文浅尝 | 学习开发知识图谱中的长期关系依赖 - ICML 2019 ​

本文转载自公众号&#xff1a;南大Websoft。 论文&#xff1a;https://arxiv.org/abs/1905.04914代码&#xff1a;https://github.com/nju-websoft/RSN背景知识图谱结构化地存储着大量现实世界中的事实。其中&#xff0c;每个事实都以三元组 (s, r, o) 的方式进行描述&#xf…