深度学习调参

一、 建立评价指标
建立判别对于网络的评价指标,同个这个指标来判别这个网络的好坏层度,网络也可以有一个或者有多个指标。
(1) 最好是一个指标
网络最好是由一个指标来决定,如果由多个指标,那么我们在调参时,可能会出某一个指标好,某一个指标坏,这样会不利于我们去判别网络的好坏程度,所以一般情况会把多个指标融合成一个指标

(2) 指标容易理解
我们不希望指标是一个很复杂的公式或者很难理解。
(3) 指标的范围最好是[0,1]之间,最好是线性的
0代表网络最不好,1代表网络是最好。我们最好设计成线性,因为线性的可解释层度高,也能知道当较好变成好时,具体是怎么变化的。

二、 建立合理的预期
在网络调参之前,我们要对深度网络可能到达的评价指标做评估,我们的网络评价指标预计最高能达到多少,他是由很多个外在因素组成的,如我们的数据集是否准确,数据集的数量是否足够多,我们的芯片算力是否足够,时间上允许我们做多少天的训练等等因素。假设我们的预期是0.9,但是实际上外在因素的影响,我们到达不了0.9.那么我就要重新建立合理的预期,或者用其他的方法改进。
下面我们以image captioning为例,我们想要一张图片输入进去后,对这张图片进行翻译,那么这个功能可能有几个任务组成实现,我们图片翻译可以有四个任务组成。

 预期image captioning的最佳效果,实际上就是把各个任务单独拿出来,寻找到他们在各自领域上的最好效果,在关联起来,变成我们的最佳效果所以我们在训练调参前。我们得知道image captioning能到到的效果最好的就是0.16,而不是盲目设定一个预期,然后在那边抱怨为什么训练出来的结果那么低,其实你可能已经达到现今的最好的效果了

三、 建立合理的数据集
测试数据集与训练数据集的分布是否一致。

四、 判断是否欠/过拟合

如上图,左中右分别有欠拟合、正好拟合、过拟合

欠拟合:
模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单。欠拟合是指模型不能在训练集上获得足够低的误差。
如上图,数据的规律挺复杂的,是一条曲线,而我们只用了线性去模拟,会丢失很多误差信息。

过拟合:
是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征。也就是过拟合是指训练误差和测试误差之间的差距太大。
如上图,我们在训练集来看,我们的模型曲线是完美的,但是在我们的测试集上,却有很大的误差。

理解bias/variance
Bias:网络预测出来的值与真实值的差异
Variance:同一个模型用不同的数据集去训练,他们之间的差异会不会很大

五、 消除欠拟合
(1) 欠拟合曲线变化(1):

     曲线上来看,我们的测试数据曲线也在下降,当时下降的不够。

我们的解决办法如下:
1、 增加训练epoch
2、 增大batch-size
3、 调整激活函数(使用relu)
4、 调整优化算法
使用Adam
增大学习率
(2) 欠拟合曲线变化(2):

从曲线上来看,我们的训练数据都没达到我们预期的虚线上,训练数据和测试数据之间的相差较大,那我们的解决办法如下

六、 消除过拟合
(1) 过拟合曲线变化(1):

七、 超参数的优化

网络中会有很多超参数,我们需要对超参数进行优化。
如下图所示:

左侧是我们具体的超参数,右侧则是我们对超参数的优化方法

我们已知神经网络是一个非凸优化问题,他包含许多局部最小值,我们通过对超参数的优化,从而寻找到与全局最小值接近的值。
我们的超参数优化方法如下:
(1) 网格搜索(Grid Search)
罗列出所有的超参数的各个组合,一一使用这些超参数的组合进行训练,得到参数组合最好的一组,这种优化方式效率比较低
(2) 随机搜索(Random Search)
不同超参数对模型性能的影响有很大差异。有些超参数(比如正则化系数)对模型性能的影响有限,而另一些超参数(比如学习率)对模型性能影响比较大。在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。
随机搜索就是对超参数进行随机组合,然后选取一个性能最好的配置
网格搜索和随机搜索都没有利用不同超参数组合之间的相关性,即如果模型的超参数组合比较类似,其模型性能也是比较接近的。
(3) 贝叶斯优化

