こんにちは、研究開発グループの馬場です。
この記事はTECHSCORE Advent Calendar 2014、10日目の記事です。
機械学習と技術的負債
最近見つけたGoogle の論文 「機械学習:技術的負債を生む高金利なクレジットカード(Machine Learning:The High-Interest Credit Card of Technical Debt)」が興味深い内容でした。
この論文では、機械学習を含むシステムに発生しやすい技術的負債について、以下のように書かれていました。
- 機械学習を含むシステムは通常のものより複雑で、大きな技術的負債を生みやすい
- 機械学習は以下の3つの特徴を持つ
- 現実世界のさまざまな情報をとりこむ
- 複雑なアルゴリズムを用いる
- 運用している間も、データを取り込むことで学習=処理内容が変化していく
- 上記の特徴があるので、以下のような技術的負債を負いやすい
- システム外のデータから学習するため、外のシステム変更の影響をうけやすい。
- 機械学習そのものはブラックボックスとして扱われることが多い
→ 周辺システムとの「のり」となるコード、調整するコードの肥大化 - 学習により処理内容そのものが変化するため、意図した処理をしているのか、監視することが難しい
- 長い目でみると、これらの技術的負債の特徴を加味してシステム設計すること、かつ負債を定期的に払い続けることが重要
研究成果をシステムに組み込む
この論文で私が心打たれ(反省し)たことのひとつは「機械学習システム」には、学習や推論の仕組みだけでなく、評価や実験をするための仕組みが当然組み込まれている、という点です。その上で、稼働中のシステム内で、機械学習の「機械が外的環境から学習し課題を解決する」処理の精度をあげる、PDCAサイクルをすばやく回すためには、どうしたらいいのか。周囲のシステムとのデータ連携や監視などの機械学習以外の仕組みについてリリース当初から考慮して設計すること、定期的に見直すことを主張しています。
研究成果をシステムに組み込む場合は、そのシステム上で実験/評価/改善を繰り返し研究を推進する環境も含めてデザインすることが求められるのです。
10年変化しつづけるサービスを提供するために
変化のスローダウンの原因となる技術的負債は、後になって顕在化する上解消のためには初期のリリースコストが増えるので、エンジニア以外にはなかなか理解されません。論文で新しい手法をどんどん提案していく、常に整えられた環境で実験をくりかえす研究者もピンとこないのでは。ただ、ビッグデータにまつわるコンピュータサイエンスの研究を進めるには、現実のサービス内で試行錯誤するしかありません。つまり、研究をすすめるためには、研究者がエンジニアリングの現場にいって、持続可能な研究の環境をつくっていくしかないんですよ。たぶん。「エンジニアと研究者は同じチームに」とGoogleさんも言っています。
エンジニアから研究に携わって3年目。体力も衰えてきた40代女子としては、「それは研究の仕事なのかー!」「というか、研究の仕事ってなんなんだー!」と世界の中心で叫びたくなることが増えてきたのですが、この論文をよんで、これもそれも私が思い及んでいなかったそれも研究の仕事なんだよね、と覚悟を決めました。
ちなみに、この論文。「締め切りのプレッシャーに負けてリリースするとあとから大変なことに...」と何度か書かれていて、天下のグーグルさんも... ととても親しみがわく(だめなんですが)内容ですので、機械学習に限らず複雑なシステムに立ち向かおうとしているエンジニアのみなさんにもおすすめです。ぜひ。