本文为原创文章转载必须注明本文出处以及附上 本文地址超链接以及 博主博客地址:http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)

因为最近一直比较忙所以就有一段时间没有更新了。
终于今天开始着手写这篇关于参数的文章了,可以说我自己其实也在一直进行着各种调参而且有了一段时间了。作为自己的见解和相应的相关知识理论将会在这篇文章里为大家写出来,以做参考和学习资料。

我们在学习使用深度学习的过程中最最重要的就是调参,而调参的能力是需要长期积累才能形成的,因为每一种数据库和每一种网络结构都需要不同的参数以达到最佳效果。而寻找这个最佳的参数的过程就叫做调参。

正文:


一. 参数是指那些?

参数其实是个比较泛化的称呼,因为它不仅仅包括一些数字的调整,它也包括了相关的网络结构的调整和一些函数的调整。下面列举一下各种参数:

1. 数据处理(或预处理)相关参数:
enrich data(丰富数据库),
feature normalization and scaling(数据泛化处理),
batch normalization(BN处理),
2. 训练过程与训练相关的参数:
momentum term(训练动量),
BGD, SGD, mini batch gradient descent(这里的理解可以看我之前的一篇博 客:http://blog.csdn.net/qq_20259459/article/details/53943413 )。
number of epoch,
learning rate(学习率),
objective function(衰减函数),
weight initialization(权值初始化),
regularization(正则化相关方法),
3. 网络相关参数:
number of layers,
number of nodes,
number of filters,
classifier(分类器的选择),

二. 调参的目的以及会出现的问题

首先我们调参有两个直接的目的:1. 当网络出现训练错误的时候,我们自然需要调整参数。 2. 可以训练但是需要提高整个网络的训练准确度。
关于训练可能会出现的问题汇总:

1. 可能没法进行有效地训练,整个网络是错误的,完全不收敛(以下图片全部来源于我的实验,请勿盗用):

2. 部分收敛:

3. 全部收敛但是结果不好:

三. 问题分析理解

在深度学习领域我上面的三个例子可以说是比较全面的概括了问题的种类:完全不收敛,部分收敛,全部收敛但是误差大。
下面我们先进行问题分析,然后我再介绍如何具体调参:

1. 完全不收敛:

这种问题的出现可以判定两种原因:1,错误的input data,网络无法学习。 2,错误的网络,网络无法学习.

2. 部分收敛:

这种问题的出现是有多种多样的原因的,但是我们可以总结为:1,underfitting。 2, overfitting。
underfitting和overfitting在深度学习中是两个最最常见的现象,他们的本质是网络分类器的复杂度导致的。
一个过简单的分类器面对一个复杂的数据就会出现underfitting,举个例子:比如一个2类分类器他是无法实现XOR的问题的。
一个过复杂的分类器面对一个简单的数据就会出现overfitting。

说的更容易理解一点:
1.underfitting就是网络的分类太简单了没办法去分类,因为没办法分类就是没办法学到正确的知识。
2.overfitting就是网络的分类太复杂了以至于它可以学习数据中的每一个信息甚至是错误的信息他都可以学习。

如果我们放在实际运用中我们可以这样理解:
1.我们有两个数据A和B,是两个人的脸的不同环境下10张照片。A我们拿来进行训练,B则是用来测试,我们希望网络可以从A学习人脸的特征从而认识什么是人脸,然后再去判断B是不是人脸。
2.如果我们使用会导致underfitting的分类器时,这个网络在学习A的时候将根本学不到任何东西,我们本来希望它可以知道A是人脸,但是它却认为这是个汽车(把A分去不正确的label,错误的分类)。
3.而当我们使用会导致overfitting的分类器时,这个网络在学习A的时候不仅可以知道A是人脸,还认为只有A才是人脸,所以当它去判别B的时候它会认为B不是人脸(过度的学习了过于精确的信息导致无法判别其它数据)。

下面我们再用图来解释说明一下这两个问题:

以及用表格表示一下他们的训练结果:

3. 全部收敛:

这是个好的开始,接下来我们要做的就是微调一些参数。

四. 针对问题来调参

我在许多其他人的文章看过别人的调参方法的分享和心得,其中有许多人提出使用暴力调参和微调配合使用。这里我不是很同意这种观点,因为所谓的暴力调参就是无规律性的盲目的调整,同时调整多个参数,以寻找一个相对能收敛的结果,再进行微调。这种做法是一种拼运气的做法,运气好的话这个网络的深度和重要的参数是可以被你找到,运气不好的好你可能要花更多的时间去寻找什么是好的结果。而且最终即使有好的结果你自己本身也是不能确认是不是最好的结果。
所以再次我建议我们在调参的时候切忌心浮气躁,为了好的实验结果,我们必须一步一步的结果分析,解决问题。

下面我们谈谈如和调参:
现有的可调参数我已经在(一)中写出了,而这些参数其实有一些是现在大家默认选择的,比如激活函数我们现在基本上都是采用Relu,而momentum一般我们会选择0.9-0.95之间,weight decay我们一般会选择0.005, filter的个数为奇数,而dropout现在也是标配的存在。这些都是近年来论文中通用的数值,也是公认出好结果的搭配。所以这些参数我们就没有必要太多的调整。下面是我们需要注意和调整的参数。

1. 完全不收敛:

请检测自己的数据是否存在可以学习的信息,这个数据集中的数值是否泛化(防止过大或过小的数值破坏学习)。
如果是错误的数据则你需要去再次获得正确的数据,如果是数据的数值异常我们可以使用zscore函数来解决这个问题(参见我的博客: http://blog.csdn.net/qq_20259459/article/details/59515182 )。
如果是网络的错误,则希望调整网络,包括:网络深度,非线性程度,分类器的种类等等。

2. 部分收敛:

underfitting: 
增加网络的复杂度(深度),
降低learning rate,
优化数据集,
增加网络的非线性度(ReLu),
采用batch normalization,
overfitting: 
丰富数据,
增加网络的稀疏度,
降低网络的复杂度(深度),
L1 regularization,
L2 regulariztion,
添加Dropout,
Early stopping,
适当降低Learning rate,
适当减少epoch的次数,

3. 全部收敛:

调整方法就是保持其他参数不变,只调整一个参数。这里需要调整的参数会有:
learning rate,
minibatch size,
epoch,
filter size,
number of filter,(这里参见我前面两篇博客的相关filter的说明)

五. 大的思路和现在的发展

其实我们知道现在有许多的成功的网络,比如VGGNet和GoogleNet,这两个就是很划时代的成功。我们也由此可以发现网络设计或者说网络调参的主方向其实只有两种:1. 更深层的网络, 2. 更加的复杂的结构。
我们可以参见下面图片以比较几个成功网络的独特之处:

1. AlexNet(深度学习划时代的成功设计):

2. VGGNet(用小的filter得到更好的非线性和降低网络的权值以及实现了更深的构造):

3. GoogleNet(新的结构的提出受启发于NiN,网络中的网络同时实现了更深和更非线性):

4. Latest(接受请参见:https://arxiv.org/abs/1608.06993 ):

5. 比较分析:

这里我们可以看出,不管你怎么调整网络,调整参数,你的目的只有一个就是让网络变得更加深层,更加非线性。

至此已经全部介绍完了有关结果分析和参数调整的相关知识和心得,最后我还是希望告诉每一个正在奋力调参的朋友们,调参是个辛苦和乏味的过程,一次次的失败只是为了更加好的结果。不要气馁不要放弃,坚持每一次都分析,调参的过程必须是有规律的,切忌不可乱调,这种既得利益的取巧行为是非常不好的习惯。

我们只看到了VGGNet和GoogleNet这种作品的成就,却没有看到背后的付出。同样我们必须保持着创新精神和扎实的理论基础。这些才是成功的不二法则。

后面我会不定期更新一些其他实用的知识和心得,谢谢大家长期以来的支持。

本文为原创文章转载必须注明本文出处以及附上 本文地址超链接以及 博主博客地址:http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai.com )。

(如果喜欢本文,欢迎大家关注我的博客或者动手点个赞,有需要可以邮件联系我)

深度学习 14. 深度学习调参,CNN参数调参,各个参数理解和说明以及调整的要领。underfitting和overfitting的理解,过拟合的解释。相关推荐

  1. 深度学习 ---- 深度学习调参,CNN参数调参,各个参数理解和说明以及调整的要领。

    本文为原创文章转载必须注明本文出处以及附上 本文地址超链接  以及 博主博客地址:http://blog.csdn.NET/qq_20259459  和 作者邮箱( jinweizhi93@gmai. ...

  2. 【Spark深入学习 -14】Spark应用经验与程序调优

    ----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调 ...

  3. 你有哪些深度学习(rnn、cnn)调参的经验?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 你有哪些deep learning(rnn.cnn)调参的经验? ...

  4. 系统学习深度学习(二十五)--CNN调优总结

    资料来自网上,略有删改. 1.针对CNN优化的总结:Systematic evaluation of CNN advances on the ImageNet 使用没有 batchnorm 的 ELU ...

  5. DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优

    DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优 目录 基于keras对LSTM算法进行超参数调优 1.可视化LSTM模型的loss和acc曲线

  6. 【深度学习】模型训练教程之Focal Loss调参和Dice实现

    文章目录 1 Focal Loss调参概述 2 实验 3 FocalLoss 对样本不平衡的权重调节和减低损失值 4 多分类 focal loss 以及 dice loss 的pytorch以及ker ...

  7. 系统学习深度学习(二十二)--CNN经典模型总结

    转自:http://www.open-open.com/lib/view/open1473213789568.html 参考:http://blog.csdn.net/qq_17754181/arti ...

  8. 深度学习入门知识整理-训练技巧以及模型调优

    目录 网络模型先简单后复杂 确认模型损失 检查中间输出和连接 关于可视化神经网络的主要方法,Faizan Shaikh 举出了三个例子: 超参数的选择 学习率范围侧视图Colab Notebook N ...

  9. 深度学习-超参数调优

    在机器学习中有很多调优的方式机器学习--超参数调优,深度学习中也存在同样的方式,接下来,介绍一下深度学习框架里边的自动调参模块. 1. 基于Tensorflow的Keras tuner 官方教程如下: ...

最新文章

  1. 精益数据分析(学习笔记)——长期更新
  2. 风暴数码论坛教程--apk和odex的介绍和合并
  3. 信息与计算机科学好学吗,计算机科学与技术好学吗?
  4. css实现页面文字不换行、自动换行、强制换行
  5. 【转】简述TCP的三次握手过程
  6. kali2 安装docker_Docker 装 kali 的全套操作
  7. 16位汇编 写入显存B800:0000 输出字符串
  8. python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因
  9. 向上2021·新消费品牌发展报告
  10. c++文件流基本用法(fstream, ifstream, ostream)
  11. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践
  12. 【高校宿舍管理系统】第六章 用户管理和年级管理
  13. (step4.3.1) hdu 1010(Tempter of the Bone——DFS)
  14. Color.js增强你对颜色的控制
  15. 常用类 (七) ----- 包装类
  16. 第十一课 Solidity语言编辑器REMIX指导大全
  17. 一个很好用的桌面取色器和一个在线取色器
  18. 电脑分屏没有声音_电脑用HDMI线分屏后,耳机或音箱没声音之完美解决!
  19. 简易网页音乐播放器制作
  20. 快速打开管理工具的命令

热门文章

  1. 轮播图1/3样式轮播图,模仿淘宝详情页图片胶囊式轮播
  2. 后台服务中,数据库端设计建议
  3. 如何使用Jmeter 5.1录制脚本
  4. tiktok跨境电商怎么做
  5. 武夷岩茶独特的品饮情趣
  6. 哈夫曼树python实现
  7. 智能电视app安装步骤启动及卸载
  8. 详述Servlet获取form表单数据
  9. deepin终端编译c程序_大神支招 如何在Linux下运行C语言程序
  10. linux怎么样运行c程序,linux下运行C程序