暇人日記

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

Week2の課題(家の値段)をNeural Networkで解いてみる-後半⑤-

前回までの試行と課題を振り返ります。

 

構造を↓のように設定してしました。

f:id:omoshiroamericanews:20200723211259p:plain

Linear Regression用にGradinent Checkingを整備しました。

Gradinent Checkingは正解でしたがfmincgで予測を行ったら

予測が合いませんでした。

 

大きな分岐点が2つありました。

1つ目はFeatureNormalizeでした。

f:id:omoshiroamericanews:20200723212225p:plain

この分岐ではFeatureNormalizeしない版ではtanh関数を使用している

Hidden Layerのa2が-1か1になってしまう問題が大きく見えたので、

FeatureNormalizeする方法を選びました。

 

2つ目はλです。

λを1の-12乗や0に調整して予測値の向上を図りました。

 

f:id:omoshiroamericanews:20200723212741p:plain

 

時々、予測が6桁になりますが安定しないという最大の問題に当たりました。

λ=0にすると、予測値とyの引き算の値が最小化する計算がされます。

が、これが誤差655憶と誤差28億との間をさまよいます。

 

誤差28憶の時は予測は6桁となり、予測値っぽいですが、

誤差655憶の時の予測はかけ離れた値になって精度が低すぎになります。

 

λ=0の場合は、右のRegularizedの項がなくなり

予測値-yを最小化する方向へいくはずなのになぜそうならないのか、

がわからずに困っている状況です。

 

λ=0の時に確率100%で予測値が6桁/誤差が28憶前後にできるように

トライ&エラーしたいと思います。

 

まず、ランダムで設定された初期パラメーターが同じだったら

fmincgは同じ結果を出してくれるかを検証してみようと思います。

 

ということで初期パラメーターと計算後の最適θを1計算結果することに

保存することにします。

 

そうすると、衝撃の事実が発覚しました!

 

f:id:omoshiroamericanews:20200723223111p:plain

なんと、1計算ごとの初期パラメーターと計算後の最適θを比較すると

同じだということが判明しました!

 

プログラミングの予測パート、つまりfmincg部分は

Week5やWeek5をWeek3で予測値を出した分と同じものからnum_labelsを

削除しただけのもの使っていたつもりだったので、

まさかこれがうまく作動していないとは思いませんでした。

 

f:id:omoshiroamericanews:20200723223955p:plain

 

↑の部分でnuml_labelsを削除していたのですが、ダメだったということになります。

 

念のため、

fmincg(costFunction, initial_nn_params, options)

だけ取り出して再計算させましたが動きませんでした。。。

 

fmincgをfminuncに変えてみようと思います。

 

 

問題文を読み進めます。

f:id:omoshiroamericanews:20200226214027p:plain

Week3の課題ではfminuncを使用しましたが、fmincgを使いなさいという指示が

出ました。 fmincgの方が多くのパラメーターを使う際にはfminuncより効率的だと

説明されています。

 

 

Coursera Machine Learning Week4 課題 2周目③ -苦闘記憶- One vsALL① - 暇人日記

 

昔、fmincgはfminuncより優れているということがCourseraの教材に

書かれていました。

 

が、Week2のLinear Regressionの課題をfmincgで解こうとしたときに

プログラミングがうまくいかないという課題に当たっています。

 

↓の実験の日記の時はfminuncを使っています。

www.courseradaisuki.com

 

↑の日記の主旨ぶれるので日記には書かなかったんですが、

fmincgを使うと動きませんでした。

漠とこのときにfmincgはLogistic Regression向きで

fminuncはLinear Regression向きなのかと思っていました。

 

なので、fmincgをfminuncに置き換えてみようと思いました。

 

f:id:omoshiroamericanews:20200723231904p:plain

 

初期パラメータ=initial_nn_paramsと計算後の最適θ=nn_paramsが

異なるので計算されることがわかります!

どうやらfmincgではなくfminuncの方が良いようです。

 

予測結果です。

1回目です。

f:id:omoshiroamericanews:20200723231710p:plain

f:id:omoshiroamericanews:20200723231739p:plain

fmincgがfminuncより優秀というのは正しいらしく

λ=0、MaxIter=40で1計算30分ほどかかります。

λ=0だとθがいかような値をとってもRegularizedCostの計算に関与しないので

overfit気味の線をかけるのではないかと思います。

 

MaxIterを調整したくなりますが、まずは5回計算して安定して

予測が6桁になるかどうか見てみます。

 

2回目です。

 

f:id:omoshiroamericanews:20200723233225p:plain

最適θは計算されていることが確認できました。

予測です。↓

f:id:omoshiroamericanews:20200723233243p:plain

f:id:omoshiroamericanews:20200723233258p:plain

うわ、でた。このパターンか、という感じです。。。

なぜこうなってしまうのだろう。。。

 

3回目です。

f:id:omoshiroamericanews:20200723234110p:plain

最適θは計算されています。

 

f:id:omoshiroamericanews:20200723234155p:plain

f:id:omoshiroamericanews:20200723234222p:plain

誤差が655憶です。

 

5回やる前ですが、課題は同じになりそうです。

つまり安定して予測が6桁にならない。

 

とはいえ、進展がありました。

①fmincgが最適θを計算していない

②fminuncは最適θを計算している、ただなぜか誤差655憶が最適と

 計算してくることがある。

 

①のなぞ解きをするか、②のfminuncのMaxIterとλを調整するか、

を追加検討したいと思います。

 

また次回頑張ります。