Re:ゼロから始めるML生活

どちらかといえばエミリア派です

Weights & Biasesを使ってみた

機械学習をやっていると、実験管理は避けては通れないと思います。 一方で、その環境を整備する工数はなるべく削減して、分析・実装に対して時間を割きたいものです。

より効率的に実験を管理すべく、Weights & Biases(wandb)というサービスがあります。

www.wandb.com

今回はこちらのwandbを使ってみたので、そのメモです。

wandb is 何?

wandbのドキュメントを見ると下のような概念図があります。

f:id:nogawanogawa:20200411001414p:plain

ドキュメントによれば、wandbは実験の管理とモデルの最適化を補助するサービスのようです。 ユーザーは、自分の使っているコードに、数行のコードを挿入することで実験のログをwandbに転送することが可能です。 実験管理の他にも、ハイパーパラメータのチューニングにも使用できるようです。

でも、お高いんでしょう?

個人で使う分には基本的に無料のようです。

f:id:nogawanogawa:20200411150211p:plain

人数が増えたりする場合には、課金が必要のようですね。

使ってみる

チュートリアルがこちらにありますので、そちらをご参照ください。

docs.wandb.com

今回は、自分で使いそうなLightGBMのサンプルを使ってみたいと思います。 Google Colabですぐ動かせるので、簡単です。

LighGBM

LightGBMについては、簡単なtutorialがあるので、そちらを確認します。

docs.wandb.ai

基本的には、wandb_callbackをトレーニング時に呼び出してあげるだけです。

from wandb.lightgbm import wandb_callback
import lightgbm as lgb

....

gbm = lgb.train(params,
                lgb_train,
                num_boost_round=20,
                valid_sets=lgb_eval,
                valid_names=('validation'),
                callbacks=[wandb_callback()])

コード全体はこのようになっています。

colab.research.google.com

wandbで実験管理

学習過程でのバリデーションのスコアが確認できるようになっています。

f:id:nogawanogawa:20200411152111p:plain

その他、実験結果を踏まえた考察をレポートとして作ったりもできます。

f:id:nogawanogawa:20200411152736p:plain

想定される使い方

特徴量を作成して実験を行った結果を、過去の実験結果と比較するような場合を考えます。 このような場合には、2つの実験の結果比較しつつ、そのときの考察を控えていくことが良いと思います。

wandbには、レポート作成の機能があり、実験結果の比較とそれに対するコメントを纏められる様になっています。

これを使って、

  1. 実験の概要を整理
  2. 実験の実施
  3. 結果の確認
  4. 実際の出力結果と教師データを比較
  5. 改善点の候補の整理
  6. 1.に戻る

というような流れが可能だと思います。 このうち、1, 3, 5についてはwandbで実施、2については開発環境、4についてはnotebookで実行後にgithubで管理し、wandbはurlによってgithubを参照することで、実験のサイクルを回すことができそうだと思います。

実際使ってみて良いところ・イマイチなところ

分析だけの用途ではかなり便利

本当に、既存のコードに数行書き換えるだけで、実験過程が転送されて表示されるので簡単に実験を管理できます。 このサービスによって実験の結果が一元管理されるのは非常に使い勝手が良いと思います。

モデルの実験・開発という部分だけにおいては非常に便利なツールかと思います。

EDAには使えそうにない

残念ながらデータセットの管理はしておらず、その中身の確認・可視化については行うことができません。 そのため、「実験結果を踏まえて相関関係がある特徴量は…」といった形で因果関係を探る際には、サービスの外側で人力で記録していく必要があります。

また、現状ではコード管理もしていないので、Notebook等で実行したEDAの結果も他のサービスで管理する必要があります。 実験管理とソースコード・データセットの管理が別々にならざるを得ないのは、やや手間に感じるかもしれません。

実務に使うにはやや機能として物足りない

実務で使用するには、データやモデルの世代管理、特徴量についての可視化や、モデルのサービングなどの機能も求められそうです。 そういった部分の管理ができないので、分析コンペ等では活用できそうですが、実際に本番運用するようなシチュエーションではやや機能が物足りないような気がします。

感想

機械学習のモデルを作成する過程で、実験管理は避けては通れないですし、それなりに手間がかかる問題だと思います。 理想的にはモデルの改善のためのコーディングに時間を割き、実験の管理等は自動化することが望ましいです。

今回は、wandbを使用して実験を管理することで、実験管理に使用する値を自動で吸い上げる様にやってみました。 実務でやる場合には、自前でmlflowで管理したり、他のサービスを使ったりするかとは思いました。