发布 Optuna 2.0

2023-11-04 10:21
文章标签 发布 2.0 optuna

本文主要是介绍发布 Optuna 2.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


发布 Optuna 2.0

我们很高兴发布 Optuna 的第二个主要版本,Optuna 是一个用 Python 写的的超参数优化(HPO)框架,现在你已经可以通过 PyPI 和 conda-forge 来获取它。

自今年一月的第一个主要版本发布以来,我们见证了社区在提出 pull request, issue 和一些不属于常见HPO的用例等方面做出的巨大努力。而该框架也已发展到可以容纳大量的新功能,其中包括用于评估超参数重要性的特性,用以节省计算资源的复杂剪枝算法,以及与 LightGBM 的紧密集成。本文将向你介绍这些更新,并展示本项目自上一个版本起的发展过程。同时,我们还将分享未来的规划,以期让你先一步了解未来会引入的新特性。。

如果你曾使用过 Optuna, 则能很快理解下面将介绍的内容。如果你想先了解对本框架,请参考我们之前的博客(https://medium.com/optuna/optuna-v1-86192cd09be5),它解释了 Optuna 背后的各种概念。

  • 新特性
    • 超参数重要性
    • 性能提升
    • Hyperband Pruning
    • 新的 CMA-ES 采样
    • 与第三方框架的集成 (Integration)
    • 文档
  • 与 PyTorch 协作
  • 未来规划
  • 贡献者

新特性

下面介绍的是本次发布的版本中一些非常重要的特性。

超参数重要性

虽然 Optuna 的设计可以处理任意多的超参数,但通常情况下,我们建议保持尽量少的参数个数,以减少搜索空间的维度。因为实际上,在许多情况下,只有很少的参数在确定模型的整体性能中起主导作用。而从 2.0 版开始,我们 引入了一个新模块 optuna.importance. 该模块可以评估每个超参数对整体性能的重要性,`optuna.importances.get_param_importances`. 该函数接受一个 study 作为参数,返回一个字典,该字典将不同的超参数映射到其各自的重要性数值上,这个数值的浮动范围为 0.0 到 1.0, 值越高则越重要。同时,你也可以通过修改evaluator 参数来尝试不同的超参数重要性评估算法,其中包括 fANOVA,这是一种基于随机森林的复杂算法。由于各种算法对重要性的评估方式不同,因此我们计划在以后的发行版中增加可选算法的数量。

study.optimize(...)
importances = optuna.importance.get_param_importances(study)# Specify which algorithm to use.importances.optuna.importance.get_param_importances(study, evaluator=optuna.importance.FanovaImportanceEvaluator()
)

你不用自己处理这些重要性数据,Optuna 已经提供了同 `optuna.importance.get_param_importances` 具有相同接口的函数 `optuna.visualization.plot_param_importances`。它将返回一个 Plotly 图表,这对于可视化分析很有帮助。

fig = optuna.visualization.plot_param_importances(study)

fig.show()

下面是一幅使用 PyTorch 编写的神经网络绘制的重要性图。从中可以看出,学习率 “ lr” 占主导地位。

通过 mean decrease impurity 得出的超参数重要性。图中横柱的不同颜色是用于区分参数类型的,包括整数,浮点数和类别参数。

性能提升

在新版 Optuna 中,关系型数据库 (RDB) 下的超参数采样、对无望的试验 (trial) 的剪枝和对优化历史记录的一般处理性能都有很大的提升。通过精心设计的缓存机制和数据库查询语句,我们对底层负责读写试验数据的 storage layer 进行了非常多的改进(这一点对分布式训练尤其重要,因为此时不同的节点是通过数据表来共享数据的)。这使得 Optuna 可以用于更普遍的黑箱优化问题。这项改进在运行轻量级的目标函数或者处理大量的试验时尤其明显,因为在这种情况下采样过程一度是性能的瓶颈。

2.0 和 1.0 版本的优化时间对比,它们都采用了通过 Tree-structured Parzen Estimator (TPESampler) 来采样浮点数的简单目标函数。2.0 版本明显在超参数和trials增加的情况下都展现出更快的速度。。注意:在每一次 suggestion 中,TPESampler 都需要采集之前所有试验中的 suggestion 值,而且,上图的 y 轴是对数轴。本次对比实验中所用的存储引擎均是 MySQL 数据库。

Hyperband Pruning

剪枝 (Pruning) 对于优化需要计算的目标函数至关重要。它使你可以在早期阶段有效地发现和停止无意义的试验,以节省计算资源,从而在更短的时间内找到最佳的优化方案。这也是在深度学习,这个Optuna的主要应用场景下我们经常碰到的情况。

