暇人日記

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

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

FeedForwardではtanh関数を使っていましたが、

予測値ではtanh関数を使わないというという荒業で計算してみました。

 

根拠はないです笑

 

f:id:omoshiroamericanews:20200711162243p:plain

やってみてわかったことはそんなに答えは変わらないということでした。

 

何故だろうと思いましたが、

X *theta1がすでに絶対値で1近辺の数字になっています。

tanh関数を使うと-1から1の間に値が収束するので、

それよりは幅に広がりがあるとはいえ、近辺になっているのは変わらずです。

 

f:id:omoshiroamericanews:20200711162507p:plain

 

うーん、FeatureNormallizeがダメなのかもしれないと思いました。

 

FeatureNormalizeしないでトライしてみます。

こうなりました↓

f:id:omoshiroamericanews:20200711220450p:plain

桁は近づきましたが、予測が全て同じ値なのが気になります。

 

これはλ=0だったので、λを小さくしていきます。

 

λ=0.1にしました。

 

f:id:omoshiroamericanews:20200711222756p:plain

同じです。

 

心配になったのでプロセスを見てみます。

 

まずXに要素全て1の行を加えます。

 

f:id:omoshiroamericanews:20200711222958p:plain

それにTheta1をかけます。


f:id:omoshiroamericanews:20200711223233p:plain

 

それにtanh関数をあてます。

f:id:omoshiroamericanews:20200711223317p:plain

値が1か-1かという極端なことになっています。

 

Theta2もよくみると13093か-13093かという極端なことになっています。

f:id:omoshiroamericanews:20200711223440p:plain

 

なので1か-1に13093か-13093をかけているので、

predの値が全て同じなんだと思いました。

 

一回、λを0.00001にしてみます。

 

f:id:omoshiroamericanews:20200711225929p:plain

全く同じ結果でした。。。

 

f:id:omoshiroamericanews:20200711230121p:plain

Theta2も同じです。

 

λ=10にしてみました。

 

f:id:omoshiroamericanews:20200712151442p:plain

やはり同じです。

 

hidden layerが-1と1の種類というのも同じです。

 

f:id:omoshiroamericanews:20200712151631p:plain

 

FeatureNormalizeしてもしなくても予測が合いません。

 

今までの試行を振り返って表にしました↓

f:id:omoshiroamericanews:20200712151736p:plain

FeatureNormalizeしてもしなくてもそれぞれの壁にぶち当たっています。

 

Jが間違えているのかという気がしてきました。

 

いや、でもあっているはずです。

a3つまりoutput Layerをyの予測の47の差分を2乗する部分と

Theta1/2のBias部分の1行をとって2乗することで考えは合っているはずです。

 

ではfmincgでしょうか?

と思ってみたらそもそもfminuncとなっていることに気づきましたorz

 

 

λ=0で実行しなおしてみます!

 

f:id:omoshiroamericanews:20200712153718p:plain

さらにかけ離れた値が返ってきました泣

 

X*Thata1の値が↓でした。

f:id:omoshiroamericanews:20200712153841p:plain

これにtanh関数を充てると↓のようにばらつきはあるのですが、

f:id:omoshiroamericanews:20200712153958p:plain

 

Theta2の値が6桁ではないので、小さい値の予測になってしまったように

思います。

f:id:omoshiroamericanews:20200712154021p:plain

 

λ=0でやって効果がないと思いますが、ダメもとで

Jのθの2乗のパートは12桁になるので、

lambda = 0.0000000000001(1の-13乗)で

13桁くらいは解消されるλで計算してみます。

 

f:id:omoshiroamericanews:20200712154836p:plain

 

あ、近くなりました!

 

X*Theta1が↓のような値になりました。

f:id:omoshiroamericanews:20200712155000p:plain

tanh関数をあてるとこうなります↓

f:id:omoshiroamericanews:20200712155133p:plain

 

Theta2が念願の5桁近辺になっています!

 

f:id:omoshiroamericanews:20200712155059p:plain

 

なので、予測値の桁があがって精度が上がったんだと思います。

 

『MaxIter』が40だったんですが、150に上げてみます。

 

 

f:id:omoshiroamericanews:20200712160409p:plain

なんと、精度が良くなるのかと思いきや、悪くなりました。

これは謎です。『MaxIter』はやればやるほど精度が高くなるものだと

思っていたのですが。

 

『MaxIter』を50にして計算してみます↓

f:id:omoshiroamericanews:20200712160609p:plain

あれ、FeatureNormalizeする前のような感じになってしまいました。

 

元の40にして再現できてるかどうかみてみます。

f:id:omoshiroamericanews:20200712160920p:plain

できていません。。。

何か変えてしまっています。。。

 

λの数が怪しいので直していきます。

 

lambda = 0.00000000000001(1の-14乗)でした。

lambda = 0.0000000000001(1の-13乗)で

と書いていましたがこれが間違いで、1の-14乗で計算すると

↓になりました。

 

f:id:omoshiroamericanews:20200712161512p:plain

 

前回の結果と完全に一致しないのはRandom Initializationが理由だと思います。

それでは『MaxIter』を150にしてみます。

結果です↓

f:id:omoshiroamericanews:20200712162521p:plain

精度が下がってしまいました。

 

『MaxIter』を50にしてみます。

f:id:omoshiroamericanews:20200712163755p:plain

ダメでした。

Random Initialization次第で安定しないのでしょうか。

 

 『MaxIter』を40にしてみます。

f:id:omoshiroamericanews:20200712164133p:plain

あれ、なぜダメなんだろうと思いましたが、

Random Initializationでフレるのかと思いまいしたので、 

全く同じ条件でもう3回やってみます。

 

1回目です。6桁予測がでてきました。

f:id:omoshiroamericanews:20200712164350p:plain

 

2回目です。

f:id:omoshiroamericanews:20200712164704p:plain

 

3回目です。

 

f:id:omoshiroamericanews:20200712165130p:plain

 

4回目です。

 

f:id:omoshiroamericanews:20200712165600p:plain



 5回目です。

f:id:omoshiroamericanews:20200712170206p:plain

 

どうやらRandom Initializationに左右されるようです。

左右されない予測値が欲しいです。

 

次回はまたトライします。

 

λを1の-15乗にしてトライしてみようと思います。

この気まぐれさが何とかなってほしいです。