3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

モデル

  • 特徴量ベクトル$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}}
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?