logo

パーセプトロンの定義 📂機械学習

パーセプトロンの定義

정의

線形関数 f(x)=wx+bf(x) = wx + b単位ステップ関数 HH合成パーセプトロンperceptronと定義する。

Perceptron:=Hf(x)=H(wx+b) \text{Perceptron} := H \circ f (x) = H(wx + b)

多変数関数の場合、f(x)=wx+b=w1x1+wnxn+bf(\mathbf{x}) = \mathbf{w}\cdot \mathbf{x} + b = w_{1}x_{1} + \cdots w_{n}x_{n} + bであり、

Perceptron:=Hf(x)=H(wx+b) \text{Perceptron} := H \circ f (\mathbf{x}) = H(\mathbf{w} \cdot \mathbf{x} + b)

特にこれを単層パーセプトロンsingle layer perceptronとも呼ぶ。

説明

パーセプトロンは1957年にローゼンブラットによって考案された最初の教師あり学習モデルだ。機械学習では、重みやバイアス、活性化関数などと入門者が理解しづらい説明をするが、ただの線形関数とステップ関数の合成にすぎない。重みは線形項の係数、バイアスは定数項を意味する。

ここで単位ステップ関数は便宜上の定義による。

H(x)={1x>00x<0orH(x)={1x>01x<0 H(x) = \begin{cases} 1 & x \gt 0 \\ 0 & x \lt 0\end{cases} \quad \text{or} \quad H(x) = \begin{cases} 1 & x \gt 0 \\ -1 & x \lt 0\end{cases}

また、HHの位置に単位ステップ関数が入る必要はなく、活性化関数として使われるものであれば問題ない。したがって、一般的に定義すると、パーセプトロンとは線形関数と活性化関数の合成である。

その値が00より大きいか小さいかによって分類されるので、基準となる場所を見つければいい。そのためには式を整理して、次のような結果を得る。

w1x1+w2x2+b=0    w2x2=w1x1b    x2=w1w2x1bw2 \begin{align*} && w_{1}x_{1} +w_{2}x_{2}+b &= 0 \\ \implies && w_{2}x_{2} &= -w_{1}x_{1}-b \\ \implies && x_{2} &= -\frac{w_{1}}{w_{2}}x_{1}-\frac{b}{w_{2}} \end{align*}

これは2次元平面での直線の方程式と同じだ。入力データがNN次元の場合は次のように表せる。

y^=φ([bw1wN]T[1x1xN])=φ(wTx) \begin{align*} \hat{y}&=\varphi \left( \begin{bmatrix} b & w_{1} & \dots &w_{N} \end{bmatrix} ^{T} \begin{bmatrix} 1& x_{1} & \dots & x_{N} \end{bmatrix} \right) \\ &= \varphi \left( \bf{w}^T \bf{x} \right) \end{align*} したがって、パーセプトロンの学習目標は、以下の図のように2種類のデータを区別できる線を引くことである。 1.PNG

すると、重みベクトルw\mathbf{w}は次の図のように表される。 3.PNG

この図のように、w\mathbf{w}とすべての青い点との角度が90度以内ならば内積の値が正であり、すべての緑の点との角度が90度より大きいので内積の値が負になる。したがって、こうした条件を満たすw\mathbf{w}は一意ではない。このように、パーセプトロンが以下の図1のようにデータを区別する線を描くことができる場合を線形分離可能という。 2.PNG

学習方法

学習方法は単純だ。nn番目の入力データx(n)\mathbf{x} (n)1-1で分類されるべきだが、結果がy^(n)=φ(wT(n)x(n))=1\hat{y}(n)=\varphi \left( \mathbf{w}^{T}(n)\mathbf{x}(n) \right)=1であったとしよう。これは現在の重みに対してwT(n)x(n)\mathbf{w}^{T}(n)\mathbf{x}(n)が正であることを意味し、パーセプトロンが正しく予測するにはwT(n)x(n)\mathbf{w}^{T}(n)\mathbf{x}(n)の値が負になる必要がある。したがって、wT(n)x(n)\mathbf{w}^T(n)\mathbf{x}(n)から何らかの値を引く形で更新すればいい。これを入力データx(n)\mathbf{x}(n)に依存させると、次のように重みの更新を表すことができる。 wT(n+1)x(n)=wT(n)x(n)ηxT(n)x(n)    w(n+1)=w(n)ηx(n) \begin{align*} && \mathbf{w}^T(n+1)\mathbf{x}(n) &=\mathbf{w}^T(n)\mathbf{x}(n)-\eta\mathbf{x}^T(n)\mathbf{x}(n) \\ \implies && \mathbf{w}(n+1) &= \mathbf{w}(n) -\eta \mathbf{x}(n) \end{align*} この時、η>0\eta>0は学習率と呼ばれる定数だ。同じ方法で、+1+1x\mathbf{x}1-1と予測した反対の場合は、次のように重みを更新すればいい。 w(n+1)=w(n)+ηx \mathbf{w}(n+1) = \mathbf{w}(n) +\eta \mathbf{x} この2つの場合を一度に表すことが次のようにできる。 w(n+1)=w(n)+ηy(n)x(n) \mathbf{w}(n+1) = \mathbf{w}(n) +\eta y(n) \mathbf{x}(n) この時、y(n)y(n)x(n)\mathbf{x}(n)のラベル(正解)だ。実際に、パーセプトロンが2次元、3次元データに対して学習する過程をGIFで見ると、次のようになる。

perceptron3.gif

perceptron3d10.gif


  1. Simon Haykin. (2009). Neural Network and Learning Machines(3rd Edition) –> ↩︎