わかりやすい パターン認識
第3章 誤差評価に基づく学習
3.1 Widrow-Hoffの学習規則
「[2] 閉じた形の解(p.35)」を例題に当てはめて解いてみる。
例題は以前パーセプトロンの学習規則を使って試した、2.3節「パーセプトロンの学習規則」(p.18)で、特徴が1次元の6個のパターンを2クラスに分類する例。
添字が多くてイメージがわかないので、まずは展開して計算してみる。
学習パターン
学習パターン \(\mathbf{X}\)
$$ \mathbf{X} = \begin{bmatrix} \begin{pmatrix}1 & 1.2\end{pmatrix} \\ \begin{pmatrix}1 & 0.2\end{pmatrix} \\ \begin{pmatrix}1 & -0.2\end{pmatrix} \\ \begin{pmatrix}1 & -0.5\end{pmatrix} \\ \begin{pmatrix}1 & -1.0\end{pmatrix} \\ \begin{pmatrix}1 & -1.5\end{pmatrix} \end{bmatrix} $$
- 行ベクトルが各パターン(列の数はバイアスの分を加えるので、1+特徴次元数=2)で、行数はパターン数(=6)
教師マトリクス
教師マトリクス \(\mathbf{b}\)
$$ \mathbf{b} = \begin{bmatrix} \begin{pmatrix}1 & 0\end{pmatrix} \\ \begin{pmatrix}1 & 0\end{pmatrix} \\ \begin{pmatrix}1 & 0\end{pmatrix} \\ \begin{pmatrix}0 & 1\end{pmatrix} \\ \begin{pmatrix}0 & 1\end{pmatrix} \\ \begin{pmatrix}0 & 1\end{pmatrix} \end{bmatrix} $$
- 行ベクトルが各クラスでの教師信号で、行数はパターン数(=6)、列数はクラス数=2
- パターンがクラス\(i\)に属していれば列\(i\)が\(1\)、それ以外は\(0\)という教師信号
識別関数のウェイト
$$ \mathbf{W} = \begin{bmatrix} \begin{pmatrix} w_{10} \\ w_{11} \end{pmatrix} & \begin{pmatrix} w_{20} \\ w_{21} \end{pmatrix} \end{bmatrix} $$
- 求めるべき値
- 列ベクトルが各識別関数のウェイト(1+特徴次元数=2)で、列の数は分類したいクラスの数(=2)
識別関数のウェイトを閉じた形で求める
全クラス、全パターンの識別関数に対する教師信号との二乗誤差$J$を、各ウェイトベクトルで偏微分した値を0と置いて、最小解を求める。
$$ (\mathbf{X}^t \mathbf{X}) \mathbf{W} = \mathbf{X}^t \mathbf{b} \tag{3.21} $$
から計算:
$$ \begin{align*} \left\lparen \begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 1 \\ 1.2 & 0.2 & -0.2 & -0.5 & -1.0 & -1.5 \end{bmatrix} \begin{bmatrix} 1 & 1.2 \\ 1 & 0.2 \\ 1 & -0.2 \\ 1 & -0.5 \\ 1 & -1.0 \\ 1 & -1.5 \end{bmatrix} \right\rparen \mathbf{W} &= \begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 1 \\ 1.2 & 0.2 & -0.2 & -0.5 & -1.0 & -1.5 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 1 & 0 \\ 1 & 0 \\ 0 & 1 \\ 0 & 1 \\ 0 & 1 \end{bmatrix} \\ \begin{bmatrix} 6 & -1.8 \\ -1.8 & 5.02 \end{bmatrix} \mathbf{W} &= \begin{bmatrix} 3 & 3 \\ 1.2 & -3 \end{bmatrix} \\ \therefore \mathbf{W} &= \begin{bmatrix} 0.640625 & 0.359375 \\ 0.46875 & -0.46875 \end{bmatrix} \end{align*} $$
これによって
$$ \begin{align*} (w_{10} - w_{20}) \cdot 1 + (w_{11} - w_{21}) x &= 0 \\ (0.640625 - 0.359375) + (0.46875 + 0.46875) x &= 0 \\ \therefore x &= -0.3 \end{align*} $$
となり、\(x3=-0.2\) と \(x4=-0.5\) との間で識別する値が学習できている。
コード
PythonのNumPyを使って、プログラムで計算してみる:
learn_error_close.py
# coding: UTF-8 |