読者です 読者をやめる 読者になる 読者になる

Itsukaraの日記

最新IT技術を勉強・実践中。最近はDeep Learningに注力。

「深層学習」の省略された数式を自分で確認しました

深層学習を最初から読み始めたのですが、省略してある数式の部分がよく分からなかったので、自分で計算して確認しました。

二値分類のロジスティック関数と微分、尤度、誤差関数と微分

1.1 ロジスティック関数(Sigmoid関数)
y= f\left(u\right)=\frac{1}{1+e^{-u}} (2.3.1)

1.2 ロジスティック関数の微分(uで微分した結果)
\frac{\partial f\left(u\right)}{\partial u}=f\left(u\right)\left(1-f\left(u\right)\right)=y\left(1-y\right) (2.3.2)

1.2.1 ロジスティック関数の微分式の確認
1.2.1.1 ロジスティック関数の微分式の左辺
\frac{\partial f\left(u\right)}{\partial u}=\frac{e^{-u}}{{\left(1+e^{-u}\right)}^2}  (2.3.2a)

1.2.1.1 ロジスティック関数の微分式の右辺
f\left(u\right)\left(1-f\left(u\right)\right)=\frac{1}{1+e^{-u}} \left(1-\frac{1}{1+e^{-u}}\right)=\frac{1}{1+e^{-u}}-\frac{1}{{\left(1+e^{-u}\right)}^2}
=\frac{\left(1+e^{-u}\right)-1}{{\left(1+e^{-u}\right)}^2}= \frac{e^{-u}}{{\left(1+e^{-u}\right)}^2} (2.3.2b)

1.3 尤度(データ\{(x_n, d_n)\}が得られる確率(w_{ji}をパラメータとして記載)
L\left(w_{ji}\right)= {\prod}_np\left(d_nx_n;w_{ji}\right)  (2.7.1a)
 = {\prod}_np{\left(d_n=1|x_n;w_{ji}\right)}^{d_n}p{\left(d_n=0|x_n;w_{ji}\right)}^{{1-d}_n} (2.7.1b)
= {\prod}_n{\left\{p\left(d_n=1|x_n;w_{ji}\right)\right\}}^{d_n}{\left\{1-p\left(d_n=1|x_n;w_{ji}\right)\right\}}^{1-d_n} (2.7.1c)
= {\prod}_n{\left\{y(x_n;w_{ji})\right\}}^{d_n}{\left\{1-y(x_n;w_{ji})\right\}}^{1-d_n}
 (2.7.1d)

1.4 誤差関数(尤度の対数をとり、符号を反転させた値。この値を最小化したい)
E\left(w_{ji}\right)= -{\sum}_n\left[d_n\log\left\{y\left(x_n;w_{ji}\right)\right\}+\left(1-d_n\right)\log\left\{1-y\left(x_n;w_{ji}\right)\right\} \right] (2.8)

1.5.1 誤差関数の微分(まず、u_j(x_n,d_n)をパラメータとして記載)
\frac{\partial E\left({x_n;u}_j\right)}{\partial u_j}=-\left[\frac{d_n}{y\left(x_n;u_j\right)}-\frac{1-d_n}{1-y\left(x_n;u_j\right)}\right]\left(\frac{\partial y\left(x_n;u_j\right)}{\partial u_j}\right) (2.8.1a)
 =-\left[\frac{d_n}{y\left(x_n;u_j\right)}-\frac{1-d_n}{1-y\left(x_n;u_j\right)}\right]\left(y\left(x_n;u_j\right)\left(1-y\left(x_n;u_j\right)\right)\right) (2.8.1b)
 =-\left[d_n(1-y\left(x_n;u_j\right))-\left(1-d_n\right)y\left(x_n;u_j\right)\right] (2.8.1c)
 ={y\left(x_n;u_j\right)-d}_n (2.8.1d)]
以上のように、誤差関数の微分は、非常に簡単な式になる(y-d_n)。

1.5.2 誤差関数の微分(w_{ji}をパラメータとして記載)
\frac{\partial E\left(x_n;w_{ji}\right)}{\partial w_{ji}}={\sum}_n\left[\frac{\partial E\left(x_n;u_n\right)}{\partial u_j}\frac{\partial u_j}{\partial w_{ji}}\right]  (2.8.2a)
={\sum}_n\left[\left({y\left(x_n;w_{ji}\right)-d}_n\right)z_i^{\left(L-1\right)}\right]  (2.8.2b)

多クラス分類のロジスティック関数と微分、尤度、誤差関数と微分

2.1 ロジスティック関数(Softmax関数)
y_k= z_k^{(L)}=\frac{exp(u_k^{\left(L\right)})}{{\sum}_jexp(u_j^{\left(L\right)})} (2.9)
k番目以外のユニットの出力を含めた式で、{\sum}_ky_k=1


2.2.1 ロジスティック関数の微分(u_k微分した結果)
\frac{{\partial y}_k}{\partial u_k}= y_k(1-y_k) (2.9.1)

2.2.1.1 ロジスティック関数の微分式の確認
まず、y_kを以下のように変形。
y_k= \frac{exp(u_k^{\left(L\right)})}{exp(u_k^{\left(L\right)})+{\sum}_{j\neq k}exp(u_j^{\left(L\right)})} (2.9.2a)
= \frac{1}{1 + \left\{\exp\left(-u_k^{\left(L\right)}\right){\sum}_{j\neq k}\left[\exp\left(u_j^{\left(L\right)}\right) \right]\right\}}
 (2.9.2b)