(4) 进化算法调参

假设一开始我们不知道网络层数是多少层比较好,那么我就初始化一组,分别是5、2、100、17、1、9、50,都去做训练,发现9、1、50、2这四个比较好,那么我就把不好的5、100、17去掉,接下来让好的几层进行变异活着交配,生成出另外的,循环这个过程

八、 神经网络的调参
DNN网络调参:

 Model Design: 用什么样的初始化去初始参数用什么样的激活函数用什么样的损失函数用多少个隐含层每个隐含层用多少个神经元用什么算法优化器使用Dropout吗Hyperparameters:每一层参数的学习率选择什么样的学习率使用了Dropout,那么Dropout的Rate是多少训练的BatchSize是多少网络的调参分为两种:

(1) Optimizer hyperparameters(优化器调参)

(2) Model Specific hyperparameters(网络结构)

九、 Optimizer hyperparameters(优化器调参)
(1) 学习率的调参:
训练神经网络最重要的是(在时间不充足的情况下)-----学习率

如果我们的学习率太小于最佳值,那么我们需要更长的时间去训练,才能达到我们的理想状态
如果我们的学习率太大于最佳值,那么他将超过理想状态,并且我们的算法可能不会收敛。

可能你的模型有数百个参数,每个参数都有自己的误差曲线。而且学习率的改变和其他参数的变化会相互影响
误差取消不是干净的U形曲线,他们具有更复杂的形状、大量的局部最小值。

(2) BatchSize的调参:
是每次传给模型训练的样本个数

我们的BatchSize受硬件的影响,当我们的内存足够大,就可以用大的batchSize进行训练,这样会提升我们的训练速度。但不是越大越好,因为太大容易使得训练的梯度陷入局部最小值

(3) Epoch的调参:
一个Epoch就是将所有训练样本训练一次的过程。

训练模型的Epoch是很难准确去预估的,我可以先设置一个比较大的值,将训练的结果打印出来,去观察结果,并且通过Early Stopping的技术,当我们在后面的十个或者二十Epoch(时期)训练后,结果并没有发生改善,那我们将停止训练

十、 Model Specific hyperparameters(网络结构调参)
(1) 隐含层的节点
隐含层的节点数量是最神秘的超参数之一
隐含层的节点数量就是网络学习能力的主要衡量标准
对于一个简单的函数,他可能需要更少数量的隐含层和较少隐含层的节点数量

如果隐含层的节点数量比实际需要的多一点没有关系,但是如果多太多,将导致模型过度拟合,即如果设计的模型有太多的隐含层的节点,他可能倾向于过拟合并且只是试图记住数据集
例子如下:

当我们选择6个节点时,模型是正正好好,但当我们选择3个节点,则会出现欠拟合,但我选择20个节点,则又会出现过拟合现象

如果我们选择20的节点时,又不想他过拟合,那么可以加入正则化

图中表示,当我们的节点选则过大时,出现过拟合,我们可以加入正则化,通过调整正则化的超参数,从而避免出现过拟合现象

一般情况下,第一层隐含层的节点数量应该大于输入层的节点数量
整个网络呈现纺锤形

(2) 网络层次

