モデル
- 特徴量ベクトル$x=[x_1,x_2,..,x_m]$から、多クラス分類を行うロジスティック回帰を考える。
- ロジスティック回帰の出力がc個に分類される場合を想定すると、以下のモデルになる。
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]$とした時、ソフトマックス関数は以下のように定義されます。
\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$で微分する場合を考えます。
A = \sum_{i=1}^c e^{z_i}
とおくと,
- $ j\neq i $の時
\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$の時
\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}$を使って一本の式に書くと、
\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ベクトルで表すと、
\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*}
- 1つの特徴量ベクトル$\mathbf{x}$からそのクラスラベルの確率ベクトル$\phi=[\varphi_1,..,\varphi_c]$が与えられた時、クラスラベルが$k$である条件付確率は、
\displaystyle
p(\mathbf{y}=\mathbf{y}_{k}|\phi) = \varphi_k
- $\mathbf{y}=[y_1,..,y_c]$を使って一般的に表すと、ベルヌーイ分布となる。
\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*}
- さらに、尤度を計算するためにデータサンプルを追加します。上式にインデックスを追加してやります。
\displaystyle
p\left(\mathbf{y}_i|\phi_i\right) =
\prod_{k=1}^{c}\varphi_{ik}^{y_{ik}}
- すると、尤度は、データサンプルを掛け合わせたものになるので
\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*}
- 尤度に対数をとって、-をかけたものを交差エントロピーと呼びます。(情報理論でエントロピーを学んでいる人は式の意味することがわかりますね。)損失関数は以下になります。
\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*}
上記の内容を用いて、まとめ
特徴量行列
- 行は各データサンプル、列は各特徴量を表します
\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] \\
\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]
}
ソフトマックス関数の出力
\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]
}
損失関数の出力
\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*}
損失関数の重み微分
\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*}
\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*}
重みの更新
\mathbf{W}:=\mathbf{W}-\mu\frac{\partial L}{\partial \mathbf{W}}
\mathbf{b}:=\mathbf{b}-\mu\frac{\partial L}{\partial \mathbf{b}}