深度学习模型超参数搜索实用指南

要知道,与机器学习模型不同,深度学习模型里面充满了各种超参数。而且,并非所有参数变量都能对模型的学习过程产生同样的贡献。

考虑到这种额外的复杂性,在一个多维空间中找到这些参数变量的最佳配置并不是件容易的事情。

每一位科学家和研究人员,都希望在现有的资源条件下(计算、金钱和时间),找到最佳的模型。

通常情况下,研究人员和业余爱好者会在开发的最后阶段尝试一种搜索策略。这可能会有助改进他们辛辛苦训练出来的模型。

此外,在半自动/全自动深度学习过程中,超参数搜索也是的一个非常重要的阶段。

超参数到底是什么?

先让我们从最简单的定义开始:

超参数是在构建机器/深度学习模型时可以转动的旋钮。

或者这样说:

超参数是开始训练前,用预先确定的值,手动设置的所有训练变量。

我们应该都会认可Learning Rate和Dropout Rate是超参数,但是模型设计变量呢?比如嵌入、层数、激活函数等。我们是否应该将这些变量视为超参数?

简单起见,我们也将模型设计变量视为超参数集的一部分。

那么,从训练过程中获得的参数,以及从数据中获得的变量应该怎么考虑呢?这被称为模型参数。我们将把它们排除在超参数集之外。

让我们来举个例子。请看下图,用一个例子说明了深度学习模型中变量的不同分类。

我们的下一个问题:搜索的代价很高

寻找超参数的最佳配置,通常会面临的挑战是,超参数搜索是一个受计算、金钱和时间约束的迭代过程。

从一个有潜力的配置的猜测(步骤1 )开始,等到一次完整的训练(步骤2 )结束后,来获得对相关有益度量的实际评估(步骤3 )。然后,我们将跟踪搜索过程(步骤4 ),再根据我们的搜索策略,选择新的猜测(步骤1 )。

我们会一直这样下去,直到我们结束。通常情况下,是钱或者时间用完了。

让我们来谈谈策略

我们有四种主要策略可用于搜索最佳配置:

Babysitting,又名试错(Trial & Error)
网格搜索(Grid Search)
随机搜索(Random Search)
贝叶斯优化(Bayesian Optimization)

Babysitting

在学术领域,Babysitting也被称为“试错”或“研究生下降”(Grad Student Descent)。这种方法是100%的手工操作,通常被研究人员、学生和业余爱好者采用。

流程非常简单:比如一个学生设计一个新的实验后,她会遵循学习过程的所有步骤,从数据收集到特征映射可视化,然后她会按照顺序迭代超参数,直到她到了截止日期或耗完了其他的驱动力。

授所描述的熊猫工作流程。

这种方法非常有教育意义。但是,在一个团队或者一个公司里,这种方法并不适用,因为数据科学家的时间是非常宝贵的。

这就给我们提出了一个问题:

“有没有更好的方法来利用我们的时间?”

当然有,我们可以通过定义一个自动的超参数搜索策略来利用你的时间。

网格搜索

网格搜索,是一种简单尝试所有可能配置的方法。

下面是工作流程:

在n维上定义一个网格,其中每一个映射代表一个超参数。例如,n= (learning_rate, dropout_rate, batch_size)

对于每个维度,定义可能值的范围:例如batch _ size = [ 4、8、16、32、64、128、256 ]

搜索所有可能的配置并等待结果来建立最佳配置:例如 C1 = (0.1, 0.3, 4) -> acc = 92%, C2 = (0.1, 0.35, 4) -> acc = 92.3%, 等等……

下图展示了一个简单的二维网格搜索的Dropout和Learning rate。

通常情况下,这种并行策略会使人为难,因为它没有考虑到计算背景。使用网格搜索,你拥有的计算资源越多,你能同时尝试的猜测就会越多。

这种方法的真正痛点被称为维数灾难。即我们增加的维度越多,搜索就变得越困难,最终会导致这种策略难以为继。

