0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

材料探索AI「NIMO」でLightGBMのハイパーパラメータを探索してみた ― Optunaとの比較と「見える化」の話

0
Posted at

この記事について

NIMS(物質・材料研究機構)の田村亮氏らが開発した材料探索支援ソフトウェア「NIMO」(NIMS-OSの後継)は、本来スパッタ成膜条件のような材料実験の効率化を目的としたツールです。筆者は別件でNIMOを使ったスパッタ成膜条件の最適化を検証していたのですが、その過程で「これは機械学習のハイパーパラメータ探索にもそのまま使えるのでは」と思い立ち、実際にKaggleの「House Prices」データセット・LightGBMを題材に試してみました。

比較対象はハイパーパラメータ探索の定番であるOptuna(TPEサンプラー)です。結論から言うと、NIMOはOptunaと遜色ない収束性能を示しました。ただし本記事の主眼は「NIMOが勝った」ことではなく、以下の3点にあります。

  1. 材料科学向けに作られたベイズ最適化ツールが、全く異なる領域(ML)でも素直に機能することを示す
  2. NIMO未経験の方に向けて、実際に動くコードで使い方を説明する
  3. OptunaのStudyオブジェクトというブラックボックスに対し、NIMOの「candidates.csvを直接見れば全部わかる」という透明性のメリットを示す

NIMOの基本構成(3行で)

NIMOは「候補条件を全部書き出したCSV(candidates.csv)」に対して、ベイズ最適化アルゴリズムが「次にどの行を試すべきか」を提案し、実験(今回は機械学習モデルの学習)結果をそのCSVに書き戻す、というシンプルな仕組みで動きます。

from nimo.nimo_modules import selection

selection(
    method="PHYSBO",          # ベイズ最適化本体(PHYSBOパッケージを利用)
    input_file="candidates.csv",
    output_file="proposals.csv",
    num_objectives=1,
    num_proposals=5,           # 一度に提案してほしい件数
    physbo_score="EI",         # 獲得関数: Expected Improvement
    minimization=True,         # 最小化問題として扱う
)

candidates.csvは「まだ試していない行(目的関数列が空欄)」と「試した行(値が入っている)」が混在した1つのCSVで、NIMOはこれを読んで空欄の行から次の提案を選び、proposals.csvに書き出します。実験・測定を行ったら、その結果をcandidates.csvの該当行に書き戻す。これを繰り返すのが閉ループ探索です。材料実験を想定した設計ですが、「実験」を「機械学習モデルの学習」に置き換えるだけで、そのままハイパーパラメータ探索に転用できます。

実験設定

データセットとモデル

KaggleのHouse Prices: Advanced Regression Techniquesを使い、LightGBMで学習しました注1。米アイオワ州エイムズ市の住宅売買記録(2006〜2010年、1460件)が題材で、目的変数SalePrice(売買価格)を、敷地面積・築年数・建物品質評価・リフォーム年・ガレージ有無・地下室の仕上げ具合・近隣地区(Neighborhood)など79種類の説明変数から予測する回帰タスクです。カテゴリ変数(近隣地区名、外壁材の種類など)と数値変数(面積、部屋数など)が混在しており、欠損値も多数含まれるため、実務的な前処理力が問われる題材として知られています。評価指標はコンペ本体と同じ、対数変換した価格log(SalePrice)に対するRMSEです。

注1: この環境にKaggle APIの認証情報が無かったため、実際にはOpenML経由(sklearn.datasets.fetch_openml(name="house_prices"))で同一データを取得しています。列名・行数(1460行・80列、目的変数SalePrice)はKaggle版と完全に一致します。

探索したハイパーパラメータ

パラメータ 候補値 水準数
learning_rate 0.01, 0.03, 0.05, 0.1, 0.2 5
num_leaves 15, 31, 63, 127 4
feature_fraction 0.6, 0.8, 1.0 3
bagging_fraction 0.6, 0.8, 1.0 3
min_child_samples 5, 10, 20, 50 4
n_estimators 100, 300, 500, 1000 4

全組合せ = 5×4×3×3×4×4 = 2,880通り。これがcandidates.csvの全行になります。

NIMOとOptunaの比較条件

公平な比較のため、以下を揃えています。

  • 同じ離散グリッド: Optuna側もtrial.suggest_categoricalで上表と同じ値だけを提案するよう制限しました(Optunaの得意技である連続値サンプリングを使わせると、NIMO側が不利になる比較になってしまうため)。
  • 同じ評価予算: NIMOは初期空間充填サンプリング(DOE)10点+PHYSBO(EI)を4サイクル×5点=30回の学習。Optunaも同じ30 trialsです。
  • 同じ交差検証: どちらも5分割交差検証のRMSEを目的関数にしています。

結果1: 単一シードでの収束

