概要
ディープラーニングの最適化に使用されるアルゴリズムである確率的勾配降下法について解説します。
勾配降下法
確率的勾配降下法は勾配降下法が元になっています。勾配降下法については以下の記事を参照してください。
[blogcard url=”https://pystyle.info/ml-gradient-descent”]
アルゴリズム 最急降下法
- 初期値 w0 を決める。
- 勾配 ∇f(wt;x) を計算し、∇f(wt;x)=0 の場合、終了する。
点を次のように更新する。
wt+1=wt−α∇f(wt;x)
2 に戻る。
確率的勾配降下法
データセットを x=(x1,x2,⋯,xn)、最適化対象のパラメータを w としたとき、目標関数 f(w;x) が以下のように各サンプルから計算される関数 fi(w;xi) の和の形で表せる場合を対象とします。
f(w;x)=i=1∑Nfi(w;xi)例えば、最小二乗誤差はサンプル xi に対応する正解を yi、パラメータで表される関数の形状 (例 g(x)=ax+b) を g(x) としたとき、
f(w;x)=N1i=1∑N(g(w;xi)–yi)2と和で表す形になっています。
確率的勾配降下法は、すべてのサンプルを使って損失を計算する代わりに、ランダムに選んだサンプル1つで計算した fi の勾配でパラメータを更新します。
アルゴリズム 確率的最急降下法
- 初期値 w0 を決める。
- サンプルの1つ xi をランダムに選ぶ。
- 勾配 ∇fi(wt;xi) を計算する。
点を次のように更新する。
wt+1=wt−α∇fi(wt;xi)
2 に戻る。
確率的勾配降下法の実装例
データセット (x1,y1),(x2,y2),⋯,(xN,yN) で関数 g(x)=ax+b のパラメータを二乗誤差を最小化することで求めます。
二乗誤差は以下のように計算できます。
f(w;x)=N1i=1∑N(g(xi)–yi)2
- 初期値 a0,b0 を決める。
- サンプルの1つ xi,yi をランダムに選ぶ。
- 勾配 ∇(g(xi)–yi)2 を計算する。
点を次のように更新する。
at+1=at−α∂a∂N1(g(xi)–yi)2=at−αN2(g(xi)–yi)xi
bt+1=bt−α∂b∂N1(g(xi)–yi)2=bt−αN2(g(xi)–yi)
2 に戻る。
Optimization is complete. a=6.006183, b=2.033849
ミニバッチ勾配降下法
ミニバッチ勾配降下法は、すべてのサンプルを使って損失を計算する代わりに、ランダムに選んだ b 個のサンプルで計算した勾配でパラメータを更新します。1個のサンプルで計算する勾配よりデータすべての勾配に近づくので、収束が早くなります。
アルゴリズム 確率的最急降下法
- 初期値 w0 を決める。
- b 個のサンプルをランダムに選ぶ。
- 勾配 ∇∑x∈batchfi(wt;x) を計算する。
点を次のように更新する。
wt+1=wt−α∇x∈batch∑fi(wt;x)
2 に戻る。
Optimization is complete. a=6.000140, b=2.037621
コメント