前回までの試行と課題を振り返ります。
構造を↓のように設定してしました。
Linear Regression用にGradinent Checkingを整備しました。
Gradinent Checkingは正解でしたがfmincgで予測を行ったら
予測が合いませんでした。
大きな分岐点が2つありました。
1つ目はFeatureNormalizeでした。
この分岐ではFeatureNormalizeしない版ではtanh関数を使用している
Hidden Layerのa2が-1か1になってしまう問題が大きく見えたので、
FeatureNormalizeする方法を選びました。
2つ目はλです。
λを1の-12乗や0に調整して予測値の向上を図りました。
時々、予測が6桁になりますが安定しないという最大の問題に当たりました。
λ=0にすると、予測値とyの引き算の値が最小化する計算がされます。
が、これが誤差655憶と誤差28億との間をさまよいます。
誤差28憶の時は予測は6桁となり、予測値っぽいですが、
誤差655憶の時の予測はかけ離れた値になって精度が低すぎになります。
λ=0の場合は、右のRegularizedの項がなくなり
予測値-yを最小化する方向へいくはずなのになぜそうならないのか、
がわからずに困っている状況です。
λ=0の時に確率100%で予測値が6桁/誤差が28憶前後にできるように
トライ&エラーしたいと思います。
まず、ランダムで設定された初期パラメーターが同じだったら
fmincgは同じ結果を出してくれるかを検証してみようと思います。
ということで初期パラメーターと計算後の最適θを1計算結果することに
保存することにします。
そうすると、衝撃の事実が発覚しました!
なんと、1計算ごとの初期パラメーターと計算後の最適θを比較すると
同じだということが判明しました!
プログラミングの予測パート、つまりfmincg部分は
Week5やWeek5をWeek3で予測値を出した分と同じものからnum_labelsを
削除しただけのもの使っていたつもりだったので、
まさかこれがうまく作動していないとは思いませんでした。
↑の部分でnuml_labelsを削除していたのですが、ダメだったということになります。
念のため、
fmincg(costFunction, initial_nn_params, options)
だけ取り出して再計算させましたが動きませんでした。。。
fmincgをfminuncに変えてみようと思います。
問題文を読み進めます。
Week3の課題ではfminuncを使用しましたが、fmincgを使いなさいという指示が
出ました。 fmincgの方が多くのパラメーターを使う際にはfminuncより効率的だと
説明されています。
Coursera Machine Learning Week4 課題 2周目③ -苦闘記憶- One vsALL① - 暇人日記
昔、fmincgはfminuncより優れているということがCourseraの教材に
書かれていました。
が、Week2のLinear Regressionの課題をfmincgで解こうとしたときに
プログラミングがうまくいかないという課題に当たっています。
↓の実験の日記の時はfminuncを使っています。
↑の日記の主旨ぶれるので日記には書かなかったんですが、
fmincgを使うと動きませんでした。
漠とこのときにfmincgはLogistic Regression向きで
fminuncはLinear Regression向きなのかと思っていました。
なので、fmincgをfminuncに置き換えてみようと思いました。
初期パラメータ=initial_nn_paramsと計算後の最適θ=nn_paramsが
異なるので計算されることがわかります!
どうやらfmincgではなくfminuncの方が良いようです。
予測結果です。
1回目です。
fmincgがfminuncより優秀というのは正しいらしく
λ=0、MaxIter=40で1計算30分ほどかかります。
λ=0だとθがいかような値をとってもRegularizedCostの計算に関与しないので
overfit気味の線をかけるのではないかと思います。
MaxIterを調整したくなりますが、まずは5回計算して安定して
予測が6桁になるかどうか見てみます。
2回目です。
最適θは計算されていることが確認できました。
予測です。↓
うわ、でた。このパターンか、という感じです。。。
なぜこうなってしまうのだろう。。。
3回目です。
最適θは計算されています。
誤差が655憶です。
5回やる前ですが、課題は同じになりそうです。
つまり安定して予測が6桁にならない。
とはいえ、進展がありました。
①fmincgが最適θを計算していない
②fminuncは最適θを計算している、ただなぜか誤差655憶が最適と
計算してくることがある。
①のなぞ解きをするか、②のfminuncのMaxIterとλを調整するか、
を追加検討したいと思います。
また次回頑張ります。