Mais conteúdo relacionado
Semelhante a 最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2 (6)
Mais de Preferred Networks (20)
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
- 2. 2
Hideaki Imamura / @HideakiImamura
● Preferred Networks, Inc. / リサーチャー
● Optunaコミッター
● Optuna V3の開発をリードしていました
● 大学の頃はベイズ最適化の理論研究をしていました
● GitHub: @HideakiImamura
● Twitter: @mamurai1208
- 3. 3
アジェンダ
1. Optuna: A Beginner's Guide
2. Optuna V3の全て
3. Optunaのこれから
主なターゲット
● Optunaに興味がある方
● Optunaの開発に興味をお持ちの方
● OSSプロジェクトがどのように進行するのか興味のある方
本発表について
- 4. Optuna
A Beginner's Guide
and Hyperparameter Optimization
このセクションはHiroyuki Vincent Yamazakiさんによって
PyData Global 2022 Sprintのために作成された資料を日本語訳したものです。
- 6. 2018
Preferred Networks における内製ツールとして開発が始まる
Google AI Open Images challenge において利用され2位を達成
β 版がGitHubで公開されオープンソース化する
2019
KDD, ODSC, SciPy (YouTube) などの会議/イベントで発表される
2020
v1.0 - stableな初めてのメジャーリリース
v2.0 - 多くの新機能を含んだ2番目のメジャーリリース
2021
v2.10 - 多くの新機能やパフォーマンスの改善がなされる
1日あたり20,000+ ダウンロード
…
2022
v3.0 - APIの見直しや様々な新機能を含んだ3番目のメジャーリリース
1日あたり60,000+ ダウンロード
- 10. 10
● 過去の経験に基づいてパラメータを決定する
○ 例: 最適化アルゴリズムの学習率として、論文で初めて提案された値を用
いる
● いくつかの値を比較して決定する
○ ドメイン知識の利用が重要となります
● ハイパーパラメータの存在を全く気にせずチューニングしない
○ 例: ニューラルネットワークの構造
考えられるアプローチ
- 13. 13
● Bad 👎:
○ ハイパーパラメータ (x) が大きすぎると矩形が重なってしまう
○ 小さすぎると再現率が悪化してしまう
● Good 👍:評価値 (y) が最適化されたxに対して高い
先ほどの例を見てみましょう
x.
検出器
(ニューラルネット)
訓練および
Validation
y
入力 出力
- 21. 21
import optuna
study: optuna.Study = optuna.create_study(
study_name="my-study",
sampler=optuna.samplers.TPESampler(),
pruner=optuna.pruners.MedianPruner(),
storage="sqlite:///my-storage.db", # RDB file が自動的に作られます
direction="maximize",
load_if_exists=True,
)
Studyの作成
API リファレンスを見るには
クリックしてみてください📝
- 22. 22
探索空間と目的関数の定義
def objective(trial: optuna.Trial) -> float:
# 探索空間の定義です。 Pythonの条件分岐やforループを使うことができます。
iou_thresh = trial.suggest_float("iou_thresh", 0, 1)
opt = trial.suggest_categorical("opt", ["SGD", "Adam"])
n_layers = trial.suggest_int("n_layers", 2, 5)
n_channels = [
trial.suggest_int(f"n_channels_{i}", 32, 256) for i in range(n_layers)
]
...
# 目的関数です。モデルの訓練と評価を行います。
ap = train_and_val(iou_thresh, opt, n_layers, n_channels, ...)
return ap
- 23. 23
最適化の実行
study.optimize(objective, n_trials=50)
# [I 2021-06-14 14:17:41,256] A new study created in RDB with name: my-study
# [I 2021-06-14 14:31:09,376] Trial 0 finished with value: 0.4808...
# [I 2021-06-14 14:46:23,466] Trial 1 finished with value: 0.3574...
# [I 2021-06-14 15:01:29,615] Trial 2 finished with value: 0.5250...
# …
# 結果を分析することができます
len(study.trials) # == 50
best_trial = study.best_trial
best_params = best_trial.params # Or, study.best_params.
# {'iou_thresh': 0.34907190168024279, ...}
- 24. 24
分散最適化
$ python optimize.py
[I 2021-06-14 16:53:04,039] A new study created in RDB with name: my-study
[I 2021-06-14 17:08:04,775] Trial 0 finished with...
[I 2021-06-14 17:27:43,012] Trial 2 finished with...
[I 2021-06-14 17:59:12,598] Trial 3 finished with...
[I 2021-06-14 18:14:55,981] Trial 6 finished with...
$ python optimize.py
[I 2021-06-14 16:53:04,580] Using an existing study with name 'my-study'
instead of creating a new one.
[I 2021-06-14 17:31:35,011] Trial 1 finished with...
[I 2021-06-14 17:40:02,211] Trial 4 finished with...
[I 2021-06-14 18:01:43,645] Trial 5 finished with...
[I 2021-06-14 18:17:59,447] Trial 7 finished with...
ターミナル
B
ターミナル
A
- 25. 25
分析
Web GUI
$ optuna-dashboard sqlite:///my-storage.db
...
Listening on http://localhost:8080/
https://github.com/optuna/optuna-dashboard
Python API
optuna.visualization.plot_...(study).show()
https://optuna.readthedocs.io/en/v2.8.0/reference/visualization/index.html
- 28. 28
バージョニングと互換性
3.0.4(2022年12月時点の最新版)
● Major
○ 破壊的変更あり
● Minor
○ 性能強化・新機能・バグ修正など数ヶ
月に一度のペースでリリース
● Patch
○ クリティカルなバグ修正
Operated according to
Semantic Versioning 2.0.0 https://semver.org/
● Deprecation
○ ユーザーに影響しうる機能の削除は注意
深く行われています。基本的にメジャー
バージョンを丸々一つ跨いで非推奨期間
が設定されます。
● Experimental
○ 実験的な機能が頻繁に追加されます。利
用する際は警告が発せられ、非推奨期間
なしで変更/削除される可能性がありま
す。
- 41. 41
探索空間からパラメータを選択するメソッドが以下の3種類に集約されまし
た
# 実数値変数
trial.suggest_float(name, low, high, *, step, log)
# 整数値変数
trial.suggest_int(name, low, high, *, step, log)
# カテゴリカル値変数
trial.suggest_categorical(name, choices)
Thanks @himkt, @nyanhi, @nzw0301, and @xadrianzetx!
安定性の改善: Suggest APIの単純化
- 44. 44
PlotlyバックエンドとMatplotlibバックエンドが別々に開発されていた可視
化モジュールは、片方にある機能がもう片方になかったり、フォーマットに
統一性がなかったり、内部実装の差異が大きかったりという問題を抱えてい
ました。
→ 機能的な差異の解消・内部実装の共通化・テスト戦略の改善などを実施
Thanks @HideakiImamura, @IEP, @MasahitoKumada, @TakuyaInoue-github, @akawashiro,
@belldandyxtq, @c-bata, @contramundum53, @divyanshugit, @dubey-anshuman, @fukatani, @harupy,
@himkt, @kasparthommen, @keisukefukuda, @knshnb, @makinzm, @nzw0301, @semiexp, @shu65,
@sidshrivastav, @takoika, @xadrianzetx!
安定性の改善: 可視化モジュールのリファクタリング
- 61. 61
v3.1 Coming Soon (mid Jan, 2023)
👇 Optuna v3.1 の主要開発項目
操作ログベースのStorage
"値"ではなく"操作"を保存する全く新しいStorage: JournalStorage
CMA-ES with Margin
整数変数の含まれた探索空間に対して高い性能を発揮するCMA-ESの亜種
TPE のパフォーマンス改善
アルゴリズムの分析とベンチマーク実験に基づいて、constant_liarオプ
ションのバグを修正
- 62. We are
looking for OSS contributors!
GitHub
https://github.com/optuna/optuna
Twitter
https://twitter.com/OptunaAutoML
optuna.org
https://optuna.org/
Medium
https://medium.com/optuna
Step-by-step Guide
https://medium.com/optuna/optuna-wants-your-pull-request-ff6195
72302c
Gitter
https://gitter.im/optuna/optuna