使用贝叶斯优化的深度学习结构超参数优化
deep-learning
machine-learning
optimization
tensorflow
5
0

我已经为原始信号分类任务构建了CLDNN(卷积,LSTM,深度神经网络)结构。

每个训练时期都运行约90秒,并且超参数似乎很难优化。

我研究了各种优化超参数的方法(例如随机或网格搜索),并发现了有关贝叶斯优化的信息。

尽管我仍未完全了解优化算法,但我喜欢它会对我有很大帮助。

我想问一些关于优化任务的问题。

  1. 如何针对深度网络设置贝叶斯优化?(我们要优化的成本函数是什么?)
  2. 我要优化的功能是什么? N个纪元后验证集的费用吗?
  3. 留兰香是完成此任务的好起点吗?还有其他建议吗?

我将不胜感激对此问题的任何见解。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

尽管我仍未完全了解优化算法,但我喜欢它会对我有很大帮助。

首先,让我简要解释一下这一部分。贝叶斯优化方法旨在解决多臂匪问题中的勘探开发权衡问题 。在这个问题中,存在一个未知函数,我们可以在任何点进行评估,但是每种评估成本(直接罚金或机会成本),目的是使用尽可能少的试验来找到其最大值。基本上,权衡是这样的:您知道函数的有限点集(其中有些是好的,有些是不好的),因此您可以尝试在当前局部最大值附近进行尝试,以期对其进行改进(开发),或者您可以尝试一个全新的空间区域,该区域可能更好或更糟(探索),或者介于两者之间。

贝叶斯优化方法(例如PI,EI,UCB),使用高斯过程 (GP)建立目标函数的模型,并在每一步中基于其GP模型选择最“有希望的”点(请注意,“有希望的”可以是通过不同的特定方法进行了不同的定义)。

这是一个例子:

sin(x)* x

真正的函数是[-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上

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号