Deep Learning論文紹介「Deep learning via Hessian-free optimization」

"Hessian-Free"という新しい最適化手法をDeep Learningのauto-encoderの学習に使ってみたら事前学習なしで既存の報告の性能を超えたぞ凄いだろう、という話。

ニューラルネットのパラメータ決定はよく研究されている問題で、勾配法で効率よく計算できると言われている。しかしDeep Learningのように隠れ層がとても多いケースではうまくいかない。学習にとても時間がかかったり、学習データに対してさえ酷いパフォーマンスしか出せなかったりする(under-fitting)。

最適化に関する研究者の間では勾配法が病的な曲率を持った目的関数に対しては不安定であることがよく知られている。2次の最適化法はこのような目的関数に対してもうまく働く。だからDeep Learningにもこの種の最適化を使ったらいいんじゃないか。

でもまだいくつか問題がある。まずでかいデータセットに対して現実的な速度で動くようにすること。これは確率的勾配降下法(SGD)みたいな感じでオンライン学習にしたらいい。

レイヤーごとにpre-trainingするってのも大きな進歩の一つだ。これをやってからSGDすると問題を回避できるようにみえる。実際、成功している応用例も色々ある。しかし疑問が残る:なんでこれで上手くいくの?なんで必要なの?ローカルミニマムが大量にあることが原因だという説明をしている研究者もいる。

別の説明として、目的関数が病的な曲率(例えば細長い谷とか)を持っていて、勾配法のような曲率を見ない最適化法では最適化不可能だ、というものがある。そこでこの視点に立って、セミオンラインの2次の最適化手法を提案する。これを使えばunder-fittingしないし既存のpre-trainingを使った方法より効率的。

まず標準的な2次の最適化手法であるニュートン法について解説する。ニュートン法はパラメータの個数の2乗のサイズのヘシアンを計算する必要があり、でかいモデルの計算には現実的ではない。が、これを学ぶことで、もっと現実的な亜種(quasi-Newton methodsとは)がどう振る舞うのかについて理解できる。

ニュートン法は勾配法同様にパラメータを逐次的に更新していく手法。コアのアイデアは「目的関数fを二次関数で近似」(数式1) Bはヘシアンだと思っていいんだけど、正定値でないことがたまにあって最小値を持たなくて困るので適当に対角成分を増やして正定値にする(dump)

ニュートン法は"scale invariance"が重要な特徴。線形な変換では振る舞いが変わらない。これがないとパラメータのスケーリングが悪いと性能が悪化してしまう。またこの特徴によって学習率を調整したりとかしなくてよくなる。

逆に言えば現在のパラメータ周辺の曲率を元に暗黙のスケーリングが決まっていて、それによって勾配を変換しているという考え方ができる。

曲率の絶対値が小さいなら勾配の変化は少ないので、長い距離進んでも良いってこと。逆に大きいなら、pの方向にセンシティブってことだからちょっとだけ進んで適切なpの方向を再確認すべき。(この段落、あとで数式を再確認する)

(まだ肝心の本題に入ってないけど続きはまた今度)

さいごに

この記事はDeep Learningに興味を持った著者が、関連論文を読んで勉強しながら書いているものです。そのため間違いなどが含まれている可能性があります。もしなにか気になる点がありましたらご指摘いただけるとありがたいです。