648 blog

kyamanekoです。IT、思想、哲学、心理学などの記事を書いています。

ソフトウェアエンジニアはどこまで機械学習を勉強すべき?

f:id:kyamaneko:20160816003927j:plain

最近は、意識が高い?ソフトウェアエンジニアなら、機械学習の理論くらい嗜んでいないとダメ、という風潮になっている。(僕の思い込みか?)

確かに数式レベルで機械学習の仕組みを把握すべきだとも思うが、ある一線を超えてくると、どうも僕のCPU性能では完全には理解できなくなってくる。(まあ雰囲気で把握して、あとはソースコードを読んでいくというか……)

それにしても、ソフトウェアの作り手たちは一体、どこまで機械学習の理論を学べばいいのだろうか?

 

目次

機械学習技術の現状

実に10年以上前から、機械学習は様々な形で研究されてきた。
そのうち、2010年代初頭にディープラーニングの知名度が広がりはじめ、人工知能ブームが到来した。

そこで機械学習の専門家以外の僕のようなソフトウェアエンジニアも、新たな潮流に乗ろうと勉強をしはじめて、しばらく経った頃合いだと思う。

機械学習ライブラリの発展

従来より、機械学習ライブラリは多数開発されてきた。
代表的なもので、画像特化型ではopencv(の一部の機能)。ディープラーニングに対応したライブラリとしてはTensorflowなどが有名だ。

これらのライブラリは近年ますます洗練され、従来よりも簡便かつ安定した利用ができるようになってきた。

とはいえ、実用水準で使いこなすには、やはりそれぞれの機械学習理論をしっかりと理解していなければならない。

機械学習サービスの発展

Amazon MLをはじめ、様々な企業からクラウド型の機械学習サービスがリリースされてきている。

これらのクラウドサービスを使えば、機械学習の詳しい知識がなくても、自分のアプリケーションへ簡単に組み込むことができる。

機械学習以外の人工知能技術

ディープラーニング以外にも人工知能のくくりに入れられる技術があるが、実体は以前より開発されてきた、個々のソフトウェアライブラリだ。

ソフトウェアエンジニアは、各分野で実績のあるライブラリを利用する程度の関わり方で、(広い意味の)人工知能技術を利用することができる。

(形態素解析、映像認識、音声合成、音声認識など)

アプリケーション開発者はどこまで習得すべき?

こんな中、やはりディープラーニングの技術に対してどう取り組むべきかが、機械学習に興味を持つソフトウェア開発者にとっての課題なのだ。

様々なスキル分野を追いかけながら、さらにがんばって機械学習の知識を身につけるべきなのだろうか?

まずは、Amazon MLを使いこなせば、機械学習を使った有用なアプリケーションを開発できそうな気もする。

Tensorflowなどを組み込んだシステムを構築するとなると、インフラの管理も含めて、独自のノウハウが必要になってくるだろう。

開発案件ごとにスクラッチで機械学習機能をコーディングするのも、少々効率が悪い。(そもそも、その理論の習得コストが問題となる)

そのため、はじめは簡易的な段階から試していけるようにしたい。

機械学習技術の活用自体は検討すべき

近年の人工知能ブームやディープラーニングブームを静観しようとする向きもあるが、ソフトウェアエンジニアとして目を開いて生きているなら、きちんとディープラーニングの可能性を見極めなければならない。

定年間近の方はわからないが、これから10年20年とソフトウェア畑でやっていくなら、無視できない潮流だとは思う。

昔話

例えば以前、僕が高校生の頃、インターネットは常時接続ではなく(ISDNとかダイヤルアップだ!)、Googleも駆け出しのベンチャーだった。

そんなとき僕は、『ありえないだろうけど、インターネットで買い物とかできる世の中になったらおもしろいなー』などと考えていた。

今僕は、ディープラーニング技術に対して、あの頃のような予感を感じている。

無視することもできるが、出遅れるのはもったいないとも思う。

結論として

ソフトウェアエンジニアは、まずは概念レベルでディープラーニングを学び、どんな問題を解決できるのかを理解しておく。

そして、必要に応じてまずはクラウド型の機械学習サービスを利用する。

利用規模が増えてくると費用の問題が発生するため、いずれ独自のマシンなどに機械学習ライブラリをインストールし、プラットフォームの構築も検討する。

自分の業務で利用するようになってきたら、より深く理論を学んでいけばいい。

(かなりざっくりとした話だが)

まとめ

今回は、普通のソフトウェアエンジニアが、どこまで機械学習やディープラーニングを勉強すべきかを考えてみた。

深く理解するのに越したことはないが、現実としては、研究者レベルの知識を習得するのは難しい。

だからこそまずは、機械学習用のクラウドサービスなどに触れるところからはじめて、どのようなアプリケーションを構築できるか、考えていけばいいと思う

1か0かの決断をする前に、少しだけ新しい可能性をハックしてみるということだ。

いかがだろうか?




Amazon.co.jpアソシエイト