【Deep Learning お勉強 #2】パーセプトロンを実装してみよう
はじめに
この記事はパーセプトロンを実際に簡単な例を使って実装してみようというもの。 パーセプトロン自体の説明は以下の記事を参照。
keita-matsushita.hatenablog.com
論理回路をパーセプトロンで表現する
以下のテーブルはANDゲートの真偽値表である。(x1 AND x2) => y
とみると、ANDゲートの場合、x1、x2が共に1の場合のみyが1となる。
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
よくif文で使う、両方とも真であれば式全体も真となるあれだ。 ANDゲートの他にもORゲート(どちらかが真であれば式全体も真)などがある。 これらのゲートはパーセプトロンを使って表現することができる。
パーセプトロンの簡単なおさらい
パーセプトロンとは、複数の入力値を受け取り、重みとバイアスを用いて乗算の総和が0を上回る時に発火し、ある値を出力するものだ。
パーセプトロンのモデルを使いANDゲートを表現する
ANDゲートは、二つの入力値(x1, x2)を受け取り、どちらとも1であれば1を出力するものだ。
普通の関数としてANDゲートを表現する場合であれば、引数としてx1, x2を受け取り、if文でそれぞれの引数が1かどうかを判定し、出力するようにしてあげれば良い。しかし、今はパーセプトロンのお話をしているので、パーセプトロンのモデルを当てはめて考える。パーセプトロンの計算方法はb + w1*x1 + w2*x2
であった。私たちが操作できるのは、重みとバイアスのみである。 よって、以下のように関数を定義できる。
上の関数で、ANDゲートを満たすように重みとバイアスを設定する必要がある。設定できる値は無限に存在するが、(w1, w2, b) = (0.5, 0.5, -0.7)
と設定した時にANDゲートの条件を満たし出力してくれる。
つまり、パーセプトロンによるANDゲートの表現は以下のようになる。
どうように、ORとNAND(ANDの否定)も同じようにパーセプトロンで表現することができる。
パーセプトロンはモデルは一緒、パラメータが異なる
上記の例AND, NAND, ORでは、どれも同じモデルである。異なるのは重みやバイアスの値だけある。
パーセプトロンの限界
パーセプトロンは、パラメータを変えることで様々な演算を表現することができた。しかし、単一のパーセプトロンでは表現できないものも存在する。
その例としてXORがある。XORは2つの入力が異なった時に真を出力するものだ。
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
XORは、重みやバイアスをどのように設定しても表現することができない。これはXORが持つ、非線形という性質によるものである。
線形と非線形
AND, NAND, ORをxy軸平面上に書き起こした時(ANDであれば、x=1, y=1の座標は真、x=0, y=1の座標は偽)に、真(1)となる領域と偽(0)となる領域は、直線で分ける事ができる。こういった領域を線形な領域と呼ぶ。
一方で、XORをxy平面上に書き起こしてみると、真と偽の境界は直線で分けることができない。その代わりに曲線であれば分けることができる。このような領域を非線形な領域と呼ぶ。
つまり、単一のパーセプトロンでは非線形な領域を表現することはできない。
多層パーセプトロンによって非線形な領域を表現する
実は、単一のパーセプトロンでは非線形な領域は表現することはできないが、パーセプトロンを層のように重ねることで非線形な領域でも表現することが可能である。
具体的には以下のような実装となる。
入力として受け取ったx1, x2をそれぞれNANDとORで処理させ、それぞれの処理結果として受け取った出力s1, s2と置き、s1とs2を入力としてANDに処理させる。これによって最終的な出力結果はXORのものとなる。
多層パーセプトロンの可能性
これまでの例で非線形のような複雑な処理もパーセプトロンを組み合わせることで実現することができた。実は、多層パーセプトロンを用いることで、コンピュータを作れるほどの複雑な処理も表現することが可能である。
最後に
これまでは、パーセプトロンについて学んできた。次の章では、ニューラルネットワークという単語が登場するらしい。パーセプトロンはニューラルネットワークの基礎となるらしいので、勉強を進めていきたいと思う。