当维度小于或等于4时,可以使用这种方法。但在实践中,即使它能保证最终找到最佳配置,它仍然是不可取的。相反,最好使用随机搜索。

随机搜索

几年前,Bergstra和Bengio发表了一篇论文,论证了网格搜索的效率低下。

网格搜索和随机搜索之间唯一真正的区别是第一步:随机搜索从配置空间中随机选择点

让我们使用下面的一些图片,来展示研究人员的论证结果。

图片中, 主要是通过在两个超参数空间上搜索最佳配置来比较这两种方法。它还假设一个参数比另一个更重要。

这是一个安全的假设,正如开头提到的那样,深度学习模型中确实充满了各种超参数,通常研究者/科学家/学生知道哪些参数对训练的影响最大。

在网格搜索中,我们很容易注意到,即使我们训练了9个模型,但每个变量只使用了3个值。

在随机搜索中,多次地选择相同变量的可能性微乎其微。如果使用第二种方法,每个变量会使用9个不同值来训练9个模型。

划重点:如果你的搜索空间包含3到4个维度,不要使用网格搜索。相反,使用随机搜索,它会为每个搜索任务提供一个非常好的基准。

后退一步,前进两步

另外,当你需要为每个维度设置空间时,为每个变量设定正确的尺度是非常重要的。

例如,使用批量大小的值作为2的幂,并且在日志中对learning rate进行抽样是很常见的。

另一个很常见的做法是,在一定次数的迭代中,从上面的一个布局开始,然后通过在每个变量范围内更密集地采样,来放大有潜力的子空间,甚至用相同或不同的搜索策略开始新的搜索。

还有一个问题:独立猜测

不幸的是,网格搜索和随机搜索有一个共同的缺点:

“每个新的猜测都独立于之前的运行!”

相比之下,Babysitting的优势就显现出来了。Babysitting之所以有效,是因为科学家有能力利用过去的猜测,并将其作为改进下一步工作的资源,来有效地推动搜索和实验。

等一下,这听起来很熟悉……如果我们试着将超参数搜索作为一个机器学习任务来建模呢?会发生什么?

好了,请允许我“请出”贝叶斯优化。

贝叶斯优化

这种搜索策略是建立一个代理模型,试图从超参数配置中预测我们关心的度量指标。

在每一次迭代中,代理将会变得越来越有信心,新的猜测会带来新的改进。像其他搜索策略一样,它也会等到一切都耗尽的时候停止。

微信:https://mp.weixin.qq.com/s/wG_N6hKlKXcrXrAhzj3QwQ

原文地址:https://www.cnblogs.com/tianqizhi/p/9738688.html

时间: 2024-08-03 13:10:10

深度学习模型超参数搜索实用指南的相关文章

深度学习之超参数调试

前言            以下内容是个人学习之后的感悟,转载请注明出处~ 超参数调试 在深度学习中,超参数有很多,比如学习率α.使用momentum或Adam优化算法的参数(β1,β2,ε).层数layers.不同层隐藏 单元数hidden units.学习率衰退.mini=batch的大小等.其中一些超参数比其他参数重要,其优先级可以分为以下几级,如图,红色 框最优先,橙色次之,紫色再次之,最后没有框住的一般直接取经验值(当然你也可以自己取). 那么如何来调试超参数呢? 以下图的2维超参数为

提升深度学习模型的表现,你需要这20个技巧

提升深度学习模型的表现,你需要这20个技巧 标签: 深度学习 2016-09-24 21:28 6650人阅读 评论(0) 收藏 举报  分类: 深度学习(4)  选自machielearningmastery 机器之心编译 作者:Jason Brownlee 参与:杜夏德.陈晨.吴攀.Terrence.李亚洲 本文原文的作者 Jason Brownlee 是一位职业软件开发者,没有博士学位的他通过「从应用中学习」的方法自学了机器学习,他表示对帮助职业开发者应用机器学习来解决复杂问题很有热情,也

