end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

ソフトマックス関数による線形多項分類

前回までのエントリでは、二項分類(パーセプトロン)を扱っていましたが、 今回は、3種以上の分類を行う線形多項分類。

end0tknr.hateblo.jp

基本は、予測関数 f(x1,x2) で形成される平面を考える

今回の線形多項分類では、以下の予測関数 f(x1,x2) と x1, x2, f(x1,x2) により形成される平面を利用します。

 \displaystyle
f(x_1, x_2) = w_0 + w_1 \cdot x_1 + w_2 \cdot x_2

f:id:end0tknr:20170408153449p:plain

3種へ分類する場合、交差する3平面による交点を算出

今回の多項分類では3種に分類しますが、 この分類の為に、交差する3平面による交点を算出します。

f:id:end0tknr:20170408153455p:plain

 \displaystyle
f1(x1, x2) = w01 + w11 \cdot x1 + w21 \cdot x2

 \displaystyle
f2(x1, x2) = w02 + w12 \cdot x1 + w22 \cdot x2

 \displaystyle
f3(x1, x2) = w03 + w13 \cdot x1 + w23 \cdot x2

上記の3平面の交点は、次の連立方程式により求めることができます

 \begin{cases}
   f1(x1, x2) = f2(x1, x2) \\
   f2(x1, x2) = f3(x1, x2)
  \end{cases}

この連立方程式を行列で表すと、次の通り

 \displaystyle
M \cdot \left(
    \begin{array}{c}
      x1 \\
      x2
    \end{array}
  \right)
  = w

 \displaystyle
M = \left(
    \begin{array}{cc}
      w11 - w12 , w21 - w22 \\
      w12 - w13 , w22 - w23
    \end{array}
  \right)
 \displaystyle
w = \left(
    \begin{array}{c}
      w02 - w01 \\
      w03 - w02
    \end{array}
  \right)

よって、3平面の工程は、Mの逆行列により求まります

 \displaystyle
\underline{
\left(
    \begin{array}{c}
      x1 \\
      x2
    \end{array}
  \right)
= M^{-1} \cdot w }

f1(x1,x2), f2(x1,x2) , f3(x1,x2) をソフトマックスにより確率で表現

ある点(x1, x2)が、領域(1)~(3)に属する確率を、 P1(x1,x2), P2(x1,x2), P2(x1,x2) としたとき、 P1(x1,x2) + P2(x1,x2) + P2(x1,x2) = 1 が成立しますが、 これをソフトマックス関数で表すと、次のようになります。

 \displaystyle
Pi(x1,x2) = \frac{ e^{fi(x1,x2)} }{ \sum_{j=1}^{3} e^{fj(x1,x2)} }
   \displaystyle i=1, 2, 3

f:id:end0tknr:20170408153500p:plain

ソフトマックス関数からシグモイド関数を導出

先程のソフトマックス関数までで、線形多項分類の内容は、ほぼ完了ですが、 おまけでソフトマックス関数からシグモイド関数を導出します。

先程のソフトマックス関数において、j=2 のとき、i=1の式は次のようになります。

 \displaystyle
P1(x1,x2) = \frac{ e^{f1(x1,x2)} }{ e^{f1(x1,x2)} + e^{f2(x1,x2)} }

この分母分子を  \displaystyle e^{f1(x1,x2)} で割り、少々、変更すると シグモイド関数を導出できます。  \displaystyle
f1(x1,x2) = \frac{ 1 }{ 1 + e^{f2(x1,x2) - f1(x1,x2)} }

ソフトマックス関数の微分 (導関数)

もう一つおまけで、ソフトマックス関数の微分 (導関数)を記載しておきます。


\frac{dyi}{dxi} =
  \begin{cases}
   yi \cdot (1 - yi)  \leftarrow i=jの場合  \\
   - yi \cdot yj  \leftarrow i≠jの場合  \\
  \end{cases}

以前のエントリでシグモイド関数微分(導関数)の導出を行っていますので、 今回、ソフトマックス関数の微分の導出は記載しません。

end0tknr.hateblo.jp