この前はmlflowの使い方を確認してました。
今回はもうちょっと進んで、mlflowに加えてoptunaを使ってハイパーパラメータのチューニングを管理してみたいと思います。
optuna is なに?
Preferred Networksさんの公式サイトで、下記のように紹介されています。
オープンソースのハイパーパラメータ自動最適化フレームワークOptuna™は、ハイパーパラメータの値に関する試行錯誤を自動化し、優れた性能を発揮するハイパーパラメータの値を自動的に発見します。オープンソースの深層学習フレームワークChainerをはじめ、様々な機械学習ソフトウェアと一緒に使用することが可能です。 Optuna は、物体検出コンペティションGoogle AI Open Images 2018 – Object Detection Trackなど、PFNの各プロジェクトで活用され、成果をあげています。 Optuna | 株式会社Preferred Networks
その他、ドキュメントはこの辺にあります。
mlflowと組み合わせて実験管理する
実はすでにoptunaのgithubにサンプルコードがあるので、それを確認します。
環境は前回同様、kaggle dockerでやります。
ソースコードはこんな感じになってます。
実行結果はこんな感じになりました。
Number of finished trials: 100 Best trial: Value: 0.005255975222422017 Params: lr: 0.06473672319724864 momentum: 0.73818227065417
単純にチューニングだけならこれだけでいいと思うんですが、試行過程をすべて確認するのは結構骨が折れる作業だったりします。
これがmlflowと組み合わせているので、こんな感じで実験過程を確認することが出来ます。
ハイパーパラメータのチューニングを真面目にやったことないのでよくわかりませんが、少なくとも説明性はかなり高いと思います。 その点では管理しておいたほうがいざというときに役に立ちそうです。
LightGBMでやってみる
optunaの実装例にLightGBMのコードがあるので、そちらをちょっと改変してやってみます。
結果はこんな感じでした。
Number of finished trials: 100 Best trial: Value: 1.0 Params: lambda_l1: 2.8138368873779315e-07 lambda_l2: 2.416316482206476e-07 num_leaves: 138 feature_fraction: 0.7682285860889595 bagging_fraction: 0.7426413027374563 bagging_freq: 6 min_child_samples: 87
そんでもって、その実験過程はこんな感じに確認できます。
うまく言えませんが、これを色々見て考えると思いますので、実験の試行がキレイに管理できてきているのは非常に嬉しいですね。
感想
実務でチューニングまでやる際には、やはり実験に関しても説明性は重要で、そのためにmlflowは非常に強力だと思ってます。 optunaなどでチューニングが目的であればハイパーパラメータの実験管理は不要だと思います。 ただ、こういった管理があるに越したことはありませんし、なにか説明を求められたときに「ちゃんとしてる感」が出ますし、チューニング自体の過程を見たくなると、こういった情報が管理されているのは良いのかもしれません。