機械学習モデルを実用化してビジネス価値を生み出す「機械学習システム」とMLOpsとは|翔泳社の本

機械学習モデルを実用化してビジネス価値を生み出す「機械学習システム」とMLOpsとは

2021/05/24 07:00

 機械学習をシステムに組み込んで運用するMLOpsに2015年頃から取り組んでいる澁井雄介さんが執筆した『AIエンジニアのための機械学習システムデザインパターン』(翔泳社)。機械学習システムの設計や運用の手法をまとめたデザインパターンを解説した本書から、機械学習システムとMLOpsについて書かれたパートを抜粋して紹介します。

本記事は『AIエンジニアのための機械学習システムデザインパターン』の「Chapter1 機械学習のシステムとは」から抜粋したものです。掲載にあたって一部を編集しています。

 機械学習の開発では主にデータの前処理から学習、評価までをカバーします。機械学習のモデルを実用化するためにはシステムに組み込み、ユーザや他システムから使えるようにする必要があります。ユーザや他システムから使われて、推論結果の効果を測定することで、機械学習の実用上の価値を測ることができます。機械学習システムは機械学習を組み込んだシステムであると同時に、機械学習固有のソフトウェアと運用をサポートするための基盤です。

1.1 機械学習、MLOps、システム

 機械学習をユーザに届けるには推論を行うシステムが必要です。システムエンジニアリングには開発と運用の側面があります。これらを組み合わせたプラクティスをDevOpsと呼びます。本書ではDevOpsに機械学習の開発、改善プロセスを組み込むMLOpsを説明します。

1.1.1 はじめに

 ディープラーニングの登場によって第3次AIブームが勃興し、機械学習やディープラーニングを用いたモデル開発が盛んに行われています。機械学習という言葉はサイエンスやソフトウェアエンジニアリング業界のみならず、ビジネス界隈でも使われるようになりました。機械学習による新規ビジネス起ち上げや業務改善を模索し、実践する企業が増えてきています。

 機械学習は銀の弾丸ではありませんが、データがあれば人間の予測精度を超えた推論ができるようになる可能性があります。データと機械学習によって、これまでの技術では立ち行かなかった領域に踏み込むことができるようになります。

 たとえば、これまで人間の感覚と経験に頼っていて熟練工に属人化していた製造業の不良品検知が、機械学習の異常検知や変化検知によって省力化、汎用化される、というような事例は枚挙にいとまがないでしょう。これまで属人化していた課題が機械学習の実用化によって解決する、または解決する糸口が見つかり始めているのが昨今の機械学習界隈の動向でしょう。

 機械学習はコンピュータによって計算され、ソフトウェアによって動作を定められます。機械学習自体がソフトウェアで作られているため、機械学習はソフトウェアエンジニアリングの一領域とも言えます。ソフトウェアエンジニアリングである以上、機械学習を実用化するためにはソフトウェアを作り、ソフトウェアを実行する基盤に組み込み、システム化する必要があります。

 他方で機械学習はプログラムのみならず、データと確率を扱うため、従来のソフトウェアとは違った開発方法が必要になります。しかし機械学習を使うためにコンピュータ(CPU、メモリ、外部記憶装置を持ち、必要であればネットワークやセンサーのような周辺機器を持つ。サーバ、パソコン、タブレット、スマホ、マイコン含む)を用意し、プログラムを書いてコンピュータにインストールする点は、従来のソフトウェアと変わりません。機械学習をソフトウェアの一種とすると、機械学習をシステムに組み込み、運用する方法論と実装技術が必要になります。

 昨今のソフトウェアエンジニアリングではクラウドとWeb技術の発展により、システムの開発と運用を同一のライフサイクル、同一のチームで実施し、高速に開発とフィードバックループ(ユーザからプロダクトの使い心地や意見を得て、改善に繋げるプロセスを繰り返すこと)を回す文化やツール、開発プロセスとしてDevOps(DevelopmentとOperationsを繋げた略語。「デブオプス」と読む)が誕生し、盛んに用いられています。

 DevOpsでは開発チームと運用チームを統合し、全員がプロダクトのEnd-to-Endに責任を持ちます。継続的インテグレーション(CI=Continuous Integration)や継続的デリバリー(CD=Continuous Delivery)を維持し、フィードバックループを回すことでプロダクトの修正を行います。

 特にWebやスマホアプリ業界では、ユーザが直接使うアプリケーションを提供するため、ユーザのアプリケーション内での行動やフィードバック、障害をもとに自社プロダクトの修正、更新をスピーディに実行することが求められます。修正や更新されないアプリケーションは使われなくなると言っても良いくらい、変化の激しいビジネスになっています。

 こうしたDevOpsで用いられるプラクティスを機械学習に適用したのがMLOps(Machine LearningとOperationsを繋げた略語。「エムエルオプス」と読む)です。MLOpsでは機械学習のモデルのみならず、モデルを学習し、推論するためのワークフローやシステムを開発し、運用します。機械学習のプロジェクトではデータから機械学習のモデルを学習して生成するのみならず、ビジネス課題を解決するために機械学習のモデルを推論器としてビジネスプロセスやアプリに組み込んで、高度な自動化を実現します。

 機械学習のモデル開発はデータサイエンティストや機械学習エンジニアの仕事となる一方、推論モデルの実システムへの組み込みはソフトウェアエンジニアが担当することが多いでしょう。加えて機械学習のモデル開発のためのワークフロー基盤やデータ収集検索基盤もシステムとして用意する必要があります。機械学習を学習から実用化へ繋げていくためには、機械学習以外のシステム開発が必要になります。

 以下の図1.1は『Hidden Technical Debt in Machine Learning Systems』という論文で論述された、機械学習に必要なシステムコンポーネントになります。

