【かくりつてきこうばいこうかほう】

確率的勾配降下法(SGD) とは?

💡 全部見てから判断するのではなく、サンプルを見てすぐ動く即断即決型の学習法
📌 このページのポイント
確率的勾配降下法(SGD)vs 通常の勾配降下法 通常の勾配降下法 最適解 全データで1回更新 → なめらかに収束 確率的勾配降下法(SGD) 最適解 少量データで何度も更新 → ジグザグだが高速 更新回数: 少ない(1エポック1回) 計算コスト/回: 高い 更新回数: 多い(データごと) 計算コスト/回: 低い
通常の勾配降下法とSGDの収束経路の違い
ひよこ ひよこ

確率的勾配降下法って、普通の勾配降下法と何が違うの?

ペンギン先生 ペンギン先生

普通の勾配降下法は全部のデータを見てから1回パラメータを更新するんだけど、確率的勾配降下法はランダムに1つか少数のデータだけ見てすぐ更新するんだよ。テストの採点に例えると、全員分まとめて採点してから傾向を分析するか、1人ずつ見るたびに方針を微調整するかの違いだね。

ひよこ ひよこ

ランダムに選ぶとブレブレにならないの?

ペンギン先生 ペンギン先生

たしかに1回1回の更新にはノイズが入るからジグザグに動くよ。でもたくさん更新を繰り返すと平均的には正しい方向に進むんだ。しかもそのノイズのおかげで、浅い谷(局所最適解)にハマらず、もっと良い答えを見つけられることもあるんだよ。

ひよこ ひよこ

ミニバッチSGDっていうのも聞くけど、それは何なの?

ペンギン先生 ペンギン先生

1つだとノイズが大きすぎるし、全データだと遅い。その中間で「32個」「64個」みたいにまとめて処理するのがミニバッチSGDだよ。GPUの並列計算と相性がいいから、現代のディープラーニングではほぼこの方式が標準になっているね。

ひよこ ひよこ

じゃあ今使われてるのはほとんどミニバッチ方式なんだね!学習率との関係ってあるの?

ペンギン先生 ペンギン先生

すごく重要な関係があるよ。学習率が大きいと更新幅が大きくなって発散するし、小さすぎると収束が遅い。SGDでは学習率を徐々に小さくする「学習率スケジューリング」がよく使われるんだ。ウォームアップで最初は小さくして、途中で大きくして、最後にまた小さくするコサインスケジューリングなんかも有名だよ。

ひよこ ひよこ

AdamとかAdaGradとか色々あるけど、SGDはもう古いの?

ペンギン先生 ペンギン先生

実はそうでもないんだ。Adamは収束が速いけど、最終的な精度ではSGD+モメンタムの方が良い場合もあると報告されているよ。画像認識のResNetなんかの論文でもSGDが使われていることが多い。最近はAdamで大まかに学習してからSGDで仕上げるハイブリッド手法も研究されているんだよ。

ひよこ ひよこ

SGDもまだまだ現役なんだね!

ペンギン先生 ペンギン先生

そうだよ。シンプルだけど奥が深い手法で、理論的な解析もしやすいから研究のベースラインとしてもよく使われているんだ。最適化手法の基本中の基本だから、しっかり理解しておくといいよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「確率的勾配降下法」って出てきたら「データをランダムに少しずつ見て、すばやく学習を進める方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Stochastic Gradient Descent」 = 確率的な勾配降下
💬 「Stochastic」は確率的・ランダムという意味で、データをランダムに選ぶことからこの名前がついたんだよ
← 用語集にもどる