ヒントにはループ有で最初は解くようにとありましたが、
私にはループ有りで解く方が難しいです。
理由ははっきりしていてループするとループシュミレーション取り出しを
しなければなりませんが、目指すべき形がわからないからです。
さらにgradは苦手分野でイメージがつきません。
なのでgradでループシュミレーション取り出しは私にとって最悪の組み合わせです。
先にループ無しで解いたのはそれが理由です。
先に解いたのでTheta1_gradとTheta2_gradの数字がわかっています。
ループ有ではこの数字に合うことを目指します。
一番わかっていない概念や構造を考えてみたいと思います。
ループ無しで書いた通り、
Theta1_grad = zeros(size(Theta1))
Theta2_grad = zeros(size(Theta2))
という最大のヒントのおかげで
Theta1_grad は25X401
Theta2_grad は10X26
と分かっています。
Theta2_grad は0-9で10通りの場合分けで、
1X26を10回取り出すというループかなと思いました↓
ですがTheta1_grad は25X401なので、何をどう逆立ちしても
ループして10個の取り出しは良い形が思いつきません。
10個での取り出しは断念した方がいいと思い、問題文を読みなおしました。
『for-loop for t =1:m』を見つけてフッと思いました。
mって普通datasetの数だよなぁ、m=length(y)でWeek2から毎回登場してるなぁ、
今回はmは5000だよなぁ、、、、
まさか、ループは1~5000!?
は5000セットあります!
こう考えると問題文の辻褄は合います。
Cost Functionのループは↓のイメージでした。
CostFunctionのときは5000X1の突き合わせを10回して5000X10でしたが、
Gradidentは1X10を5000回で5000X10かもしれません。
でもまだ謎があります。
①0-9の10通りのループはどうするのか?
②Theta1_grad は25X401をどうするのか?
③『Step 5 will divide the accumulated gradients by m』
累計されたgradientsをm(=5000)で割る
が謎です。
全く根拠ありませんが②③をひっくるめて
25X401のGradientsを5000通り計算して、5000で割るだと辻褄があいます。
delta_3は1X10になるべきです。(ループ無しでは5000X10)
なので横一列だけ取り出すようにプログラムするには↓になるはずです。
delta2は???です。
ループ無しでは5000X25だったので1X25でしょうか。。。
これだとmの1-5000のループは反映されていますが、
0-9の10通りのループが反映されていない気がします。
えいやっ!で気合でプログラミング書いてみました↓
2つのループなんで0-9の10通りのループの中にmの1-5000のループを
入れる構造で書いたんですが、、、
delta_3でひっかかりました。。。
一度立ち返ることにします。
ループ無しでは↓の構造でした。
ループ有り構造で1-5000のループの1つ1つは↓になります。
a3はループの1つ1つでも1X10ということに気づきました。
こんな感じになっていて、CostFunctionの時はK=1のときの差分、K=2のときの差分、
・・・となっていたので0-9の10通りのループをしたんですが、
Backpropagationでも必要なんだろうかと思いました。
FeedForwardとBackpropagationの関係を絵にしてみました↓
a3が1X10だからδ(3)も1X10でいいなと思いました。
同じ次元でないとふさわしくないと思いますので。
ちなみに絵に数式を足したのがこちらです。
a3が1X10だからδ(3)も1X10でいいなと思ったので、
yも1X10が良いなと思いました。
そうするとこの↑の式が成立して
0-9の10通りのループは処理していることになります。
そうすると1-5000のループだけでいいのではないかと思いました。
今回はここまでです。また次回頑張ります。