暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week5 2周目⑩ Backpropagation ループ有り 前半

ヒントにはループ有で最初は解くようにとありましたが、

私にはループ有りで解く方が難しいです。

 

理由ははっきりしていてループするとループシュミレーション取り出しを

しなければなりませんが、目指すべき形がわからないからです。

さらにgradは苦手分野でイメージがつきません。

 

なのでgradでループシュミレーション取り出しは私にとって最悪の組み合わせです。

 

先にループ無しで解いたのはそれが理由です。

 

先に解いたのでTheta1_gradとTheta2_gradの数字がわかっています。

ループ有ではこの数字に合うことを目指します。

f:id:omoshiroamericanews:20200522114528p:plain



 一番わかっていない概念や構造を考えてみたいと思います。

 

ループ無しで書いた通り、

Theta1_grad = zeros(size(Theta1))
Theta2_grad = zeros(size(Theta2))

という最大のヒントのおかげで

Theta1_grad は25X401
Theta2_grad は10X26

と分かっています。

 

Theta2_grad は0-9で10通りの場合分けで、

1X26を10回取り出すというループかなと思いました↓

f:id:omoshiroamericanews:20200502232926p:plain

 

ですがTheta1_grad は25X401なので、何をどう逆立ちしても

ループして10個の取り出しは良い形が思いつきません。

 

10個での取り出しは断念した方がいいと思い、問題文を読みなおしました。

 

f:id:omoshiroamericanews:20200502233739p:plain

『for-loop for t =1:m』を見つけてフッと思いました。

mって普通datasetの数だよなぁ、m=length(y)でWeek2から毎回登場してるなぁ、

今回はmは5000だよなぁ、、、、

 

まさか、ループは1~5000!?

 

f:id:omoshiroamericanews:20200502234503p:plainは5000セットあります!

こう考えると問題文の辻褄は合います。



 

Cost Functionのループは↓のイメージでした。

f:id:omoshiroamericanews:20200502234121p:plain

 

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)

 

なので横一列だけ取り出すようにプログラムするには↓になるはずです。

f:id:omoshiroamericanews:20200502155525p:plain

 

delta2は???です。

ループ無しでは5000X25だったので1X25でしょうか。。。

これだとmの1-5000のループは反映されていますが、

0-9の10通りのループが反映されていない気がします。

 

えいやっ!で気合でプログラミング書いてみました↓

2つのループなんで0-9の10通りのループの中にmの1-5000のループを

入れる構造で書いたんですが、、、

f:id:omoshiroamericanews:20200522121206p:plain

delta_3でひっかかりました。。。

 

 

一度立ち返ることにします。

 

ループ無しでは↓の構造でした。

f:id:omoshiroamericanews:20200522121434p:plain

 

ループ有り構造で1-5000のループの1つ1つは↓になります。

 

f:id:omoshiroamericanews:20200522121539p:plain

 

a3はループの1つ1つでも1X10ということに気づきました。

 

f:id:omoshiroamericanews:20200522121914p:plain

こんな感じになっていて、CostFunctionの時はK=1のときの差分、K=2のときの差分、

・・・となっていたので0-9の10通りのループをしたんですが、

Backpropagationでも必要なんだろうかと思いました。

 

FeedForwardとBackpropagationの関係を絵にしてみました↓

f:id:omoshiroamericanews:20200522122332p:plain

a3が1X10だからδ(3)も1X10でいいなと思いました。

同じ次元でないとふさわしくないと思いますので。

 

ちなみに絵に数式を足したのがこちらです。

f:id:omoshiroamericanews:20200522122558p:plain

a3が1X10だからδ(3)も1X10でいいなと思ったので、

yも1X10が良いなと思いました。

 

f:id:omoshiroamericanews:20200522122753p:plain

そうするとこの↑の式が成立して

0-9の10通りのループは処理していることになります。

 

そうすると1-5000のループだけでいいのではないかと思いました。

 

今回はここまでです。また次回頑張ります。