displaの謎



テキストのコードが載っているgitからコピペをしてコードを動かそうとすると、以下の様なエラーが出てしまった。

何をやってもこのエラーが解消しない。序盤も序盤であるのに、何が起こっているのか全く分からなかった。皆さんはこの愚かなミスにお気づきだろうか。

なんと、display のはずがコピペミスでdisplaになってしまっていただけだった。それに気づかずdisplaというモジュールについて調べていた時間を返してほしいと思いつつ、単に自分があほなだけであった。




勾配降下法の実験(p109~)



本書によると、勾配降下法で扱う値は絶対値が1以下であることが望ましいという事だった。何故だろうか、というかそんなこと言って、本当は何とかなるのではないかと疑りを掛けて、扱う値から平均値を引かずにコードを実行してみた。

↑X,Yを、そのままの値にして計算してみる。


▪次第に怪しくなる雲行き


Yp(Yの予測値)を、学習させる前の段階で出してみた。すると、体重を予想しているはずなのに身長の様な値が出てきてしまった。これは、学習前なので仕方ないかと思い次に進む。


次に、本命の平均二乗誤差である。ここで損失を求めると、かなり大きな値が出てしまった。でも、今後学習をしていけばこの損失も指数関数的に小さくなるだろうと願い次に進む。


勾配計算を行った。WもBも相当大きな値である。とても体重を予想するパラメータではないように思えるが、コンピューターを侮ってはいけない。ここから膨大な学習を経て、最適解に近づくはずである。


学習率を定義し、パラメータを確認してみる。するとどうだろう、少しはまともな値に近づいた気がしなくもない。


▪衝撃の結末


epoch数を500に設定して、学習させてみる。すると…


何と、epoch10にしてすでにlossが発散してしまっている。この結果から得られた結論はこのようになるだろう。

  • 学習前の損失が大きすぎると学習過程で発散してしまう
  • データの絶対値を小さくすることで(身長と体重のように)学習データと予測値との桁が異なる場合でも、最初の予測値が論外な値を取らないようになる

山登りの例でいうと、一回に進む距離が長すぎるという事だろうか。データの絶対値を小さくする重要性がよく分かった。