機械学習における勾配降下法と確率的勾配降下法
概要
損失関数の勾配を利用して損失関数の極小値を見つけるアルゴリズムの中でもっとも単純な方法として 勾配降下法gradient Descent Algorithmがある。
説明
ただし、このときの損失関数はデータセットが固定された状態での重みとバイアスに対する関数と見なされる。入力データがのように見える場合、はに対する関数となる。同じデータであっても重みとバイアスによって損失関数の値は異なり、損失関数が小さくなるということはそれだけ良いモデルを作り出したことを意味する。
勾配降下法は、このような関数が作り出す多様体に沿って極小値となる最適な重みを見つける。この原理をもう少し厳密に理解したい場合は、数値解析学の勾配降下法について学ぶといい。
最初に選んだ重みとバイアスのベクトルについて損失関数の値をより小さくするは、ある適切な正数によって のように計算される。これを繰り返す も損失関数の値を次第に小さくすることができる。これによりを更新することを バックプロパゲーションと呼ぶ。機械学習ではを 学習率learning Rate, ラーニングレートと呼び、この値によって勾配降下法が成功することも失敗することもある。
成功する場合とは、上の図のように計算を繰り返しながらが極小値になる重みとバイアスを正確に見つけた場合だ。特に図では極小値でありながら最小値になっているが、一般的に極小値は極小値に過ぎず、最小値であるか確信できるわけではない。
が大きすぎると、上のように値が急激に変わり学習のスピードは速くなるが、過度に大きい場合は収束しないことがある。これを オーバーシューティングと呼ぶ。
反対にが小さすぎると、数学的には収束性が保証されるが、変化が小さすぎて時間がかかりすぎ、局所最小値に引っかかるとその近くから抜け出すことができない。
これが勾配降下法の基本的な概念で、実際には上記のような問題を補うためにさまざまな技術を用いる。
確率的勾配降下法
ミニバッチごとに勾配降下法を適用することを 確率的勾配降下法stochastic gradient descent, SGDという。ある文献では以下のように説明されている。
しかし、この区分は実際には無意味だ。一般的にディープラーニングではミニバッチ学習のみが使用され、ミニバッチ学習でバッチサイズをにするとそれがオンライン学習になるためだ。したがって、実際のディープラーニングでは「勾配降下法 = 確率的勾配降下法 = ミニバッチ勾配降下法」と受け入れてもよい。
「確率的」という言葉に大きな意味を置く必要もない。全データセットを母集団と見なすと、ミニバッチで学習することは標本集団に対して繰り返し学習することと同じなので、確率的と呼んで理解しても問題ない。