前回はGradinent Checkingがクリアできたので、fmincgで最適θを出して
予測値を出しましたがダメというところでした。
最適θを出してから予測値までを振り返ってみます。
構造は↓になっています。
そして計算ロジックはHidden Layerではsigmoid関数の代わりにtanh関数を
使てoutput layerでは掛け算のままとなっています。
なのでFeartureNormalizeした
Xに(本当は47個あるが3までを表示)、要素が1の行を加えて、Theta1とかけます。
47X25になっています。
これにtanh関数をします。
全て-1と1の間になっています。
要素が1の行を加えて47X26にします。
これをTheta2をかけます。
そのままの結果でいいはずなのでsigmoidもtanhも使っていません
ただ、yとは桁数がかけ離れています。。。
Hidden Layerでは-1と1の間にあるのに
output Layerでは10万くらいの結果にならなければ
ならないのでTheta2は大きな数字が入らないと駄目だと思いますが、
そうはなっていないので、桁数が違うのかなと思いました。
あ!!わかった気がします。
Jは予測値-yの2乗とθの式の積み上げでした。
このJの誤差が小さければ小さいほど良い予測となります。
今回はHidden Layerからoutput Layerで大きなθが必要ですが、
大きすぎるとJが大きくなるのでfmingが適度な大きさのθにとどめたと考えます。
θが大きくなってもいいように、設定されているのがλでした。
λを1で計算していたのですが、小さくしていってみます。
そうするとθは大きな値をとれるので、予測値が6桁に近づいてくると思います。
さっきはλ=1だったので0.1にしてみます。
あれ、イマイチでした。
λ=0.01にしてみます。
まだ、桁数がだめです。
λ=0.001にしてみます。
仮説が間違えているのでしょうか。。。
不安になってきました。
λ=0.0001にしてみました。
まだなのか、仮説の間違いなのか。。
λ=0.00001にしてみました。
ダメです、もう1回考えてみます。
Jの概念が↓でした。
右の部分のθの2乗部分が大きいため、大きいθは最適とはみなされないと考えました。
今回は左の部分は47個の2乗です。(予測値ーyは47個なので)
しかし右のθの部分は101個の2乗の合計になります。
(Theta1とThata2の合計が101個なので)
Theta2はhidden layerの-1から1の値を6桁に引き上げるため、
6桁が要求されます。それを2乗すると12桁になり、圧倒的な大きさとなるため、
左の部分のコントロールより右のθの部分のコントロールを優先した結果、
現在見えている予測値とyの差になっていると考えました。
λ=0としてみます。
こうすると右のθの部分はゼロになるので、左の部分の
予測値-yに特化した数字ができるはずです。
ダメです。
Jが原因だと思ったのですが、そうではないことがわかりました。
λ=0でJは実に655憶。最適化されているとは思えない値ですね。。。
違うことが原因で予測がずれていると判断します。
また次回頑張ります。