ニューラルネットワークを理解する #2 「ニューラルネットワークの起源」

 今回はニューラルネットワークの起源である「パーセプトロン」についてみていきます。


その前にざっくり、ニューラルネットワークの理解に必要なのは以下の4項目です。


  1. パーセプトロン(人口ニューロン)
  2. 活性化関数
  3. 損失関数
  4. 勾配降下法

もちろん、ニューラルネットワークは奥が深く、深みに行くにつれもっと知識が必要ですが、基礎の理解にはこれだけで十分。

「パーセプトロン」とは?

1957年に開発されたアルゴリズムで、下の画像のように複数の入力を受け取って一つの結果を返すものです。
とてもシンプルですね。

パーセプトロンは入力を受け取ると、それに重みと呼ばれる設定された数値を掛け算して、それの総和が閾値を超えたら1,そうでなければ0を返すという至極シンプルなアルゴリズムです。

これなら中学生でも作れそうですね。
実例で見ていきましょう。

ANDゲートの実装

ANDゲートというのは2つの入力を受け取りどちらも真ならば真を返すというものです。
表を見たほうが早いですね。
 コンピュータが動作するために必要な論理回路です。

x1

x2

y

0

0

0

0

1

0

1

0

0

1

1

1


これをパーセプトロンで実装するにはどうしたらよいでしょう。
決めなければいけないのは重みと閾値です。

一つの答えは以下の通りです。
w1 = 0.5 (重み1)
w2 = 0.5 (重み2)
theta = 0.4 (閾値)

計算してみると確かにそうなっていることが分かります。

ニューラルネットワークではさらにバイアスというものが追加されます。

バイアスとは何か?

下の画像を見てもらうと分かりますが、一つbという入力が追加されていますね。
これがバイアスです。
少し式も変わっており、入力と重みの掛け算とバイアスの総和が0より大きければ1,そうでなければ0となっています。(本質的には前と一緒)



でもなぜバイアスなんて必要なんだと思ったそこのあなた良い質問です。(こういう先生いそう)
端的にいうとバイアスがあることでニューラルネットワークとしての表現力(モデルの応用力)が上がるからです。つまりよりいろいろなことを学習できるようになるということです!


以下は本当に興味がある人向けですが。
バイアスなしの式では入力が全て0の時は必ず出力も0になります。(0をかけてんだからそりゃそうじゃ)
そうなると、パーセプトロンの表現力は制限されてしまいます。(以下の画像をみよ)


左がバイアスなしで右がありです。
グラフの多様性が上がったことが分かりますね。

参考

ちなみにバイアスありのパーセプトロンでANDゲートを実装すると以下のような設定になります。

w1 = 1 (重み1)
w2 = 1 (重み2)
theta = -1 (閾値)

重みとバイアスにはどんな役割があるの?

パーセプトロンが理解できて来たと思います。
ではニューラルネットワークとして考えたときに、重みとバイアスにはどんな役割があるでしょうか。

  • 重み → 入力の重要性
  • バイアス → 一つのパーセプトロンの発火のしやすさ

ざっとこんな感じですね。
重みが大きくなれば、それに応じて総和も大きくなり1を返しやすくなります。(これを発火がしやすいと表現する)
バイアスが大きいと入力の総和が小さくても発火しやすくなります。
ニューラルネットワークではこの重みとバイアスがを決めていくのがモデルを作るということになります。

パーセプトロンを組み合わせると…

何となくお気づきでしょうが、パーセプトロンを組み合わせて作られたのがニューラルネットワークです。
この単純なアルゴリズムをつなげると飛躍的にモデルの表現力が広がり、画像認識やSiriのようなAIまでできてしまうんですね。
コンピュータが単純なANDやORゲートの組み合わせでいろいろなことができるみたいなものですね。

まとめ

  • パーセプトロンはニューラルネットワークの起源である
  • パーセプトロンは入力に重みをかけ、その総和にバイアスを足したものが0より大きければ1を返すアルゴリズム
  • 重み → 入力の重要性
  • バイアス → 一つのパーセプトロンの発火のしやすさ
  • パーセプトロンを組み合わせたものがニューラルネットワークである

今回はここまで。
次回は活性化関数というものを見ていきましょう。


コメント