optunaのvisualization機能で探索結果を図示してみる

Kaggle

概要

最近kaggleのJaneStreetコンペが終了しました。

今回のJaneStreetコンペで自分たちのチームではoptunaが大活躍したので、optunaを利用した最適パラメータの探索結果図示の方法と、パラメータ決定の方法について記事にさせていただきます。

optunaはすごく便利なツールなので、皆さんぜひ使ってください。

optunaについて

株式会社Preferred Networksのハイパーパラメータ最適化ツールです。

詳しくは過去のこちらの記事をご参照ください。



過去の記事ではベストパラメータを単純に探索しただけの使い方しかしておりませんでしたが、JaneStreetコンペでは探索結果を図示本当に効いていそうなパラメータを探して選定を実施しました。

その際には「visualization」メソッドを利用して探索したのでその際のノウハウを記載します。

今回はoptunaの公式リファレンスを参考にしながら記事書いてるので、詳細はこちらの公式リファレンスをご確認ください。

やってみる

モデル定義

下記に手順を記していきます。

作成するモデルは前回のOptunaの記事で作成したモデルとほとんど変わらないCNNのモデル、データセットはMNISTです。データ読み込み部などは割愛します。

最低化するパラメータは num_layer, mid_units, num_filters, dropout_rateになります。


最適化する目的変数をセットと最適化

次にoptunaで最適化する目的変数を設定します。こちらも過去の記事のものをベースに作成するので詳細はそちらを確認ください。

最後に、crete_studyを作成し、optimizeで目的変数を最適化していきます。n_trial(探索回数)はとりあえず50回で回してみます。これで準備完了です。


最適化結果の視覚化

ようやく本題です。今回はOptunaのVisualization機能を利用します。

optunaのtrials内には各でtrialで得られた目的変数の値が格納されています。


plot_contour

plot_contourメソッドを利用すると、各パラメータにおける目的変数の値がヒートマップで表示されます。

図示にはplotlyを利用したインタラクティブな視覚化がされています。

今回はパラメータを10水準くらい振って見にくくなったので、パラメータを絞りたいと思います。

図示するパラメータを絞る際は、pramsの変数にパラメータ名を記載すると確認できます。


画像に alt 属性が指定されていません。ファイル名: image-1-1024x315.png

少し見やすくなりました。

目的変数の値が等高線のように表示されるのでどのパラメータの時に、目的変数がどのような結果であったかが非常にわかりやすい機能です。

この機能で最適、ロバストなパラメータの位置を探索するのが非常に楽になります。


plot_param_importances

どのパラメータが効いていたか表すメソッドです。

dropout_rate1が一番効いてるみたいです。

感覚的には、決定木のfeature_importanceと同じような使い方ができるかと思います。


plot_optimization_history

最適化の履歴を確認するplot_optimization_historyメソッドです。

縦軸が目的変数、横軸が最適化のトライアル数になってます。オレンジの折れ線が最良の目的変数の値となっており、何回目のトライアルでベストパラメータが出たのかわかりやすくなってます。

今回のモデルでは早めに収束してますが本来はもう少しばらつくはず。


plot_parallel_coordinate

こちらはあまり利用してないですが、パラメータの食い合わせとと目的変数の結果を図示するメソッドです。

目的変数はスコアがいいほど濃い色で表示されているので、下記を見るとoptimizerがsdgの時は結果がよくなかったことがわかります。


plot_slice

こちらもあまり使ってませんが、各パラメータの値と目的変数の結果をプロットするメソッドです。


まとめ おすすめ

OptunaのVisualization機能を使った最適化結果の図示方法についてまとめました。

最適なパラメータを選ぶ際は、ベストのパラメータだけではなくロバスト性も考えたパラメータを選定する必要があるので、最適化結果の図示は非常に重要です。


パラメータ選定の際のおすすめの使い方としては、

plot_param_importancesで重要度を確認した後、plot_contour重要度の高いパラメータにしぼったヒートマップを作成することで効率よくパラメータ選定が行えるのでよかったら利用してみてください。

コメント

タイトルとURLをコピーしました