optimization - 使用贝叶斯优化的深度学习结构的超参数优化

标签 optimization machine-learning tensorflow deep-learning bayesian

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

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

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

虽然我还没有完全理解优化算法,但我认为它会对我有很大帮助。

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

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

如果您对这个问题有任何见解,我将不胜感激。

最佳答案

Although I am still not fully understanding the optimization algorithm, I feed like it will help me greatly.

首先我简单解释一下这一部分。 贝叶斯优化方法旨在处理multi-armed bandit problem中的探索-利用权衡。 。在这个问题中,有一个未知函数,我们可以在任意点对其进行评估,但每次评估都会有成本(直接惩罚或机会成本),目标是使用尽可能少的试验找到其最大值可能的。基本上,权衡是这样的:你知道有限点集中的函数(其中一些是好的,一些是坏的),所以你可以尝试当前局部最大值周围的区域,希望能够改进它(利用),或者你可以尝试一个全新的空间区域,这可能会更好或更差(探索),或者介于两者之间。

贝叶斯优化方法(例如 PI、EI、UCB),使用 Gaussian Process 构建目标函数的模型(GP),并在每一步根据他们的 GP 模型选择最“有前途”的点(请注意,“有前途”可以通过不同的特定方法进行不同的定义)。

这是一个例子:

sin(x)*x

真正的函数是[-10, 10]区间上的f(x) = x * sin(x)(黑色曲线)。红点代表每次试验,红色曲线是 GP平均值,蓝色曲线是平均值加上或减去一个标准差。 正如您所看到的,GP 模型并不与所有地方的真实函数匹配,但优化器很快就识别出了 -8 周围的“热门”区域并开始利用它。

How do I set up the Bayesian Optimization with regards to a deep network?

在这种情况下,空间由(可能经过变换的)超参数定义,通常是多维单位超立方体。

例如,假设您有三个超参数:学习率 α in [0.001, 0.01],正则化器 λ in [0.1, 1](均为连续)以及隐藏层大小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)

What is the function I am trying to optimize? Is it the cost of the validation set after N epochs?

正确,目标函数是神经网络验证准确性。显然,每次评估都是昂贵的,因为它至少需要几个时期的训练。

另请注意,目标函数是随机,即对同一点的两次评估可能略有不同,但这并不是贝叶斯优化的障碍,尽管它明显增加了不确定性。

Is spearmint a good starting point for this task? Any other suggestions for this task?

spearmint是一个很好的库,你绝对可以使用它。我还可以推荐hyperopt .

在我自己的研究中,我最终编写了自己的小型库,基本上有两个原因:我想编写精确的贝叶斯方法以供使用(特别是,我发现 UCB 和 PI 的 portfolio strategy 收敛速度比其他任何方法都快,就我而言);另外,还有另一种技术可以节省高达 50% 的训练时间,称为 learning curve prediction (这个想法是当优化器确信模型的学习速度不如其他领域时跳过完整的学习周期)。我不知道有任何库实现了这个,所以我自己编码了它,最终它得到了返回。如果您有兴趣,代码是 on GitHub .

关于optimization - 使用贝叶斯优化的深度学习结构的超参数优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860817/

相关文章:

algorithm - 更好的算法 - 下一个半素数

python-3.x - 将字符串表示为词汇量为 200 的决策树中的特征(有或没有 one-hot 编码)

python - Tensorflow 中 model.fit 的 InvalidArgumentError

python - 如何用python生成身份张量?

assembly - x86/x64 asm 中的指令重新排序 - 使用最新 CPU 进行性能优化

android - Base64 图像的 Recyclerview - 滚动缓慢且滞后

r - SVM奇怪的分类

python-2.7 - Pandas DataFrame 中两个日期之间的差异

python - RuntimeError : cudaGetDevice() failed. 状态:参数无效

perl - 提取轴上交叉线的交点的函数