確率的勾配降下法について解説!
そもそも勾配降下法って何?
ここでは数式を使って難しい話をしません。
Texを使うのが怠いし、説明しても分かりにくいからです。
前回、順伝播型ネットワークを解説した際に誤差関数について説明したと思います。
学習では誤差関数E(w)の値を最小化させるため、重みパラメータWを更新するわけです。
Q. ではどのようにして誤差関数を最小化させるのか。
A. 誤差関数Eの極小となる重みwをひたすら探します。
極小値の重みwを探すには、誤差関数を微分して勾配が負となる方向へ重みパラメータWを動かし続けます。
これが勾配降下法です!
ちなみに重みWの更新料の大きさを学習係数と呼び、これが重要なパラメータにもなります。
学習係数が大きいと、E(W)が発散してしまうリスクあり。
学習係数が小さいと、更新量が小さく、E(W)の収束が遅い。
確率的勾配降下法って何?
実は今まで説明した勾配降下法ってサンプルがN個存在している場合、1~Nまでのサンプルに対して、
誤差関数を計算し、全て計算し終わった後にパラメータ更新をし続けていたのです。
バッチ学習と呼びます。
でもこれじゃあ計算効率が悪いなあ。
それじゃあ各サンプル1個ずつに対して誤差関数を計算すればいいじゃない。
これを確率的勾配降下法(SGD)と呼びます!
SGDで便利なのは・・・
- 計算効率の向上
- Eを1つに集中させるのではなく、n個のEを持てる
後者はバッチ学習では、誤差関数Eが局所的な極小値に収束するところを、
SGDではN個のEを持てるので、局所的な極小値に収束するリスクを分散でき、
各N個のEから最も学習効果が最大化するEを選択できるところです!
局所的な極小値は本質的には最小値ではないことを意味してます!