前回の記事: Optunaで枝刈りも使ってKerasのパラメータチューニング
の続きです。
Kerasのパラメーターチューニングの中で、枝刈りを使ってみたのですが
100回の試行の中で最後まで走ったのが1/5の19回だけというのは少し不安です。
もしかしたらこのくらいで適切なのかもしれませんが、まだ慣れないライブラリなのでよく感覚がつかめていません。
ということで、もう少し枝刈りの基準を緩める方法を探しました。
そのためには、別のPrunerを使うと良いようです。
前回の記事で使ったのは、MedianPruner という、それまでの試行の中央値より成績が悪ければ打ち切るPrunerでした。
ただ、探索対象のパラメーターの中に学習率等も入っていましたし、序盤のepockで成績が悪くても最終的に高い成果をあげるものもある気がします。
そこで、PercentilePrunerを試してみます。
ドキュメントはこちら。
percentile – Percentile which must be between 0 and 100 inclusive (e.g., When given 25.0, top of 25th percentile trials are kept).
とある通りなので、上位60パーセンタイルくらいを許容するようにすれば、中央値(50パーセンタイル)を基準にするより緩くなりそうです。
(ちなみに75パーセンタイルで試したらなかなか枝刈りされなくなりました。)
前回のコードのprunerを指定してる部分を次のように書き換えて試してみます。
study = optuna.create_study(
direction="maximize",
# pruner=optuna.pruners.MedianPruner()
pruner=optuna.pruners.PercentilePruner(60.0)
)
最終的な結果はこちら。
試行のうち、39回は最後まで走るようになり、
正解率も前回の 0.92734375より少し良くなりました。
(この後も何度か試しましたが、必ずしよくなるわけではないです。)
"""
Study statistics:
Number of finished trials: 100
Number of pruned trials: 61
Number of complete trials: 39
Best trial:
Value: 0.928125
Params:
n_layers: 1
n_units_l0: 126.84330007270901
dropout_l0: 0.4023051335982798
lr: 0.007029694763599239
"""
今回は、Prunerを変更することで枝刈りの具合を調整できるということが確認できました。
また、結果的に枝刈りが少ない方が最終的な成績は少しだけ良かったのですが、その差は軽微であることもわかりました。
今回かなり小さなデータで試しているのですが、
本当に学習に長時間かかるモデルを試す場合は、もっと高頻度に枝刈りする方がよい場合もありそうです。