「ゼロから作るDeep Learning」を読みながらメモったことなど

 少し前から「ゼロから作るDeep Learning」を読んでいます。ですが読んだ端から忘れていってしまいます・・・。そこで、調べたことや納得したこと、考えていることなどをメモっていこうと思います。

 

 

 

 

 

重要な注意

 はじめに本記事をお読み頂くうえで重要な注意とお願いがございます。

 本記事の著者である私は、脳科学情報科学、プログラミングにおいて完全なる初心者です。そのため、本記事内容の信憑性・妥当性等は全く保証できません。私の勘違いや思い込みによって、「ゼロから作るDeep Learning」やその他ソースの内容が歪められている場合がございます。ですので、お読み頂く場合は常に批判的な立場を崩さず、決して本記事内容を鵜吞みにすることの無いようお願い申し上げます。

 

 

 

 

 

ニューロン

f:id:touchP:20181025160159p:plain

ニューロンは、「細胞体」「核」「軸索」「樹状突起」等で出来ているそうです。樹状突起は信号を受け取る機能を持ち(実際はそれだけではないらしい)、核でその信号がある “閾値” よりも大きいと判断すれば、軸索で信号を次のニューロンへ送るそうです。

 

f:id:touchP:20181025160200p:plain

シナプスでは軸索の終末から樹状突起へ情報伝達物質が放射されているそうです。情報伝達物質には、「興奮性物質」と「抑制性物質」の2種類があり、名前の通り、興奮性物質は受け取ったニューロンを活性化させ、抑制性物質は抑制します。また、各シナプスは一種類の物質のみを取り扱うそうです。

 

随分端折ってしまいまいましたが、この辺のことは シナプス - 脳科学辞典 を参考にしました。

 

 

 

ニューロンのモデル

ニューロンのモデルを作ります。

 

まず、はじめに描いたのニューロンの絵をもっと簡単に描きます。

f:id:touchP:20181025160201p:plain

これは「ゼロから作るDeep Learning」の計算グラフの章を参考にしました。

次に、信号の流れを考えます。

 

1.左のニューロンから信号が出て来る。

f:id:touchP:20181025160202p:plain

 

2.シナプスで情報が受け渡される。

f:id:touchP:20181025160203p:plain

 

3.樹状突起で情報が拾われる。

f:id:touchP:20181025160204p:plain

 

4.細胞体内に情報が集まる。

f:id:touchP:20181025160205p:plain

 

5.核でなんやかんやして次のニューロンに信号が出される。

f:id:touchP:20181025160206p:plain

 

なんやかんや

5-1.受け取った信号の大きさを見てどんな信号を出すか判断する。

f:id:touchP:20181025160208p:plain

 

5-2.発火する。

f:id:touchP:20181025160209p:plain

 

まとめ

ニューロンの働きを整理します。

f:id:touchP:20181025194753p:plain

 

ニューラルネット

信号を受け取るニューロンの数を増やして考えます。

3つのインプットから信号を受け取る2つのニューロン(下記ではNN(2,3)とする)の働きは、↓です。

f:id:touchP:20181025194754p:plain

前の書き方だと絵がごちゃごちゃしたので、簡略化しました。

 

ベクトルと行列の導入

ベクトルと行列を使えば式がすっきりします。

f:id:touchP:20181025194755p:plain

 

ベクトルと行列を使用したNN(2,3)の働きは↓です。すっきりしましたね。

f:id:touchP:20181025194756p:plain

すっきりした。ということにしましょう。

 

一般化

ニューロンの数をもっと増やしましょう。

インプットの数:J個、信号を受け取るニューロンの数:I個のニューラルネットNN(I,J)の働きは↓です。

f:id:touchP:20181025194757p:plain

成分の個数が増えただけで、式の見た目は変わりませんね。とてもすっきりです。

 

 

 

 

 

バイアスについて

 「ゼロから作るDeep Learning」で説明があるにも関わらず、本記事で言及していないものとして、「バイアス」があります。

 この「バイアス」はニューロンの核で使用される閾値を、数学的にニューロン外へ出したもののようです? 

 私にはこの操作の意味がどうも良く分かりませんでした。閾値は各ニューロンの個性ではないのでしょうか?それをニューロンの外に出す?確かに計算上は同等なのですが、どうもしっくりきません。

 こんなわけ(どんなわけ?)でして、本記事では閾値問題を棚上げし、すべてを活性化関数にぶち込むことにしました。

 Deep Learning開発の長い歴史の中で、閾値ではなくバイアスを使用することになったということは、私のやり方は何か問題があるのでしょう。ですので、このまま行けばその問題に直面し、バイアスを使用する理由が解るはずです(私に解るといいなぁ・・・)。その日を楽しみに頑張るとしましょう。

 というか、この記事を読んだ方でご存知の方おりましたら、どうか教えて頂けませんでしょうか。よろしくお願いいたします。

 

掛け算の順番について

 「ゼロから作るDeep Learning」と本記事で表記の異なるものとしてもう一つ、「掛け算の順番」があります。

 「ゼロから作るDeep Learning」では信号が伝わっていく順番通り左から要素を掛けていっている為、信号がどのように伝わって行くのかとても分かりやすいです。それにも関わらず本記事では逆順に掛け算を行っています。その理由は↓です。

 私事ですが、私は以前物理学を少し齧っておりました。物理学では系の状態を表すベクトルは縦ベクトルを使用することが多く、そのため状態を変化させる演算子(行列のようなもの)は左から掛けます。それに慣れ親しんでいたため、横ベクトルに右から行列を掛ける行為に非常な違和感を感じてしまうのです。

 つまり、本記事で掛け算の順番が逆な理由は私の趣味です。

 ここまで読んで頂いた方の中で初学者の方がいらっしゃいましたら、マネしない方が良いと思います。

 

 

 

 

最後に

 ここまで読んで頂きありがとうございます。

 高槻やよいちゃんを認識するAIを作りたくて勉強を始めたのですが、すでに2ヶ月近く経ちました。少しずつ理解していっているとはいえ、このペースでは完成はいつになるのやら。気が遠くなります。

 つぎは、活性化関数について書くつもりです。

 

 それと、内容とは全く関係ないですが、絵や式は万年筆で書いています。万年筆っていいですよね。しょうもないことを書いていても、なんだか学者さんになった気分になれます。皆さんも勉強するときには是非万年筆で! ついでに使用したインクはパイロットさんの色彩雫朝顔」です。書き出しの淡く控えめな青から、書き終わりのしっとりとして艶やかな群青へのグラデーション。正に朝顔のようで、ただ線を引くだけでもうっとりとできますよ。