Optuna で PyTorch のハイパーパラメータチューニングを試みる(テーブルデータ回帰)

数ヶ月前の話ですが、Optuna が PyTorch のエコシステムに加わったとのことで前から試したいと思っていました。

https://note.com/aixtech/n/n5082ea1e2f47

MNIST での Colab でのチュートリアルが上記サイトで紹介されていましたので、テーブルデータの回帰問題で、ちょっと試してみようと思います。

 

おしながき

・データを用意

・ネットワークの定義

・Optuna で最適化

 

データを用意

 

今回は、カリフォルニアの住宅価格データセットを sklearn から持ってきて使います。

全部で 20640 件、8つの説明変数を持つデータセットです。

データローダーの作成までがっとやってしまいます。

 

ネットワークの定義

以下の 4 つをチューニングする前提

  • 最適化手法
  • 学習率
  • 中間層の数
  • 中間層のノードの数

 

中間層の数を可変にするために、層を input_layer, hiddne_layer, outpu_layer の 3 つの塊にわけて、hidden_layer は for ループで層を任意の数追加できるようにする。

 

Optuna で最適化

 

optuna では、objective 関数内で学習ループを書き、返り値に与える関数を最小化する。

今回は、validation loss を最小化するようにチューニングしてもらいます。

調整したいハイパーパラメータがどんな値を取るかによって suggestほにゃららメソッドは変わる。

 

 

結果は、以下のようにして確認することができる。

  • 学習率は0.05~0.1 くらいの範囲が有効そう。
  • 中間層の数は3, 4がよさそう
  • 最適化手法は Adam がよいみたい
  • ノードの数は、48 ~ 80あたりが良さそう。
なんてあたりが付きました。
おわり