前言

  在深度学习中有很多参数是我们在训练模型之前自己设定的,我们把这些参数就称为——超参数。其中主要超参数包括了:学习率、batch_size、梯度下降法循环的数量、隐藏层数目、隐藏层单元数目、激活函数的选择等。

1.超参数

2.学习率

3.batch_size

1.超参数

1.1 超参数的选择

如何选择最优的超参数对模型的性能起着非常重要的作用,下面提供了一些常用的选择超参数的方法:
  1.猜测和检查:根据经验或直觉,选择参数,一直迭代。
  2.网格搜索:让计算机尝试在一定范围内均匀分布的一组值。这是获得良好超参数的最简单方法。它实际上就是暴力解决。
算法:从一组给定的超参数中尝试一堆超参数,看看哪种方法效果最好。
优点:五年级学生都很容易实现,而且可以轻松并行化。
缺点:正如你可能猜到的那样,它的计算成本非常高(因为所有暴力算法都是如此)。
我是否应该使用它:可能不会。网格搜索非常低效。即使你想保持简单,你也最好使用随机搜索。
  3.随机搜索:让计算机随机挑选一组值。
正如它的本意,随机搜索。完全随机化。
算法:在一些超参数空间上从均匀分布中尝试一堆随机超参数,看看哪种方法效果最好.
优点:可以轻松并行化。就像网格搜索一样简单,但性能稍好一点,如下图1所示:

图 1 缺点:虽然它提供了比网格搜索更好的性能,但它仍然只是计算密集型。
我是否应该使用它:如果琐碎的并行化和简单性是最重要的,那就去吧。但是,如果你愿意花费时间和精力,那么通过使用贝叶斯优化,你的模型效果将大大提升。
   4.贝叶斯优化:使用贝叶斯优化超参数,会遇到贝叶斯优化算法本身就需要很多的参数的困难。与我们迄今为止看到的其他方法不同,贝叶斯优化使用了算法的先前迭代的知识。使用网格搜索和随机搜索,每个超参数猜测都是独立的。但是,使用贝叶斯方法,每次我们选择并尝试不同的超参数时,表现都在一点点提升。
算法:贝叶斯方法试图建立一个函数(更准确地说,是关于可能函数的概率分布),用于估计模型对于某个超参数选择的好坏程度。通过使用这种近似函数(也称为代理函数),您不必在设置、训练、评估的循环上花费太多时间,因为你可以优化代理函数的超参数。
优点:贝叶斯优化比网格搜索和随机搜索提供更好的结果。
缺点:并行化并不容易。
我应该使用它吗:在大多数情况下,是的!但是,下列情况例外:
  你是一个深度学习专家,你不需要一个微不足道的近似算法帮忙。
  你拥有庞大的计算资源,并可以大规模并行化网格搜索和随机搜索。
  如果你是一个频率论者/反贝叶斯统计书呆子。
   5.在良好初始猜测的前提下进行局部优化:这就是MITIE 的方法,它使用BOBYQA 算法,并有一个精心选择的起始点。
   6.论文提出了一种新的LIPO 的全局优化方法。这个方法没有参数,而且经验证比随机搜索方法好。

2.学习率

可以这么说学习率是所有超参数中最重要的一个,选择一个好的学习率不仅可以加快模型的收敛,避免陷入局部最优,减少迭代的次数,同时可以提高模型的进度。下面我们就来说说 学习率
  学习率是最重要的超参数,因为它以一种复杂的方式控制着模型的有效容量。如果在有限时间内,想提高模型性能,那么就调它。调其他的超参数需要监视训练和测试误差来判断模型是欠拟合还是过拟合。
  学习率通常高于前 100 次迭代后产生最佳性能的学习率。监视前几次迭代,选择一个比表现最好的学习率更高的学习率,同时注意避免不稳定的情况。如果学习率太高,我们的损失函数将开始在某点来回震荡,不会收敛。如果学习率太小,模型将花费太长时间来收敛,如图2所述。
图2 在动量梯度下降算法中,除了学习率这个重要的参数外还有一个重要的参数——动量

