読者です 読者をやめる 読者になる 読者になる

bohemia日記

おうちハックとか画像処理、DeepLearningなど

あなたの会社は本当に機械学習を導入すべきなのか?

こんにちは。ぼへみあです。

こんな記事を読みました。
japan.zdnet.com

よくあることだと思いますが、上から降ってきた機械学習プロジェクトは99%失敗し、導入したとしても技術的負債という形でエンジニアを苦しめることになるので、やらないほうがいいと思います。

僕は普段から、ディープラーニング面白しれー、機械学習サイコーと世に広めてしまっているのですが、 こちらの講演を聞き、機械学習をシステムに組み込んで運用する際に、普通のシステム以上に技術的負債が発生しやすく、どの企業でも気軽に導入を進めるべきでないと思いましたので、今の考えをまとめてみました。

ディープラーニング、実サービスへの導入の実際 〜niconicoにおけるレコメンド、コメント解析、画像解析〜 | Peatix

機械学習は技術的負債の高利子クレジットカード

近年高い成果を上げ、ブームになっている機械学習を導入したいと考える企業はたくさんあると思います。
しかし機械学習とは、便利だから気軽に使ってしまうと、あっという間に技術的負債が膨れ上がり後々困る、クレジットカードのようなものだと言われています。

これは、機械学習の分野では世間の5年以上先を行くと言われているGoogleが、自社での機械学習システムの導入・運用の経験を元に、2014年の機会学習におけるトップカンファレンスのNIPSで発表した論文で述べられています。 ここに書かれていることは、Googleがすでに経験し、今後我々が直面する問題と考えられます。 Machine Learning: The High Interest Credit Card of Technical Debt

少しだけ内容をまとめますと、

長期的に運用される機械学習システムは、技術的負債があっという間に膨らむ傾向がある。 機械学習が技術的負債を生みやすい原因として、

  • 外界のデータを元に学習を行うため、外界の変化に対応する必要がある
  • 外界の複雑さがシステムに侵食し、モデルを複雑にする

などが述べられています。 外部データに依存するため、従来のコードメンテナンスに対する知見のみでは技術的負債を返すのは難しいとされています。

こちらの記事で論文の要約がされています。

atl.recruit-tech.co.jp

一般的に、技術的負債がたまると、システムの柔軟な変更や迅速な対応ができなくなり、イノベーションの阻害となります。
最悪、誰も手がつけられないシステムとなってしまう可能性もあります。

特にディープラーニングにおいては、内部でどういう働きをしているのか、人間が把握することは難しく、ブラックボックスになってしまう可能性がさらに大きいです。外界の変化にも影響し、内部で何をやっているか分からないシステムなんてヤバイです。

先日、情報処理学会主催のIPSJ-ONEという企画で、高度に発達したシステムの異常は神の怒りと見分けがつかないという発表がありましたが、まさしくこのような状態になりそうです。

エンジニアや研究者の体制が重要

Googleは世界最高の技術者たちを大量に抱えていますが、一般的な会社はそうは行きません。機械学習を扱える人材は限られています。
なぜなら機械学習は、数学的素養がないと扱うことができず、技術の習得に時間を要するからです。
一部の機械学習ができるエンジニアによって、システムに機械学習は導入できるでしょう。しかしその後の運用体制はどうなるでしょうか?

もしそのエンジニアが別の部署に異動したり、辞めたりすると、保守運用が非常に困難になります。
先日、パラメータや実験結果をドキュメントに残すべしという記事を書いたのですが、現実問題、人を介さずドキュメントのみでは引き継ぎは難しいと考えます。
モデルを作成した時の背景の知識や知見を共有することが重要で、引き継ぐには一定期間同じ場所で働いて、知見を共有することが必要だと考えます。複雑なモデルの場合、優秀な研究者でも、ポイッとドキュメントとコードを渡されただけでは理解するのは難しいです。
きちんと引き継がれなかった場合、外界の変化に柔軟に対応できなかったり、今はちゃんと動いているけど誰も触れないオーパーツのようなシステムに成り果てます。5年、10年に渡ってそうなる可能性があるのです。

こういう状況を避けるためには、会社の中で特定の人のみが機械学習ができるという属人化の状況を避け、幅広く機械学習の知見を持つ人間が会社に存在している必要があります。

