search
LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

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

注意:『深層学習 (機械学習プロフェッショナルシリーズ)

を読むにあたって、自分が読みたいな、こんな記事があったら参考になるな、という基準で書いております。私は機械学習も数学も専門家ではないので誤っている箇所も多々あるかと思いますが参考となると幸いです。

第4章 誤差逆伝播法

4.1 勾配計算の難しさ

  • p42 の最初の式

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

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

  • p43
\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の二値分類のδ
\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
\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 順伝播と逆伝搬の行列計算

4.4.3 勾配の差分近似計算

特に無し。

4.5 勾配消失問題

特に無し。

⇒ 次は、講談社機械学習プロフェッショナルシリーズ『深層学習』の学習 第5章 自己符号化器

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
What you can do with signing up
5