AdaGrad,RMSProp,+L2Normを実装しました[NNPropagator]

AdaGrad,RMSProp,+L2Normを実装しました

NNPropagatorについて,新しくAdaGrad,RMSProp,+L2Normを実装しました.

どんどん新しいものを追加予定ですが,公開はもう少し先になりそうです.

では今回新しく追加したものについての話をしましょう.

dfsfsfsf
サムネ

重み更新アルゴリズム

今回追加された3つは,すべて重み更新に関する仕組みです.

ニューラルネットワークは,まずニューラルネットワークを構造を定義し,構造内の学習すべきパラメータを適切な値にすることによって回帰・分類問題を解くことになります.

このとき,現在一般的に使われているパラメータ推定方法として,誤差伝搬法が用いられています.

誤差伝搬法とは,小さいほうが適切なパラメータとなる,パラメータからスカラー値への写像関数=誤差関数を導入し,誤差関数のパラメータ変数での勾配を計算して誤差関数の値が小さくなる方向にパラメータを変化させる,ということを繰り返し行うことでパラメータを推定する手法です.数式で書くと,

\[w←w -\mu \frac{\partial L}{\partial w}\]

となります.ここで\(\mu\)は,適切な十分に小さな値(<1)です.この計算式を難度も繰り返すことにより,十分な回数であれば極小値にたどり着くことができます.

この方式は,NNPropagatorではGradアルゴリズムで定義されています.

AdaGrad,RMSPropとは?

しかしながら,Gradアルゴリズムには問題点があります.代表的なものを3つ上げるとすれば,

1.十分に\(\mu\)を小さくしなければ極小値にたどりつけない.しかし小さくすると学習が遅くなる.

2.Gradアルゴリズムでたどり着くのは極小値であって,最小値ではない.本当に辿り着きたいのは最小値である.

3.パラメータが莫大やほぼゼロの値をとるとき,学習が発散・停止する.(深層学習)

が挙げられます.

このうち1.の問題点を回避しようと考えだされたものがAdaGrad,RMSPropです.これらのアルゴリズムは,\(\mu\)を学習中に変化させることで,早く極小値にたどり着くことができるように設計されました.

L2Normとは?

さらに,3.の問題点を解決しようと考えだされたものが,L2Normalization(L2ノルム正規化)です.

L2Normは,上式の更新アルゴリズムに,パラメータに比例する減少項を追加することにより,パラメータが大きくなり過ぎないように調整されます.この方法では,パラメータがある範囲に束縛された状況下においての,誤差関数を最小化する点を求めることができると証明されています.

また,L2Normには過学習を抑制する,というメリットもあります.

感想

このアルゴリズムを実装して早速使ってみましたが,L2NormはかなりDeepLearningで役に立ちました.パラメータが抑制されることによって誤差の発散がかなりおさえられ,学習が破綻することが少なくなりました.また,RMSProp,AdaGradによって高速で精度良いパラメータを算出できることも確認しました.詳しくは,後日書く「CNNでMNIST実装」に書こうと思います.

Posted on