ゼロから作るDeepLearning 第五章後半

画像

Affineレイヤ

Affine変換は行列の積で表される変換らしい。
画像をある方向に傾けたりサイズを変えたりするもの。

NNだと、普通の行列積の重みWの層に値する。

各元の層(入力、Hideen層など)の間に
このAffine+ReRUを入れる。

行列の微分

行列の微分は各成分ごとに行うと証明できる。

今回は本を参考に証明無しで導入した。

行列の誤差逆伝播法として注意すべき点は

元の行列$A$に対して、偏微分した結果(つまり$A$の各成分を少し変えるとどれくらい最終結果$L$に影響を与えるか?)は、必ず成分の次元、つまりndimが等しくなる。
そうしないと、微分の逆方向に動かして目的関数の値を修正できなくなる。

ソフトマックス+クロスエントロピーレイヤ

ソフトマックス関数は、出力値を最後に確率に落とし込むもの。
そして、クロスエントロピー関数は分類問題に使用するエラー関数で
ソフトマックス関数の結果のlogに、ラベルとの内積を取る。

ここで、ラベルはone-hot表現なので最終的な分類結果、つまり分類があっているかのエラー出力$L$は、$-log(y_k)$に等しいことに注意しよう。
(それ以外はすべて$0$)

NNの実装

NNの実装では、重み+バイアスを一つのレイヤとして置いてあげている。

つまり、元の層表現の中央の重み部分を新しくレイヤとして置いている。

そして、最後の出力層のあとに、ソフトクロスレイヤを置いているイメージ。

このようにレイヤ構成によって

  • forward
  • backward

をForで回して単純に値伝播を書くことができる。

NNの流れ

  1. モデルを作る
  2. データを流す
  3. データをソフトマックスで確率に落とし込む
  4. その確率とラベルの内積をとって、エラー$L$を求める。
  5. これを元に逆方向に伝播し、エラーにどれくらい影響を各成分が出すか?で重みやバイアスなどを修正する。
  6. 2~5をイテレータごとに繰り返す。
  7. エポックごとに、Printすると精度の変化とか見やすいね