パーセプトロンの学習アルゴリズム(簡単な実装)

分類タスクの初歩的なアルゴリズムであるパーセプトロンアルゴリズムについて簡単にまとめてみようと思います。

パーセプトロン超概要

ラベル$ t = \pm 1$を持つデータを分類する(超)平面を見つける機械学習アルゴリズムの一つです。

例えば2次元のデータ(x, y座標で表されるようなデータですね)であれば、このデータを分類する直線を見つけ出すアルゴリズムです。

$n$次元の入力空間$ \boldsymbol{x}= (x_1, x_2, \cdots, x_n)$について、重みベクトルを$ \boldsymbol{w}$とすれば、この$n$次元空間における上のデータを分割するような超平面は以下の方程式で表すことができます($ \theta$はある実定数)。

\begin{align} f(x_1, x_2, \cdots x_n) = \boldsymbol{w}^{T} \boldsymbol{x} \\\ f(x_1, x_2, \cdots x_n) = \theta \end{align}

$ w_0 = - \theta$、$ x_0 = 1$とし、$(w_0, w_1, w_2, \cdots, w_n)$と$ (x_0, x_1, x_2, \cdots, x_n)$を改めて$ \boldsymbol{w}$, $ \boldsymbol{x}$とすれば、より簡潔に

\begin{align} f(\boldsymbol{x}) = \boldsymbol{w}^{T} \boldsymbol{x} \\\ f(\boldsymbol{x}) = 0 \end{align}

と表すことができます。

より具体的には、以下のルールでデータを分類します。

\begin{align} f(\boldsymbol{x}) > 0 & \Longrightarrow t = +1 \\ f(\boldsymbol{x}) < 0 & \Longrightarrow t = -1 \end{align}

重みベクトル$ \boldsymbol{w}$の更新

確率的勾配降下法というアルゴリズムに則って重みベクトル$ \boldsymbol{w}$を更新していきます(これも別記事でまとめようかな・・・)。

ある$ i$番目の訓練データ$ \boldsymbol{x}^{(i)}$について、対応する教師データを$ y^{(i)}$、その時の予測値を$ \hat{y}^{(i)}$とすると、重みは以下の式で更新する。

\begin{align} \boldsymbol{w}^{(new)} = \boldsymbol{w}^{(old)} + \xi ( y^{(i)} - \hat{y}^{(i)} ) \boldsymbol{x}^{(i)} \end{align}

ここで$ \xi$は学習率と呼ばれる定数であり、学習の際に決める定数である。

パーセプトロンの実装

オブジェクト指向らしく、クラスで実装したものがこちらです。

Perceptron Implementation

参考文献