Keep Innovating! Blog

Keep Innovating! Blog

機械学習プロジェクトを成功に導くためのキーポイントとは?

AI ビジネス
松村久美子

みなさんこんにちは。技術創発推進室の松村です。

機械学習プロジェクトといえばPoCが多いと思いますが、最近では機械学習を採用した実運用可能なシステムやプロダクトの開発が徐々に活発になってきているなと感じます。

私は日々システム開発に携わっていますが、最近参画した開発プロジェクトにおいて一部の機能に機械学習を採用しました。色々な苦労もありましたが、最終的には無事システムを完成させることができ成功だったと思います。今回はシステム開発において、機械学習を導入する際に、そのプロジェクトを成功させるために気をつけておきたいことをAIエンジニア目線で書いていきたいと思います。kaggleなどの分析コンペとは違った視点が必要になるなという点について着目して読んでいただけたら幸いです。

1. 顧客への理解

(1) 顧客の望みを理解する

なにはともあれ、まずはいちばん大切なこと、顧客は何を求めているかを正しく理解し、認識します。

(2) 業務と課題を理解する 

顧客の日々の業務と現在の課題を理解することは大変重要です。ここに齟齬があると当然、顧客が真に求めるものを提供することはできません。

2. プロジェクトの理解

(1) 目的、スコープ

顧客の業務を効率化するためのシステム開発なのか、新技術の実証実験を目的とするのかなどやスコープを確認します。最終的な目的は業務の効率化であるが、プロジェクトのスコープとしてはPoCによる検証まで、という場合もあるかもしれません。

(2) 納期と成果物

納期と必要な成果物を確認し、マイルストーンについてもチームメンバー全員で認識を合わせておきます。

この辺りは通常のシステム開発と同様なので何をいまさらと思われるかもしれませんが、我々AIエンジニアは、モデルを開発することばかりに考えを囚われがちなので、まず最初にしっかり顧客の望むものとプロジェクトの目的を意識付けしておくことが大切だと思います。今回、顧客が求めていたものはPoCではなく、採用する技術は問わないが、とにかく業務を効率化したいということでした。

3. タスクと手法の検討

(1) タスクの設定と手法

課題解決のためにタスクを設定します。ここでも、AIエンジニアとしては真っ先に機械学習を採用したいところですが、「顧客の望むものと納期と人員リソース」を鑑みて最適な手法を検討します。

(2) 使えるリソースは使う

社内にドメインは異なるが似たようなタスクで実績がある人がいる場合は、有識者の意見をまず聞いてみるのが近道かなと思います。限られた期間の中で実運用可能なシステムを納品しなければいけないという状況では、とにかく工数が節約になりそうなものは何でも利用したいところです。

(3) 機械学習を採用するコスト

機械学習を採用するとなると、通常のシステム開発の工程に加えて以下のような工程が必要になります。さらに、どこまで精度が上げられるかはやってみないと分からないという部分もあります。ここを甘く見積もってしまうと、投入したコストの割には結果はイマイチで使い物にならないということにもなりかねません。こうしたデメリットは早々にPMに伝えた上で顧客に説明してもらい理解していただくことが重要だと思います。

  • 学習環境の構築
  • 学習データの選定とアノテーション
  • テストデータ選定とアノテーション
  • 評価方法の検討
  • モデルのトレーニング、評価、改善の繰り返し
  • モデルのシステムへの組み込み

4. システムの設計

(1) 実行環境

実際の実行環境はクラウドを利用するかオンプレミス環境かモバイル端末上での実行になるのか、GPUが利用可能な環境であるのか確認します。この環境によって機械学習の場合、推論速度にかなりの影響が出るので早めに確認しておきたいところです。

(2) 性能要件

非機能要件のなかでも、特に性能はいちばん気にしておきたいところです。顧客の業務によって、推論処理にリアルタイム性、精度がどの程度要求されるのかは異なると思います。例えば、自動運転であればリアルタイム性、精度の双方がかなりのレベルで要求されると思いますが、レコメンドであれば精度に関してはそこまでシビアにならなくていいのかもしれません。リアルタイム性の必要のないバッチ推論の場合でも、全体のスループットはどれくらい必要かなど確認しておきます。ここが満たせていないと結局は使ってもらえません。

(3) 運用方法

機械学習を採用する場合、精度100%で確実に正しい結果が得られます、ということはまず言えません。そういった点については、いわゆる「運用でカバー」していく必要性が往々にして出てきます。「運用でカバー」とは、業務フローのなかで、コンピュータシステムだけでは上手く解決できない部分を人間が補って解決するという意味です。例えば、AIの認識力が不十分である場合、AIの出力結果の一部を人間が再確認して補うことにする、などです。この方法を採用するには、顧客にとって最も解決したい事が、運用でカバー可能であるか、そしてそれは顧客にとって許容範囲であるかを確認していく必要あります。

