Optuna

关注
义项:超参数优化框架
Optuna

Optuna 是一个开源的自动超参数优化软件框架,主要面向机器学习任务,采用命令式、define-by-run 风格的 API,使用户可以在目标函数运行时动态构造超参数的搜索空间[1][2]。它由日本 Preferred Networks 公司开发,2019 年在 KDD 会议上发表论文,采用 MIT 许可证发布,并提供高效的采样与剪枝算法以及便捷的并行化能力[3][1]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Optuna 是一个自动超参数优化软件框架,特别为机器学习设计,其官方定位为自动超参数优化框架[1][2]。它同时也被描述为一个开源的 Python 库,用于超参数优化,并可在多个计算资源之间进行水平扩展[4]。在概念层面,Optuna 把优化过程拆成两个基本单位:study 表示针对某个目标函数的一次优化任务,trial 表示目标函数的一次执行;一个 study 通过多次 trial 寻找最佳的超参数取值组合[1][2]。

它的设计面向黑箱优化,可处理超参数或其他以黑箱形式描述的参数寻优问题,并以框架无关的方式与多种深度学习框架配合使用[5]。

原理

Optuna 的工作方式是把超参数优化表述为对目标函数的最小化或最大化问题,目标函数接收的参数不是超参数值本身,而是与单次 trial 关联的 trial 对象;搜索空间由该对象的方法在目标函数运行过程中动态生成[6]。这种 define-by-run 的方式使代码具有较高的模块化程度,用户可以借助条件判断与循环等 Python 语法描述搜索空间[1][2]。

在采样策略上,Optuna 默认使用 TPE 算法,即树结构 Parzen 估计器;此外还支持随机采样、网格采样、CMA-ES 以及高斯过程贝叶斯优化等多种算法[7][8]。以 TPE 为例,它把历史 trial 按目标函数值排序后分成表现较好与表现较差两组,用 Parzen 估计器分别建模两组超参数的概率分布,再通过两组分布的比值挑选后续候选,从而在探索与利用之间取得平衡[8][9]。

优化效率的另一个来源是剪枝机制。剪枝分两个阶段工作:监视 trial 的中间目标值,并终止不满足既定条件的 trial[6]。Optuna 实现了异步连续减半算法 ASHA,其异步特性不依赖工作进程之间的锁,适合分布式环境,多个 trial 可以同时推进[6]。除 ASHA 外,框架还提供中位数剪枝、分位数剪枝、耐心剪枝、阈值剪枝以及 Hyperband 剪枝等实现[10]。

在架构上,Optuna 使用灵活的存储后端,通过共享数据库管理由若干 trial 组成的 study,这一设计使其在增加工作进程时接近线性扩展,并能较方便地接入类似 Kubernetes 的容器编排系统[6]。相关组件还包括可实时查看优化历史的网页面板 Optuna Dashboard,以及用于共享功能与软件包的平台 OptunaHub[1]。

发展历程

Optuna 由 Preferred Networks 公司开发,其成果以论文《Optuna: A Next-generation Hyperparameter Optimization Framework》的形式发表在 2019 年第 25 届 ACM SIGKDD 知识发现与数据挖掘国际会议上,作者包括 Takuya Akiba、Shotaro Sano、Toshihiko Yanase、Takeru Ohta 和 Masanori Koyama[3][11]。论文总结了有别于既有优化软件的三个设计取向:define-by-run 的搜索空间构造、高效的采样与剪枝机制,以及可扩展且通用的架构[6]。

论文发表时 Optuna 已进入生产使用,并应用于多个实际项目,例如 Preferred Networks 在 2018 年 Google AI Open Images 目标检测赛道上使用它开发 Faster-RCNN 模型,最终模型获得该赛道第 2 名。该论文还列举了机器学习之外的用途:用 Optuna 优化 High Performance Linpack 基准测试的参数以评估公司自有超级计算机 MN-1b 的最大性能,以及优化 RocksDB 的 34 个可配置参数,在相同 4 小时内启用剪枝的算法探索了 937 组参数,而未启用剪枝的算法仅探索 39 组。

项目以 MIT 许可证发布,其代码中也包含来自 SciPy 与 fdlibm 项目的部分内容[1]。软件持续迭代,PyPI 页面记录的版本包括 2025 年 11 月发布的 Optuna 4.6、2026 年 1 月发布的 4.7.0、2026 年 3 月发布的 4.8.0 和 2026 年 6 月发布的 4.9.0,并在 2026 年 8 月提供了 Optuna v5 的候选发布版本[2]。此外还有用 Rust 重写以提升速度、保持原有 API 的实现 Rustuna[2]。

