単純パーセプトロンとは
複数の入力$(1,x_1,x_2)$に対して、単一の出力$z$を与える仕組み。
アルゴリズムは以下のようになる。
\begin{cases}
u = w_1x_1 + w_2 x_2 + w_3 \\
z = f(u)
\end{cases}
$f(u)$は活性化関数と言って、非線形な関数である。
今回はステップ関数を用いる。
\begin{equation}
f(u)=
\begin{cases}
0 & \text{if} & u<0 \\
1 & \text{if} & u \geq0
\end{cases}
\end{equation}
視覚化してみる
今回はステップ関数にしたことで、二値分類の問題として使うことができる。
つまり、$0 = w_1x_1 + w_2x_2 + w_3$で表される直線の上下で各点を分類できることになる。
図1 |
---|
$0 = w_1x_1 + w_2x_2 + w_3$で紫が上側領域、緑が下側領域に分類された。 |
もちろん、初めからこのように分類できることは少ない。
最初は$w_1, w_2, w_3$の初期値を適当に決めて、学習させる必要がある。
学習方法
1であるはずが0の場合、
\begin{cases}
w_1 \leftarrow w_1+ ηw_1 \\
w_2 \leftarrow w_2+ ηw_2 \\
w_3 \leftarrow w_3+ ηw_3 \\
\end{cases}
このように傾きと切片を調整することで学習させることができる。調整に使う定数として学習効率$\eta$(イータ)を定める。
図示すると図2のようになる:
図2 |
---|
紫の点が正しく分類されるようになった。 |
なお、0であるはずが1の場合は
\begin{cases}
w_1 \leftarrow w_1- ηw_1 \\
w_2 \leftarrow w_2- ηw_2 \\
w_3 \leftarrow w_3- ηw_3 \\
\end{cases}
のように学習効率の符号が負になる。
課題とディープラーニングとの関係性
現状だと線形分離の問題しか扱えない。つまり、直線でしか分類することができない。
解決策としては以下が考えられる。
・多層パーセプトロン(MLP):隠れ層を追加することで、非線形問題にも対応する。
・活性化関数の改良:ステップ関数の代わりに、シグモイド関数やReLUを使用する
以上を応用すると、線形分離以外の問題も解けるようになる。
これに付随して、学習方法を改良すると今日ディープラーニングで使われるニューラルネットに繋がっていく。
単純パーセプトロン | Reluを用いた多層パーセプトロン |
---|---|
linear_model = LogisticRegression() |
mlp_model = MLPClassifier() |