深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文)

深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文) 2018-04-15 19:53:45 JF_Ma 阅读数 296更多 分类专栏: 机器学习 深度 | 提升深度学习模型的表现,你需要这20个技巧(附论文) 2016-09-23 机器之心 选自machielearningmastery 机器之心编译 作者:Jason Brownlee 参与:杜夏德.陈晨.吴攀.Terrence.李亚洲 本文原文的作者 Jason Brownlee 是一位职业软件开发者,没有博士学位的他通过「从应用

构建和优化深度学习模型(神经网络机器识图)

DSL(Deep Learning Service)是基于华为云强大高性能计算提供一站式深度学习平台服务,内置大量优化的网络模型算法,以兼容.便携.高效的品质帮助用户轻松使用深度学习技术,通过灵活调度按需服务化方式提供模型训练.评估与预测. 深度学习训练模型:数据准备-->数据模型训练(优化参数)-->反馈损失值-->更多训练 评估模型:返回结果为预测值与测试数据集标注值的错误率或准确率 深度学习模型的优化方法? 训练次数的调整? 代价函数的调整? 学习率的调整? 训练算法的优化? 神经

利用 TFLearn 快速搭建经典深度学习模型

利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<TensorFlow 增加自定义运算符>).由于运算符的粒度较小,在构建深度学习模型时,代码写出来比较冗长,比如实现卷积层:5, 9 这种方式在设计较大模型时会比较麻烦,需要程序员徒手完成各个运算符之间的连接,像一些中间变量的维度变换.运算符参数选项.多个子网络连接处极易发生问题,肉眼检查也很难发现代码中潜伏的 bu

文本情感分类(二):深度学习模型

在<文本情感分类(一):传统模型>一文中,笔者简单介绍了进行文本情感分类的传统思路.传统的思路简单易懂,而且稳定性也比较强,然而存在着两个难以克服的局限性:一.精度问题,传统思路差强人意,当然一般的应用已经足够了,但是要进一步提高精度,却缺乏比较好的方法:二.背景知识问题,传统思路需要事先提取好情感词典,而这一步骤,往往需要人工操作才能保证准确率,换句话说,做这个事情的人,不仅仅要是数据挖掘专家,还需要语言学家,这个背景知识依赖性问题会阻碍着自然语言处理的进步. 庆幸的是,深度学习解决了这个问

深度学习模型的构建

构建深度学习模型的基本步骤 需要举例的地方以波士顿房价预测为案例 波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".和大家对房价的普遍认知相同,波士顿地区的房价是由诸多因素影响的.该数据集统计了13种可能影响房价的因素和该类型房屋的均价,期望构建一个基于13个因素进行房价预测的模型. 一.数据处理 ? 数据处理包含五个部分:数据导入.数据形状变换.数据集划分.数据归一化处理和封装load data函数.数据预处理后,才能被模型调用. 1.数据形状变换

在NLP中深度学习模型何时需要树形结构?

前段时间阅读了Jiwei Li等人[1]在EMNLP2015上发表的论文<When Are Tree Structures Necessary for Deep Learning of Representations?>,该文主要对比了基于树形结构的递归神经网络(Recursive neural network)和基于序列结构的循环神经网络(Recurrent neural network),在4类NLP任务上进行实验,来讨论深度学习模型何时需要树形结构.下面我将通过分享这篇论文以及查看的一些

一种基于脑电图情感识别的新型深度学习模型

目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 机器学习的最新进展使得检测和识别人类情绪的技术也得到了快速的发展.其中一部分机器学习技术中是通过分析脑电图(EEG)信号来工作的,这些信号本质上是对从一个人的头皮上收集的脑电活动的记录. 过去十多年来,大多数基于脑电图的情绪分类方法都采用了传统的机器学习方法,例如支持向量机(SVM)模型,因为这些方法需要的训练样本较少.事实上之所以使用需要训练样本量少的方法是因