Coursera Machine Learning Week5 課題 2周目③ CostFunction
前回CostFunctionのVideoと問題文と課題の関係はまとめたので、
今回はCostFunctionのnnCostFunction.mに取り組んでいきます。
①問題文を読む
②プログラム全体ex4.mを読む
③プログラム詳細nnCostFunction.mを読む
の順に進めていきます。
1.1Visualizing the Data
1.2Model Representation
の2つはWeek4の課題と同じなので飛ばします。
赤枠がa3がoutputですよ、ということを確認してくれています。
青枠がCostfunctionで計算するのに、↓のように変換しなさいと言っていると思います。
少し気になったのは↓です。
y(5)と表記するとyの5番目のものを意味することになるはずですが、
ここではこの5は右下に置いてあるという意味ではないかと思います。
そして、このy5はyが5のとき(1や2や3や4や6や7や8や9や10でなく)を
意味しているから、という表現になるのかなぁと思いました。
緑枠はXがどんなサイズでもKがいくつでもできるように計算式を
設定しなさいとあります。
次にヒントが載っています。
ヒントの1つ目は転置することです。
X(i,:)は取り出すと↓なり、1Xnになりますが、
転置してnX1で取り出すようにとなっています。
このヒントはおそらく予測値である
をこの形↓で表現することをイメージしている気がします。
Week4のOne VS Allの課題では↓だったんですが、↑の形で考えよ、ということかもしれません。
ヒントの2つ目はloopを使うことです。
loopを使う方法と使わない方法の2つで取り組んでみたいと思います。
私は1回目のときはloopを使わない方法で解きました。
なのでloopを使う方法で解くのは今回が初めてです。
1回目の時loopを使わなかったのは
ループシュミレーション取り出しがわかっていなくて避けたからです笑
うまくいけばCost、つまりJが0.287629になると書いてありますので、
この値が出ることをターゲットに取り組みます。
次にプログラム全体ex4.mを読みます。
1つ大きなヒントがあります。
input layerとhidden layerとnum_labels=output layerが設定されています。
これはWeek4と同じです。ということは
この↑の構造になります。
これをヒントの通り転置するのかもしれません。
あと書かれているのは、
まず最初にFeedForwardをすること、Jだけを取得すること、
Regularizedは後回しにすること、
Jを取得したら0.287629と一致するかどうか確認することとになります。
それではプログラム詳細nnCostFunction.mを読んでみます。
nnCostFunction.mはnn_params, input_layer_size,hidden_layer_size,num_labels,X, y,lambdaを入力するとJとgradを計算してくれる関数となっています。
nnCostFunction.mは4つの課題の答えになっているので↓
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に関係しています。
ここでは点線のかかわりで薄く簡単なので飛ばしますが、
この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ですね。
もう1つunrollの単語が見えます↓
しかし、これはさっきのパラメーターではなく、『parameter grad』つまり
gradをunrollせよとあります。
それを裏付けるように、一番下の我々が変更しない箇所に↓があります。
今取り組もうとしているCost Functionには関係ないのですが、
gradはTheta1_gradとTheta2_gradをunrollしたものと書いてあります。
これでプログラム詳細nnCostFunction.mも終了なので、
①問題文を読む
②プログラム全体ex4.mを読む
③プログラム詳細nnCostFunction.mを読む
を終えました。
問題に関係ないことも書いて混乱したので、
問題を解くことだけにフォーカスした大事なポイントは
①yをK=〇のときは、〇を1、〇以外は0と置き換える
②ヒント1つ目は転置でした。
ただこれはPredictの話なのでCostFunctionには関係ないかもしれません。
③ヒント2つ目はループを使ううことでした。
今回はここまでです。次回はこの3つを意識しながら解いてみます!