我为原始信号分类任务构建了一个CLDNN(卷积,LSTM,深度神经网络)结构。
每个训练时期大约持续90秒,超参数似乎很难优化。
我一直在研究各种方法来优化超参数(例如随机或网格搜索),并发现贝叶斯优化。
虽然我还没有完全理解优化算法,但我这样做很有帮助。
我想问几个关于优化任务的问题。
我非常感谢对此问题的任何见解。
答案 0 :(得分:19)
虽然我还没有完全理解优化 算法,我喜欢它会对我有所帮助。
首先,让我简要解释这一部分。 贝叶斯优化方法旨在处理multi-armed bandit problem中的勘探 - 开发权衡。在这个问题中,有一个未知函数,我们可以在任何点评估,但每个评估成本(直接惩罚或机会成本),目标是使用尽可能少的试验找到它的最大值可能。基本上,权衡是这样的:你知道函数在一组有限的点(其中一些是好的,一些是坏的),所以你可以尝试围绕当前局部最大值的区域,希望改进它(利用),或者你可以尝试一个全新的空间区域,这可能会更好或更糟(探索),或介于两者之间。
贝叶斯优化方法(例如PI,EI,UCB),使用Gaussian Process(GP)建立目标函数模型,并在每个步骤中根据其GP模型选择最“有希望”的点(注意) “有希望的”可以通过不同的特定方法进行不同的定义。)
以下是一个例子:
f(x) = x * sin(x)
区间的真实函数为[-10, 10]
(黑色曲线)。红点表示每个试验,红色曲线表示GP 平均值,蓝色曲线表示平均值加上或减去一个标准差。
正如您所看到的,GP模型在任何地方都与真实函数不匹配,但优化器很快就确定了-8
周围的“热”区域并开始利用它。
如何针对深度设置贝叶斯优化 网络
在这种情况下,空间由(可能已转换的)超参数定义,通常是多维单位超立方体。
例如,假设您有三个超参数:学习率α in [0.001, 0.01]
,正规化器λ in [0.1, 1]
(均为连续)和隐藏层大小N in [50..100]
(整数)。优化空间是一个三维立方体[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。
在我自己的研究中,我最终编写了自己的小型库,基本上有两个原因:我想编写精确的贝叶斯方法(特别是,我发现了portfolio strategy的UCB和PI收敛速度比别的,在我的情况下);另外还有一种技术可以节省高达50%的训练时间learning curve prediction(当优化器确信模型没有像其他区域那样快速学习时,这个想法是跳过完整的学习周期)。我不知道有任何实现这个的库,所以我自己编写了代码,最后它得到了回报。如果您有兴趣,代码为on GitHub。