Open takapy0210 opened 3 years ago
機械学習モデルを確実に生成し、展開するためのプラットフォームを作成し、維持するには、学習データに基づいてモデルを生成するための学習者、データとモデルの両方を分析し、評価するためのモジュール、そして最終的には本番でモデルを提供するためのインフラストラクチャなど、多くのコンポーネントを慎重に、または協調させる必要があります。 これは、データが時間の経過とともに変化し、新しいモデルを継続的に生成する必要がある場合に特に重要になります。 残念なことに、このようなオーケストレーションは、特定のユースケースのために個々のチームが開発したグルーコードやカスタムスクリプトを使用してアドホックに行われることが多く、重複した作業や、技術的な負債を抱えた脆弱なシステムにつながっています。 前述のコンポーネントを1つのプラットフォームに統合することで、構成要素の標準化、プラットフォーム構成の簡素化、本番までの時間を数ヶ月から数週間に短縮することができ、中断を最小限に抑えるプラットフォームの安定性を実現しました。 TFXを導入することで、カスタムコードの削減、実験サイクルの短縮、データとモデル解析の改善によりアプリのインストール数が2%増加するなどの効果が得られました。
現代のコンピューティングにおける機械学習の重要性を強調するのは難しい。 推薦システム[6,7]から広告のクリックスルー予測[13,15]、さらには絶滅危惧種の保護[5]に至るまで、幅広いユースケースや製品のデータから知識を得るためのツールとして機械学習を採用する組織が増えています。 しかし、実際のワークフローは、機械学習を本番環境に導入する必要がある場合には、より複雑になる。 この場合、学習者とモデルとともに機械学習プラットフォームを構成するコンポーネントが必要となる。 これらのコンポーネントは、本番で起こりうる多様な障害に対処し、モデルのトレーニングとサービスが確実に行われるようにするためのオートメーションを提供します。 このタイプの自動化を構築することは容易ではなく、次のような複雑な問題を考慮すると、さらに困難になります。
様々な学習タスクのために機械学習プラットフォームを構築する。 製品は、データ表現、ストレージ基盤、機械学習タスクの観点から、実質的に異なるニーズを持つことができます。 機械学習プラットフォームは、学習タスクの最も一般的なセットを扱うのに十分な汎用性があるだけでなく、ワンオフの非典型的なユースケースをサポートするために拡張可能でなければなりません。
継続的な学習と提供 このプラットフォームは、固定データ上で単一のモデルをトレーニングする場合だけでなく、進化するデータ(例えば、ログストリームの最新日の移動窓)上で連続的にトレーニングを行い、最新のモデルを生成して提供する場合もサポートしています。
ヒューマンインザループ。 機械学習プラットフォームは、最小限の設定でプラットフォームの展開と監視が簡単にできるように、シンプルなユーザーインターフェースを公開する必要があります。 さらに、さまざまなレベルの機械学習の専門知識を持つユーザーがデータやモデルを理解し、分析できるようにする必要があります。
本番レベルの信頼性とスケーラビリティ。 プラットフォームは、一貫性のないデータ、ソフトウェア、ユーザーの設定、および実行環境の障害による中断に対して、回復力を持つ必要があります。 さらに、プラットフォームは、トレーニングで一般的な大量のデータ量や、サービングシステムへの本番トラフィックの増加にも柔軟に対応できるようにしなければなりません。
このようなタイプのプラットフォームを持つことで、チームは本番環境に機械学習を簡単に導入することができ、プラットフォームのさまざまなコンポーネントのベストプラクティスを保証し、異なるコンテキストで再利用できない単発の実装に起因する技術的な負債を制限することができます。
本稿では、エンドツーエンドの機械学習プラットフォームの解剖学を紹介し、前述の課題に対処するためにGoogleで構築したTensorFlow Extended(TFX)を紹介する。 プラットフォームの主要な構成要素とその設計・機能の特徴を説明する。 また、10億人以上のアクティブユーザーと100万本以上のアプリを持つ商用モバイルアプリストアであるGoogle Playにプラットフォームを導入した事例を紹介し、このプロセスで得られた教訓について議論する。 これらの教訓は、多様な文脈での機械学習プラットフォームのベストプラクティスを反映しており、この分野の研究者や実務家にとっては一般的な関心事である。
Meta
どんなもの?(3行ぐらいで)
TensorFlow Extended (TFX) is ...
機械学習パイプラインの設計思想がかなり参考になると思い読んだ。
機械学習の運用フレームワークに必要なもの
キモはどこ?
1. Data Analysis
ここでは機械学習パイプラインに投入するデータにについて、様々な分析を行う。データに含まれる特徴量の数や、特徴量ごとの欠損値の有無、各特徴量の各種統計量を計算し記録することで、入力されたデータがどのような分布をしているのかを把握する
2. Data Transformation
ここではいわゆる前処理で、例えば、カテゴリカルな値にIDを割り振るといった処理はここに含まれる。このコンポーネントを学習時と推論時に使うことで、推論時には学習時と違う処理が行われてしまってうまく動かないことを防げる。
3. Data Validation
入力されているデータに対しての検証を行う。機械学習パイプラインにはデータが継続的に投入されるので、様々な事情でデータの形式や分布は変わってくる。このコンポーネントでは予めデータのスキーマを定めておくことで、新たに投入されたデータがそのスキーマに合致しているかどうかを検証する。![image](https://user-images.githubusercontent.com/30361744/98355057-fb4edc80-2064-11eb-9a40-11a97f9cb25a.png)
4. Trainer
ここでは機械学習モデルを訓練させる。
5. Model Evaluation & Validation
ここではモデルの評価と妥当性の確認を行う。過去データを対象にしたオフラインテストを行い AUC などの指標が適切な範疇にあるかを評価する。また、カナリアリリースを行い、モデルが適切な振る舞いをしているかモニタリングする。
6. Serving
ここではモデルを本番環境にデプロイする。
どうやって有効だと検証した?
TFXをGoogle Playアプリストアに導入し、デプロイまでの時間を短縮することで、アプリのインストール率を2%向上させることに成功しています。(たくさん実験できた結果、ってことかな)
自分なりのアウトプット・どんなことに使えそうか