Googleの研究員やエンジニアたちが、 機械学習のためのソフトウェアエンジニアリングのワークショップで、機械学習を使うことの技術的負債に対する見解を発表した。このワークショップは、モントリオールで開催されたNIPSカンファレンスで実施された。発表者たちは技術的負債の様々な側面を明らかにし、適切に対処しなければ、機械学習や企業の複雑なデータ分析を使うことは、従来のソフトウェアエンジニアリングとは異なる新しい技術的負債を生み出すと結論付けた。
論文では、技術的負債が生まれる4つの分野を明らかにした。それは、サブシステム間の境界の浸食、データ依存、システムレベルのアンチパターン、現実世界の変化を扱うことで起こる問題だ。
例えば、機械学習の手法は、非常に正確な予測に到達するために、様々な部分からの入力を混ぜ合わせる設計システムによるものだと、その研究では論じている。しかし、そのような手法を使うことで、うまく分離されたモジュール間の絡み合いが自動的に増えていく。その結果、1つのモジュールの中の変更が、全体の予測性能に重大な影響を及ぼすことがある。
ライブラリの再利用によって、コード依存が生まれるように、機械学習はデータ依存を生み出す。研究によって、ここで明らかになった1つの問題は、データソースが予測モジュールの不安定さによって変動しやすくなることだ。
機械学習への共通するアプローチでは、有益だと思われるデータソースを沢山集め、アルゴリズムを使って関連するデータを選ぶ。その結果、厳密に必要とされるデータよりも多くのデータが使われる。ここでは、周期的なクリーンアップが役立つだろう。
最後に、トラッキング、文書化、データ依存の解決といったツールが、コード依存のためのツールと同様、重要であることが述べられている。
システムアーキテクチャの観点から、機械学習の手法を使うことは、一般的なソフトウェア設計の数多くのアンチパターンにつながる。特に、一般的な目的で機械学習のソフトウェアを使うとき、コードを統合するために、結びつけるためのコードを沢山書かなければならない。ここでは、クリーンなリライトが役立つだろう。
様々な解析手法を試すことによって、定期的にコードをきれいにしなければ、コードパスは使えないものになる。
全体的に、この研究では、研究員やエンジニアリングの役割を担う人には、もっと統合されたアプローチを提唱する。Googleでは、これらの役割は、通常、同じチーム、時には同じ人が担う。
最後に、稼働中に実行される機械学習の手法は、時間と共に進化する現実世界のデータを処理しなければならない。このような状況では、予測性能を安定させなければならないため、別の技術的負債を負うことになる。ここで、予測性能のモニタリングとデータの変更を調べる基本的なデータ統計が役立つことを、この記事は述べている。
Googleは、数多くの中心となるサービスにおいて、機械学習と複雑なデータ分析に頼っていることで知られている。例えば、自分たちのサービスのために広告配置を最適化する予測モデルを使う。 画像検索のようなサービスも、機械学習が使われている。Googleは最近、深層学習のスタートアップ企業であるDeepmind とDNNresearchを買収し、この分野に多くの投資をした。他の企業も同じようなことをしている。例えば、Facebookはニューヨークに機械学習ラボを設立した。