深度学习模型超参数搜索实用指南
Posted tianqizhi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习模型超参数搜索实用指南相关的知识,希望对你有一定的参考价值。
要知道,与机器学习模型不同,深度学习模型里面充满了各种超参数。而且,并非所有参数变量都能对模型的学习过程产生同样的贡献。
考虑到这种额外的复杂性,在一个多维空间中找到这些参数变量的最佳配置并不是件容易的事情。
每一位科学家和研究人员,都希望在现有的资源条件下(计算、金钱和时间),找到最佳的模型。
通常情况下,研究人员和业余爱好者会在开发的最后阶段尝试一种搜索策略。这可能会有助改进他们辛辛苦训练出来的模型。
此外,在半自动/全自动深度学习过程中,超参数搜索也是的一个非常重要的阶段。
超参数到底是什么?
先让我们从最简单的定义开始:
超参数是在构建机器/深度学习模型时可以转动的旋钮。
或者这样说:
超参数是开始训练前,用预先确定的值,手动设置的所有训练变量。
我们应该都会认可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
以上是关于深度学习模型超参数搜索实用指南的主要内容,如果未能解决你的问题,请参考以下文章
21- 神经网络模型_超参数搜索 (TensorFlow系列) (深度学习)
pytorch深度学习模型调参策略:采用贝叶斯工具进行最优参数搜索及最佳步数确认