比如,你可能需要训练由数百万个参数组成的神经网络,它们通常需要数小时或数天的处理时间。 Hyperband 是一种剪枝算法,它是建立在之前的逐次减半算法(SuccessiveHalvingPruner)基础上。逐次减半可以显着减少每次试验所需时间,但是众所周知,它对配置方式很敏感,而 Hyperband 解决了这个问题。该问题有很多种解决办法,而 Optuna 选择了启发式算法以进一步降低对用户的配置方式要求,使无相关技术背景的用户也能很容易使用。它最初在1.1版中作为实验性特性被引入,不过现在在接口和性能方面都已稳定。实验表明,在通用基准测试中,它的表现远强于其他的 pruner, 包括中位数 pruner (MedianPruner) ( Optuna 中的默认 pruner)。这一点你可以从下文的基准测试结果中看出。

study = optuna.create\_study(pruner=optuna.pruners.HyperbandPruner(max\_resource=”auto”)
)
study.optimize(...)

比起之前的包括中位数 pruner (`tpe-median`) 在内的 pruner,Hyperband (`tpe-hyperband`) 不仅收敛更快,而且在多次运行中更稳定(见阴影区域的variance)。图中 1 budget 对应 100 个 training epochs. `tpe-nop` 代表无剪枝。

新的 CMA-ES 采样

`optuna.samplers.CmaEsSampler` 是新的CMA-ES采样器。 它比以前的 `optuna.integration` 子模块下的 CMA-ES 采样器要快。 这种新的采样器可以处理大量的试验,因此应适用于更广泛的问题。 此外,尽管以前的CMA-ES采样器过去一直不考虑被剪枝试验的优化,但该采样器还具有实验功能,可以在优化过程中更有效地利用修剪试验获得的信息。 该采样器由 @c-bata 开发, @c-bata 是 Optuna 的主要贡献者之一,也是其中所用的 `cmaes` 的作者。

过去你可能这么创建一个 study:

study = optuna.create_study(sampler=optuna.integration.CmaEsSampler())

现在你可以用新的子模块来这么做了:

study = optuna.create_study(sampler=optuna.samplers.CmaEsSampler())

或者,如果你要用原来的模块的话,它现在改了个名字:

study = optuna.create_study(sampler=optuna.integration.PyCmaSampler())


在优化过程中考虑被剪枝的试验的情况下,新的 CMA-ES 收敛速度更快。

与第三方框架的集成 (Integration)

Optuna带有各种子模块,可与各种第三方框架集成。 其中包括 LightGBM 和 XGBoost 等梯度增强框架,各种 PyTorch 和 TensorFlow 生态系统内的深度学习框架,以及许多其他框架。 在下文中,我们将介绍其中最重要的一些与此版本紧密相关的集成。

LightGBM

LightGBM是一个完善的、用于梯度增强的 Python 框架。 Optuna 提供了各种与 LightGBM 紧密集成的集成模块。 其中,“optuna.integration.lightgbm.train” 提供了对超参数的高效逐步调整,可用于直接取代 “ lightgbm.train”,因而用户无需修改代码。

