AdaGrad, 有能. じゃなくて, 実際に実装して使ってみたら失敗したのでメモ. Deep LearningではSGDがよく使われる.


ここで, gは勾配で, θはモデルパラメータである. αは学習率であるが, これの扱いがけっこうめんどくさい. 適当なタイミングでαを小さくしていかないと, まともな学習ができない. そこでAdaGrad.


この式により, 各パラメータごとに勝手に学習率が調整されていく. 言語処理のDeep Learningではパラメータごとの更新頻度が違うのはよくあることなので, 適している. 実装も簡単だし, いうことない. そこでさっそく使ったが, 学習の初期でパラメータが発散した. 原因はおそらく, 学習率の分母の値が小さすぎて, 結果として学習率が大きくなってしまったことだと考えられる. 勾配の値が非常に小さくなる場合にはこういうことが起こるのかもしれない. そこで以下の式に変更して, 必ず学習率がα以下になるようにした.


これでとりあえず学習がうまくいっている. どこかの論文でもこんな感じの式にしていた気がする. ちなみに, Richard SocherさんのTACLの論文では, 定期的に勾配の二乗和を1にリセットしているらしい. まだまだAdaGradもそのへんの調整が面倒だし, そもそも本当にAdaGradでよかったのだろうか・・・とかいろいろと心配事が絶えない.
(2014.08.04 追記)