多クラスロジスティック回帰(理論編)

##モデル
- 特徴量ベクトル$x=[x_1,x_2,..,x_m]$から、多クラス分類を行うロジスティック回帰を考える。
- ロジスティック回帰の出力がc個に分類される場合を想定すると、以下のモデルになる。

```math
z_{1×c} = W_{1×m}x_{m×c}+b_{1×c}\\
\phi_{1×c} = f(z_{1×c})\\
L = g(\phi)
```
- W : 重み
- b : 閾値
- f : 活性化関数
- g : 損失関数
- L : 損失値
- 多クラス分類の場合は、活性化関数にソフトマックス関数、損失関数に交差エントロピーを用いる。

##OneHotベクトル
- 多クラス分類では、教師データとしてOneHotベクトルをつ使います。
- One Hot ベクトル(One Hot Vector , One-of-K表記法)は、ベクトルの全要素のうち一つだけ1で他は0になっているベクトルをさします。
- 多クラス分類で正解データをクラスで表現するときに、
- 犬は(1, 0, 0)、猫は(0, 1, 0)、猿は(0, 0, 1)で表現します.
- この表現方法をOne Hot ベクトルまたはOne-of-K表記法と呼びます.
- クラスの数とベクトル要素の数が一致します.

##ソフトマックス関数
- ソフトマックス関数の入力を$z=[z_1,z_2,..,z_c]$,出力を$\phi = [\varphi_1, .., \varphi_c]$とした時、ソフトマックス関数は以下のように定義されます。

```math
\displaystyle
 \left[\varphi_1,\cdots,\varphi_c \right]  = \frac{1}{\displaystyle \sum_{i=1}^{c} e^{z_i}} \left[e^{z_1},\cdots,e^{z_c} \right]
```
- このソフトマックス関数の出力は正規化されており、$\varphi_i$はクラスラベルがiである確率を表しています。
- 例えば、クラス数が3の場合、ソフトマックスの出力が[0.1,0.1,0.9]とすると、これが意味することは、クラスラベル1の確率が10%、クラスラベル2の確率が10%,クラスラベル3の確率が90%であることを意味します。
- 教師データのワンホット表現も同様に考えることができます。
- 例えば [1, 0,⋯, 0] という教師データがあったときは、クラスラベルが1である確率が100%で、その他のクラスラベルについては0%という意味です。

##ソフトマックス関数の微分
- $\phi_j$を$z_i$で微分する場合を考えます。

```math
A = \sum_{i=1}^c e^{z_i}
```
とおくと,

- $ j\neq i $の時

```math
\displaystyle
\begin{eqnarray*}
\frac{\partial \varphi_j}{\partial z_i}
&=& \frac{ - e^{z_j}e^{z_i}}{A^2} \\
&=& - \varphi_j \varphi_i
\end{eqnarray*}
```
- $j=i$の時

```math
\displaystyle
\begin{eqnarray*}
\frac{\partial \varphi_j}{\partial z_i}
&=& \frac{e^{z_i}A - e^{z_i}e^{z_i}}{A^2} \\
&=& \varphi_i(1 - \varphi_i)
\end{eqnarray*}
```
- クロネッカーのデルタ$\delta_{ij}$を使って一本の式に書くと、

```math
\displaystyle
\frac{\partial \varphi_j}{\partial z_i}
= \varphi_i(\delta_{ij} - \varphi_j)\\
\begin{align}
    where,~~
    \delta_{ij} =
    \begin{cases}
        1 & (i=j) \\
        0 & (i \neq j )
    \end{cases}
\end{align}
```
##交差エントロピー
- クラスラベルが$k$である教師データ$y_{k}$をOneHotベクトルで表すと、

```math
\displaystyle
\begin{eqnarray*}
\mathbf{y}_{k}
&=& \left[y_1,\cdots,~y_k,\cdots,~y_c\right] \\
&=& \left[~0~,\cdots,~\underset{k番目}{1},\cdots,~0\right]  \\
\end{eqnarray*}
```
- １つの特徴量ベクトル$\mathbf{x}$からそのクラスラベルの確率ベクトル$\phi=[\varphi_1,..,\varphi_c]$が与えられた時、クラスラベルが$k$である条件付確率は、

```math
\displaystyle
p(\mathbf{y}=\mathbf{y}_{k}|\phi) = \varphi_k
```
- $\mathbf{y}=[y_1,..,y_c]$を使って一般的に表すと、ベルヌーイ分布となる。

```math
\displaystyle
\begin{eqnarray*}
p\left(\mathbf{y}|\phi\right)
&=& \varphi_1^{y_1}\varphi_2^{y_2}\cdots\varphi_c^{y_c} \\
&=& \prod_{k=1}^{c}\varphi_k^{y_k}
\end{eqnarray*}
```

