サイトアイコン 知的好奇心

パーセプトロンとニューラルネットワーク

「パーセプトロン」と「ニューラルネットワーク」について、簡単に説明します。

パーセプトロン

パーセプトロンとは、ローゼンブラットというアメリカの研究者によって1957年に考案されたアルゴリズムです。

出典:ゼロから作るDeep Learning(オライリー・ジャパン)

単層のパーセプトロンは以下の図のようになります。

入力信号xnに重みwnをかけて、その総和を求めます。

求めた総和が閾値θ以下の場合yは0を出力し、閾値を超える場合yは1を出力します。

$$\begin{eqnarray}
y=\left\{ \begin{array}{ll}
0 & (w_{1}x_{1}+w_{2}x_{2} \leq θ) \\
1 & (w_{1}x_{1}+w_{2}x_{2} > θ) \\
\end{array} \right.
\end{eqnarray}$$

以下のように多層パーセプトロンを用いれば、より複雑な処理を行うことが出来ます。

なにが出来る?

パーセプトロンを用いると、ANDやORゲートなどの論理回路を表現することが出来ます。

2層のパーセプトロンを用いれば、XORゲートも表現できます。
(単層のパーセプトロンではXORゲートは表現できません)

ニューラルネットワーク

パーセプトロンとの違い

ニューロンのつながり方に関して言えば、前章で見たパーセプトロンと何ら変わりありません。

出典:ゼロから作るDeep Learning(オライリー・ジャパン)

ネットワークの見た目の構造に変わりはありませんが、以下のような違いがあります。

ニューラルネットワークでは、一般的に活性化関数に非線形関数を使用します。
非線形関数とは、例えば上記のステップ関数やシグモイド関数のような単純な1本の直線ではない関数のことです。

なぜ非線形関数を用いるのか?

層を増やすことの利点を生かすためです。

線形関数を用いた場合、層を重ねることの恩恵を得ることができません。

線形関数である h(x) = cx を活性化関数として、y(x) = h(h(h(x))) を行う計算を3層のネットワークに対応させて考えることにします。
この計算は、y(x) = c × c × c × x の掛け算を行いますが、同じことは y(x) = ax (ただし、a=c^3)の1回の掛け算で、つまり、隠れ層のないネットワークで表現できるのです。

出典:ゼロから作るDeep Learning(オライリー・ジャパン)

まとめ(分類)

一般的には以下のように分類されます。

また、「多層パーセプトロン」というと以下のようなものを指すようです。

参考

ゼロから作るDeep Learning

Pythonで学ぶディープラーニングの理論と実装(オライリー・ジャパン)

wikipedia:多層パーセプトロン

https://ja.wikipedia.org/wiki/%E5%A4%9A%E5%B1%A4%E3%83%91%E3%83%BC%E3%82%BB%E3%83%97%E3%83%88%E3%83%AD%E3%83%B3

モバイルバージョンを終了