【深度学习】如何选择神经网络的超参数

news2024/11/16 15:31:31

1. 神经网络的超参数分类

神经网路中的超参数主要包括:

1. 学习率 η

2. 正则化参数 λ

3. 神经网络的层数 L

4. 每一个隐层中神经元的个数 j

5. 学习的回合数Epoch

6. 小批量数据 minibatch 的大小

7. 输出神经元的编码方式

8. 代价函数的选择

9. 权重初始化的方法

10. 神经元激活函数的种类

11.参加训练模型数据的规模

这十一类超参数。

这些都是可以影响神经网络学习速度和最后分类结果,其中神经网络的学习速度主要根据训练集上代价函数下降的快慢有关,而最后的分类的结果主要跟在验证集上的分类正确率有关。因此可以根据该参数主要影响代价函数还是影响分类正确率进行分类,如图1所示

如何选择神经网络的超参数

图1. 十一类超参数的分类情况
在上图中可以看到超参数 2,3,4, 7 主要影响的时神经网络的分类正确率;9 主要影响代价函数曲线下降速度,同时有时也会影响正确率;1,8,10 主要影响学习速度,这点主要体现在训练数据代价函数曲线的下降速度上;5,6,11 主要影响模型分类正确率和训练用总体时间。这上面所提到的时某个超参数对于神经网络想到的首要影响,并不代表着该超参数只影响学习速度或者正确率。

因为不同的超参数的类别不同,因此在调整超参数的时候也应该根据对应超参数的类别进行调整。再调整超参数的过程中有根据机理选择超参数的方法,有根据训练集上表现情况选择超参数的方法,也有根据验证集上训练数据选择超参数的方法。他们之间的关系如图2所示。

如何选择神经网络的超参数

图2. 不同超参数的选择方法不同。
如图2所示,超参数 7,8,9,10 由神经网络的机理进行选择。在这四个参数中,应该首先对第10个参数神经元的种类进行选择,根据目前的知识,一种较好的选择方式是对于神经网络的隐层采用sigmoid神经元,而对于输出层采用softmax的方法;根据输出层采用sotmax的方法,因此第8个代价函数采用 log-likelihood 函数(或者输出层还是正常的sigmoid神经元而代价函数为交叉熵函数),第9个初始化权重采用均值为0方差为  1nin1nin 的高斯随机分布初始化权重;对于输出层的编码方式常常采用向量式的编码方式,基本上不会使用实际的数值或者二进制的编码方式。超参数1由训练数据的代价函数选择,在上述这两部分都确定好之后在根据检验集数据确定最后的几个超参数。这只是一个大体的思路,具体每一个参数的确定将在下面具体介绍。

2. 宽泛策略

根据上面的分析我们已经根据机理将神经网络中的神经元的种类、输出层的模式(即是否采用softmax)、代价函数及输出层的编码方式进行了设定。所以在这四个超参数被确定了之后变需要确定其他的超参数了。假设我们是从头开始训练一个神经网络的,我们对于其他参数的取值本身没有任何经验,所以不可能一上来就训练一个很复杂的神经网络,这时就要采用宽泛策略。
宽泛策略的核心在于简化和监控。简化具体体现在,如简化我们的问题,如将一个10分类问题转变为一个2分类问题;简化网络的结构,如从一个仅包含10个神经元你的隐层开始训练,逐渐增加网络的层数和神经元的个数;简化训练用的数据,在简化问题中,我们已经减少了80%的数据量,在这里我们该要精简检验集中数据的数量,因为真正验证的是网络的性能,所以仅用少量的验证集数据也是可以的,如仅采用100个验证集数据。监控具体指的是提高监控的频率,比如说原来是每5000次训练返回一次代价函数或者分类正确率,现在每1000次训练就返回一次。其实可以将“宽泛策略”当作是一种对于网络的简单初始化和一种监控策略,这样可以更加快速地实验其他的超参数,或者甚至接近同步地进行不同参数的组合的评比。
直觉上看,这看起来简化问题和架构仅仅会降低你的效率。实际上,这样能够将进度加快,因为你能够更快地找到传达出有意义的信号的网络。一旦你获得这些信号,你可以尝尝通过微调超参数获得快速的性能提升。

3. 学习率的调整

假设我们运行了三个不同学习速率( η=0.025η=0.025η=0.25η=0.25η=2.5η=2.5)的 MNIST 网 络,其他的超参数假设已经设置为进行30回合,minibatch 大小为10,然后 λ=5.0λ=5.0 ,使用50000幅训练图像,训练代价的变化情况如图3

如何选择神经网络的超参数

图3. 不同学习率下代价函数曲线的变化情况
使用  η=0.025η=0.025,代价函数平滑下降到最后的回合;使用  η=0.25η=0.25,代价刚开始下降,在大约20 回合后接近饱和状态,后面就是微小的震荡和随机抖动;最终使用  η=2.5η=2.5 代价从始至终都震荡得非常明显。