- さらに、尤度を計算するためにデータサンプルを追加します。上式にインデックスを追加してやります。

```math
\displaystyle
p\left(\mathbf{y}_i|\phi_i\right) =
\prod_{k=1}^{c}\varphi_{ik}^{y_{ik}}
```
- すると、尤度は、データサンプルを掛け合わせたものになるので

```math
\displaystyle
\begin{eqnarray*}
l
&=& \prod_{i=1}^{n}p\left(\mathbf{y}_i|\phi_i\right) \\
&=& \prod_{i=1}^{n}\prod_{k=1}^{c}\varphi_{ik}^{y_{ik}}
\end{eqnarray*}
```

-　尤度に対数をとって、-をかけたものを交差エントロピーと呼びます。(情報理論でエントロピーを学んでいる人は式の意味することがわかりますね。)損失関数は以下になります。

```math
\displaystyle
\begin{eqnarray*}
L
&=& -\log\left(l\right) \\
&=& -\log\left(\prod_{i=1}^{n}\prod_{k=1}^{c}\varphi_{ik}^{y_{ik}}\right) \\
&=& -\sum_{i=1}^{n}\sum_{k=1}^{c}y_{ik}\log\varphi_{ik}
\end{eqnarray*}
```
##上記の内容を用いて、まとめ
###特徴量行列
- 行は各データサンプル、列は各特徴量を表します

```math
\displaystyle
\mathbf{X}=
\left[
    \begin{array}{c}
        \mathbf{x}_1 \\
        \vdots \\
        \mathbf{x}_n \\
    \end{array}
\right]
=\left[
    \begin{array}{ccc}
        x_{11} & \cdots & x_{1m} \\
        \vdots & \ddots & \vdots \\
        x_{n1} & \cdots & x_{nm} \\
    \end{array}
\right] \\
```

```math
\displaystyle
\underset{(n \times c)}{
        \left[
            \begin{array}{ccc}
                z_{11} & \cdots & z_{1c} \\
                \vdots & \ddots & \vdots \\
                z_{nc} & \cdots & z_{nc} \\
            \end{array}
        \right]
    } =
\underset{(n \times m)}{
        \left[
            \begin{array}{ccc}
                x_{11} & \cdots & x_{1m} \\
                \vdots & \ddots & \vdots \\
                x_{n1} & \cdots & x_{nm} \\
            \end{array}
        \right]
    }
\underset{(m \times c)}{
    \left[
        \begin{array}{ccc}
            w_{11} & \cdots & x_{1c} \\
            \vdots & \ddots & \vdots \\
            w_{m1} & \cdots & x_{mc} \\
        \end{array}
    \right]
    }
+\underset{(1 \times c)}{
    \left[
        \begin{array}{ccc}
            b_{1} & \cdots & b_{c}
        \end{array}
    \right]
    }
```
###ソフトマックス関数の出力

```math
\displaystyle
\underset{(n \times c)}{
        \left[
            \begin{array}{ccc}
                \varphi_{11} & \cdots & \varphi_{1c} \\
                \vdots & \ddots & \vdots \\
                \varphi_{n1} & \cdots & \varphi_{nc} \\
            \end{array}
        \right]
    } =
\underset{(n \times c)}{
        \left[
            \begin{array}{ccc}
                \frac{e^{z_{11}}}{\sum_{k=1}^{c}e^{z_{1k}}} & \cdots & \frac{e^{z_{1c}}}{\sum_{k=1}^{c}e^{z_{1k}}} \\
                \vdots & \ddots & \vdots \\
                \frac{e^{z_{n1}}}{\sum_{k=1}^{c}e^{z_{nk}}} & \cdots & \frac{e^{z_{nc}}}{\sum_{k=1}^{c}e^{z_{nk}}} \\
            \end{array}
        \right]
    }
```
###損失関数の出力