図1.1 機械学習に必要なシステムコンポーネント
図1.1 機械学習に必要なシステムコンポーネント
出典『Hidden Technical Debt in Machine Learning Systems』(D. Sculley、Gary Holt、Daniel Golovin、Eugene Davydov、Todd Phillips、Dietmar Ebner、Vinay Chaudhary、Michael Young、Jean-Francois Crespo、Dan Dennison、2015)、Figure 1より引用

 機械学習のコアな部分は「ML Core」と書かれた中央の濃い色の四角です。そのコアな部分を支えるために必要なインフラやデータ収集、分析、監視といったシステムコンポーネントが周辺に配置された構成になっています。この図式では機械学習以外の部分を大げさに書いている感は否めませんが、システム開発の場において機械学習のコアな部分以外に多様な技術と複雑さが内在していることは事実です。

 機械学習のシステムを作り、開発と運用を行うためには機械学習を含めたシステムのワークフロー(図1.2)を定義する必要があります。

図1.2 システムのワークフロー

図1.2 システムのワークフロー

 まずは機械学習に焦点を当てると、機械学習のプロセスは大きく学習と推論に分けられます。学習フェーズではデータを収集、クレンジングし、データの傾向に合わせてモデルを学習してより良い評価を目指します。学習フェーズは実験や検証に近い要素が多く、目的に合わせたアルゴリズムの選択や多様なパラメータのチューニングといった作業が発生します。最後の評価プロセスで、生成された機械学習のモデルが実用に耐えるのか、テストデータで評価します。

 機械学習の推論フェーズでは、学習で生成したモデルを本番システムに投入し、実データを入力して推論結果を出力する推論器として稼働させます。推論器は機械学習の技術要素(データの前処理やモデルによる推論)と同時に、ソフトウェアエンジニアリングの要素(推論器を稼働させるインフラ構築、外部システムとのネットワーク設計、セキュリティ、入出力インターフェイスの定義、コーディング、各種テスト、ログ収集、監視通報の設定、運用体制の構築等々)が必要になります。

 機械学習のモデルは実用化されて初めて効果を発揮します。学習されたモデルが推論器として本番システムに組み込まれ、推論が実行されて初めて、機械学習のモデルのプロダクトとしての価値が問われるようになるのです。そして推論結果の価値はイベントログやユーザ動向から評価する必要があります。収集したログから推論結果の正解率や、目的とした価値(売上や異常検知率等々)を生み出していることを評価します。推論器による評価結果や新たに収集したデータをもとに、機械学習のモデルを改善し、よりビジネスインパクトの出せるモデルを開発します。

 こういった機械学習のプロセスを実行するための一連のワークフローを運用し、プロダクトおよび機械学習としてのフィードバックループを回す仕組みを維持するシステムと文化をMLOpsで実現します。推論モデルを本番システムに組み込んでユーザに使ってもらうだけであれば、推論モデルを組み込んだWebアプリケーションを作れば実現可能でしょう。

 しかしMLOpsとして継続的なインテグレーションとデリバリーをEnd-to-Endで実現するためにはソフトウェアエンジニアリングと開発・運用の協力、チーム全体でプロダクトに責任を持つ文化が必須です。ソフトウェアを本番システムにデリバリーするためには、ソフトウェアを搭載するインフラや、外部システムとの連携(ネットワークや認証認可、入出力インターフェイス等)が必要になります(図1.3)。

図1.3 機械学習システムの全体像

図1.3 機械学習システムの全体像

 ログ収集と監視通報でも、アプリケーション側にロガーと収集のためのエージェントを組み込み、収集したログを溜め込むデータベースやストレージを用意し、出力されたログを監視して一定の異常が発生した場合にアラートを飛ばす監視システムを開発し、運用していくことになります。これらの開発や運用を1人のエンジニアで実現することはほぼ不可能です。システムの中に機械学習を組み込み、継続的に価値を生み出していく仕組みを作るためには、プロセスの自動化と運用するチーム体制が必須になります。

