尽管我仍未完全了解优化算法,但我喜欢它会对我有很大帮助。
首先,让我简要解释一下这一部分。贝叶斯优化方法旨在解决多臂匪问题中的勘探开发权衡问题 。在这个问题中,存在一个未知函数,我们可以在任何点进行评估,但是每种评估成本(直接罚金或机会成本),目的是使用尽可能少的试验来找到其最大值。基本上,权衡是这样的:您知道函数的有限点集(其中有些是好的,有些是不好的),因此您可以尝试在当前局部最大值附近进行尝试,以期对其进行改进(开发),或者您可以尝试一个全新的空间区域,该区域可能更好或更糟(探索),或者介于两者之间。
贝叶斯优化方法(例如PI,EI,UCB),使用高斯过程 (GP)建立目标函数的模型,并在每一步中基于其GP模型选择最“有希望的”点(请注意,“有希望的”可以是通过不同的特定方法进行了不同的定义)。
这是一个例子:
真正的函数是[-10, 10]
间隔上的f(x) = x * sin(x)
(黑色曲线)。红点代表每个试验,红色曲线是GP 平均值 ,蓝色曲线是平均值加或减一个标准偏差 。如您所见,GP模型并非在所有地方都符合真正的功能,但是优化器很快就确定了-8
附近的“热点”区域并开始对其进行开发。
如何针对深度网络设置贝叶斯优化?
在这种情况下,空间是由(可能是经过变换的)超参数定义的,通常是多维单位超立方体。
例如,假设您有三个超参数: α in [0.001, 0.01]
的学习率α in [0.001, 0.01]
N in [50..100]
的正则化器λ in [0.1, 1]
(均是连续的)和N in [50..100]
的隐藏层大小N in [50..100]
(整数)。用于优化的空间是3维立方体[0, 1]*[0, 1]*[0, 1]
。通过以下变换,此立方体中的每个点(p0, p1, p2)
对应于一个三位一体(α, λ, N)
:
p0 -> α = 10**(p0-3)
p1 -> λ = 10**(p1-1)
p2 -> N = int(p2*50 + 50)
我要优化的功能是什么? N个纪元后验证集的费用吗?
正确,目标功能是神经网络验证的准确性。显然,每个评估都是昂贵的,因为它至少需要几个纪元来进行培训。
还要注意,目标函数是随机的 ,即在同一点上的两次评估可能会略有不同,但是它显然不会增加贝叶斯优化的不确定性,但它不会阻止贝叶斯优化。
留兰香是完成此任务的好起点吗?还有其他建议吗?
spearmint是一个很好的库,您绝对可以使用它。我也可以推荐hyperopt 。
在我自己的研究中,我最终编写了自己的微型库,基本上有两个原因:我想编码要使用的精确贝叶斯方法(特别是,在我的案例中,我发现UCB和PI的投资组合策略融合得比其他任何方法都快);另外还有另一种技术可以节省多达50%的训练时间,称为学习曲线预测 (其思想是,当优化器确信模型学习速度不如其他领域时,跳过整个学习周期)。我不知道任何实现此功能的库,因此我自己编写了代码,最后得到了回报。如果您有兴趣,代码在GitHub上 。
0
我已经为原始信号分类任务构建了CLDNN(卷积,LSTM,深度神经网络)结构。
每个训练时期都运行约90秒,并且超参数似乎很难优化。
我研究了各种优化超参数的方法(例如随机或网格搜索),并发现了有关贝叶斯优化的信息。
尽管我仍未完全了解优化算法,但我喜欢它会对我有很大帮助。
我想问一些关于优化任务的问题。
我将不胜感激对此问题的任何见解。