```math
\displaystyle
\begin{eqnarray*}
\underset{(1 \times 1)}{L}
&=& g(\underset{(n \times c)}{\mathbf{\Phi}} ) \\
&=& -\underset{(1 \times n)}{
    \left[
        \begin{array}{c}
            1 & \cdots & 1
        \end{array}
    \right]
    }
\underset{(n \times 1)}{
    \left[
        \begin{array}{ccc}
            \sum_{k=1}^{c}y_{1k}\log\varphi_{1k} \\
            \vdots \\
            \sum_{k=1}^{c}y_{nk}\log\varphi_{nk}
        \end{array}
    \right]
    } \\
&=& -
\underset{(1 \times n)}{
    \left[
        \begin{array}{c}
            1 & \cdots & 1
        \end{array}
    \right]
    }
\underset{(n \times k)}{
    \left[
        \begin{array}{ccc}
            y_{11}\log\varphi_{11} & \cdots & y_{1c}\log\varphi_{1c} \\
            \vdots & \ddots & \vdots \\
            y_{n1}\log\varphi_{n1} & \cdots & y_{nc}\log\varphi_{nc}\\
        \end{array}
    \right]
    } 
    \underset{(k \times 1)}{
        \left[
            \begin{array}{ccc}
                1 \\
                \vdots\\
                1\\
            \end{array}
        \right]
        } \\
&=& -
\underset{(1 \times n)}{
    \left[
        \begin{array}{c}
            1 & \cdots & 1
        \end{array}
    \right]
    }
\left(
\underset{(n \times k)}{
    \left[
        \begin{array}{ccc}
            y_{11} & \cdots & y_{1c} \\
            \vdots & \ddots & \vdots \\
            y_{n1} & \cdots & y_{nc}\\
        \end{array}
    \right]
    }
\circ
\underset{(n \times k)}{
    \left[
        \begin{array}{ccc}
            \log\varphi_{11} & \cdots & \log\varphi_{1c} \\
            \vdots & \ddots & \vdots \\
            \log\varphi_{n1} & \cdots & \log\varphi_{nc}\\
        \end{array}
    \right]
    }
\right)
\underset{(k \times 1)}{
    \left[
        \begin{array}{ccc}
            1 \\
            \vdots\\
            1\\
        \end{array}
    \right]
    } \\
&=& -
\underset{(1 \times n)}{
    \left[
        \begin{array}{c}
            1 & \cdots & 1
        \end{array}
    \right]
    }
\left(
\underset{(n \times k)}{
    \mathbf{Y}
    }
\circ
\underset{(n \times k)}{
    \log\mathbf{\Phi}
    }
\right)
\underset{(k \times 1)}{
    \left[
        \begin{array}{ccc}
            1 \\
            \vdots\\
            1\\
        \end{array}
    \right]
    }
\end{eqnarray*}
```

###損失関数の重み微分

```math
\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{W}}
&=& -
\underset{(m \times c)}{
    \left[
        \begin{array}{ccc}
            \sum_{i=1}^{n}(y_{i1}-\varphi_{i1})x_{i1} & \cdots & \sum_{i=1}^{n}(y_{ic}-\varphi_{ic})x_{i1} \\
            \vdots & \ddots & \vdots \\
            \sum_{i=1}^{n}(y_{i1}-\varphi_{i1})x_{im} & \cdots & \sum_{i=1}^{n}(y_{ic}-\varphi_{ic})x_{im}
        \end{array}
    \right]
} \\
&=& -
\underset{(m \times n)}{
    \left[
        \begin{array}{ccc}
            x_{11} & \cdots & x_{n1} \\
            \vdots & \ddots & \vdots \\
            x_{1m} & \cdots & x_{nm}
        \end{array}
    \right]
}
\underset{(n \times c)}{
    \left[
        \begin{array}{ccc}
            y_{11}-\varphi_{11} & \cdots & y_{1c}-\varphi_{1c} \\
            \vdots & \ddots & \vdots \\
            y_{n1}-\varphi_{n1} & \cdots & y_{nc}-\varphi_{nc}
        \end{array}
    \right]
} \\
&=& -
\underset{(m \times n)}{
    \mathbf{X}^T
}
\left(
\underset{(n \times c)}{
    \mathbf{Y}
}
-
\underset{(n \times c)}{
    \mathbf{\Phi}
}
\right)
\end{eqnarray*}
```

```math
\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{b}}
&=& -
\underset{(1 \times c)}{
    \left[
        \begin{array}{ccc}
            \sum_{i=1}^{n}(y_{i1}-\varphi_{i1}) & \cdots & \sum_{i=1}^{n}(y_{ic}-\varphi_{ic}) \\
        \end{array}
    \right]
} \\
&=& -
\underset{(1 \times n)}{
    \left[
        \begin{array}{ccc}
            1 & \cdots & 1 \\
        \end{array}
    \right]
}
\underset{(n \times c)}{
    \left[
        \begin{array}{ccc}
            y_{11}-\varphi_{11} & \cdots & y_{1c}-\varphi_{1c} \\
            \vdots & \ddots & \vdots \\
            y_{n1}-\varphi_{n1} & \cdots & y_{nc}-\varphi_{nc}
        \end{array}
    \right]
} \\
&=& -
\underset{(1 \times n)}{
    \left[
        \begin{array}{ccc}
            1 & \cdots & 1 \\
        \end{array}
    \right]
}
\left(
\underset{(n \times c)}{
    \mathbf{Y}
}
-
\underset{(n \times c)}{
    \mathbf{\Phi}
}
\right)
\end{eqnarray*}
```
###重みの更新

```math
\mathbf{W}:=\mathbf{W}-\mu\frac{\partial L}{\partial \mathbf{W}}
```

```math
\mathbf{b}:=\mathbf{b}-\mu\frac{\partial L}{\partial \mathbf{b}}
```