問題に取り組んだ日記⑥を読み進めると問題は
となっていますので、この順に読み進めていきます。
課題プログラムとしてはsigmoidGradient.mとnnCostFunction.mを
解くことになります。
まず
2.1 Sigmoid Gradient
です。
これは前回のVideoの↓に
式がかいてあるので、ほぼそのままで正解になりました。
次に
2.2 Random Initialization
です。
ここはプログラミングに関しては既に与えられているので
やることはありません。
Video⑥Random Initializationでは
Linear RegressionやLogistic Regressionを解くときに
と設定していたが、今回はそう設定すると問題がある。
なぜ問題かといえば
となるからだ、と説明されています。
それではどうすればいいか、
これを使えば、
がもっとうまく解決できるかもしれません。
とはいえ、ここでは解く必要がないのでRandom Initializationは
とばします。
2.3 Backpropagation
いつもの通り、
①問題文の読み込み
②プログラム全体ex4.mの読み込み
③プログラム詳細 nnCostFunction.mの読み込み
の順に進めていきます。
①問題文の読み込み
問題文にはかなり詳細な解き方が書いてあります。
それをVideoで振り返った内容と対応表のようにしたのが↓です。
Videoといっていることはほとんど同じです。
ただ、問題文はloopで解くことを前提にしているのでyの場合分けに言及しています。
Videoでは分からなかったことに気づかせてくれたのが、↓の部分です。
前回の日記で↓と書きました。
*************************************************************
Dは大文字デルタの意味で小文字デルタΔの累積とあります。
**************************************************************
この問題文を読んだときにΔはθ1つ1つに対する微分でDはΔの合計かなと思いました。
だからmで割るのかなと。
問題文の読み込みは以上です。
②プログラム全体ex4.mの読み込み
本文です↓
驚くくらいあっさりしています笑
ここが本当にBackpropagationのパートかなと思うくらいです。
ただ、タイトルに『Part 7: Implement Backpropagation』と入っているので
ここで正解のはずです。
BackpropagationのプログラミングはnnCostFunctionに入力するはずですが、
それをこの箇所で実行しているようには見えません。
あるのはcheckNNGradientsの文字のみです。
checkNNGradientsは↓の通り、『Gradient Checking』の部分に相当するものです。
つまり、ex4.mの本文はBackpropagationで計算したものが合っているかどうか
Gradinent Checkingで確かめなさいという検算部分になっています。
実行するとこういうもの↓が表示されます。
左がnnCostFunctionからのgradで、右がCheckGradientNNからのgradだと思います。
右と左の数字が近くて、最後の『Relative Difference』が1e-9(=0.0000000001)
より小さければ 正解と書いてあると思います。
③プログラム詳細 nnCostFunction.mの読み込み
nnCostFunction.mはnn_params, input_layer_size,hidden_layer_size,num_labels,X, y,lambdaを入力するとJとgradを計算してくれる関数となっています。
JをCost Functionで計算したので今回はgradを計算するのが目的になります。
Theta1_grad = zeros(size(Theta1))
Theta2_grad = zeros(size(Theta2))
最大のヒントは↑だと思います。
Videoを振り返っても問題文を読んでもピンとこなかった
これがSizeがTheta1とTheta2と同じということが読み取れます!
そしてloopがおすすめというヒントがあります。
Cost Functionはループありとループ無しで行ったので、
今回のgradもループありとループ無しの両方のパターンにTryしてみたいと思います。
今回はここまでです。次回はBackpropagationに取り組みます!