暇人日記

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

Coursera Machine Learning Week5 課題 2周目③ CostFunction

前回CostFunctionのVideoと問題文と課題の関係はまとめたので、

今回はCostFunctionのnnCostFunction.mに取り組んでいきます。

 

f:id:omoshiroamericanews:20200411104144p:plain

①問題文を読む

②プログラム全体ex4.mを読む

③プログラム詳細nnCostFunction.mを読む

の順に進めていきます。

 

1.1Visualizing the Data

1.2Model Representation

の2つはWeek4の課題と同じなので飛ばします。

 

f:id:omoshiroamericanews:20200411105209p:plain

赤枠がa3がoutputですよ、ということを確認してくれています。

 

青枠がCostfunctionで計算するのに、↓のように変換しなさいと言っていると思います。

f:id:omoshiroamericanews:20200410113130p:plain

少し気になったのは↓です。

f:id:omoshiroamericanews:20200411105454p:plain

y(5)と表記するとyの5番目のものを意味することになるはずですが、

ここではこの5は右下に置いてあるという意味ではないかと思います。

そして、このy5はyが5のとき(1や2や3や4や6や7や8や9や10でなく)を

意味しているから、f:id:omoshiroamericanews:20200411105708p:plainという表現になるのかなぁと思いました。

 

緑枠はXがどんなサイズでもKがいくつでもできるように計算式を

設定しなさいとあります。

 

次にヒントが載っています。

 

f:id:omoshiroamericanews:20200414104624p:plain

f:id:omoshiroamericanews:20200414105146p:plain

 

ヒントの1つ目は転置することです。

X(i,:)は取り出すと↓なり、1Xnになりますが、

f:id:omoshiroamericanews:20200414104706p:plain

f:id:omoshiroamericanews:20200414104728p:plain

転置してnX1で取り出すようにとなっています。

 

このヒントはおそらく予測値である

f:id:omoshiroamericanews:20200410113338p:plain

をこの形↓で表現することをイメージしている気がします。

 

f:id:omoshiroamericanews:20200416134835p:plain

 

Week4のOne VS Allの課題では↓だったんですが、↑の形で考えよ、ということかもしれません。

f:id:omoshiroamericanews:20200328172148p:plain



 

 

ヒントの2つ目はloopを使うことです。

loopを使う方法と使わない方法の2つで取り組んでみたいと思います。

私は1回目のときはloopを使わない方法で解きました。

なのでloopを使う方法で解くのは今回が初めてです。

1回目の時loopを使わなかったのは

ループシュミレーション取り出しがわかっていなくて避けたからです笑

 

f:id:omoshiroamericanews:20200414105216p:plain

うまくいけばCost、つまりJが0.287629になると書いてありますので、

この値が出ることをターゲットに取り組みます。

 

次にプログラム全体ex4.mを読みます。

 

1つ大きなヒントがあります。

 

f:id:omoshiroamericanews:20200416140214p:plain

input layerとhidden layerとnum_labels=output layerが設定されています。

これはWeek4と同じです。ということは

f:id:omoshiroamericanews:20200327223747p:plain

この↑の構造になります。
これをヒントの通り転置するのかもしれません。

 

あと書かれているのは、

まず最初にFeedForwardをすること、Jだけを取得すること、

Regularizedは後回しにすること、

Jを取得したら0.287629と一致するかどうか確認することとになります。

 

それではプログラム詳細nnCostFunction.mを読んでみます。

f:id:omoshiroamericanews:20200414105721p:plain

 nnCostFunction.mはnn_params, input_layer_size,hidden_layer_size,num_labels,X, y,lambdaを入力するとJとgradを計算してくれる関数となっています。

 

 nnCostFunction.mは4つの課題の答えになっているので↓

f:id:omoshiroamericanews:20200414110206p:plain

RegularizedしないJに不必要なものもnn_params, input_layer_size,hidden_layer_size,num_labels,X, y,lambda

の中にはあるはずです。

 

と思ったら,lambda以外は全て必要でした。しかし全てプログラム全体ex4.mで

設定されているのでやることはありません。

 

ただ、このnn_params, input_layer_size,hidden_layer_sizeが

VIDEOのUnrolling Parametersに関係しています。

 

 

f:id:omoshiroamericanews:20200418191420p:plain
ここでは点線のかかわりで薄く簡単なので飛ばしますが、

このVideoについては後日日記に書いてみたいと思います。

 

大事なことはこれ↓を変更すればlayerを変更できるはずということです。

 

input_layer_size = 400
hidden_layer_size = 25
num_labels = 10

 

これ↑が今回の設定値ですが、400を1000、25を100とかに変えたら

精度が97.5%(400と25のとき)より上がるかどうか興味があります。

その際はnn_paramsも変えないとだめですね。

 

プログラム詳細nnCostFunction.mの読み込みに戻ります。

この↓の部分がさっき書いてたparameterのunrolllingですね。

f:id:omoshiroamericanews:20200416141244p:plain

 

もう1つunrollの単語が見えます↓

f:id:omoshiroamericanews:20200416141411p:plain

しかし、これはさっきのパラメーターではなく、『parameter grad』つまり

gradをunrollせよとあります。

 

それを裏付けるように、一番下の我々が変更しない箇所に↓があります。

f:id:omoshiroamericanews:20200416141435p:plain

今取り組もうとしているCost Functionには関係ないのですが、

gradはTheta1_gradとTheta2_gradをunrollしたものと書いてあります。

 

これでプログラム詳細nnCostFunction.mも終了なので、

 

①問題文を読む

②プログラム全体ex4.mを読む

③プログラム詳細nnCostFunction.mを読む

 

を終えました。

 

問題に関係ないことも書いて混乱したので、

問題を解くことだけにフォーカスした大事なポイントは

 

①yをK=〇のときは、〇を1、〇以外は0と置き換える

f:id:omoshiroamericanews:20200410113130p:plain

②ヒント1つ目は転置でした。

 ただこれはPredictの話なのでCostFunctionには関係ないかもしれません。

f:id:omoshiroamericanews:20200416134835p:plain

③ヒント2つ目はループを使ううことでした。

 

今回はここまでです。次回はこの3つを意識しながら解いてみます!