ITエンジニアのブログ

IT企業でエンジニアやってる人間の日常について

いかに機械学習を使わないかを考えるのも機械学習エンジニアだと思う

今まで、業務として機械学習に触れてきた経験から、色々と思料したので共有します。

機械学習を適用することのデメリット

機械学習を用いると、それ以外では叶わなかった問題の解決などが可能になる場合があります。ですが、機械学習は良いことばかりではありません。特有のデメリットを克服するか、あるいは上回る利点を出す必要があります。

出てきた結果の説得力が無い

出力された分類結果や回帰の値に対して、どうしてそうなったかという理由は付与してくれません。ニューラルネットワークの場合を考えると、ただ内部で数値が変動し、それが出力になるだけです。そしてそれがプロダクトになったとき、それを使用する人に説明する機会でその問題が顕在化する可能性があります。

透明性、保守性、拡張性が下がる

機械学習は大抵の場合、こういう入力があればああいう出力になるといった結果が、完全には予想しきれないという性質があります。タスクの粒度にもよりますが、その出力をなにか別のアルゴリズムの入力にしようとしたときに、この曖昧さがネックになり得ます。入力が曖昧なので出力も曖昧になる。つまりアルゴリズムをつなげていく中で、機械学習を含むアルゴリズムが途中に挟まっていると、全体にその曖昧さ、不安定さが出てくるようになります。このようにして、内部のデータで何が起こっているかという透明性を失うと、不備が明るみになったときの修正が難しくなるという保守性の問題や、一部に新しいアルゴリズムを適用としたときに全体の流れを把握しづらくなる拡張性の問題が発生します。機械学習の入出力形式が変わる場合は、精度検証なども必要になるため大仕事になるでしょう。

顧客の立場を意識してアウトプットを出す

いろいろなアルゴリズムを学んでいくと、難しいアルゴリズムを使いたくなったり、そういうものを使ったほうが精度が良くなることを期待したりします。ですが、プロダクトを使う側からすれば、内部で何が動いているかは関係ないので、手法にこだわりすぎると時間を浪費する原因になります。

また、アウトプットをどう見せるかによっても、求められる性能(Precision や Recall)が変わってくるため、それによって機械学習手法を設定したり、場合によっては機械学習自体から離れるということも検討したほうがよかったりもするでしょう。

機械学習エンジニアの役割

機械学習で何ができて何ができないのか、またそれにかかるコストはどのくらいかを一番把握しているのは機械学習エンジニアであり、だからこそどうすべきかの判断ができるはずです。

設計段階では、機械学習だからこそのメリットとデメリットを比較して、次に取るべき行動の判断を下す。作業段階では、自身の技術力を用いる。当たり前ですが、闇雲に目の前の仕事をするより、目的を意識して逆算してやるべきことを決めるというのが大事に思えます。

理想の形

機械学習の専門チームを作ると、存在意義として機械学習を使わなければならない意識に、少しはなると思います。

明らかに機械学習でしか実現し得ない事業に取り組んでいるとかではなく、抱えているプロダクトの質を、場合によっては機械学習で向上させたい。そのような場合は、機械学習や分析のできるソフトウェアのエンジニアがいて、開発をしつつ分析を行い、必要な場面で機械学習を用いる。そういう姿こそ、組織として健康的なのかなと感じる日々です。