オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】確率的勾配降下法 / Stochastic Gradient Descent; SGD

yhayato1320.hatenablog.com

Index

勾配法の課題

関数には、最小値と極小値がある.



誤差関数が下に凸な関数である簡単な状況では、任意の極小値は必ず最小値に一致する.
しかし、深層学習で扱う誤差関数は、一般に複雑な非凸関数である.

本当の最小値である大域的極小値 (Global Minimum) 以外にも、
膨大な数の局所的極小値 (Local Minima) がある.

通常パラメータ空間には、膨大な局所的極小値があり、真の最小値にたどり着くことは難しい.

これを「局所的最小値の問題」と呼ぶ.


なので、深層学習では、誤差関数の極小値さえ見つけられれば十分であると考える.

確率的勾配降下法 / Stochastic Gradient Descent; SGD

深層学習が真の最小値は必要としないとはいっても、誤差関数の値があまりにも大きい極小値にはまり込んでしまっては、 使い物にならない.

そこで、極小値にトラップされることをできるだけ回避するために、ランダムな要素を取り入れて、
はまり込んだ場所から弾き出す効果を生み出すことで、勾配法を改善した手法が 確率的勾配降下法 / Stochastic Gradient Descent; SGD.

勾配法では、一度のパラメータの更新に全ての学習データを使用していた. (バッチ学習 / Batch Learning)
しかし、一度の更新に利用する学習データをランダムに選んで(ミニバッチ学習 / Minibatch Learning)、 学習することで、ランダム性を取り入れる.


一度の更新に使う量によって、正確には名称が異なるが
下の3 つの最適化方法は、SGD として扱うことが多い.

  • 勾配降下法 / 最急降下法 :
    全部のデータを一気に使う (バッチ学習 / Batch Learning)


  • オンライン学習 / 確率的勾配降下法 SGD :
    ランダムにデータを一個ずつ選び出し使う (サンプル数が1 のミニバッチ学習 / Minibatch Learning)


  • ミニバッチSGD :
    ランダムにデータをミニバッチに分けミニバッチごとに使う (ミニバッチ学習 / Minibatch Learning)


また、深層学習では、すべての学習データを処理できるケースは多くないので(メモリなどの問題)、
ミニバッチに分割することで計算コストを削減している.

更新アルゴリズム

更新アルゴリズム

 W\ \leftarrow\ W\ -\ \mu \displaystyle \frac{\partial L}{\partial W}

 \mu は学習率  0 \leq \mu \leq 1

SGD は、パラメータ空間の局所解に導いてくれる素晴らしいアルゴリズムではあるが、 無駄な動きが発生してしまうケースもある.

そのような欠点にいくつかの効率化を加えた手法が提案されいる.

参考

Web サイト