講談社機械学習プロフェッショナルシリーズ『深層学習』の学習 第4章 誤差逆伝播法

注意：『<a  href="https://www.amazon.co.jp/gp/product/4061529021/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4061529021&linkCode=as2&tag=aokikenichi-22">深層学習 (機械学習プロフェッショナルシリーズ)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&l=as2&o=9&a=4061529021" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />』
<a  href="https://www.amazon.co.jp/gp/product/4061529021/ref=as_li_qf_sp_asin_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4061529021&linkCode=as2&tag=aokikenichi-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4061529021&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&l=as2&o=9&a=4061529021" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
を読むにあたって、自分が読みたいな、こんな記事があったら参考になるな、という基準で書いております。私は機械学習も数学も専門家ではないので誤っている箇所も多々あるかと思いますが参考となると幸いです。


# 第4章 誤差逆伝播法
## 4.1 勾配計算の難しさ

* p42 の最初の式

pp13-14の(2.5a), (2.5b)とその下の式より。

## 4.2 2層ネットワークでの計算
* p43

```math
\begin{align}
\frac{\partial{\mathbf{y}}}{\partial{w_{ji}^{(3)}}}&=[\frac{dy_1}{dw_{ji}} ... \frac{dy_j}{dw_{ji}}, ..., \frac{dy_n}{dw_{ji}}]^\top \\
(4.3)より \\
&=[\frac{\Sigma_i{dw_{1i}^{(3)}z_i^{(2)}}}{dw_{ji}} ...  \frac{\Sigma_i{dw_{ji}^{(3)}z_i^{(2)}}}{dw_{ji}} ...  \frac{\Sigma_i{dw_{ni}^{(3)}z_i^{(2)}}}{dw_{ji}}]^\top\\
j以外の成分は微分で0になるから \\
&=[0 ... 0　z_i^{(2)}　0 ... 0]^\top \\
\end{align}
```

## 4.3 多層ネットワークへの一般化
* p48 図4.4

1. 順伝播。1つの学習を実行。
2. 出力層のデルタ（通常は1.の出力z_jと答えd_jの差）を求める。
3. 逆伝播。後の計算のためのデルタを式(4.12)で求める。
4. 式(4.13)で誤差関数E(w)の勾配∇E=∂E(w)/∂wを求める。

→4.で求めた∇Eを用いて式(3.3)で重みwを更新する。

## 4.4 勾配降下法の完全アルゴリズム

* p49の二値分類のδ

```math
\begin{align}
\delta^{(L)}&=\frac{\partial{E_n}}{\partial{u_j^{(L)}}} \\
式(2.8)より E_n&=-d\log{y}-(1-d)\log{(1-y)} だから\\
\delta^{(L)}&=\frac{\partial{[-d\log{y}-(1-d)\log{(1-y)}]}}{\partial{u_j^{(L)}}} \\
&=-\frac{d}{y}\frac{\mathrm{d}y}{\mathrm{d}u}-\frac{(1-d)}{(1-y)}(-\frac{\mathrm{d}y}{\mathrm{d}u})
\end{align}
```

* p49多クラス問題のE_n

```math
\begin{align}
式(2.11)より、E_n&=-\Sigma_{k=1}^K{d_k\log{y_k}} \\
また式(2.9)より、y_k&=\frac{\exp{(u_k^{(L)})}}{\Sigma_{j=1}^K{\exp{(u_j^{(L)})}}} \\
E_n&=-\Sigma_k{d_k\log(\frac{\exp{(u_k^{(L)})}}{\Sigma_j{\exp{(u_j^{(L)})}}})} \\
\delta_j^{(L)}&=\frac{\partial{E_n}}{\partial{u_j^{(L)}}} \\
&=\frac{\partial{}}{\partial{u_j^{(L)}}}(-\Sigma_k{d_k\log{y_k}}) \\
&=-\Sigma_k{d_k\frac{1}{y_k}\frac{\partial{y_k}}{\partial{u_j^{(L)}}}} \\
\frac{\partial{y_k}}{\partial{u_j^{(L)}}}&=\frac{\partial}{\partial{u_j^{(L)}}}\frac{\exp{(u_k^{(L)})}}{\Sigma_i{\exp{(u_i^{(L)})}}} \\
（ここかなり悩んだ、場合分けして分数の微分だね）\\
k=jのとき \\
&=\frac{\exp{(u_j^{(L)})}\Sigma_i{\exp{(u_i^{(L)})}}-\exp{(u_j^{(L)})}\exp{(u_j^{(L)})}}{[\Sigma_i{\exp{(u_i^{(L)})}}]^2} \\
&=y_j-y_j^2 \\
k\neq iのとき \\
&=\frac{-\exp{(u_k^{(L)})}\exp{(u_j^{(L)})}}{[\Sigma_i{\exp{(u_i^{(L)})}}]^2} \\
&=-y_ky_j \\
\delta_j^{(L)}&=-\Sigma_k{d_k\frac{1}{y_k}\frac{\partial{u_k}}{\partial{u_j^{(L)}}}} \\
&=-d_j\frac{1}{y_j}(y_j-y_j^2)-\Sigma_{k\neq j}{d_k\frac{1}{y_k}(-y_ky_j)} \\
&=-d_j(1-y_j)-\Sigma_{k\neq j}{d_k(-y_j)} \\
&=-d_j+d_jy_j+(\Sigma_k{d_ky_j}-d_jy_j) \\
&=\Sigma_k{d_ky_j}-d_j ここから最後の式に行けるはず。下記も同じ値なのだがテキストでは下記を経由している\\
&=\Sigma_k{d_k(y_j-d_j)} \\
ここで \Sigma_k{d_k}&=1 を用いた （c.f. p50）\\
\delta_j^{(L)}&=y_j-d_j \\
yeah!
\end{align}
```

### 4.4.2 順伝播と逆伝搬の行列計算
+ 直感的に行列だとどういう表現になるのかは[誤差逆伝播法における行列演算まとめ](http://qiita.com/haltaro/items/7639208417a751ad9bab)が分かりやすい。
+ 一つ一つの式展開がどうなるかについては[誤差逆伝播法をはじめからていねいに](http://qiita.com/43x2/items/50b55623c890564f1893)が詳しい。
    + 『深層学習』では誤差関数Eとしているが、ここの記事では損失関数Lとしている。両者は同じもの。

### 4.4.3 勾配の差分近似計算
特に無し。

## 4.5 勾配消失問題

特に無し。

⇒ 次は、[講談社機械学習プロフェッショナルシリーズ『深層学習』の学習 第5章 自己符号化器](http://qiita.com/aokikenichi/items/b48fbeefa99499e55fa3) へ