IT社員3人組によるリレーブログ

某IT企業に勤める同期3人が、日常で思ったことを記録していきます (twitter: @go_mount_blog)

deeplearningの成り立ち~人間の脳の仕組みをコンピュータへ~

どうも、koheiです。

また・・・台風来てますね。みなさんお気をつけて

 

さて、今日は前回のdeep learningの記事に関連して、deeplearningを実現するためのベース技術であるニューラルネットワークについて書きたいと思います。

前回の記事はこちら

go-mount.hatenablog.com

 

f:id:go-mount:20180901224201j:plain

人間の脳の仕組みをコンピュータで作れないか

さて、みなさんは人間の脳って、思考したり、記憶したりできるのか

考えたことはあるでしょうか?

脳は数千億個の神経細胞で構成されています。

f:id:go-mount:20180901202719p:plain

神経細胞は、「樹状突起」で囲まれた部分と、細長い「軸索」という部分で構成され、軸索が他の神経細胞とつながっています。

複数ある樹状突起は、他の神経細胞から電気信号を受けます。そこで、それぞれの神経細胞が持つある一定の閾値を越えると活動電位が発生して、軸索を経由して他の神経細胞へと信号が伝わります。

f:id:go-mount:20180901202347p:plain

こうして無数にある神経細胞同士へ電気信号を伝えることで、情報伝達を実現しています。

 

人間の脳の仕組みを解明して、数式で表現できればコンピュータにも同じことができんじゃね?と考えたのがアメリカの研究者Frank Rosenblattさんです。

神経細胞の動きを、数式でモデル化してみる

神経細胞の仕組みをもう少しシンプルに表現してみます。f:id:go-mount:20180901204144p:plain

樹状突起とか書くの大変なんで○と→だけにしてみました。うーん、シンプル。

ここに電気信号の入力の値や、出力の値を追加してみます。

f:id:go-mount:20180901205218p:plain

上の神経細胞x1は特定の閾値を超えるとw1倍の値を伝え、下の神経細胞x2は特定の式地位を超えるとw2倍の値を伝えます。

結果入力はx1w1+x2w2になります。この値が閾値Θを超えると、電位が発生するとするとするということは下記の数式で表現できます。

f:id:go-mount:20180901205752p:plain

なんかそれっぽいのが作れました。

この時のw1, w2やΘの値を調整すれば、様々な入力x1, x2に対して1,0を出力する数式が作れます。

これで神経を真似た情報伝達ができるぞ!となったわけですが、こんな数式で何ができるんでしょう、と思ったあなた。これだけでもAIっぽいことができます。

例えば、入力x1に身長、x2に体重を入力して、男性なら1、女性なら0として考えれば、身長体重から男女を推定するAIの完成です。

 

f:id:go-mount:20180901211340p:plain

図で見てみると、オレンジ色の線より上か、下かで男性か女性か判別するわけです。ちょっと乱暴ですが、オレンジ色の線の最適な傾きや切片が分かれば、多少は正しく分類できそうです。

 

最適な傾きや切片をどう求めるの?については、ここで詳しくは書きませんが、そこは機械学習のキモ、正解データから学習させます。正解データになるべく近くなるようにw1, w2の値をあれこれ変化してみて、一番フィットする値を探します。

確率的勾配降下法といった方法がとられますが、この分野は最適化計算と呼ばれる分野になり、またそれもどこかで書ければと思います。)

 

こんなことをFrankさんは今から60年以上前の1957年に思いつき、翌年、論文に発表しています。deep learningの種はすでに、60年以上も前に誕生していました

さらに脳っぽくしてみる

さて、ここで一つの神経細胞を数式で表現してみましたが実際にはこれが数億個に重なり複雑に結びついています。なんかより脳に近いほうが賢そうなので、モデルも重なったverを考えてみます。

 

f:id:go-mount:20180901212946p:plain

 

とりあえず、入力、出力も三つくらい、あと何回か伝搬することを想定して、中間にも作ってみました。

この中間部分は、入力/出力に対してどんな値を持っているのか見えないので「隠れ層」と言われます。

さて、数式で表現してみると・・・と進めても良いですが、行列計算のオンパレードなのでここでは止めておきます。

 

さて、入力や出力が複数になった分、男女の2値分類以外にも、もう少し複雑な問題を扱えます。例えば、

 

f:id:go-mount:20180901215453p:plain

のように、気象データを入れて、各天候状態を推測するモデルも作れます。

 

このように複数の神経モデルを重ねたものがニューラルネットワークと呼ばれています。さらに、人間の脳に近づけてみましょうか

入力と中間層もさらに拡張させます。

f:id:go-mount:20180901220302p:plain

・・・すみません、→書くのが面倒になって少しさぼりましたが、なかなか矢印だらけで混沌としてきました。

ですが、多数の入力から多層の中間層を持ち、多数の出力を表現した神経モデルが表現できました。これがディープラーニングと呼ばれるモデルです。ディープラーニングニューラルネットワークの一部で、より多層なニューラルネットのことを表現することが多いです。

 

より多数の入力や出力を扱うことによって、より複雑な入出力を扱うことが得意と言われています。

例えば、入力に白黒画像の画素情報をinputし、出力にその画素の色値を出力するようなモデルを作れば、白黒の線画像から色のついた画像を作るモデルが作れそうです。

 

実際に白黒の線画に着色するサービスが出ています。

PaintsChainer -線画自動着色サービス-

 

また、ニューラルネットgoogleの開発したtensorflow)の入力数や、中間層の数を増やした時のモデルの動きを可視化しているサイトもありました。

層を増やした時のイメージがわかりやすく見えます。

playground.tensorflow.org

まとめ

さて、神経細胞の仕組みから、ディープラーニングのモデルまで話をしてきました。

実際にはこの複雑なニューラルネットの係数の最適値をいかに効率的に計算するのか、様々なアルゴリズムが検討され、日々モデルも進化しています。

また、一方でいかにdeep learningを簡単に使うか?も研究され、様々なライブラリが開発されています。

今後も大きく発展していく分野には違いないので、日々情報を追っていきたいと思います。

 

ではでは