機械学習とプログラミングの違いから見えてくるもの (Medium記事紹介)
Mediumには良い記事がゴロゴロ転がっています。今回はたまたまきょう目についた良記事、Machine Learning vs Traditional Programmingの記事をご紹介します。
日本では実は「機械学習」という言葉はあまり耳にしないかもしれません。特に「人工知能(AI)」という方が、巷ではよく耳にするのではないでしょうか。
Wikipediaによると、「機械学習」は、
機械学習(、英: machine learning)とは、人間が持つ学習にあたる仕組みを機械(特にコンピュータ)で実現する技術・手法の総称である。
と書かれています。
機械学習は計算機科学(コンピュータサイエンス)の一分野として発展を続け、人工知能と言われるもののなかでも外界のデータを取り入れて柔軟に対応することのできるものに、活用されています。
さて、この記事で紹介されている内容のなかでも「これはいい!」と思ったものは2つありました。
一つは、「機械学習」と「プログラミング」の共通点と違いから「機械学習」をよりよく説明ができそうな気がしたこと
そして2つ目は、「データサイエンス」と言われる分野を鳥瞰する図から、どのようなアプローチが必要なのか考えさせられたこと
以上の二つでした。
機械学習とプログラミングの共通点と違い
機械学習もプログラミングも、同様にして複雑な問題を解決するための手段です。例えば自動運転を例に取り上げてみましょう。
上の画像の地図上を自動運転をするときに、プログラミングからアプローチをするならば、
直進し、突き当たったら右・左の順にステアリングを切り、
十字路で左へ。
突きあたりを左に行く。
十字路を右へ。
T字路を右へ。
突き当りを左へ。
円周に沿ってまっすぐ。
というふうに、若干荒いですが、上のような法が考えられます。
これは、どういうことかというと、プログラミングのアプローチは、それぞれの手順をコンピュータが理解することのできるように言語化して、実行する。ということです。
しかし、これでは決まった道は走れるものの、未知の出来事に対応して道を走ることができません。例えば、急に飛び出されたり、前の車との車間距離を維持したりなど、現実の場面を考えると、道順通り行く以外にも細かい調整が必要となります。
機械学習のアプローチはこのような未知の出来事に対応するために柔軟に対応することができます。
例えば、過去何千時間の運転の映像を使って、「障害物」を視覚的に検知することができる仕組みを作ります。そうすれば、未知の場面で仮に「人影」が目の前に現れた時、車を停車させることができます。
機械学習からのアプローチでは、こういったようにデータを学習させ、機械が方法を発見し、実行するのです。
それを端的に表した図が下記の記事に書かれていた図です。
(記事より引用)
左が伝統的なプログラミング。これはプログラムにデータを入れれば、結果が自ずと出てくるというものです。
しかし右が機械学習です。これは、データとその成果を利用して、機械にプログラムを発見させます。それによってプログラムを書かずとも機械が判断をすることができるのです。
データサイエンスの鳥瞰図
データサイエンティストが云々という話が世の中では流行っています。しかし、実際にかれらは数学的処理や統計だけをしていれば良い存在なのでしょうか?有名なのはTJOさんの記事だったりしますが、この記事にも面白い図が掲載されていたのでこちらに紹介したいと思います。その図はこちらです。
(記事より引用)
下の黄色い円が「専門領域の知識」
左の赤い円が「コンピュータサイエンス」
右の青い円が「数学・統計学」
です。
それぞれの重なりの領域に、
「専門領域の知識」と「数学・統計学」であれば「伝統的な科学研究」
「専門領域の知識」と「コンピュータサイエンス」であれば「ソフトウェア開発」
「コンピュータサイエンス」と「数学・統計学」であれば「機械学習」
そしてそれら全てを含む領域が「ユニコーン」つまり、「突き抜けた存在」というふうに描かれています。
「ユニコーン」になるのはなかなか難しいのですが、一人でなるのではなく、チームをつくってやっていけば実現できるはずです。
この記事の最後はこのように締めくくられています。
ソフトウェア開発者もエンジニアも機械学習エンジニアも、いずれも替えの効かない仕事である。(それ故にコラボレーションが重要なのだ)