FeedForwardではtanh関数を使っていましたが、
予測値ではtanh関数を使わないというという荒業で計算してみました。
根拠はないです笑
やってみてわかったことはそんなに答えは変わらないということでした。
何故だろうと思いましたが、
X *theta1がすでに絶対値で1近辺の数字になっています。
tanh関数を使うと-1から1の間に値が収束するので、
それよりは幅に広がりがあるとはいえ、近辺になっているのは変わらずです。
うーん、FeatureNormallizeがダメなのかもしれないと思いました。
FeatureNormalizeしないでトライしてみます。
こうなりました↓
桁は近づきましたが、予測が全て同じ値なのが気になります。
これはλ=0だったので、λを小さくしていきます。
λ=0.1にしました。
同じです。
心配になったのでプロセスを見てみます。
まずXに要素全て1の行を加えます。
それにTheta1をかけます。
それにtanh関数をあてます。
値が1か-1かという極端なことになっています。
Theta2もよくみると13093か-13093かという極端なことになっています。
なので1か-1に13093か-13093をかけているので、
predの値が全て同じなんだと思いました。
一回、λを0.00001にしてみます。
全く同じ結果でした。。。
Theta2も同じです。
λ=10にしてみました。
やはり同じです。
hidden layerが-1と1の種類というのも同じです。
FeatureNormalizeしてもしなくても予測が合いません。
今までの試行を振り返って表にしました↓
FeatureNormalizeしてもしなくてもそれぞれの壁にぶち当たっています。
Jが間違えているのかという気がしてきました。
いや、でもあっているはずです。
a3つまりoutput Layerをyの予測の47の差分を2乗する部分と
Theta1/2のBias部分の1行をとって2乗することで考えは合っているはずです。
ではfmincgでしょうか?
と思ってみたらそもそもfminuncとなっていることに気づきましたorz
λ=0で実行しなおしてみます!
さらにかけ離れた値が返ってきました泣
X*Thata1の値が↓でした。
これにtanh関数を充てると↓のようにばらつきはあるのですが、
Theta2の値が6桁ではないので、小さい値の予測になってしまったように
思います。
λ=0でやって効果がないと思いますが、ダメもとで
Jのθの2乗のパートは12桁になるので、
lambda = 0.0000000000001(1の-13乗)で
13桁くらいは解消されるλで計算してみます。
あ、近くなりました!
X*Theta1が↓のような値になりました。
tanh関数をあてるとこうなります↓
Theta2が念願の5桁近辺になっています!
なので、予測値の桁があがって精度が上がったんだと思います。
『MaxIter』が40だったんですが、150に上げてみます。
なんと、精度が良くなるのかと思いきや、悪くなりました。
これは謎です。『MaxIter』はやればやるほど精度が高くなるものだと
思っていたのですが。
『MaxIter』を50にして計算してみます↓
あれ、FeatureNormalizeする前のような感じになってしまいました。
元の40にして再現できてるかどうかみてみます。
できていません。。。
何か変えてしまっています。。。
λの数が怪しいので直していきます。
lambda = 0.00000000000001(1の-14乗)でした。
lambda = 0.0000000000001(1の-13乗)で
と書いていましたがこれが間違いで、1の-14乗で計算すると
↓になりました。
前回の結果と完全に一致しないのはRandom Initializationが理由だと思います。
それでは『MaxIter』を150にしてみます。
結果です↓
精度が下がってしまいました。
『MaxIter』を50にしてみます。
ダメでした。
Random Initialization次第で安定しないのでしょうか。
『MaxIter』を40にしてみます。
あれ、なぜダメなんだろうと思いましたが、
Random Initializationでフレるのかと思いまいしたので、
全く同じ条件でもう3回やってみます。
1回目です。6桁予測がでてきました。
2回目です。
3回目です。
4回目です。
5回目です。
どうやらRandom Initializationに左右されるようです。
左右されない予測値が欲しいです。
次回はまたトライします。
λを1の-15乗にしてトライしてみようと思います。
この気まぐれさが何とかなってほしいです。