Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

第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章 自己符号化器

aokikenichi
質問は気軽にコメント欄かTwitterへ Q&Aサイト https://teratail.com/users/aokikenichi こんな本を読んでいます https://booklog.jp/users/aokikenichi/ 技術系以外の記事はnoteへ https://note.com/aokikenichi
https://twitter.com/aokikenichi/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away