ここで、下記を満たすようにr_kを定義する。
exp(r_k)={\sum}_{j\neq k}exp(u_j^{\left(L\right)}) (2.9.2c)

すると、次のように指数部を纏めることができる。
y_k= \frac{1}{1 - exp({-(u}_k^{\left(L\right)}- r_k))} (2.9.2d)

r_ku_kに対して定数なので、次のsigmoid関数で表現できる。
y_k= sigmoid(u_k^{\left(L\right)}- r_k)  (2.9.2e)

sigmoidの性質から、上記をu_k微分すると下記が得られる。
\frac{{\partial y}_k}{\partial u_k}= y_k(1-y_k)  (2.9.2f)


2.2.2 ロジスティック関数の微分(l\neq kに対し、u_l微分した結果)
\frac{\partial y_k}{\partial u_l}=\frac{\partial}{\partial u_l} \frac{\exp\left(u_k^{\left(L\right)}\right)}{{\sum}_j\left\{\exp\left(u_j^{\left(L\right)}\right)\right\}}=- \frac{\exp\left(u_k^{\left(L\right)}\right)}{{\left[{\sum}_j\left\{\exp\left(u_j^{\left(L\right)}\right)\right\}\right]}^2}  \exp\left(u_l^{\left(L\right)}\right)
 (2.9.3a)
=- \frac{\exp\left(u_k^{\left(L\right)}\right)}{{\sum}_j\left\{\exp\left(u_j^{\left(L\right)}\right)\right\}}   \frac{\exp\left(u_l^{\left(L\right)}\right)}{{\sum}_j\left\{\exp\left(u_j^{\left(L\right)}\right)\right\}} ={-y}_ky_l (2.9.3b)


2.3 尤度(データ\{(x_n,d_n)\}が得られる確率。w_{ji}をパラメータとして記載)
L\left(w_{ji}\right)={\prod}_n\left\{p\left(d_nx_n;w_{ji}\right)\right\}={\prod}_n{\prod}_kp{\left(c_k|x_n\right)}^{d_{nk}}
 (2.10.1a)
={\prod}_n{\prod}_k{\left\{y_k\left(x_n;w_{ji}\right)\right\}}^{d_{nk}} (2.10.1b)

2.4 誤差関数(尤度の対数をとり、符号を反転させた値。この値を最小化したい)
E\left(w_{ji}\right)= -{\sum}_n{\sum}_kd_{nk}\log\left(y_k\left(x_n;w_{ji}\right)\right) (2.11)

2.5.1 誤差関数の微分(まず、u_j(x_n,d_n)をパラメータとして記載)
\frac{\partial E\left(x_n;u_j\right)}{\partial u_j}=-{\sum}_k\left[d_{nk}\frac{\partial \log\left (y_k(x_n;u_j)\right)}{\partial u_j}\right]  (2.11.1a)
 =-{\sum}_k\left[\frac{d_{nk}}{y_k}\frac{y_k}{\partial u_j}\right]  (2.11.1b) (以下、(x_n;u_j )の記載は省略)
=-\left[\frac{d_{nj}}{y_j}\left\{y_j\left(1-y_j\right)\right\} +{\sum}_{k\neq j}\left[\frac{d_{nk}}{y_k}\{-y_jy_k\}\right]\right]
 (2.11.1c) (2.9.2f、2.9.3より)
 =-\left[d_{nj}(1-y_j)-{\sum}_{k\neq j}d_{nk}y_j\right]   (2.11.1d)
=-\left[d_{nj}-{\sum}_kd_{nk}y_j\right] (2.11.1d)
=y_j{\sum}_kd_{nk}-d_{nj}
 (2.11.1f)
=y_j-d_{nj} (2.11.1g) ({\sum}_kd_{nk}=1より)
以上のように、誤差関数の微分は、非常に簡単な式になる(y_j-d_{nj})。

2.5.2 誤差関数の微分(w_{ji}(x_n,d_n)をパラメータとして記載)
\frac{\partial E\left({x_n;w}_{ji}\right)}{\partial w_{ji}}=\frac{\partial E\left(u_j\left(x_n;u_j\right)\right)}{\partial u_j}\frac{\partial u_j\left(x_n;u_j\right)}{\partial w_{ji}} (2.11.2a)
 =(y_j\left({x_n;w}_{ji}\right)-d_{nj})z_i^{\left(L-1\right)} (2.11.2b)

2.5.3 誤差関数の微分(w_{ji}をパラメータとして記載)
\frac{\partial E\left(w_{ji}\right)}{\partial w_{ji}}={\sum}_n\frac{\partial E\left({x_n;w}_{ji}\right)}{\partial w_{ji}}
 (2.11.3a)
 ={\sum}_n(y_j\left(x_n;w_{ji}\right)-d_{nj})z_i^{\left(L-1\right)} (2.11.3b)

感想

手で書いた式を入力するのは非常に疲れました。最初は、はてな記法でそのまま書こうとしたのですが、かなり疲れたので、下記の記事を参考にさせて頂き、少し楽ができました。ありがとうございました。