パーセプトロンと層の紹介

ニューラルネットワークを構成するパーセプトロンと層を紹介

本チュートリアルではニューラルネットワークで使うパーセプトロンと層について紹介します。パーセプトロンはニューラルネットワークの一種と考えることもありますが、本チュートリアルではニューラルネットワークを構成するユニット単位として考えます。

パーセプトロンについて

ニューラルネットワークはパーセプトロンという単位で構成されています。しかし、実はある人間の細胞を元にできました。その元となる細胞がニューロンという細胞です。

ニューロンとは我々の脳を構成する細胞単位のことであり、100億から1000億で構成されていると言われています。ニューロンを通じて情報伝達する際には、他のニューロンから電気信号を受け取り、ある一定の閾値を超えた場合に電気信号を出力します。

この特徴に注目し、McCullochら[1]らはパーセプトロンという数理モデルを提唱しました。パーセプトロンは外部から受け取った複数の信号に対して重み定数の関をとり、それらの総和を活性化関数に通したモデルです。活性化関数とは、入力に応じて活性度合いを出力する関数のことです。図で表現すると以下のようになります。

パーセプトロンの式を表すと以下のようになります。

\begin{split}\begin{array}{l} y=f(z)\\ z=w_1x_1+w_2x_2+w_3x_3+\dots+b \end{array}\end{split}

ニューロンの場合は、ある一定の閾値を超えた場合に電気信号を出力すると述べました。そのため、活性化関数として閾値関数(閾値超えた場合は1、超えない場合は0)を当初使用していました。

\begin{split}f(z)=\left\{ \begin{array}{l} 0 & (x \lt 0) \\ 1 & (x \geq 0) \end{array} \right.\end{split}
In [9]:
import numpy as np
import matplotlib.pyplot as plt

x=np.array([i/100 for i in range(-3000,3000)])
y=np.array(x>0)
plt.grid()
plt.plot(x,y)
plt.xlabel('input')
plt.ylabel('output')
plt.show()
../../../_images/notebooks_beginners_guide_perceptron_and_layers_notebook_1_0.png

しかし、閾値関数を使用すると、ネットワーク構成した時に重みの更新が難しくなるなど、計算上色々と不便を生じました。そこで、David E.と Hinton ら[2]は活性化関数として連続関数であるSigmoid関数を提案しました。

f(x) = \frac{1}{1 + \exp(-x)}
In [8]:
import renom as rm

x=np.array([i/100 for i in range(-3000,3000)])
y=rm.sigmoid(x)
plt.grid()
plt.plot(x,y)
plt.xlabel('input')
plt.ylabel('output')
plt.show()
../../../_images/notebooks_beginners_guide_perceptron_and_layers_notebook_3_0.png

Sigmoid関数は入力範囲を大きくした場合に閾値関数と似た関数が得られます。 Sigmoid 関数の登場により、[0,1]の間を出力(表現)することができるようになりました。また、ネットワーク構造した時に、重みの更新方法が容易化しました。

[0,1]の間を出力する連続関数が得られたことは非常に嬉しいことです。1パーセプトロンに対して0、1の分類問題しか対応できなかったが、間の値を表現することで回帰問題にも対応できるようになりました。また、これらのパーセプトロンを組み合わせることによって、複雑な形をした関数でも回帰することもできるようになりました。

現在、Sigmoid関数以外に様々な活性化関数は提案されています。しかし、いずれも0、1「以外」の表現(例:小数点等)ができる点では変わらないです。これらのパーセプトロンを組み合わせて複雑な回帰分析や分類問題を解くこともできます。

ちなみに人によって、ユニット、ノード、ニューロンという人もいます。人によって解釈の仕方は異なりますが、これらを同一として扱っても問題ないと我々は考えています。

層について

では「層」とは何か?パーセプトロンを一つの集合体としてまとめたものを「層」と言います。上記ではパーセプトロンで構成されていると記述したが、それは局所的にみた時の話であり、大局的に見ると層で構成されたモデルにも見えます。通常、ニューラルネットワークでフィードフォワードを計算する際には、入力を層ごとに通してから情報を出力します。層内ではパーセプトロン同士は接続せず、前後の層にあるパーセプトロンのみと接続します。

まとめ

ニューラルネットワークはパーセプトロンと層で構成されています。大局的には層で構成されているが、局所的に見ると層もパーセプトロンという単位で構成されています。パーセプトロンは、人間の脳にあるニューロン細胞を元にできたモデルであり、これらのパーセプトロンを層で束ねてネットワークを構成すると、実は複雑な回帰分析や分類問題を解くことができます。

ちなみに人によってパーセプトロンの解釈は異なりますが、MLP(多層型パーセプトロン)では複数のパーセプトロン同士が接続していることから、本チュートリアルでは「ニューロンをモデル化し、数理モデルに表現したもの」をパーセプトロンと考えています。

[1] McCulloch, Warren S., and Walter Pitts. "A logical calculus of the ideas immanent in nervous activity." The bulletin of mathematical biophysics 5.4 (1943): 115-133.

[2] Rumelhart, David E., Geoffrey E. Hinton, and Ronald J. Williams. "Learning representations by back-propagating errors." nature 323.6088 (1986): 533.