優れた機械学習システムを作成することは芸術です。
優れた機械学習システムを構築する際には、考慮すべきことがたくさんあります。 しかし、多くの場合、データサイエンティストとしての私たちはプロジェクトの特定の部分についてのみ心配しています。
しかし、モデルを入手したら、モデルをどのように展開するかについて考えたことはありますか?
私は多くのMLプロジェクトを見てきましたが、それらの多くは最初からプロダクションのセットプランがないため、失敗する運命にあります。
この投稿は、MLプロジェクトを成功させるためのプロセス要件についてです。
1.開始時にベースラインを確立する
ベースラインの結果を取得するためにモデルを用意する必要はありません。
時系列モデルの評価指標としてRMSEを使用するとします。 テストセットでモデルを評価したところ、RMSEは3.64でした。
3.64は良いRMSEですか? どうやって知るの? ベースラインのRMSEが必要です。
これは、同じタスクに現在採用されているモデルに由来する可能性があります。 または、非常に単純なヒューリスティックを使用します。 時系列モデルの場合、敗北するベースラインは最終日の予測、つまり前日の数を予測することです。
または、画像分類タスクはどうですか? 1000のラベル付きサンプルを取り、それらを人間によって分類します。 ここでは、人間の正確さが基準になります。 人間がタスクの70%の予測精度を得ることができない場合、モデルが同様のレベルに達した場合は常にプロセスの自動化を考えることができます。
学習:モデルを作成する前に、得られる結果に注意してください。 世界の期待の一部を設定しても、あなたとあなたのクライアントをがっかりさせるだけです。
応用機械学習に関するこの詳細な教育コンテンツが好きですか? Enterprise AIメーリングリストを購読する 新しい素材がリリースされたときに警告が表示されます。
2.継続的インテグレーションが前進
これでモデルが作成されました。 ローカルテストデータセットのベースライン/現在のモデルよりもパフォーマンスが優れています。 先に進むべきでしょうか?
XNUMXつの選択肢があります。
- モデルをさらに改善するために無限ループに入ります。
- 実稼働環境でモデルをテストし、問題が発生する可能性についてより深い洞察を得てから、モデルの改善を続けます 継続的インテグレーション。
私はXNUMX番目のアプローチのファンです。 彼の素晴らしい XNUMXコース CourseraのStructuring Machine Learningプロジェクトに名前を付けました ディープラーニングスペシャライゼーション、Andrew Ngさんは言います—
「完璧なシステムを設計および構築しようとすることから始めないでください。 代わりに、基本的なシステムをすばやく構築し、トレーニングします—おそらく数日で。 基本システムが構築できる「最良の」システムから遠く離れている場合でも、基本システムがどのように機能するかを調べることは価値があります。時間を投資するための最も有望な方向を示す手掛かりをすばやく見つけることができます。」
完了は完璧よりも優れています。
学習:新しいモデルが本番環境の現在のモデルより優れている場合、または新しいモデルがベースラインより優れている場合、本番環境への移行を待つのは意味がありません。
3.モデルが本番環境に入る可能性がある
モデルはベースラインより優れていますか? ローカルテストデータセットでより良いパフォーマンスを示しましたが、全体的に本当にうまく機能しますか?
モデルが既存のモデルよりも優れているという仮定の妥当性をテストするために、 A / Bテスト。 一部のユーザー(テストグループ)にはモデルの予測が表示され、一部のユーザー(コントロールグループ)には前のモデルの予測が表示されます。
実際、これはモデルをデプロイする正しい方法です。 そして、あなたは実際にあなたのモデルが見た目ほど良くないことに気付くかもしれません。
間違っていることは本当に間違っているのではなく、間違っているのは私たちが間違っている可能性があることを予期しないことです。
モデルが本番環境でうまく機能しない理由の真の理由を指摘することは困難ですが、いくつかの原因が考えられます。
- リアルタイムのデータがトレーニングデータと大幅に異なる場合があります。
- または、前処理パイプラインを正しく実行していません。
- または、パフォーマンスを正しく測定していません。
- または、実装にバグがある可能性があります。
学習: フルスケールで本番環境に移行しないでください。 A / Bテストは常に前進するための優れた方法です。 何かに頼る準備ができている(おそらく古いモデル)。 予想もしていなかった、壊れる可能性のあるものが常にあるかもしれません。
4.モデルが本番環境に移行しないこともあります
この印象的なMLモデルを作成しました。90%の精度が得られますが、予測をフェッチするのに約10秒かかります。
それは受け入れられますか? いくつかのユースケースでは、たぶん、実際にはそうではありません。
過去には、多くのKaggleコンテストがあり、その勝者は最終的にモンスターアンサンブルを作成してリーダーボードのトップスポットを獲得しました。 以下は、KaggleでOtto分類の課題に勝つために使用された特定の驚異的なサンプルモデルです。
もうXNUMXつの例は、Netflix XNUMX万ドルの推奨エンジンチャレンジです。 Netflixチームは結局 決して エンジニアリング費用がかかるため、勝利のソリューションを使用する。
では、モデルをマシン上で正確かつ簡単にするにはどうすればよいでしょうか。
教師と生徒のモデルまたは 知識蒸留。 ナレッジ蒸留では、すでにトレーニング済みの大きな教師モデルで小さな学生モデルをトレーニングします。
ここでは、教師モデルのソフトラベル/確率を使用し、それを生徒モデルのトレーニングデータとして使用します。
重要なのは、教師がクラスの確率(「ハードラベル」ではなく「ソフトラベル」)を出力していることです。 たとえば、果物の分類子は、「Apple 0.9、Pear 0.1」ではなく「Apple 1.0、Pear 0.0」と言う場合があります。 なぜわざわざ? これらの「ソフトラベル」は、元のラベルよりも有益であるため、生徒に「はい」と伝えます。特定のリンゴは非常にわずかに梨に似ています。 学生モデルは、1〜2桁少ないパラメーターを使用している場合でも、教師レベルのパフォーマンスに非常に近いことがよくあります。 — ソース
学習: 時には、予測時に利用できる計算量が多くないため、より軽量なモデルを使用したいと考えています。 より単純なモデルを構築したり、そのようなユースケースに知識抽出を使用したりできます。
5.メンテナンスとフィードバックループ
世界は一定ではなく、モデルの重みも一定ではありません。
私たちの周りの世界は急速に変化しており、XNUMXか月前に当てはまる可能性のあることは、今は関係がないかもしれません。 ある意味で、私たちが構築するモデルは世界の反映であり、世界が変化している場合、モデルはこの変化を反映できるはずです。
モデルのパフォーマンスは通常、時間とともに低下します。
このため、最初のメンテナンスサイクルの一部としてモデルをアップグレードする方法を考える必要があります。
このサイクルの頻度は、解決しようとしているビジネス上の問題に完全に依存します。 ユーザーが気まぐれで、購入パターンが継続的に出現する広告予測システムでは、頻度をかなり高くする必要があります。 レビュー感情分析システムでは、言語がその構造をあまり変更しないため、頻度はそれほど高くなくてもかまいません。
私も認めたい 機械学習システムにおけるフィードバックループの重要性。 特定の画像が犬対猫の分類器で確率が低い犬であると予測したとします。 これらの信頼度の低い例から何かを学ぶことができますか? 手動レビューに送信して、モデルの再トレーニングに使用できるかどうかを確認できます。 このようにして、不明なインスタンスについて分類子をトレーニングします。
学習: 生産について考えるときは、フィードバックを使用してモデルを維持および改善する計画も考えてください。
まとめ
これらは、モデルを製品化することを考える前に私が重要だと思うものの一部です。
これは、あなたが考えなければならないことや失敗する可能性があることの完全なリストではありませんが、間違いなく食べ物として機能する可能性があります。機械学習プロジェクトの構成方法とベストプラクティスについて詳しく知りたい場合は、彼の優秀さを呼ぶ XNUMXコース CourseraのStructuring Machine Learningプロジェクトに名前を付けました ディープラーニングスペシャライゼーション。 機械学習システムを次に作成するときのために、考えてみてください。
この記事は、最初に公開された データサイエンスに向けて 著者の許可を得てTOPBOTSに再公開しました。
この記事をお楽しみください? 適用されたMLの更なるアップデートにサインアップします。
技術教育が追加されましたらお知らせします。
ポスト これらの5つの簡単なステップで機械学習モデルを本番環境に 最初に登場した トップボット.