Optuna:一个超参数优化框架
Optuna 是一个自动超参数优化软件框架,尤其为机器学习设计。它具有命令式的、即时定义 (define-by-run) 风格的用户 API。感谢我们的即时定义 (define-by-run) API,使用 Optuna 编写的代码享有高度的模块化,Optuna 用户可以动态地构建超参数的搜索空间。
主要特性
Optuna 拥有如下的现代功能:
-
通过简单的安装和很少的依赖来处理各种任务。
-
使用熟悉的 Python 语法定义搜索空间,包括条件语句和循环。
-
采用最先进的算法来采样超参数并高效地剪枝没有前途的 trial。
-
将研究扩展到数十或数百个 worker,而无需或只需对代码进行少量更改。
-
通过各种绘图函数检查优化历史。
基本概念
我们如下使用术语study(研究)和trial(试验):
Study: 基于目标函数进行的优化
Trial: 目标函数的单次执行
请参考下面的示例代码。study 的目标是通过多次trial(例如,n_trials=100)来找出最佳的超参数值集合(例如,classifier 和 svm_c)。Optuna 是一个为自动化和加速优化study 而设计的框架。
import ...
# Define an objective function to be minimized.
def objective(trial):
# Invoke suggest methods of a Trial object to generate hyperparameters.
regressor_name = trial.suggest_categorical('classifier', ['SVR', 'RandomForest'])
if regressor_name == 'SVR':
svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
regressor_obj = sklearn.svm.SVR(C=svr_c)
else:
rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)
X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)
regressor_obj.fit(X_train, y_train)
y_pred = regressor_obj.predict(X_val)
error = sklearn.metrics.mean_squared_error(y_val, y_pred)
return error # An objective value linked with the Trial object.
study = optuna.create_study() # Create a new study.
study.optimize(objective, n_trials=100) # Invoke optimization of the objective function.
Web Dashboard
Optuna Dashboard 是 Optuna 的实时 Web Dashboard。您可以通过图表和表格查看优化历史、超参数重要性等。您无需编写 Python 脚本来调用Optuna 的可视化函数。功能请求和 Bug 报告均受欢迎!
optuna-dashboard 可以通过 pip 安装
$ pip install optuna-dashboard
提示
请查看 Optuna Dashboard 官方文档的入门部分。
OptunaHub
OptunaHub 是 Optuna 的功能共享平台。您可以使用注册的功能并发布您的软件包。更多详情,请参阅官方文档。
optunahub 可以通过 pip 安装
$ pip install optunahub
交流
问题请访问GitHub Discussions。
Bug 报告和功能请求请访问GitHub Issues。
贡献
欢迎任何对 Optuna 的贡献!当您提交 Pull Request 时,请遵循贡献指南。
许可
MIT 许可(参见LICENSE)。
Optuna 使用了 SciPy 和 fdlibm 项目的代码(参见第三方许可)。
参考文献
Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama. 2019. Optuna: A Next-generation Hyperparameter Optimization Framework. In KDD (arXiv)。
目录
- 安装
- 教程
- API 参考
- 常见问题
- 我可以在 Optuna 中使用 X 吗?(X 是您最喜欢的 ML 库)
- 如何定义带有自定义参数的目标函数?
- 我可以在没有远程 RDB 服务器的情况下使用 Optuna 吗?
- 如何保存和恢复研究?
- 如何抑制 Optuna 的日志消息?
- 如何保存目标函数中训练的机器学习模型?
- 如何获得可复现的优化结果?
- 如何处理来自 trials 的异常?
- 如何处理 trial 返回的 NaN?
- 当我动态更改搜索空间时会发生什么?
- 如何使用两台 GPU 同时评估两个 trial?
- 如何测试我的目标函数?
- 在优化研究时,如何避免内存不足 (OOM)?
- 如何仅在最佳值更新时输出日志?
- 如何建议代表比例(即符合狄利克雷分布)的变量?
- 如何优化具有某些约束的模型?
- 如何并行化优化?
- 如何解决使用 SQLite3 进行并行优化时发生的错误?
- 我能否监控 trial 并在它们被意外终止时自动将它们标记为失败?
- 如何处理作为参数的排列?
- 如何忽略重复的样本?
- 如何删除上传到研究中的所有工件?
- 可以在优化前指定参数的起始点吗?
- 如何解决 MySQL 的大小写敏感问题?
