首页 文章

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

提问于
浏览
26

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

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

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

虽然我还没有完全理解优化算法,但我喜欢它会对我有很大帮助 .

我想问几个关于优化任务的问题 .

  • 如何针对深层网络设置贝叶斯优化?(我们尝试优化的成本函数是多少?)

  • 我想要优化的功能是什么?它是N个时代之后验证集的成本吗?

  • 留兰香是这项任务的良好起点吗?有关此任务的任何其他建议吗?

我非常感谢对此问题的任何见解 .

1 回答

  • 19

    虽然我还没有完全理解优化算法,但我喜欢它会对我有很大帮助 .

    首先,让我简要解释一下这一部分 . 贝叶斯优化方法旨在处理_2435850中的勘探开发权衡 . 在这个问题中,有一个未知函数,我们可以在任何点评估,但每个评估成本(直接罚款或机会成本),目标是尽可能少地使用试验来找到它的最大值 . 基本上,权衡是这样的:你知道函数在一组有限的点(其中一些是好的,一些是坏的),所以你可以尝试围绕当前局部最大值的区域,希望改进它(利用),或者你可以尝试一个全新的空间区域,这可能会更好或更糟(探索),或介于两者之间 .

    贝叶斯优化方法(例如PI,EI,UCB)使用Gaussian Process(GP)构建目标函数模型,并在每个步骤中根据其GP模型选择最大"promising"点(注意"promising"可以通过不同的特定方式进行不同的定义方法) .

    这是一个例子:

    sin(x)*x

    [-10, 10] 区间的真功能是 f(x) = x * sin(x) (黑色曲线) . 红点表示每次试验,红色曲线表示GP均值,蓝色曲线表示平均值加上或减去一个标准差 . 正如您所看到的,GP模型在任何地方都与真实函数不匹配,但优化器很快就确定了 -8 周围的"hot"区域并开始利用它 .

    如何针对深层网络设置贝叶斯优化?

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

    例如,假设您有三个超参数:学习率 α 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 .

    在我自己的研究中,我最终编写了自己的小型库,基本上有两个原因:我想编写精确的贝叶斯方法(特别是,我发现UCB和PI的portfolio strategy比其他任何东西更快收敛,在我的情况下) ;另外还有一种技术可以节省高达50%的训练时间learning curve prediction(当优化器确信模型不知道任何实现此功能的库时,我的想法是跳过完整的学习周期,所以我自己编写了它,最后它得到了回报 . 如果你有兴趣,代码是on GitHub .

相关问题