

【モヤモヤを晴らすための、AI補足の補足①】ニューラルネットワークと脳神経って何が似てるの?
ソリューション開発部の呉屋です。
前提知識の不足や、各領域の知識が関連づいていないことなどから発生する、AI学習中に陥りやすいモヤモヤを解消していこうというのが、この【モヤモヤを晴らすための、AI補足の補足】シリーズです。
主に現在学習中のAI初学者を対象としています。が、初級者や中級者の方々についても、言われてみるとよく理解できていないな、どういうことだろう?と改めてモヤモヤしていただいて(笑)、それをスッキリさせられたら嬉しいです。
G検定やE資格のテキストや問題に出てくる内容ではない、もう少し踏み込んだ理解をするための記事であるため、試験の点数が上がるわけではないし、AIモデルの精度を上げるテクニックに直結するものでもないので、役には立ちませんがスッキリはするかなと。それで、補足の補足というわけです。
今回の概要
ディープニューラルネットワークは脳神経をモデルにしたものと言われます。
見た目は確かに脳神経ネットワークに似ていると言えば似ていますが、それだけなのでしょうか?重みやバイアスや活性化関数は関係あるの?そんなモヤモヤする疑問を解消します。
ニューラルネットワーク
ニューラルネットワークで各層のノード間の計算式の例は下記です。
活性化関数をh(x)とした時、
y = h(w1x1 + w2x2 + b)
それぞれの要素は下記です。
- y:出力変数
- x1, x2 :入力変数
- w1, w2 :重み
- b:バイアス
活性化関数だの重みだのバイアスだのよくわからない単語が出てきてモヤモヤしますね。特に意味のわからない活性化関数をいったん取っ払うと下記計算式になります。
y = w1x1 + w2x2 + b
何となく見覚えがあるような式になりました。さらに親しみやすいよう、入力変数を1つ減らしつつ、wをaと書き換えてみましょう。
y = ax + b
中学校の数学で出てきた一次関数というやつですね。係数aが傾きでbが切片でした。
となると「y = h(w1x1 + w2x2 + b)」は、一次関数の変数が2つに増えたのと、一次関数の結果をさらに活性化関数に入れてるということですね。
ふーん、……で?これのどこが脳神経をモデルにしてるって?一次関数が脳に埋め込まれてるとでも言うの!?私はサイボーグなの?活性化関数だの重みだのバイアスだの、脳神経と関係なくない? 何なの!?とモヤモヤがMAXに達する感じ、共感してもらえますでしょうか?
ニューロン
ちょっと気を落ち着かせて(わけのわからない計算式から逃げて)、先に脳神経(ニューロン)の方を見てみましょう。
下の長い先が別のニューロンに繋がっていて、1つのニューロンが複数のニューロンと繋がっている構成になっています。
ニューロンとニューロンの間には、シナプスという隙間があります。
ニューロン1にインパルス(電気信号)が発生した場合、ニューロン2にすぐインパルスが発生(発火)するわけではなく、ニューロン1でインパルスが発生した際に神経伝達物質が出てニューロン2のレセプターに渡るのですが、それが一定量を超えた時にのみ、ニューロン2にインパルスが発生するという仕組みなのです。
閾値があるということですね。なお、ニューロン2は他の複数のニューロンからも神経伝達物質を受け取っており、その合算が閾値を超えた場合にインパルスが発生します。
反復学習すると、脳神経同士の繋がりが強化されて記憶が定着される…、そういった話を聞いたことがありますでしょうか。それは、専門用語ではシナプス強度と呼ばれ、シナプス強度が高いほど、そのニューロンからの神経伝達物質に敏感になります。
複雑ですが、まぁそういう仕組みなんだなぁ、ふーんという感じでしょうか。
パーセプトロン
このニューロンの何をモデル化してニューラルネットワークにしたのか、詳しく見ていきましょう。
ニューラルネットワークを構成しているのはパーセプトロンです。このパーセプトロンがニューロンを模していると言われます。
パーセプトロンは上記のように表現されます。θはシータと読みます。
…ちょっと待ってください。ブラウザ閉じないでください。数学っぽくて嫌い?よくわかります。私も嫌いです。後でθなんて追い出すのでしばらく我慢してください。
図の右側の「w1x1 + w2x2」見覚えありますね。これは入力変数x1に重みw1をかけたものと、入力変数x2に重みw2をかけたものの和です。
それが閾値θ以下なら出力yを0とし、閾値θより大きいなら出力yを1とする、というのが図の右の式の意味です。こういったある閾値を境に階段状に出力が変わる関数をステップ関数(階段関数)と呼びます。単純ですね。
あれ?閾値って言葉、少し前に出てきたような気が…。
パーセプトロンはニューロンの何をモデル化したのか
それではいよいよ、パーセプトロンとニューロンを対比してみましょう。
- 出力変数y:インパルスが発生(発火)するかどうか。0は発火しない。1は発火する。
- 入力変数x1, x2 :神経伝達物質の量。あるニューロンに繋がって来るニューロンは複数あるので入力変数も複数あり得る。
- 重みw1, w2 :シナプス強度。あるニューロンからの神経伝達物質への過敏度、ニューロン間の繋がりの強さ。
- 閾値θ:神経伝達物質がどの程度入力されたら発火するかの閾値。
- ステップ関数:閾値を超えるまでは発火しないさま。
何と綺麗に対比していますね。本にこれが書かれてくれていたら、モヤモヤせずに学習できるのになぁ。
いや~、一件落着。すっきりしましたね。
え?バイアスはどこに行ったんだって?活性化関数はどこに行ったんだって?θを追い出すんじゃなかったかって。
そうでした。そうでした。ではまずシータを左辺に移項しまして、


続いて、-θをθが嫌いなので-(マイナス)が気持ち悪いのでb(バイアス)に置き換えますと


w1x1 + w2x2 + bが0以下ならyは0、0より大きいならyは1という意味です。
実は、ステップ関数も活性化関数の一種でして、前に出てきた「y = h(w1x1 + w2x2 + b)」で、関数h(x)がステップ関数の場合、上の図の式になるのです。
活性化関数の活性化とは、ある閾値までは非活性(0)で、ある閾値を境に活性になる(値が大きくなる。発火する。)というような意味を持ちます。
というわけで、重みもバイアスも活性化関数も、全てちゃんとニューロンが元になっていたわけですね。スッキリしましたでしょうか?
次回、活性化関数をもっとスッキリ理解しよう、に続く(予定)。
弊社ソリューション開発部には分科会という、通常業務とは別に自分の好きな技術の学習・調査を業務としておこなえる分科会という活動があります。
AI分科会ではAIに興味がある有志を募り、現在は各々の興味に従ってAIの各領域を学習しています。
まだまだAI分科会メンバー募集中です!
元々AIに詳しいメンバーはおらず、全員基礎から勉強していますので経験が浅くても大丈夫です。
<参考にした有難い資料>