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

2024-04-07

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

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

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

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

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

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

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


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

首先,我先简单介绍一下这一部分。 贝叶斯优化方法旨在处理探索与利用的权衡多臂老虎机问题 https://en.wikipedia.org/wiki/Multi-armed_bandit。在这个问题中,有一个unknown函数,我们可以在任何点进行评估,但每次评估都会产生成本(直接惩罚或机会成本),目标是使用尽可能少的试验找到其最大值。基本上,权衡是这样的:你知道有限点集中的函数(其中一些是好的,一些是坏的),所以你可以尝试当前局部最大值周围的区域,希望能够改进它(利用),或者你可以尝试一个全新的空间区域,这可能会好得多,也可能会差得多(探索),或者介于两者之间。

贝叶斯优化方法(例如 PI、EI、UCB)使用高斯过程 https://en.wikipedia.org/wiki/Gaussian_process(GP),并在每一步根据 GP 模型选择最“有前途”的点(请注意,“有前途”可以通过不同的特定方法进行不同的定义)。

这是一个例子:

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

如何设置关于深度的贝叶斯优化 网络?

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

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

我想优化的功能是什么?是不是成本 N epoch 后的验证集?

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

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

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

薄荷 https://github.com/kuz/caffe-with-spearmint是一个很好的库,你绝对可以使用它。我也可以推荐hyperopt http://hyperopt.github.io/hyperopt/.

