多項分布と最尤法を用いたクロスエントロピー(cross entropy)誤差の導出

DeepLearningなどの手法で近年よく用いられるクロスエントロピー(cross entropy)誤差ですが、実は多項分布に対して最尤法を用いることで導出を行うことができます。当記事では導出の大枠と関連で出てくるソフトマックス関数に関して取りまとめを行いました。

「深層学習」の$2.4$節の「問題の定式化:出力層と損失関数の設計」を元に再構成や追記を行うことで作成を行いました。

前提の理解

ベルヌーイ分布

クロスエントロピー(cross entropy)の式の基本形はベルヌーイ分布の確率関数の積に対し、対数を取ることで導出することができる。よって、ベルヌーイ分布の確率関数の理解が重要になる。一方でベルヌーイ分布の式の形は一見少々難しく見えるので注意が必要である。

確率変数$X$が確率を表すパラメータ$p \in [0,1]$を用いたベルヌーイ分布$Bin(n=1,p)$に従うとき、$X=0, X=1$の確率$P(X=0|p), P(X=1|p)$はそれぞれ下記のように表すことができる。
$$
\large
\begin{align}
P(X=0|p) &= 1 – p \\
P(X=1|p) &= p
\end{align}
$$

上記の確率関数は$X=k, k=0,1$のように考えることで$1$つの式にまとめることができる。
$$
\large
\begin{align}
P(X=k|p) = p^{k} (1-p)^{1-k}, \quad k=0, 1
\end{align}
$$

上記の右辺に$k=1$を代入すると$p^{1} (1-p)^{1-1}=p$、$k=0$を代入すると$p^{0} (1-p)^{1-0}=1-p$がそれぞれ成立する。数式は一見難しく見えるが、$k$は$0$か$1$以外の値を取らないことに基づいて$p^{0}=1, (1-p)^{0}=1$が成立することを考えればシンプルに考えることができる。

多項分布

ベルヌーイ分布は確率変数が$2$値の場合を取り扱う確率分布だが、多項分布では確率変数が$K>2$の値を取りうる場合を取り扱う。一般的な多項分布は$2$項分布と同様に複数回の試行に基づいた確率を考えるが、ここではベルヌーイ分布に対応して$1$回の試行のみに関して考える。

多項分布$Mul(1,p_1,p_2,…,p_K)$の確率関数はベルヌーイ分布と同様に考えることで下記のように表すことができる。
$$
\large
\begin{align}
P(X=k|p_1,p_2,…,p_K) = \prod_{i=1}^{K} p_{i}^{d_i}, \quad k = 1, 2, …, K
\end{align}
$$

ここで上記の$d_i$は$i=k$のときに$d_i=1$、$i \neq k$のときに$d_i=0$となる変数である。ベルヌーイ分布と同様に$p_{i}^{0}=1, p_{i}^{1}=p_{i}$のように考えられることから、上記を元に$P(X=2|p_1,p_2,…,p_K) = p_{2}, P(X=5|p_1,p_2,…,p_K) = p_{5}$のようにそれぞれ考えることができる。$\displaystyle \prod$が出てくる分さらに難しく見えるが、ほとんどが$p_{i}^{0}=1$のようになることさえ把握しておけばシンプルに理解できる。

最尤法

下記などで詳しく取り扱った。
https://www.amazon.co.jp/dp/B08FYMTYBW/

・参考
問題演習:基本的な最尤法の流れ

導出の詳細

クロスエントロピー(cross entropy)の導出

$n$対のサンプル$(x_1,y_1), …, (x_n,y_n), \quad y_i \in \{1,2,…,K\}$に対し、$y_i=k$のとき$d_{ik}=1$、$y_i \neq k$のとき$d_{ik}=0$となるように$d_{ik}$を定める。

このとき同時確率関数$P(y_1,…,y_K|p_1,p_2,…,p_K)$は下記のように表すことができる。
$$
\large
\begin{align}
P(y_1,…,y_K|p_1,p_2,…,p_K) &= \prod_{i=1}^{n} P(y_i|p_1,p_2,…,p_K) \\
&= \prod_{i=1}^{n} \prod_{k=1}^{K} p_{k}^{d_{ik}}
\end{align}
$$

上記の同時確率関数はパラメータ$p_1,p_2,…,p_K$に関する尤度$L(p_1,p_2,…,p_K)$であると考えることができるので、$L(p_1,p_2,…,p_K)$は下記のように表される。
$$
\large
\begin{align}
L(p_1,p_2,…,p_K) &= P(y_1,…,y_K|p_1,p_2,…,p_K) \\
&= \prod_{i=1}^{n} \prod_{k=1}^{K} p_{k}^{d_{ik}}
\end{align}
$$

ここで上記において、GLMなどと同様に「$p_k$は$f_k(x_i|w)$のように$x_i$にパラメータを作用させて得られる」と考えると下記のように書き直すことができる。
$$
\large
\begin{align}
L(w) &= P(y_1,…,y_K|x_1,…,x_n,w) \\
&= \prod_{i=1}^{n} \prod_{k=1}^{K} f_k(x_i|w)^{d_{ik}}
\end{align}
$$

クロスエントロピー誤差$E(w)$は上記の対数を取り、「『尤度最大化』から『誤差関数の最小化』に変えるにあたってマイナスをかけることで導出できる。
$$
\large
\begin{align}
E(w) &= – \log{L(w)} \\
&= – \log \left[ \prod_{i=1}^{n} \prod_{k=1}^{K} f_k(x_i|w)^{d_{ik}} \right] \\
&= – \sum_{i=1}^{n} \sum_{k=1}^{K} d_{ik} \log{f_k(x_i|w)}
\end{align}
$$

ここで上記の$d_{ik}$は実測値の$y_1,…,y_n$から作成し、$f_k(x_i|w)$は$x_1,…,x_n$を用いて作成した予測値に対応することは抑えておくと良い。

ソフトマックス関数

前項で定義した$f_k(x_i|w)$は確率の予測値であるので、$0$から$1$の値を取るのが望ましい。この際にロジスティック回帰などのGLMではリンク関数を設定するが、DeepLearningでも同様のことを考える。

この際によく用いられるのがソフトマックス関数(softmax function)であり、各出力層の値を$u_k(x_i|w)$とするとき、$f_k(x_i|w)$は$u_k(x_i|w)$を用いて下記のように定義される。
$$
\large
\begin{align}
f_k(x_i|w) = \frac{\exp(u_k(x_i|w))}{\sum_{j=1}^{K} \exp(u_j(x_i|w))}
\end{align}
$$

参考

・深層学習