まず1回だけ実行した結果です。

comparison.png

図1: NIMO(PHYSBO/EI, 紺)とOptuna(TPE, 赤)の収束曲線。薄い点1つ1つが各評価回の生のRMSE、太い実線がそこまでの累積ベスト値(それまでの最小値)を表す。

図1を見ると、序盤(評価4回目・11回目・13回目・15回目あたり)にRMSEが0.20〜0.22まで跳ね上がっている点が両手法に散見されます。これはn_estimatorsが小さくlearning_rateも小さい、といった明らかに学習不足になる組合せを探索初期に踏んでしまったためで、空間充填サンプリング(NIMOのDOE)やTPEの立ち上がり期のランダム性の副作用です。太い実線(累積ベスト値)に注目すると、両手法とも評価17回目あたりまでにこうした外れ値の影響を振り切り、0.126〜0.127付近の同じ水準に収束していることが分かります。最終的な最良RMSEはNIMO 0.1264、Optuna 0.1274でした。参考までに、Kaggleの公開ノートブックで報告されているLightGBM単体のベンチマークはRMSLE 0.121〜0.127程度(例: argishti氏のノートブックでRMSLE 0.127)、重い特徴量エンジニアリングを伴うスタッキングモデルで0.115程度まで下がるのが相場で、今回のグリッド探索だけの結果も妥当な範囲に着地しています。

結果2: 5シードでの頑健性確認

1回の実行結果だけでは「たまたま」の可能性を否定できません。そこで乱数シードを変えて5回ずつ実行し、平均と標準偏差を確認しました。

multiseed_comparison.png

図2: 5シード分の累積ベスト値を平均した収束曲線(線)と、その標準偏差の範囲(陰影)。陰影が重なっている区間は、2手法の差が乱数シードによるばらつきの範囲内であることを示す。

図2の実線は5シードの平均、陰影は±1標準偏差の幅です。序盤(評価5回目あたりまで)は陰影の重なりが大きく、両手法とも「どのシードを引くか」次第でベスト値が大きく変動しやすいことが見て取れます。評価13回目あたりでNIMOの平均線がOptunaを下回り始め、以降その差を維持したまま両者の陰影は最後まで重なり続けます。個別のシードの内訳は下表の通りです。

seed NIMO best Optuna best
1 0.12197 0.12265
2 0.12646 0.12824
3 0.12378 0.12557
4 0.12412 0.12513
5 0.12560 0.12400
平均 0.1244 ± 0.0016 0.1251 ± 0.0019

5シード中4シードでNIMOがわずかに上回り、1シードでOptunaが上回りました。図2で見た通り陰影(標準偏差)の帯が重なっているため「統計的に明確な差がある」とまでは言えませんが、少なくともNIMOがOptunaに劣らないことは頑健に確認できたと言えます。

「見える化」という価値

性能が同等なら、わざわざNIMOを使う意味は無いのでは、と思われるかもしれません。ここで強調したいのが透明性の違いです。

Optunaで探索結果を調べようとすると、study.trialsoptuna.visualizationといったAPIを経由する必要があり、探索の内部状態は基本的にStudyオブジェクトの中に隠れています。一方NIMOは、探索途中の全データがcandidates.csvという1枚のCSVファイルに常に書き出されています。

# 今、何が試されて何が空欄か、Excelでもpandasでも直接見える
cat candidates.csv | head

さらに本実験では、どの手法(DOEPHYSBOか)で・どの評価回で・どのパラメータが・どんなRMSEだったかをnimo_history.csvという別ファイルにも記録しています。この「今どの候補が試されていて、まだどこが空欄か」を特別なAPIなしに一目で確認できる点は、機械学習エンジニアにとっても、探索過程がブラックボックス化しがちなHPOツールに対する良い対比になると思います。特にHPOを初めて学ぶ方にとっては、「見えるCSVの中でベイズ最適化が何をしているか」を追える方が理解の助けになるはずです。

まとめ

材料探索用に開発されたNIMOを機械学習のハイパーパラメータ探索に転用したところ、Optunaと遜色ない性能(5シード平均RMSE: NIMO 0.1244 vs Optuna 0.1251)が得られました。「専用ツールでなくても、ベイズ最適化の枠組みさえあれば領域を超えて使い回せる」ことを示せた一方、探索過程が1枚のCSVとして常に可視化されているというNIMOの設計は、ブラックボックスになりがちなHPOへの理解を助ける教材としても悪くないと感じています。

次回は、NIMOを本来の材料科学の土俵に戻し、GMR(巨大磁気抵抗効果)多層膜のスパッタ条件最適化に適用してみます。今度は合成モデルではなく、Parkinら(1990-91年)によるCo/Cu多層膜の振動的な層間交換結合という実際の文献値との比較検証を予定しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?