交差エントロピー誤差
交差エントロピー誤差は正解ラベルの確率だけをみる。ほかはいっさい見ない。
正解ラベルの確率が最大になるように学習する。正解ラベル以外の確率がどんなかたちになっていようと学習にはいっさい関係ない(ゼロがかけられてゼロになる)。
正解ラベルの確率のlogをとってマイナスをつけたものが交差エントロピー誤差。
-log(正解ラベルの確率(0~1))。これはグラフをみればわかるが、0に近づくと急速に大きくなるし、0から離れると急速に小さくなる。1になると最小値の0をとる。
勾配降下法
勾配降下法は、微分してそちらほうこうに重みをアップデートするんだよねー、と抽象的にしか理解しておらず、具体的にどう実装するのかは理解していなかった。が、ようやく腑に落ちた。
勾配降下法は分解すると以下のような手順になる。
- 学習データを投入して予測を行い、損失を計算する
- 重みをすこしずらし、↑と同様に予測を行い損失を計算する
- 2から1を引き算し、ずらした分で割り算すると勾配になる
- 重みから学習率をかけた勾配を引き算したもので重みを更新する
- 以上を重みの数だけ繰り返す
- 以上をepochs数分、繰り返す
個人的に理解するためのポイントがふたつあって、ひとつは重みをずらす前とずらした後の2回予測を行うこと。教科書だと損失関数の勾配(微分)を引いて重みを更新することをひとつの式で説明されていてよくわからなかった。
ふたつめは重みの個数分、データを投入して勾配を計算して重みを各個撃破で更新していくこと。すべての重みを同時にずらすのではなく、ひとつずつ重みをずらして計算し更新していくのだ。
もうすこし詳しくメモっておくと、各行列W、バイアスのベクトルbの中身の要素ごとにべつべつに勾配を計算する。すべての要素からおなじ微少値動かしては正確な偏微分はできないはず。
以上が基本となるが、計算量が多いので実際には誤差逆伝搬法で計算するのだ。誤差逆伝搬法の基本となるのは微分の連鎖律。
誤差逆伝搬法
誤差逆伝搬法(バックプロパゲーション)のポイントをメモ。
- 大局的な微分(dL/dW)は伝搬してきた微分に局所的な微分をかければいい。
- 局所的な微分は、その層に入ってくる入力と等しい。
- つまり重みWの微分(勾配)は、上流の誤差(t-y)に入力をかけていくことで計算される。
- 損失関数をソフトマックス関数を通す前の値で微分すると、t-yとなる。最上流からt-yが流れていき、各重みの微分を計算していく。
- なにをいっているか自分以外にはわからないと思うが、自分の中では腑に落ちている。あとで整理して書きたい。
手順としては
- バッチデータを入力して各層の出力と最終的な出力を得る。
- 最上流の微分(=t-y)を計算する。
- N層(最終層)の重みの微分を計算する。それにはt-yにN-1層の出力を掛け算する。
- N層の出力をN-1層の出力で微分した値(=N層の重み)にt-yを掛け算したものを下流に流す。
- N-1層の重みの微分を計算する。それには流れてきた微分にN-2層の出力を掛け算する。
- 以下同様に1層まで繰り返す。
重みの微分が入力に等しいというのは式から明らかだけど、なんか直観的に理解しづらいなぁ。まぁ覚えてしまおう。