在我自己的研究中,我最终编写了自己的小型库,基本上有两个原因:我想编写精确的贝叶斯方法来使用(特别是,我发现了一个投资组合策略 https://arxiv.org/pdf/1009.5419.pdf在我的例子中,UCB 和 PI 的收敛速度比其他任何东西都快);另外还有另一种技术可以节省高达 50% 的训练时间,称为学习曲线预测 http://aad.informatik.uni-freiburg.de/papers/15-IJCAI-Extrapolation_of_Learning_Curves.pdf(这个想法是当优化器确信模型的学习速度不如其他领域时跳过完整的学习周期)。我不知道有任何库实现了这个,所以我自己编码了它,最终它得到了回报。如果您有兴趣,代码是在 GitHub 上 https://github.com/maxim5/hyper-engine.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • JavaScript 访问父对象属性

    我在 JS 中遇到一个小问题 我有两个嵌套对象 我想从父对象访问一个变量 如下所示 var parent a 5 child b 3 displayA function console log this a undefined displa
  • iOS 中的本地通知没有任何声音

    void notifyMe UILocalNotification localNotification UILocalNotification alloc init localNotification fireDate NSDate dat
  • Git:父提交比后代提交年轻?

    我正在浏览http arago project org git projects linux omap3 git http arago project org git projects linux omap3 gitrepo 并遇到了一个奇
  • MASM0015; Web服务HandlerTubeFactory异常

    我正在尝试创建一个可以调用另一个的网络服务链 我已经创建了第一个服务并成功部署在 weblogic12c 上 当第一个 Web 服务尝试调用外部 Web 服务时 出现以下异常 notifyAbout WSTestOuter outer ne
  • 使用 javascript 加载部分 html

    在我的网站上 我加载在服务器 nodejs 上呈现的 html 并将其插入到正确的位置 大多数情况下是带有 id 内容的 div 如何在客户端插入接收到的 html 以便执行包含的脚本标记 我在客户端使用下划线和把手 但 vanillajs
  • 为什么GK110有192个核心和4个扭曲?

    我想感受一下开普勒的架构 但这对我来说没有意义 如果一个 warp 有 32 个线程 其中 4 个被调度 执行 则意味着 128 个核心正在使用 64 个核心处于空闲状态 白皮书中提到了独立指令 那么64核是为这些指令保留的吗 如果是这样
  • 如何从此类图像中删除背景?

    我想删除该图像的背景以仅获取人物 我有数千张这样的图像 基本上是一个人和一个有点发白的背景 我所做的是使用边缘检测器 例如 canny 边缘检测器或索贝尔滤波器 来自skimage图书馆 然后我认为可以做的是 将边缘内的像素变白 并将边缘外
  • 如何在 React + Babel 中允许异步函数?

    我有一个 Typescript React 应用程序 它可以使用 then catch Promise 执行异步函数 但不能使用 async await try catch 执行异步函数 错误是 Uncaught ReferenceErro
  • 使用 Visual Studio 查找 C++ 应用程序中的内存泄漏

    在Linux中 我一直使用valgrind来检查应用程序中是否存在内存泄漏 Windows 中的等效项是什么 这可以用 Visual Studio 2010 来完成吗 Visual Studio 2019 有一个不错的内存分析工具 它可以在
  • jpql“加入获取”与 EntityGraph

    我想使用 jpql 或 jpa 实体图加载相关实体 看起来两者都做同样的事情 我为什么要使用实体图而不是普通的jpql 有什么好处吗 使用jpql有什么区别 select distinct u from User u join fetch
  • 无法从“node_modules\react-native-gesture-handler\createHandler.js”解析“fbjs/lib/areEqual”

    我正在使用 expo 构建一个反应本机应用程序 但是 我有一个错误 因此我无法继续构建该应用程序 我什至在错误消息中提到的node modules 中查找了文件 我正在使用 React native gesture handler 进行屏幕
  • 快速引导大量分层数据的策略以及在任何记录发生更改时更新 Elasticsearch 中的单个分层 json 文档的方法

    根据业务场景 来自 2 个关系表 最好是多个表 例如 6 7 的列必须合并到单个分层 json 文档中 以用于 Elasticsearch 上的单个索引 如下面示例文档中所述 样本文件 员工及联系信息 id 1 name tom john
  • 如何在 TypeORM 查找选项中设置 IS NULL 条件?

    在我的查询中我使用 TypeORMfind选项 我怎样才能拥有IS NULL条件在where clause 如果有人正在寻找 NOT NULL 它会是这样的 import IsNull Not from typeorm return awa
  • AWS CloudWatch 未使用的自定义指标保留和定价 - 2018 年

    如果我理解正确的话 自定义指标似乎将保留 15 个月 因为根据数据 它们会聚合为更高分辨率https aws amazon com cloudwatch faqs https aws amazon com cloudwatch faqs 这
  • 正则表达式匹配未完成

    我曾经有过一次回答了一个问题 https stackoverflow com a 17723854 882200关于将带引号的字符串与转义引号匹配 似乎有些情况会在 NET 上挂起并在 Mono 上崩溃 带有OutOfMemoryExcep
  • 使用描述符进行类型提示

    In 这个拉取请求 https github com python mypy pull 2266看起来添加了对描述符的类型提示支持 然而 似乎没有发布最终的 正确 用法示例 也没有添加任何文档到typing module https doc
  • C# htmlagilitypack,捕获重定向

    大家好 这真的很简单 我希望 我正在使用 htmlagility pack 进行网络爬虫 那么 如果我输入 url 然后将我定向到新的 url 会发生什么情况 如何捕获该新的重定向 URL 如果 htmlagilitypack 没有办法 有
  • 登录 GCP 和本地

    我正在构建一个旨在在 Google Cloud Platform 中的虚拟机上运行的系统 但是 作为一种备份形式 它也可以在本地运行 话虽这么说 我目前的问题是日志记录 我有两个记录器 都可以工作 一个本地记录器和一个云记录器 云记录器 i
  • 在 FTP 上上传文件

    我想将文件从一台服务器上传到另一台 FTP 服务器 以下是我上传文件的代码 但它抛出错误 远程服务器返回错误 550 文件不可用 例如 未找到文件 无法访问 这是我的代码 string CompleteDPath ftp URL strin
  • 使用贝叶斯优化的深度学习结构的超参数优化

    我为原始信号分类任务构建了 CLDNN 卷积 LSTM 深度神经网络 结构 每个训练周期运行约 90 秒 超参数似乎很难优化 我一直在研究优化超参数的各种方法 例如随机或网格搜索 并发现了贝叶斯优化 虽然我还没有完全理解优化算法 但我认为它