β \beta β。动量:简而言之,动量常数可以被认为是在损失函数表面滚动的球的质量。球越重,下落越快。但如果它太重,它可能会卡住或超过目标。如图3所示。

图3

2.1学习率的设定和选择

  选择一个好的学习率在模型的训练中起着非常重要的作用,下面就来说说如何选择和调整一个好的学习率。
  越大的网络需要越多的训练,反之亦然。如果你添加了太多的神经元和层数,适当提升你的学习速率。同时学习率需要和训练周期,batch size 大小以及优化方法联系在一起考虑。
学习率的设定:模型训练时另一关键设定便是模型学习率(learning rate),一个理想的学习率会促进模型收敛,而不理想的学习率甚至会直接导致模型直接目标函数损失值“爆炸”无法完成训练。学习率设定时可遵循下列两项原则:
1.模型训练开始时的初始学习率不宜过大,以0.01和0.001为宜;如发现刚开始训练没几个批次(mini-batch)模型目标函数损失值就急剧上升,这便说明模型训练的学习率过大,此时应减小学习率从头训练;
2.模型训练过程中,学习率应随轮数增加而减缓。减缓机制可有不同,一般为如下三种方式:a)轮数减缓(step decay)。如五轮训练后学习率减半. b)指数减缓. c)分数减缓(1/t decay)。
调整学习率:调整学习率很多时候也是行之有效的时段。以下是可供探索的一些想法:
1.实验很大和很小的学习率
2.文献里常见的学习速率值,考察你能学习多深的网络。
3.尝试随周期递减的学习率
4.尝试经过固定周期数后按比例减小的学习率。
5.尝试增加一个动量项(momentum term),然后对学习速率和动量同时进行格点搜索。

3.batch_size

batch_size是超参数中比较重要的参数之一。
下面我们将从三个方面来进行叙述。

3.1.为什么需要Batch Size

首先Batch Size决定的是下降的方向。
如果数据集比较小,可采用全数据集的形式,好处是:
1、由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
2、由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。Full Batch Learning 可以使用Rprop 只基于梯度符号并且针对性单独更新各权值。对于更大的数据集,采用全数据集的形式,坏处是:
  1、随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
  2、以Rprop 的方式迭代,会由于各个Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来RMSProp 的妥协方案。

下面来谈谈Batch_size对实验的影响。

3.2调节Batch Size对实验效果的影响

1、Batch_Size 太小,可能导致算法不收敛。
2、随着Batch_Size 增大,处理相同数据量的速度越快。
3、随着Batch_Size 增大,达到相同精度所需要的epoch 数量越来越多。
4、由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
5、由于最终收敛精度会陷入不同的局部极值,因此Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
因此batch_size的值不能太大也不能太小,当batch_size慢慢增大到某一个值的时候,模型的性能也会慢慢的增强达到一个峰值,但是,当batch_size在继续增大的时候模型的性能会逐渐下降。并且内存也不能加载那么大的batch_size值。但是,如果batch_size调小的话,就不能充分利用电脑内存,并且小批量的batch_size其下降的方向不能很好代表样本下降的方向。因此,我们要在合理的范围内增加Btach_size的值。

3.3.在合理范围内增大Batch Size的好处

1、内存利用率提高了,大矩阵乘法的并行化效率提高。
2、跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
3、在一定范围内,一般来说Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

3.4.Batch_size的设置

batch_size翻译为样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析;较小的batch_size值让学习过程收敛更快,但是产生更多噪声。较大的值让学习过程收敛较慢,但是准确的估计误差梯度。下面是给出的两个建议:
建议1:batch size 的默认值最好是32或者说是2的幂次方(其实具体的大小可以根据自己的数据量、硬件的好坏来决定。比如:60、80…)。
建议2:调节batch size时,最好观察模型在不同batch size 下的训练时间和验证误差的学习曲线。

