konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

【DeepLearning特訓】MLPの基礎 確率的勾配降下法

E資格向けの自習アウトプット
自分用メモ

確率的勾配降下法SGD: Stochastic Gradient Descent)は、ミニバッチの単位で無作為に選んだデータで勾配降下法を使ってパラメータを更新していく方法
f:id:konchangakita:20210107125257p:plain

パラメータの更新方法は、誤差逆伝播で求めた勾配を使って各パラメータ(重み:w、バイアス:b)を更新する
誤差逆伝播で求めた勾配とハイパーパラメータで設定した学習率をつかって、現在のパラメータから算出する

重み(w)を更新する例
f:id:konchangakita:20210107124201p:plain

SGD は下記の条件で収束する
f:id:konchangakita:20210107124344p:plain

学習率は 0.01 や 0.001 あたり初期設定するが
 ・学習率が小さすぎると、学習が遅い
 ・学習率が大きすぎると、勾配が「0」になる地点にを通りこしてしまう
いずれにしてもいつまでたっても最適なパラメータにならないので、学習がうまくいく手動で調整していく
(最適な学習率を算出する方法もあるぽい)

# 確率的勾配降下法(SGD)でパラメータ更新
lr = 0.01
w1 = w1 - lr * dw1
b1 = b1 - lr * db1
w2 = w2 - lr * dw2
b2 = b2 - lr * db2


ここまでのステップをミニバッチの単位で、順伝播、誤差逆伝播、パラメータ更新を入力データ分一回回すことをエポックという

ミニバッチは、128や256くらいが多い
エポックは、1000回とか


入力データは1個だけ適当な入力データで、エポック 10回分まとめてみた
SGD で Loss が 減っていくはず


初期値の運が悪いと変わらないこともある

Epoch  0  loss: 0.5865723008185625
Epoch  1  loss: 0.13462761604484846
Epoch  2  loss: 0.06494275759481465
Epoch  3  loss: 0.043350135099269806
Epoch  4  loss: 0.03267105727966781
Epoch  5  loss: 0.026833979478593808
Epoch  6  loss: 0.023582050848936328
Epoch  7  loss: 0.020985603880502638
Epoch  8  loss: 0.018869993146677137
Epoch  9  loss: 0.017116506612223987


まとめ

確率的勾配降下法SGDSDGsと間違えがち))で、ようやく学習の第一歩
もっとも基本的なパラメータ更新方法ですが、学習速度が遅いという弱点があります
ここからはデータの前処理の工夫や学習の最適化の方法を学んでいきます