Optuna: 一个超参数优化框架
Optuna 是一个特别为机器学习设计的自动超参数优化软件框架.它具有命令式的, define-by-run 风格的 API.由于这种 API 的存在, 用 Optuna 编写的代码模块化程度很高, Optuna 的用户因此也可以动态地构造超参数的搜索空间.
主要特点
Optuna 有如下现代化的功能:
-
只需少量依赖, 简单安装完成后便可处理各种任务.
-
利用熟悉的 Python 语法, 如条件语句和循环来定义搜索空间.
-
采用了最先进的超参数采样和最有效的对无望 trial 进行剪枝的算法.
-
仅需少量甚至无需代码修改便可将 study 扩展到数十甚至数百个 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.load_boston(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.
Communication
可在 GitHub Issues 报告bug、提feature request 和问问题.
可在 Gitter 与开发者互动.
可在 StackOverflow 提问.
贡献
欢迎大家对Optuna的一切贡献!但是在发送 pull request 时请遵从 contribution guide 的规范.
License
MIT License (see LICENSE).
Reference
Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama. 2019. Optuna: A Next-generation Hyperparameter Optimization Framework. In KDD (arXiv).
目录