課題にはなっていないんですが、他のデータでNeuralNetworkを
使いたいと思った時にとても重要になっているGradient Checkingを
深堀してみます。
の流れで取り組みます
VIDEO
概念と計算式と具体的なコードが触れられています。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
gradは微分だからgradは↑のような形でも取り出すことができる、
そしてそれは
Backpropagationのような理論から計算したgradと
ほぼ同じになるはずだから検算として使用できる、
と説明されていました。
この↑の絵の形でのgradの具体的な計算式が
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
でεの値はくらいが望ましいと説明されています。
ちなみに片側だけ変化分をとってくるのは推奨しないと説明されていました↓
具体的なプログラミングコードが↓です。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
これで確かにが計算できそうです。
ただ、これがBackpropagationのgradのTheta1_grad/Theta2_gradと
ほぼ同じということですが、同じ次元の25X401や10X26になるんだろうか?
と思いました。
しかし、これをみてわかりました。
Theta1 25X401とTheta2 10X26ですが、unrollで一直線にして
1つずつεずらしてgradを計算するということですね。
具体的にはTheta1は25X401で10,025、Theta210X26は260の2つを足して
10,285の1直線のθを作って、
10,285の1つずつεずらしてgradを計算していくことだと思います。
そうすると10,285のgradが計算されて、それをreshapeで25X401と10X26の形にして
Theta1_gradとTheta2_gradと突き合わせするということですね。
問題文
VIDEOと同じ説明が書かれています。
具体的なの計算は
computeNumericalGraident.mでされていると書かれてあります。
また、Gradinent Checkingは先ほど書いたような
Theta1は25X401で10,025、Theta210X26は260の2つを足して10,285全部について
ではなく部分を取り出して検証すると書いてあります。
実行上のTipでも全体で行うと計算負荷が大きくなるので
部分で行うことが勧められています。
プログラム全体/詳細
階層が深くマトリョーシカっぽく感じたので絵にしました↓
ピンクのCheckNNgradientsの中で
Backpropagationのgrad
Gradinent Checkingのgrad
を突き合わせする構造になってます。
今回はここまでです。次回は実行したり試行錯誤してプログラミングをみていきます。