最急降下法で色々やってみて思ったこと

理論としてはまだ習ったことがないゆとりなんだけど、とりあえず使ってみた感じの感想をつらつらと書いていく。

初期値&パラメータの設定

最初やってみるまでは、「初期値とかパラメータ*1をよっぽど変にしなきゃ大体うまく行くんだろ?」くらいに思ってた。さーせん、ゆとりすぐる考えでした。

最終的なパラメータ*2は初期値とかにかなりsensitiveだったりで、簡単にうまく行かなかったりする。もちろん、そんなに簡単にこけてちゃこまるので、よい初期値の設定方法とかの研究がされているんだろうというのは、想像がつく。

あと、それだけじゃなくて今回の場合、x1とx2の大きさも関係しているようだった。今回は1000とかで割っているんだけど、そのままの大きさでは収束してくれない。1000で割るとかではなく、標準化とかだとどう違うんだろう、といった疑問も湧いてくる。こっちも研究されてんだろーな。@yuzuharaは0-1の間に収まるようにしてる、って言ってたし。あと、変換も線形変換だけじゃなくて、非線形なものも考えられるけど、その辺はどうなのか。

疑心暗鬼

これもまだ自分が勉強してないからあれなんだけど。

今回はRのglmがあったので、ある意味カンニングをしながら初期値の設定や正解が分かっていたんだけど、そうではない場合だとどうなるか。

  • 初期値の設定が検討も付かなくなる
  • 収束したパラメータがglobalに最適、と言えるものが出てきているのか

などなどの問題があり、なかなか難しいなと思った。

結構、泥臭い

初期値やらパラメータの設定とかをごにょごにょ変えたりなどで、思ってた以上に泥臭い作業であることが分かった。あと、こんな作業をせずにパラメータの計算ができる解析的な方法が生み出されることのありがたさを知るなどした。そういえばフィボナッチ数の再帰的な方法と一般項を用いたやり方で計算量が圧倒的に違う、というのを始めて知ったときにも似たようなことを感じたのだった。

2学期へのモチベーション

理論では習ってない、と書いたけど2学期の院の授業で最適化の授業がある*3

まだ全然高度なことやったわけじゃないんだけど、最適化をする際にどういう問題が起こったりするのかということを自分の体験の中で持って、講義を受けるのは全然違うんじゃないかなと思った。目的意識や問題意識は集中力を高めてくれる。

あと、理論だけじゃなくって、現実の例を見ながらじゃないと理解がなかなか進まないしね。なんかこの話はRubyKaigiの懇親会の時にした記憶があるなー。

*1:上で言うところのalpha

*2:今度はa0とかa1の方

*3:山本先生の授業。山本先生の授業はかなり好き。分かりやすい。