機械学習のバージョンコントロール
機械学習のバージョンコントロールは、個人的にチャレンジングな領域であると思っております。機械学習モデルの変動要因にはそれを生成するためのコードに加えて、ハイパーパラメータやデータセットなど多くのものがあり、これらを統一的に管理するための標準的は方法は無く、データサイエンティストや機械学習エンジニアに任されていることも多いことでしょう。ゆえに、機械学習モデルとそれを生成したコードやデータセットとのリンクが失われてしまうことは少なくないのではと思っています(自分自身は多く経験しています)。機械学習におけるバージョンコントロールとは機械学習モデルの再現性を確保することと同じ意味を持つと考えられますが、特に本番環境で機械学習モデルを運用している場合において再現性を確保することがなぜ重要・必要であるのかを少し整理してみました。
本番環境と機械学習モデル
本番環境で使える(製品として認められる)機械学習モデル(以下モデル)を作成することができたとします。晴れてモデルをデプロイすることになるのですが、多くの場合これで終わりということは無く、モデルの精度をさらに向上させたいという要望は必ずと言っていいほど存在するものです。したがって、新しいデータを加えるなど変更点を加えてモデルを再度訓練し、精度が向上していることを確認してデプロイする、というフローは継続的に行われていくことになります。
5個の質問
もしモデルを本番環境で稼働させているとすれば、以下の問いに答えられる必要があると思います。
どのデータセットを用いてモデルを訓練したか?
どのハイパーパラメータでモデルを訓練したか?
どのコードを用いてモデルを訓練したか?
どのライブラリのバージョンでモデルを訓練したか?
現在本番で稼働しているモデルはどれか?
機械学習のバージョンコントロールとは何かという問いに対して、おそらく様々な観点による定義ができるのではないかと思いますが、本記事では本番環境でモデルを稼働させるという観点の元、上の5つの質問に答えられることである、ということにします。
1.どのデータセットを用いてモデルを訓練したか?
言うまでもなく、機械学習にとってデータセットは非常に重要なものです。データセットが変われば当然モデルのパフォーマンスも変化するわけで、どのようなデータセットで訓練したモデルなのかを明らかにしておく必要があります。くわえて、個々のデータにも目を向けてみると、誤った教師ラベルの修正やデータクリーニングなどで更新が行われていく可能性も存在します。したがって、個々のデータの変更履歴にも注意を向ける必要があるでしょう。
2.どのハイパーパラメータでモデルを訓練したか?
これは特に説明不要と思いますが、意外と後々になってどのハイパーパラメータセットだったかわからなくなることはあります。ハイパーパラメータにはモデルの挙動を制御するものも含まれており、特に本番環境での挙動を改善させるヒントになることもしばしばです。
3.どのコードを用いてモデルを訓練したか?
前処理などによりデータをどのように加工し、どのようなアルゴリズムの構成で訓練を行うかを記述したコードです。いわゆるパイプラインと呼ばれるものです。
4.どのライブラリのバージョンでモデルを訓練したか?
訓練環境と推論環境は別個に用意されていることが多いと思います。推論環境は一般に本番環境ですので変更には慎重であると考えられますが、訓練環境は本番環境と切り離された環境にあってモデルのパフォーマンスの向上のためにチューニング段階で変更されてしまうこともあり得ます。モデル実行環境の再現という観点で重要です。
5.現在本番で稼働しているモデルはどれか?
現在本番で稼働しているモデルが不明であると、改良することが困難になります。基本的なモデルの改良方法は、データセットの追加やクリーニング、パイプラインの見直し、ハイパーパラメータのチューニングです。稼働しているモデルがどのように構成されたか(つまり上の1〜4)を記録しておくことで、段階的にモデルを改良させていくことが可能になります。また、仮にモデルがうまく稼働しなかった場合に、以前に正常稼働していたモデルへ切り戻すことも可能になりますし、その原因の調査も比較的取り組みやすいものになるでしょう。
ではどうすればよいのか?
なるほどおさえるところはわかったものの、これらを実現するのはそう容易でもありません。私の知る限りだと、1つのツールでこれらすべてを可能にするものは無さそうです。お馴染みのgitは、モデルのパイプラインのようなソースコードの管理には向いていますが、データセットのような大規模なデータの管理には向いていません。幸いなことに、それぞれの目的を達成するためのツールは存在しており、ベストプラクティスは一旦置いておけば、複数のツールを組み合わせることで当初の目的(5つの質問すべてに答えられること)は達成可能です。
具体的な解決方法はツールの紹介を踏まえて別の機会に紹介しようと思います。