Re:ゼロから始めるML生活

どちらかといえばエミリア派です

mlflow+optunaでチューニングを管理してみる

f:id:nogawanogawa:20200329110122p:plain:w500
この前はmlflowの使い方を確認してました。

www.nogawanogawa.com

今回はもうちょっと進んで、mlflowに加えてoptunaを使ってハイパーパラメータのチューニングを管理してみたいと思います。

optuna is なに?

Preferred Networksさんの公式サイトで、下記のように紹介されています。

オープンソースのハイパーパラメータ自動最適化フレームワークOptuna™は、ハイパーパラメータの値に関する試行錯誤を自動化し、優れた性能を発揮するハイパーパラメータの値を自動的に発見します。オープンソースの深層学習フレームワークChainerをはじめ、様々な機械学習ソフトウェアと一緒に使用することが可能です。 Optuna は、物体検出コンペティションGoogle AI Open Images 2018 – Object Detection Trackなど、PFNの各プロジェクトで活用され、成果をあげています。 Optuna | 株式会社Preferred Networks

その他、ドキュメントはこの辺にあります。

optuna.org

mlflowと組み合わせて実験管理する

実はすでにoptunaのgithubにサンプルコードがあるので、それを確認します。

github.com

環境は前回同様、kaggle dockerでやります。

ソースコードはこんな感じになってます。

gist.github.com

実行結果はこんな感じになりました。

Number of finished trials: 100
Best trial:
  Value: 0.005255975222422017
  Params: 
    lr: 0.06473672319724864
    momentum: 0.73818227065417

単純にチューニングだけならこれだけでいいと思うんですが、試行過程をすべて確認するのは結構骨が折れる作業だったりします

これがmlflowと組み合わせているので、こんな感じで実験過程を確認することが出来ます。

f:id:nogawanogawa:20200330123319p:plain

f:id:nogawanogawa:20200330123323p:plain

ハイパーパラメータのチューニングを真面目にやったことないのでよくわかりませんが、少なくとも説明性はかなり高いと思います。 その点では管理しておいたほうがいざというときに役に立ちそうです。

LightGBMでやってみる

optunaの実装例にLightGBMのコードがあるので、そちらをちょっと改変してやってみます。

github.com

結果はこんな感じでした。

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

そんでもって、その実験過程はこんな感じに確認できます。

f:id:nogawanogawa:20200330125928p:plain

f:id:nogawanogawa:20200330125925p:plain

うまく言えませんが、これを色々見て考えると思いますので、実験の試行がキレイに管理できてきているのは非常に嬉しいですね。

感想

実務でチューニングまでやる際には、やはり実験に関しても説明性は重要で、そのためにmlflowは非常に強力だと思ってます。 optunaなどでチューニングが目的であればハイパーパラメータの実験管理は不要だと思います。 ただ、こういった管理があるに越したことはありませんし、なにか説明を求められたときに「ちゃんとしてる感」が出ますし、チューニング自体の過程を見たくなると、こういった情報が管理されているのは良いのかもしれません。