因此学习率的调整步骤为:首先,我们选择在训练数据上的代价立即开始下降而非震荡或者增加时的作为 ηη 阈值的估计,不需要太过精确,确定量级即可。如果代价在训练的前面若干回合开始下降,你就可以逐步增加 ηη 的量级,直到你找到一个的值使得在开始若干回合代价就开始震荡或者增加;相反,如果代价函数曲线开始震荡或者增加,那就尝试减小量级直到你找到代价在开始回合就下降的设定,取阈值的一半就确定了学习速率 。在这里使用训练数据的原因是学习速率主要的目的是控制梯度下降的步长,监控训练代价是最好的检测步长过大的方法。

4. 迭代次数

提前停止表示在每个回合的最后,我们都要计算验证集上的分类准确率,当准确率不再提升,就终止它也就确定了迭代次数(或者称回合数)。另外,提前停止也能够帮助我们避免过度拟合。
我们需要再明确一下什么叫做分类准确率不再提升,这样方可实现提前停止。正如我们已经看到的,分类准确率在整体趋势下降的时候仍旧会抖动或者震荡。如果我们在准确度刚开始下降的时候就停止,那么肯定会错过更好的选择。一种不错的解决方案是如果分类准确率在一段时间内不再提升的时候终止。建议在更加深入地理解 网络训练的方式时,仅仅在初始阶段使用 10 回合不提升规则,然后逐步地选择更久的回合,比如 20 回合不提升就终止,30回合不提升就终止,以此类推。

5. 正则化参数

我建议,开始时代价函数不包含正则项,只是先确定 ηη 的值。使用确定出来的 ηη,用验证数据来选择好的 λλ 。尝试从 λ=1λ=1 开始,然后根据验证集上的性能按照因子 10 增加或减少其值。一旦我已经找到一个好的量级,你可以改进 λλ 的值。这里搞定 λλ 后,你就可以返回再重新优化 ηη 。

6. 小批量数据的大小

选择最好的小批量数据大小也是一种折衷。太小了,你不会用上很好的矩阵库的快速计算;太大,你是不能够足够频繁地更新权重的。你所需要的是选择一个折衷的值,可以最大化学习的速度。幸运的是,小批量数据大小的选择其实是相对独立的一个超参数(网络整体架构外的参数),所以你不需要优化那些参数来寻找好的小批量数据大小。因此,可以选择的方式就是使用某些可以接受的值(不需要是最优的)作为其他参数的选择,然后进行不同小批量数据大小的尝试,像上面那样调整 ηη 。画出验证准确率的值随时间(非回合)变化的图,选择哪个得到最快性能的提升的小批量数据大小。得到了小批量数据大小,也就可以对其他的超参数进行优化了。

7. 总体的调参过程

首先应该根据机理确定激活函数的种类,之后确定代价函数种类和权重初始化的方法,以及输出层的编码方式;其次根据“宽泛策略”先大致搭建一个简单的结构,确定神经网络中隐层的数目以及每一个隐层中神经元的个数;然后对于剩下的超参数先随机给一个可能的值,在代价函数中先不考虑正则项的存在,调整学习率得到一个较为合适的学习率的阈值,取阈值的一半作为调整学习率过程中的初始值 ;之后通过实验确定minibatch的大小;之后仔细调整学习率,使用确定出来的 ηη,用验证数据来选择好的 λλ ,搞定 λλ 后,你就可以返回再重新优化 ηη。而学习回合数可以通过上述这些实验进行一个整体的观察再确定。

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

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

相关文章

4.4 抗锯齿

一、锯齿是怎么产生的 二、抗锯齿介绍 1.SSAA(super sample anti-aliasing) 拿4xSSAA举例子,假设最终屏幕输出的分辨率是800x600, 4xSSAA就会先渲染到一个分辨率1600x1200的buffer上,然后再直接把这个放大4倍的buffer下采样至800x600。这种做法在数学上…

卷积神经网络(AlexNet)鸟类识别

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、AlexNet (8层)介绍四、构建AlexNet (8层)网络模型五、…

pair和typedef

文章目录 一、pair用法1.2、pair的创建和初始化1.3、pair对象的操作1.4、(make_pair)生成新的pair对象1.5、通过tie获取pair元素值 2、typedef2.1、什么是typedef2.2、typedef用法2.2.1、对于数据类型使用例如:2.2.2、对于指针的使用例如2.2.3、对于结构体的使用 2.…

科技与艺术如何交织出“理想之家”?三星电视给出家电行业最优解答

作者 | 曾响铃 文 | 响铃说 理想的家,是什么样子? 关于这个问题,社交媒体上有形形色色的答案。很多人的梦中情屋是原木风、奶油色,点缀着绿意盎然的植物;还有一些人的Dream house是用全屋智能将科技感拉满,再配上打…