1.1.2 本書の目的

 本書では機械学習のモデルを本番システムに組み込む方法を、多様なユースケースやアーキテクチャを交えて説明していきます。機械学習のシステムをどう作れば良いか、パターンとして分類して整理し、今後機械学習を実用化していくエンジニアに貢献することが本書の目的です。ディープラーニングの登場によって需要の高まった機械学習の実践活用について、著者の経験や失敗談をもとに、実装方法を含めて公開します。

 本書は著者が株式会社メルカリに所属していたときに作成、公開した2点の資料と講演をもとに執筆しています。

 1点目はメルカリのOSS用GitHubレポジトリで公開した「機械学習システムデザインパターン」です。これは主にWebシステムにおける機械学習のシステムアーキテクチャをデザインパターンとして整理したドキュメントで、学習、推論、QA(品質保証)、運用の各方面で開発・運用方法を説明しています。

Machine learning system design pattern

 2点目は2020年のPyConJPというPythonのカンファレンスで発表した「Pythonで作る機械学習システムパターン」です。上記の「機械学習システムデザインパターン」の一部をPythonで実装し、公開したものになります。

Pythonで作る機械学習システムパターン

 いずれも機械学習をシステムの中で実用化し、ユーザに使ってもらえることを目指した技術ドキュメントになっています。機械学習はこれまでのソフトウェアエンジニアリングでは実現できなかったデータによる高度な判断を可能にし、新たなビジネス価値を生み出せると信じています。機械学習を実用化することで、よりスマートで便利なプロダクト開発に貢献したいと思い、本書を執筆することにしました。

1.2 ユーザに使ってもらえる機械学習を目指して

 プロダクトとしての機械学習の価値は推論結果にあります。推論結果がアプリケーションのユーザやビジネスプロセスに効果を発揮して初めて、機械学習は役に立ちます。学習時にどんなに良い精度を出せる機械学習モデルでも、実践で使われないと意味がありません。機械学習の研究では学習したモデルの評価値や、学習の高速化手法、新たに生成できるコンテンツが注目されることが多いですが、プロダクト上でユーザに価値を提供するためには、プロダクトに組み込まれ、人の手に届ける必要があります。

 機械学習がプロダクトとして人間の役に立つためには、機械学習と人間の作業を住み分けることが重要です。人間にしかできない意思決定や、人間にとって楽しい活動を機械学習で代替して自動化する必要はないでしょう。たとえば将棋のAIがどんなに人間より強くなったとしても、自分が人間やコンピュータを相手に将棋を指す楽しさが代替されるものではありません。逆に人間にとってつまらない作業や、人間に処理できない膨大なデータを必要とするタスクは、機械学習で代替できると効果を発揮します。スマホで撮影したすべての写真に写っている人の顔を判定して名前のタグを付けていく作業は、人間には困難でしょうが、機械学習は得意とします。

 Google社はプロダクト開発において人間とAIの関わり方を研究し、プラクティスをまとめたガイドブックを『PAIR(People + AI Research)』として公開しています。

PAIR(People + AI Research Guidebook)

 このガイドブックでは、機械学習が人間に提供する価値を自動化(Automation)と拡張(Augmentation)と定義しています。自動化では、人間にはできないこと(すべての写真の人名を判定する)や、単純作業や危険な作業(生産ラインの異常品検知)を機械学習で実施します。人間でも頑張ればできるかもしれないけど、コンピュータにやらせたほうが効率的で効果的なタスクを自動化するということです。

 他方で機械学習による拡張では、人間にとって楽しいタスク(創作が好きな人によるクリエイティブな活動)や、人間の介入が必要なシチュエーション(ボランティアは人間が善意で実施することにも意味がある)、極めて個人的な活動(愛の告白)、強い想いのある活動(新規プロダクト開発)といった、人間が行動することが必要なタスクをAIでサポートするとしています。人間にとってサポートが必要な営みに機械学習の強みを活かすということです。

 本書では様々な用途に応じて機械学習を実用化し、システムに組み込んで運用、改善する方法を説明します。本書の目的は機械学習システムのデザインパターンやアンチパターンを活用し、実世界に機械学習を適用することで、より多くの課題を解決する一助となることです。

AIエンジニアのための機械学習システムデザインパターン

Amazon SEshop その他


AIエンジニアのための機械学習システムデザインパターン

著者:澁井雄介
発売日:2021年5月17日(月)
定価:3,960円(本体3,600円+税10%)

本書について

本書は機械学習を有効活用するためにはシステムに組み込むための設計や実装が必要と考え、機械学習システムのデザインパターンを集めて解説した書籍です。