機械学習 PR

【Tune-sklearn】機械学習のハイパーパラメータを自動チューニングする -Pytorch(using skorch)編-

【Tune-sklearn】機械学習のハイパーパラメータを自動チューニングする -skorch(Pytorch)編-
記事内に商品プロモーションを含む場合があります

こんにちは。

現役エンジニアの”はやぶさ”@Cpp_Learningです。仕事でもプライベートでも機械学習で色々やってます。

今回は機械学習のハイパーパラメータを自動調整できる tune-sklearn を使って、Pytorchモデルのパラメータ自動チューニングを実践したので、備忘録も兼ねて本記事を書きます。

Tune-sklearnとは

Tune-sklearn とは Ray Tune によるハイパーパラメータ自動チューニングを簡単に実現できるPythonパッケージです。

scikit-learn の機械学習モデルがメイン対象ですが、LightGBM や Pytorch (using Skorch) などもサポートしています。

パラメータを自動最適化できるという点で Optuna の仲間といえます(チューニング手法にベイズ最適化を選択できます)。

optunaでハイパーパラメータ最適化 pytorch-ligthning編
Optunaでハイパーパラメータの自動チューニング -Pytorch Lightning編-ハイパーパラメータ自動最適化フレームワークOptunaについて、入門から実践まで学べる記事を書きました。基本的な使い方からpytorch-lightningへの適用例までソースコード付きで公開しています。ご参考までに。...

Skorchとは

skorch とは PyTorch を scikit-learn のような使い心地にするライブラリです。

skorch
【skorch】Pytorchをscikit-learnのような使い心地にするライブラリ深層学習フレームワークのPyTorchをscikit-learnのような使い心地にするライブラリ skorch について紹介します。ディープラーニングによる二値分類のソースコードも解説付きで公開しています。...

今回は上記で紹介したソースコードにハイパーパラメータ自動チューニングを組み込んでみます。

スポンサーリンク

実践!Tune-sklearnでハイパーパラメータの自動チューニング -Pytorch(using skorch)編-

Tune-sklearn(バックで動いている Ray Tune )は複数のチューニング手法(Search Algorithms)をサポートしています。

今回は以下の2手法を試してみます。

Algorithm search_optimization value Summry Wedsite pip install
RandomListSearcher “random” Randomized
Search
built-in
SkoptSearch “bayesian” Bayesian
Optimization
Scikit-Optimize scikit-optimize

インストール

以下のコマンドで必要なパッケージをインストールします。

pip install tune-sklearn ray[tune]
pip install scikit-optimize
pip install skorch

使用したい Search Algorithms 次第でインストールするパッケージが異なるので注意。今回は“bayesian”を使いたいので、scikit-optimize をインストールします。

以降からソースコードを書いていきます。

Import

最初はimportから

データセット作成

こちらの記事と同じデータセットを作成します。

可視化のコードは割愛しますが、下図のようなデータを生成できます。

t-SNEで次元圧縮して可視化

このデータを分類するモデルを生成します。

ニューラルネットワーク設計

skorch を使う場合でも、ピュアPytorchと同じコードでニューラルネットワーク設計ができます。

ハイパーパラメータの初期設定

以下のコードでハイパーパラメータをセットしたmodelを定義します。

※modelだけでなく、trainerのパラメータもセット

ハイパーパラメータ自動チューニング -Randomized Search-

まずは”Randomized Search”でパラメータチューニングしてみます。

以下コードでチューニング対象およびチューニング範囲(10 or 20を選択など)を設定します。

以下のコードで自動チューニングを実行します。

ランダムサーチによるハイパーパラメータ自動チューニング

上図がチューニング結果です。

ハイパーパラメータ自動チューニング -Bayesian Optimization-

続いて”Bayesian Optimization”でパラメータチューニングしてみます。

”Randomized Search”と違い、0~0.9という範囲指定ができます。

お先ほどと同じコード ”fit()” で自動チューニングを実行した結果が以下です。

ベイズ最適化によるハイパーパラメータ自動チューニング

ベストパラメータで学習

チューニング結果を参考に、ベストパラメータで学習します。

ベイズ最適化によるハイパーパラメータ自動チューニング

上図から最終的にどんなニューラルネットワークが生成されたのかが分かります。

また max_epochs=10 で学習しましたが、チューニング結果の max_epochs=6(early_stopping=True)で十分だったかもしれません。

はやぶさ
はやぶさ
自分でチューニングしたら、短期間でここまで良いモデルは生成できなかったと思う。ありがとう Tune-sklearn(Ray Tune)!

以上で実践終了です。

【補足】モデルの推論・評価・保存

本記事では『ハイパーパラメータ自動チューニングからベストパラメータによる学習まで』を実践しました。

さらに先のモデルの推論・評価・保存まで実践したい人は、以下の記事を参照してください(本記事の前半で紹介済み)。

skorch
【skorch】Pytorchをscikit-learnのような使い心地にするライブラリ深層学習フレームワークのPyTorchをscikit-learnのような使い心地にするライブラリ skorch について紹介します。ディープラーニングによる二値分類のソースコードも解説付きで公開しています。...

おまけ -Tune-sklearn(Ray Tune)とOptunaの比較-

今回紹介した Tune-sklearn と Optuna を簡単に比較してみました(個人の感想です)

【Tune-sklearn】

  • scikit-learn のような手軽さでチューニングができる
  • 複数のチューニング手法(検索アルゴリズム)を選択できる
  • 数字以外のチューニング([‘SGD’, ‘Adam’]の選択など)はできない
  • scikit-learn や skorch と相性が良い
  • Ray Tuneの全機能はサポートしていない

【Optuna】

  • ベイズ最適化によるハイパーパラメータ自動チューニングに特化
  • 数字以外のチューニング([‘SGD’, ‘Adam’]の選択など)もできる
  • チューニングレポートをPandasのDataFrame形式で出力できる
  • トライアル数以外に、時間指定(Timeout)でチューニングの打ち切りができる

scikit-learn のような手軽さでパラメータチューニングしたいなら Tune-sklearn

各種設定を柔軟にやりたいなら Optuna

各種設定を柔軟にやりたいし、色んな検索アルゴリズムを試したいなら Ray Tune

こんな感じかな。

まとめ

tune-sklearn を使い、Pytorchモデルのハイパーパラメータ自動チューニングを実践しました。

【Tune-sklearn】機械学習のハイパーパラメータを自動チューニングする -skorch(Pytorch)編-

tune-sklearn というだけあって、scikit-learnと相性が良いのですが、Pytorch (using skorch) とも相性が良くて使い易かったです。

機械学習モデルのハイパーパラメータ自動チューニングの初手にtune-sklearnが良さそうだと感じました。

はやぶさ
はやぶさ
本記事が参考になれば嬉しいです。また Tune-sklearn(Ray Tune)で試したことなどを情報共有して頂けたら、とても嬉しいです。

以下 本記事と関連のある良書の紹介。

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python