深度学习中的超参数以及两个重要的超参数——学习率和batch_size相关推荐

  1. cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇

    前言 在深度学习中的参数梯度推导(三)中篇里,我们总结了CNN的BP推导第一步:BP通过池化层时梯度的计算公式.本篇(下篇)则继续推导CNN相关的其他梯度计算公式. 注意:本文默认读者已具备深度学习上 ...

  2. eta 深度学习 参数_深度学习中的参数梯度推导(一)

    必备的数学知识 矩阵微分与求导 前言 深度学习向来被很多人认为是"黑盒",因为似乎很多人都不清楚深度学习的运作方式,本系列<深度学习中的数学>的连载文章主要目的就是向大 ...

  3. 谈谈深度学习中的 Batch_Size Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。 首先,为什么需要有 Batch_Size 这个参数? Batch 的选

    From Here 谈谈深度学习中的 Batch_Size Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开. 首先,为什么需要有 Batch_Size 这个参数? ...

  4. 深度学习中的两种不确定性:偶然不确定性和认知不确定性(Aleatoric Uncertainty Epistemic Uncertainty)

    转载:https://zhuanlan.zhihu.com/p/56986840 注: 本文中,概念.公式与实验均基于 Alex Kendall & Yarin Gal的论文:https:// ...

  5. 深度学习中的优化算法之MBGD

    之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...

  6. 深度学习中的优化简介

    深度学习算法在许多情况下都涉及到优化. 1. 学习和纯优化有什么不同 在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的.因此,我们只是间接地优化P.我们系统通过降低代 ...

  7. 浅析深度学习中Batch Size大小对训练过程的影响

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨陈志远@知乎(已授权) 来源丨https://zhuanlan ...

  8. 深度学习中GPU和显存分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自:机器学习AI算法工程 深度学习最吃机器,耗资源,在本文,我将 ...

  9. 干货|卷积有多少种?一文读懂深度学习中的各种卷积

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 我们都知道卷积的重要性,但你知道深度学习领域的卷积究竟是什么,又有 ...

  10. yolo-mask的损失函数l包含三部分_【AI初识境】深度学习中常用的损失函数有哪些?...

    这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...

最新文章

  1. MethodTrace 生成的trace文件为空
  2. python画直方图成绩分析-使用Python进行描述性统计
  3. 检测IIS应用程序池对象 回收
  4. echarts label加边框_玩转ECharts之实现“动态颜色的Label”
  5. JS静态变量和静态函数
  6. APP可临摹分层模板素材|可改善您的登录设计
  7. POSIX 信号量学习与思考
  8. Debian9安装QT5.12.3
  9. 为什么现代企业需提高企业敏捷性
  10. 2021-0(C++)输入一个字符串,判断其是否是回文字符串(回文字符串就是正序与反序是相同的字符串)5-27
  11. 破解安装IAR编辑器
  12. Java jna 中控考勤机_中控考勤机开发 jacob 实现监听
  13. 解决frp内网穿透vsftpd报227错误
  14. SAP ABAP MOVE 及 CORRESPONDING 7.4版本新用法
  15. python绘制黑白棋盘_python – 在二维数组中创建一个黑白棋盘
  16. php点击同一个按钮实现正序倒叙,php foreach正序倒序输出
  17. 线性代数学习-矩阵在电流计算中的应用
  18. 基恩士KV8000程序 基恩士KV8000,威伦通触摸屏,搭载KV-XH16EC总线模块进行分布式总线控制
  19. Java程序验证五子棋先手必胜,五子棋怎样下最厉害_五子棋先手必胜开局图
  20. VBA-循环语句之For Each..Next

热门文章

  1. vue实现上下滑动翻页_如何通过vue实现一款简单通用的翻页组件
  2. 宝贝三十六计V1.0 Cocos2d-x联网实战项目
  3. 离散数学 --- 树 --- 无向树,生成树与最小生成树
  4. win10 8080端口被占用解决办法
  5. 根据电影名称(支持电视剧名称),获取下载链接。
  6. 18清明校内测试T2
  7. android app传递参数,Android APP调起另外一个APP并传值
  8. 苏宁易购移动端首页_rem适配+less
  9. CCRC信息安全服务资质的八个方向选择
  10. SOCKET CLOSE_WAIT状态的说明