abstract
本ページでは, NNの起源となるアルゴリズム, パーセプトロン(Perceptron)についてまとめる.
参考資料:O'REILLY®「ゼロから作るDeep Learning ~Pythonで学ぶディープラーニングの理論と実装~」
Perceptron
参考資料上におけるパーセプトロンとは, 「人工ニューロン」「単純パーセプトロン」と呼ばれる類のもの. 基本的な処理内容は同じ.
↔ 多層パーセプトロン
パーセプトロンの動作原理
パーセプトロンの動作原理をモデル化すると, 以下の式で表される.
y =
\left\{
\begin{array}{cc}
0 & (w_{1}x_{1} + w_{2}x_{2} \leq \theta)\\
1 & (w_{1}x_{1} + w_{2}x_{2} > \theta)
\end{array}
\right.
ここで$w_{*}$は重み, $\theta_{*}$は閾値であり, 入力と重みの総和が閾値を超えたときのみ1を出力する. その状態をニューロンが発火すると表現される.
この式を一般化するため, $b = -\theta$と置くと, 上の式は以下の形に書き換えられる.
y =
\left\{
\begin{array}{cc}
0 & (b + w_{1}x_{1} + w_{2}x_{2} \leq 0)\\
1 & (b + w_{1}x_{1} + w_{2}x_{2} > 0)
\end{array}
\right.
上記式で置いた$b$をバイアスと呼ぶ. ここで重みとの違いをまとめる.
- weight(重み):入力信号の重要度をコントロールするパラメータ
- bias(バイアス):発火しやすさをコントロールするパラメータ
多層パーセプトロン
上記の式では線形領域を表現しており, 非線形領域を表現できない. しかし, パーセプトロンは層を重ねることができ, 非線形領域を表現することができる.
XORゲートの作成
上記の式だけではXORゲートは実装できない. そこで, 線形領域で表されるANDゲート, NANDゲート, ORゲートを使って実装する.
$x_{1}$, $x_{2}$と$y$に関する真理値表を書くと以下のようになる.
$x_{1}$ | $x_{2}$ | $y$ |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
上記の真理値表を表現すると以下の配線になる.
NANDゲートの出力を$s_{1}$, ORゲートの出力を$s_{2}$とすると以下のコードで実装される.
# NAND, OR, ANDは別のスクリプトで実装済み
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
この構造をパーセプトロンにより表記すると, 以下の形となる.
このように層を複数重ねたパーセプトロンを多層パーセプトロンと呼ぶ.
動作フローを詳しく説明する.
- 第0層の2つのニューロンが入力信号を受け取り, 第1層のニューロンへ信号を送る.
- 第1層のニューロンが第2層のニューロンへ信号を送り, 第2層目のニューロン$y$を出力する.
このように層を重ねることで, 複雑な処理を実装することができる.