Optuna 也被主流机器学习平台收录与集成。Azure Databricks 提供了使用 Optuna 进行超参数优化的文档,并说明 MLflow 3.0 通过与 Optuna 集成引入了新的超参数优化能力[4]。

应用

Optuna 的主要用途是机器学习模型选择与超参数调优。官方示例覆盖 PyTorch、TensorFlow、Keras 与 scikit-learn 等框架,例如为 PyTorch 模型优化层数与各层隐藏节点数,或为 scikit-learn 分类器同时选择模型类型与其正则化参数[12][2]。部署方面,安装主要通过 Python 包索引或 Anaconda 云完成,框架要求 Python 3.9 或更高版本,并支持并行与分布式优化场景[2]。

在行业与学术实践中,Optuna 常被用于在较大搜索空间中寻找模型配置。有研究将其与 scikit-learn、PyTorch 配合,用 TPE 探索超参数空间并用 ASHA 提前终止表现不佳的 trial,以节省计算资源[9]。也有研究用它为糖尿病预测等任务优化模型,或以 50 次 trial 的规模调优模型并借助 TPE 确定最佳超参数[11][13]。除机器学习外,框架通用的黑箱优化能力也被用于非机器学习任务的参数寻优。

局限

以 TPE 为代表的历史信息采样算法对初始数据有一定依赖。TPE 在前期以随机方式抽取样本,默认需要约 10 个 trial 用于启动,之后才开始依据已完成的 trial 建模,因此优化轮次过少时其表现接近随机采样[14]。这类算法也只读取已经完成的 trial,对仍在运行中的 trial 的中间数值不作建模[15]。

剪枝机制并非对所有任务都适用。Hyperband 等剪枝器要求被剪枝的对象具备可分级配置的资源与中间反馈,因而主要面向迭代式训练过程;没有训练步、一次性训练到底的模型无法从中获益[7]。同时,Optuna 的 pruners 模块目前预期仅用于单目标优化,在多目标场景中应依赖 Pareto 前沿而非中间值比较来筛选个体[10]。

在参数组合上,TPE 与 Hyperband 剪枝器配合时会互相影响:Hyperband 按 bracket 分组收集 trial,若内部含 4 个 bracket,启动期约需消耗 4 × 10 个 trial,因此需相应增大 trial 总数或超时设置,否则采样器难以充分利用自身特性[14][10]。此外,Hyperband 剪枝器对 bracket 的划分依赖 study 名称与 trial 编号,文档建议显式指定 study 名称以保证剪枝过程可复现[10]。

搜索空间较大时,穷举式方法不具可行性,这也是这类框架存在的理由;但相应地,框架的效果高度依赖搜索策略与预算的匹配,例如网格采样在类别型空间有限时可能提前穷尽全部组合而结束研究[9][7]。

参见

  • TPE —— Optuna 默认使用的采样算法,通过两组概率分布的比值挑选候选超参数。

  • Hyperband —— Optuna 中基于多组连续减半的剪枝策略,用于提前终止表现不佳的 trial。

  • 贝叶斯优化 —— 该类框架常用的超参数搜索思想,以历史评估结果指导下一次采样。

  • 自动机器学习 —— 超参数优化所服务的更大范畴,覆盖特征、模型与参数选择的自动化。

  • scikit-learn —— 常用的机器学习库,Optuna 的官方示例中包含为其模型与参数调优的用法。

  • PyTorch —— 常用的深度学习框架,可与 Optuna 配合优化网络结构与训练参数。

参考资料

  1. Optuna: 一个超参数优化框架 — Optuna 4.6.0 文档 [引用日期2026-10-14]
  2. optuna - Optuna: A hyperparameter optimization framework [引用日期2026-10-14]
  3. softwareheritage.org 上的网页 [引用日期2026-10-14]
  4. optuna [引用日期2026-10-14]
  5. 软件包:python3-optuna(4.1.0-1) [引用日期2026-10-14]
  6. 2026_03_Balzarini_Benelle_Tesi(PDF) [引用日期2026-10-14]
  7. samplers-and-pruning [引用日期2026-10-14]
  8. BAB 2(PDF) [引用日期2026-10-14]
  9. arxiv.org 上的网页 [引用日期2026-10-14]
  10. gitcode.com 上的网页 [引用日期2026-10-14]
  11. s41598-025-19295-x [引用日期2026-10-14]
  12. Optuna - A hyperparameter optimization framework [引用日期2026-10-14]
  13. edu.tr 上的文件 [引用日期2026-10-14]
  14. optuna.pruners._hyperband 源代码 [引用日期2026-10-14]
  15. set it equal to n_initial to disable replacement altogether [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:09:44Z

历史版本

本条目引用的词条
TPE Hyperband 贝叶斯优化 自动机器学习 scikit-learn PyTorch