Change before you have to.

androidアプリ開発、iosアプリ開発、rails、deep learning .etc.を使った社会実験。

無性に機械学習がしたくてdeep learningをアプリに実装してみた話①

本日はいつもと違ってアプリの開発方法が主題ではない話を書こうと思います。

 

まず、最も一般に認識されているニューラルネットワークと脳のメカニズムは根本から異なるということを述べておきます。

従来、前者は後者の構造の一部の特徴のみを用いて静的、もしくは動的なパターン認識を行っていると言えます。

もっと踏み込んで言うと、これまでニューラルネットワークでは表面的なパターン認識しかできなかったと言えます。

分かり易い例で言うと、人間のある動作を見て、ロボットがコップをこぼさないようにしていると認識しているか、ある一定の軌道を描くためにモータの出力トルクを時系列で真似するという事象は大きく異なります。

それを汎化能力の差と見るか、根本的な学習構造の差と見るか

 

最近(といっても半年以上前)、グーグルがdeepmindという人工知能テクノロジー企業を買収したことで話題になりました。

 

学生時代に小脳研究、社会人になってから銀行で金融工学系の研究職をしていた際、ニューラルネットワーク遺伝的アルゴリズムに関する業務に従事していたことがありました。

 

このニューラルネットワークとは

脳の中にあるニューロンと呼ばれる神経細胞を網の目上に張り巡らしたネットワークを模したものになります。

単純な三層構造のパーセプトロンと呼ばれる構造のものから

出力層のニューロンを入力層に接続して時系列学習が可能なリカレントニューラルネットワーク

最近話題のより多層構造からなるdeep neural network(DNN)と呼ばれるものまで

実に様々な形態が存在し、その学習方法も多種多様です。

 

単純なニューラルネットは普通、こういう入力(ベクトル)に対してはこういう出力(ベクトル)を出しなさい、というパターンを複数学習することができる、というものですが、

今回やりたいのは、例えばこれは人間ですという事実を教えないで、様々な写真に対して人間の画像を識別させる、というところをゴールに設定します。

これを延長させる(のは難しいですが)顔認証や物体識別も可能になると思っています。

 

専門用語で言うと、教師あり学習ではなく、強化学習を行います。

強化学習とは教師なし学習の一種で、簡単に言うとある種のアメとムチを使い分けて学習させることです。

子供を教育する時、間違えたら怒って、正解したら褒めるということを繰り返すと、

なんとなく善悪の判断がついて、習ってないけどこのパターンは恐らくこっちが正しいということが分かる、というようなイメージです。

つまりニューラルネットワークが自ら特徴を捉え、学んでない未知の出来事に対しても正しく反応することができるということです。

 

あと、どのような形態のニューラルネットワークを使うか、、ですが、

将来の拡張性を持たせるため、今話題のdeep learningの一種である

deep neural network(DNN)を採用したいのですが、

その前に簡単なニューラルネットワークを使おうと思います。


次回に続きます。