![在这里插入图片描述](https://img-blog.csdnimg.cn/d68e33a56fd24e6ea07ee905c8443927.png)

深度神经网络调参-学习笔记相关推荐

  1. 【数据挖掘】心跳信号分类预测 之 建模调参 —— 学习笔记(四)

    目录 四.建模调参 4.1 内容简介 4.2 模型原理与性质概述 4.2.1 分类模型 4.2.2 时间序列模型 4.2.3 推荐教材 4.3 模型对比与性能评估 4.3.1 逻辑回归 4.3.2 决 ...

  2. 数据挖掘训练营建模调参学习笔记

    本学习笔记为阿里云天池龙珠计划数据挖掘训练营的学习内容,学习链接为:-天池实验室-实时在线的数据分析协作工具,享受免费计算资源 (aliyun.com)https://tianchi.aliyun.c ...

  3. 深度神经网络调参经验

    σ′(⋅)=σ(⋅)(1−σ(⋅))\sigma'(\cdot)=\sigma(\cdot)(1-\sigma(\cdot)),tanh′=1−tanh2\tanh'=1-\tanh^2 batch_ ...

  4. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略

    DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...

  5. step-by-step: 夕小瑶版神经网络调参指南(上)

    距离上一篇文章已经过去好久好久好久啦.闭关几个月后,其实早有继续码文章的打算,先后写了一下核函数与神经网络的一些思考.文本预处理tricks.不均衡文本分类问题.多标签分类问题.tensorflow常 ...

  6. [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...

    译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...

  7. 基于scikit-learn的梯度提升树GBDT调参学习

    写在前面 昨天学习了GBDT的基本原理及算法,关键是考虑了损失函数为一般函数的时候采用了负梯度下降的策略,并引入了残差拟合来学习叶子结点,最终得到一颗回归树.当然,纸上谈兵是没有用的,最重要的还是要把 ...

  8. 【卷积神经网络环境搭建学习笔记】

    卷积神经网络环境搭建学习笔记 前言 首先,特别感谢B站UP主:肆十二- csdn链接:https://blog.csdn.net/ECHOSON/article/details/117964438 再 ...

  9. 神经网络调参-warmup and decay

    欢迎大家访问个人博客:https://jmxgodlz.xyz 前言 本文将介绍神经网络调参技巧:warmup,decay.反向传播主要完成参数更新:θt=θt−1−α∗gt\theta_t=\the ...

最新文章

  1. Laravel 5.5 的错误异常处理机制以及应用实例
  2. 程序中保留一个Dump
  3. oracle迁移mysql_从自建Oracle迁移至RDS MySQL
  4. android 视频录制小例子,android 录制视频实例 VideoRecordDemo
  5. php iis日志分析,星外系统IIS日志分析常用的几个命令小结
  6. 卖饮料、进工厂、看体检报告,这家AI公司要学三个门派的技能
  7. javascript cookie传统用法
  8. 转载关于使用Ant打包Flex的一些脚本
  9. c#调用c++dll找不到入口点,一秒搞定
  10. java泛型类型擦除
  11. linux低级格式化工具下载,Hard Disk Low Level Format Tool下载-硬盘低级格式化工具 v2.37 官方版 - 下载吧...
  12. 想自学HCIE,有什么好的书籍推荐吗?
  13. 计算机毕业设计Python毕业论文总结基于Python实现的仓库库存管理系统[包运行成功]
  14. JUC学习笔记(二)——常用的辅助类
  15. linux内核计算次方,linux内核bic和cubic实现
  16. 截图工具(窗体永远前置)
  17. Android关闭输入法
  18. TIMIT dataset - The DARPA TIMIT Acoustic-Phonetic Continuous Speech Corpus
  19. Excel导入导出详细教程------EasyExcel功能整合
  20. 响铃:互联网金融理财端寡头时代来临,到底谁该被剩下来?

热门文章

  1. 基于Ubuntu16.04(64位)搭建WebRTC服务器(目前搭在局域网)
  2. Thorui组件库的安装与使用
  3. nodejs京东接口分析系列-实现京东自动化功能 之 自动下单
  4. BZMCTF:流量监控平台
  5. 5个超好用的在线抠图网站,告别繁琐的PS,快马住!
  6. 记录使用nginx部署静态资源流程,以及遇到的访问静态资源404问题
  7. 百度股市通日k数据接口
  8. python练习题:045:正常血压
  9. h5微信自定义分享(前端+后端java)
  10. datagridvie设置行高列宽_DataGridView 列宽和行高自动调整的设定