而为了与其他Optuna组件进行交叉验证和集成,例如记录优化历史记录和分布式部署的研究,Optuna还提供了`optuna.integration.lightgbm.LightGBMTuner`和`optuna.integration.lightgbm.LightGBMTunerCV

MLflow

MLflow 是一个流行的、用于管理机器学习流水线和生命周期的框架。 而 MLflow Tracking 是一个通过交互式 GUI 监视实验的特别有用的工具。而现在,由于 MLflowCallback 的存在,使用 MLflow Tracking 来跟踪 Optuna 中的 HPO 实验变得非常简单,只要向 Optuna 的优化过程中注册一个回调函数即可。

Redis

优化算法和优化历史记录在 Optuna 的体系结构中是明确分开的。Storage 抽象了优化历史记录到各种后端(例如 RDB 或内存中)的储存过程。 RDB 可用于分布式优化或持久化保存历史记录,而内存中的存储则适用于不需要分布式优化或者持久记录的快速实验。 Redis 作为一种内存中的键-值存储,由于其灵活性和高性能而常被用于缓存。在本版本中,我们实验性地新增了一个 Redis 存储,在现有的 RDB 和内存存储之间建立了一个折中选项。 Redis 存储易于设置,可作为无法配置 RDS 的用户的备选项。

文档

官方文档 https://optuna.readthedocs.io 经过重新设计和改进,外观已焕然一新。 通过为每个函数或类创建独立的短页面,大大提高了可读性,在不同页面之间跳转也更容易了。

与 PyTorch 协作

PyTorch 是一个流行的深度学习框架,而深度学习也是 Optuna 的一个重要应用领域。 Optuna 最近加入了 PyTorch 生态系统,而且目前我们正持续继续添加功能,以便更轻松地与 PyTorch 及其生态系统下其他的框架集成。

AllenNLP

除了用于 PyTorch Lightning 和 PyTorch Ignite 的现有集成模块之外,我们还为 AllenNLP 添加了集成模块,AllenNLP 是一个基于 PyTorch 的机器学习框架,专门用于自然语言处理(NLP)。 使用 AllenNLP 时用户通常需要在 Jsonnet 文件中定义模型和训练过程。 当与Optuna结合使用时,这很不方便,因为必须从系统的文件中读取和写入参数。AllenNLPExecutor 让你仅用几行代码就能优化这些模型定义。 具体参见 @himkt 的这篇博客文章。

在 Pytorch 强化学习中使用 Optuna

创建了 ChainerRL 强化学习算法库的团队已将其算法库迁移到 PyTorch 上,更名为 PFRL,并且已经包含了 Optuna 的支持。 实际上,作为PFRL的一部分,NeurIPS 2020 的 Minecraft RL 竞赛的基准算法已经使用了 Optuna.

未来规划

尽管最初我们已为本版本规划了许多特性,但最终成品还是超出了预期。比如上述几个集成模块并不在我们最初的规划中,而是由越来越多的贡献者开发而成。我们会不断审视要纳入的功能,并将继续接受社区对 Optuna 可以起作用的新领域的意见。

至于具体的开发计划,多目标(multi-objective: MO)优化是处于规划中的一个主要功能。通过多目标优化,你将能够根据多个判据优化目标函数。一个典型的场景是在最大化模型精度的同时最小化 FLOPS (每秒浮点运算次数)。Optuna 中的 MO 算法将同时优化这两个条件,从而为用户提供最佳试验构成的所谓帕累托前沿面(由于在多目标下,单目标最佳的trial不能被认为是全局最佳)。如果你感兴趣,多目标优化已经可以作为实验功能来使用了,它是用诸如NSGA-II 之类的复杂算法实现的。由于其 API 与 Optuna 中的现有 API 非常相似,所以你只需对现有代码稍作改动即可开始使用它。在即将发布的版本中,我们将完善和修复该 API 并期待你在生产或使用中使用此功能或者开发新的MO算法。

贡献者

同之前版本一样,来自大量贡献者的反馈、代码和评论对本版本而言是不可或缺的。

A03ki, AnesBenmerzoug, Crissman, HideakiImamura, Muragaruhae, PhilipMay, Rishav1, RossyWhite, VladSkripniuk, Y-oHr-N, arpitkh101, araffin, barneyhill, bigbird555, c-bata, cafeal, chris-chris, crcrpar, d1vanloon, daikikatsuragawa, djKooks, dwiel, festeh, g-votte, gorogoroumaru, harupy, hayata-yamamoto, hbredin, henry0312, higumachan, himkt, hross, hugovk, hvy, iwiwi, jinnaiyuu, keisuke-umezawa, kuroko1t, momijiame, mottodora, nmasahiro, nuka137, nzw0301, oda, okapies, okdshin, pablete, r-soga, scouvreur, seungjaeryanlee, sfujiwara, shino-yoshi, sile, smly, suecharo, tadan18, tanapiyo, tohmae, toshihikoyanase, upura, victorhcm, y0z, yasuyuky, ytsmiling, yutayamazaki, zishiwu123 and zzorba.

我们感谢所有从一开始就关注本项目的、同我们一路走来的人。

哪里可以找到Optuna?

Optuna 官网:https://optuna.org

Optuna 中文文档:https://zh-cn.optuna.org (已被墙,请用该替代链接访问)

这篇关于发布 Optuna 2.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345122

相关文章

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

文章目录 0. 概述1. 发布者同步发送(pub)与订阅者异步接收(sub)示例代码可能的副作用: 2. 适度增加缓存和队列示例代码副作用: 3. 动态的IPC通道管理示例代码副作用: 4. 接收消息的超时设置示例代码副作用: 5. 增加I/O线程数量示例代码副作用: 6. 异步消息发送(使用`dontwait`标志)示例代码副作用: 7. 其他可以考虑的优化项7.1 立即发送(ZMQ_IM

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

风格控制水平创新高!南理工InstantX小红书发布CSGO:简单高效的端到端风格迁移框架

论文链接:https://arxiv.org/pdf/2408.16766 项目链接:https://csgo-gen.github.io/ 亮点直击 构建了一个专门用于风格迁移的数据集设计了一个简单但有效的端到端训练的风格迁移框架CSGO框架,以验证这个大规模数据集在风格迁移中的有益效果。引入了内容对齐评分(Content Alignment Score,简称CAS)来评估风格迁移