(4) ベースラインの作成

AIや機械学習のモデル開発において、性能向上等の出発点となる基準モデルをベースラインと言います。このベースラインとなるようなモデルを含むシステム全体のプロトタイプをMinimum Vaible Product(最低限の顧客価値を生み出すプロダクト;MVP)として早々に作成し顧客に評価してもらいます。今回のプロジェクトにおいて、最終的には機械学習モデルも採用していますが、MVPの段階ではルールベースのみで実装しました。理由としては、大きく以下の2点になります。

  • ベースライン作成の段階ではモデルを学習させるのに必要な十分なデータが得られていなかった。
  • ベースラインを早い段階で顧客に触ってもらうことで、顧客の必要としているものと、我々が作ろうとしているシステム像が一致しているか、顧客の環境で運用可能なものか早い段階で確認したかった。

ベースライン作成後の各イテレーションの中でも顧客に実際に見て触ってもらい、感触を確かめながら進めていくとプロジェクトの失敗に繋がり難いのではと思います。

5. モデル開発

(1) 学習データ作成

今回のモデル開発は、フルスクラッチで作成するのではなく、既存モデルを転移学習させていますが、そうであっても学習データの作成にはかなり工数がかかります。まず最小の学習データセットを作成して、モデルのトレーニングを行いました。この段階では汎化性能のことは気にせず、学習によってロスが下がっているか、学習データに対してモデルは予測ができているかどうかをまず確認しました。

もし最初から大きな学習データセットを作って、アノテーションなどの学習データの作成方法がいまいちだった場合、すべてを作り直すことになり、かなりの労力と時間を無駄にしてしまいます。

そこで小さな学習データセットで問題なさそうだと確認できてから、より大きな学習データセットを作成しトレーニングさせました。

(2) 適切な評価指標

もし開発課題がAIモデルの精度向上だけであれば、モデルが解く対象としているタスクによって評価基準は大体決まっていると思います。しかし顧客はモデルの精度が何%かということよりも、システム全体としてどれくらい業務が効率化されるのか、という点により関心があるはずです。そういった観点における性能指標を設定・可視化し、どの程度の業務効率化が見込めるか、といった説明ができると顧客の納得感も得られ易くなります。

(3) 速度と精度のトレードオフ

極端な話、いくつかのモデルを使ってアンサンブル推論すれば、数%の精度改善が見込めるかもしれません。しかし、推論速度は遅くなり、メモリ使用量等の負荷も増えます。このトレードオフは顧客の要件に左右されますが、1%のモデル精度改善とそれに伴う負荷増大によって顧客への業務効率化へのインパクトがどれくらいあるのか、ということは常に意識しておきたいことです。

6. 参考図書

今回はプロジェクト全体として留意すべきこと、という視点で書いてみました。実際の開発作業において気をつけるべきことはもっとたくさんあると思います。そういった点は以下の書籍が大変参考になりました。

  • 機械学習システムデザインパターン  
  • 仕事ではじめる機械学習                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           


7. さいごに

機械学習を採用するシステムにおいて最も大切なのは、やはり通常のシステム開発と同様に顧客にとって価値のあるものを提供することだと改めて感じました。

PM(プロジェクト・マネージャー)は顧客に価値のあるシステムやプロダクトを所定のコストと期間内に提供するために、何が必要であるか吟味しプロジェクト全体をコントロールしています。さらに、機械学習を採用するようなプロジェクトにおいては、顧客との折衝を行う上で、通常のシステム開発とは違った難しさもあるのではないかと思います。

そういった、機械学習ならではの特殊な事情や、機械学習を採用することのメリットやデメリットは我々AIエンジニアがいちばんよく理解しているはずです。AIエンジニアとしては機械学習を採用したプロジェクトに関わるのであれば、モデルの構築や改良にじっくり時間を使いたくなるかもしれません。ですが、プロジェクトを成功に導くためには、モデル開発に囚われて近視眼的になるのではなく、プロジェクト全体に対しての自分の責務をしっかりと認識し、PMやチームメンバーと積極的にコミュニケーションを取りながらその責務を果たしていくことが重要だと感じました。

ここで得たものを活かし、次はもっとうまくできたらいいなと思います。




著者プロフィール

名前:松村久美子

株式会社オープンストリーム/技術創発推進室

ITエンジニア歴長めで組込から基幹システムまで経験は広範囲。趣味の投資に機械学習を利用したいと思い独学で勉強開始。現在は画像認識全般に関心あり。JDLA Deep Learning for ENGINEER 2021#1、CG-ARTS 画像処理エンジニア検定エキスパート保有。

タグ
メンバー
ページトップ