このように機械学習が使えるエンジニアが散在している組織は非常に限られます。個人的な経験からすると、

  • テクノロジー重視の文化がある
  • コンピュータサイエンスやデータサイエンスの素養のある人が多くいる
  • 自発的に勉強会などに参加するエンジニアがいる
  • 理系・情報系卒のエンジニアを優遇している
  • 修士や博士が多い
  • 研究開発組織を持っている

といった特徴を多く満たしている企業が機械学習に取り組んでおり、全く当てはまらない会社では自社での機械学習システムの開発はやめたほうがいいと思います。公開されている機械学習APIで頑張るべきです。

先ほど述べた技術的負債の解消には、機械学習に対して深い知見を持つ研究者と、実際の開発に携わるエンジニアの両者が近いところで協力しあえる環境が重要とされています。ソフトウェア工学の知見を持つエンジニアだけでなく、外界のデータの扱いや最新の機械学習の手法に精通している研究者の存在が重要です。

結論としては、多くの企業は安易に機械学習を導入すべきではないと思います。
機械学習は、便利だからつい使ってしまうクレジットカードです。後で負債を払う羽目になります。

小さく始め、知見を蓄えられる環境を整える

それでも機械学習を導入したいと考える方のために以下アドバイスです。

まず、部下にAIや機械学習をやれ、というのはやめましょう。失敗します。
ソフトウェアエンジニアなんて文系でもできる、という人も諦めてください。公開されているAPIで我慢してください。

社内の高い技術者のレベルがないとうまくいきません。テクノロジー重視の文化を作りましょう。
「大丈夫、うちのエンジニアは技術力高いから」という会社ほど技術力が低いので気をつけてください。

そう簡単に文化なんてできないので、オススメは、情報系卒だけど全然違うことをやっているエンジニアをそそのかすことです。
1~2か月くらい時間あげて、勉強させてあげましょう。やりたいエンジニアを公募してみるのもいいでしょう。

と同時に、企画者やアキーテクトになりうる人にも勉強させてあげましょう。企画者は、その機械学習モデルがどれだけのビジネス価値を持つのか理解する能力とともに、そのモデルがどれほどの技術的負債を生むのかを把握する必要があります。負債>価値と判断したら、導入を止める人が必要です。

とにかく始めはボトムアップで小さく始めます。すぐに成果を期待してはいけません。果報は寝て待ってください。 もし成果が出てきても、すぐに運用向けに実装してはいけません。まずは期間限定やバッヂ処理での運用を考えてください。 知見がたまる前に運用に載せてしまうと、技術的負債をどんどん生み出す装置になってしまいます。

ある程度知見を貯め、本当に運用に載せる段階になったのならば、機械学習専門のチームを立ち上げましょう。 ごく少数のエンジニアで導入を進めるという状況から、長期的に組織的に機械学習に取り組むチームを作ることで、属人要素を少なくしていきます。同時に機械学習のスキルを評価し、昇格させます。導入した人が辞めると機械学習システムは本当にオーパーツ化するので、ちゃんと評価してあげて、辞めさせないようにしましょう。こういうチームを作ることで、チーム内でスキルを磨き合い、機械学習の知見をどんどん貯めてゆける土壌を整えていきます。全員がエンジニアではなく、最新の論文を読んだりカンファレンスに参加して技術動向を掴んで、次の実装モデルの研究開発を行うポジションの人もいると良いでしょう。しかし、研究者は現場から離れすぎてはいけません。

このような流れで、機械学習プロジェクトの属人化の排除と技術的負債の低減を行いながら、進めていくといいと思います。

最後に

技術軽視の潮流が日本の企業にはあるので、技術が評価されずエンジニアがやりづらい世の中なんだと思います。
しかし既に独創的なアイデアとサービスデザインによるサービスやプロダクトのを作る時代は終わりを迎えており、 AIやVR, AR, IoTといったテクノロジーの幅広い知見が求められるようになってきています。やったほうがいいと飛びつくのは良いですが、技術には積み重ねが必要であり、一夕一朝でできるものではありません。日本の企業が、テクノロジーを重視する文化の重要性を本当の意味で理解することを願っています。