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

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

パーセプトロン

パーセプトロンとは、ローゼンブラットというアメリカの研究者によって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(オライリー・ジャパン)

まとめ(分類)

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

  • パーセプトロン
    • 単層かつ活性化関数がステップ関数
  • ニューラルネットワーク
    • 多層かつ活性化関数が非線形関数(シグモイド関数など)

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

  • 3つ以上のノードの層からなるパーセプトロン
  • ニューラルネットワーク(活性化関数に非線形関数を使用する)の一分類

参考

ゼロから作る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

パーセプトロンとニューラルネットワーク” に対して1件のコメントがあります。

  1. 通りすがり より:

    通りすがりに失礼します。コメントは削除していただいてかまいません。

    > 入力信号xnに重みxnをかけて、その総和を求めます。
    もしかして、重みはwnでしょうか。。

    1. 確認飛行物体 より:

      ご指摘ありがとうございます。
      重みwnに修正いたしました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です