Linux 用户必备的 8 大网站

目录 前言 1、ArchWiki 2、ExplainShell 3、Crontab.guru 4、DistroWatch 5、Phoronix 6、Ubuntu Blog 7、GamingOnLinux 8、Reddit 的 /r/Linux 子论坛 我收藏了什么? 前言 这里列举的是我个人最喜欢的 Linux 网站,希望你也能喜欢。 对 Linux …

Redis报错:JedisConnectionException: Could not get a resource from the pool

1、问题描述: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 2、简要分析: redis.clients.util.Pool.getResource会从JedisPool实例池中返回一个可用的redis连接。分析源码可知JedisPool 继承了 r…

无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面,使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口,无需公网IP,无需设置路由器。 1.openWRT安装cpola…

C++11『lambda表达式 ‖ 线程库 ‖ 包装器』

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2022 版本 17.6.5 文章目录 🌇前言🏙️正文1.lambda表达式1.1.仿函数的使用1.2.lambda表达式的语法1.3.lambda表达式的使用…

基于5G+物联网+SaaS+AI的农业大数据综合解决方案:PPT全文44页,附下载

关键词:智慧农业大数据,5G智慧农业,物联网智慧农业,SaaS智慧农业,AI智慧农业,智慧农业大数据平台 一、智慧农业大数据建设背景 1、应对全球人口快速增长带来的粮食生产压力,未来的粮食生产力必…

鸿蒙(HarmonyOS)应用开发——安装DevEco Studio安装

前言 HarmonyOS华为开发的操作系统,旨在为多种设备提供统一的体验。它采用了分布式架构,可以在多个设备上同时运行,提供更加流畅的连接和互动。HarmonyOS的目标是提供更高的安全性、更高效、响应更快的用户体验,并通过跨设备功能…

【MySQL】宝塔面板结合内网穿透实现公网远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cpo…

程序员接单,宝藏好平台抄底攻略清单!五大平台精选。

前阵子”双十一“购物节狂欢促销,各种好货清单席卷而来。 程序员购不购物我不知道,但是这个兼职、接单清单相信你一定用得着。 搜罗海量信息,整理大量数据与评价,挖出了5个宝藏平台,绝对个个精选,保证量大…

好的程序员有什么特质呢?

程序员想要提升自己,一定要关注到工作中的方方面面。而一个好的程序员,一般都有这些特质: 弱者抱怨环境,强者改变环境 不要试图通过抱怨环境来获得工作环境上的改变,这不仅不会给你带来任何实质性的改变,…

别熬夜了!人真的会变臭

身为当代社畜,你一定经历过如下瞬间——— 周一早高峰的地铁车厢,拥挤的人群里若有若无地飘荡出一股刺鼻臭味,即使戴着口罩也难以抵挡其穿透性; 深夜还灯火通明的办公室工位上,浑浊的空气裹挟着疲惫的身体&#xff0…

每日一练:质因数分解

1. 题目 从键盘输入一个整数,开始整数的质因数分解,最后打印出该整数的所有质因数。 2.质因数概念 质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。…

基于element-ui后台模板,日常唠嗑

后面会补充github地址 文章目录 目录 文章目录 案例说明 1.引入库 2.创建布局组件 3.创建布局组件 4.菜单效果展示 5.创建顶部组件 5.创建顶部面包屑组件 6.创建内容区域组件 7.效果总览 7.布丁(实现一些小细节) 前言一、pandas是什么?二、使…

【数据结构】二叉树概念 | 满二叉树 | 完全二叉树

二叉树的概念 二叉树在实践中用的很多。 一棵二叉树是结点的一个有限集合,该集合: 或者为空;由一个根结点加上两棵别称为左子树和右子树的二叉树组成。二叉树最多两个孩子。 这里注意:二叉树并不是度为2的树。 二叉树的度最大值是…

我叫:快速排序【JAVA】

1.自我介绍 1.快速排序是由东尼霍尔所发展的一种排序算法。 2.快速排序又是一种分而治之思想在排序算法上的典型应用。 3.本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。 2.思想共享 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟…

GIT,解决远程分支冲突

背景:当远程分支A 与maste 有冲突如何解决–此时无法在这两个版本之间merge 1、切换到master分支: git checkout master 2、更新master分支代码: git pull 3、再次切换到自己新建的分支: git checkout add_login_check_func 4、将…

【腾讯云云上实验室-向量数据库】Tencent Cloud VectorDB在实战项目中替换Milvus测试

为什么尝试使用Tencent Cloud VectorDB替换Milvus向量库? 亮点:Tencent Cloud VectorDB支持Embedding,免去自己搭建模型的负担(搭建一个生产环境的模型实在耗费精力和体力)。 腾讯云向量数据库是什么? 腾…