勾配降下法とは?意味・仕組みと学習の工夫を扱った論文(2026年11月時点)

勾配降下法(こうばいこうかほう)

Gradient descent / 確率的勾配降下法 / SGD

勾配降下法とは、機械学習のモデルが損失(予測の外れぐあい)を小さくする向きに、重みとバイアスを少しずつ動かすことをくり返して学ぶ方法のこと。

要するに

  • 勾配に学習率を掛けた分だけ、損失が減る向きへ重みを動かす手順をくり返す
  • 1回の更新に使うデータの数で、フルバッチ、SGD、ミニバッチに分かれる
  • 学習率が小さすぎると収束が遅く、大きすぎると損失が上下して収束しない

最終確認

白い面に置いた白い器のなだらかなくぼみと、斜面の途中のすりガラスの球、底へ向かって波打ちながら下る紫のリボン
目次8

ひとことで言うと

勾配降下法は、機械学習のモデルが、予測の外れぐあい(損失)を小さくする向きに重みを少しずつ動かして学ぶ方法だ。Google の機械学習の用語集は、損失を最小にするための数学の手法で、重みとバイアスをくり返し調整して損失が最小になる組み合わせを探すと説明している。同じ用語集は、勾配降下法が機械学習よりずっと古いとも書いている。

身近な例として、Google の講座「Machine Learning Crash Course」は線形回帰の例で、学習の途中の重みとバイアスを図に描くと、丘を転がり下りるボールのように見え、下り坂がなくなった点で止まると説明している。

仕組み

Google の講座の説明では、モデルはゼロに近いランダムな重みとバイアスから学習を始め、次の手順をくり返す。

  1. いまの重みとバイアスで損失を計算する。損失は予測が正解からどれだけ外れているかの値で、損失関数という式で求める。
  2. 損失が減る向きを決める。手がかりは勾配(傾きを、重みなどの値の数だけ並べたもの)だ。Google の用語集によると、勾配はもっとも急に上る向きを指す。講座は、傾きの負の向きに動かすと説明している。
  3. その向きに、重みとバイアスを少しだけ動かす。どれだけ動かすかを決める数が学習率だ。モデルは勾配に学習率を掛けて、次の値を決める。勾配の大きさが2.5、学習率が0.01なら、値は0.025だけ変わる。
  4. 1に戻り、損失がそれ以上下がらなくなるまでくり返す。この状態を収束と呼ぶ。

1回の更新の前に何件のデータを見るか(バッチサイズ)で、呼び方が変わる。Google の講座と用語集によると、フルバッチは学習用のデータをすべて見てから1回更新する。データが数十万件、数百万件あると現実的でない。

確率的勾配降下法(SGD)は、ランダムに選んだ1件ごとに更新する。回数を重ねれば学習できるが、損失が上下する「ノイズ」が大きい。ミニバッチ確率的勾配降下法は、1件より多く全件より少ない数をランダムに選び、勾配を平均して1回更新する。ミニバッチの大きさはふつう10〜1,000件だ。用語集は、ミニバッチが多くの場合もっとも効率のよいやり方だとしている。

画像認識の深層学習の講義 CS231n のノートは、SGD という語がミニバッチを使う場合にもよく使われると書いている。大きさはメモリの制約で決めるか、32、64、128 のような値にすることが多いという。

更新のしかたを変えた改良もある。PyTorch(ニューラルネットワークを作るためのソフトウェア)の torch.optim には、SGD のほか Adagrad、RMSprop、Adam、AdamW などが並ぶ。

Adam は Kingma と Ba が2014年12月に arXiv に出し、2015年の国際会議 ICLR で発表した論文が提案した。要旨によると、勾配の低次のモーメントを適応的に見積もる方法で、実装しやすく、計算の効率がよく、メモリをあまり使わない。データやパラメーターの多い問題に向き、設定はたいてい調整があまり要らないという。PyTorch の Adam は勾配とその2乗の移動平均を使って更新し、学習率の既定値は0.001だ。

表で見る最新の状況

上の「勾配降下法での学習にかかわる論文」は、TRAIL が解説した論文から、勾配で重みを更新する学習とその周りの課題を扱った5本を古い順に並べたものだ。確認日は2026年11月6日。

2015年2月の Batch Normalization は、ミニバッチの平均と分散で層の途中の値を正規化する。ImageNet の実験では、BN を加えて学習率を上げた構成(BN-x5)が、元の Inception と同じ72.2%の精度に14分の1の学習ステップで達した。論文は高い学習率を使いやすくなるとも述べる。

2016年2月の Federated Averaging では、各端末が手元のデータで数回の勾配の更新をし、サーバーでモデルを平均する。要旨は、比べた同期 SGD より必要な通信のラウンドを10〜100分の1に減らしたと報告する。

2016年3月の Hyperband は、勾配降下法の学習率のような設定を探す方法だ。設定の候補に少しずつ学習の資源を与え、有望な候補へ予算を移して探す。

2016年7月の DP-SGD は、学習の例ごとに勾配の大きさを制限し、雑音を加えて更新する。完成したモデルに個々の記録の影響が残るのを抑えるための方法だ。

2017年3月の MAML は、新しい課題を少ない例と数回の勾配の更新で学べるように、共通の初期値を学ぶ。

5本は勾配で重みを更新する学習のまわりで、途中の値の正規化、データの置き場所、設定の探し方、プライバシー、初期値と、別々の課題を扱っている。

勾配降下法と誤差逆伝播法の違い

勾配降下法 誤差逆伝播法
Google の用語集の言い方 損失を最小にする数学の手法 ニューラルネットワークで勾配降下法を実装するアルゴリズム
何をするか 勾配に学習率を掛けて、損失が減る向きに重みを動かす 各パラメーターについて、誤差の偏微分を計算する
使う場面 線形回帰のモデルの学習にも使う ニューラルネットワーク
PyTorch での書き方 optimizer.step() loss.backward()

Google の用語集によると、ニューラルネットワークの学習では、予測を出して損失を計算する順方向の処理と、誤差逆伝播法で隠れ層の重みを調整する逆方向の処理をくり返す。誤差逆伝播法はどの重みを増やすか減らすかを決め、学習率がその増減の度合いを決める。PyTorch のドキュメントの例では、loss.backward() で勾配を計算したあと、optimizer.step() でパラメーターを更新する。

仕事でどう関係するか

学習にかかる更新の回数を見積もるとき

Google の講座は1,000件のデータを20エポック学習させる例で更新の回数を比べている。1エポックは学習用のデータを1回ずつすべて見ることだ。フルバッチでは20回、SGD では20,000回、バッチサイズ100のミニバッチでは200回になる。学習を外部に頼むときは、データの件数、エポック数、バッチサイズを聞くと、重みを何回更新するかがわかる。

プロンプト
次の学習の設定で、重みを何回更新するかを計算の式と一緒に示してください。
- 学習用データ:1,000件
- エポック数:20
- バッチサイズ:100

学習の経過の報告を読むとき

Google の講座によると、学習が収束したかは、学習の回数ごとの損失を描いた損失の曲線で確かめることが多い。講座によると、学習率が小さすぎると収束までに時間がかかり、大きすぎると損失が上下したり増え続けたりして収束しない。損失が0になるのは、多くの場合過学習のしるしだという。

Google の用語集は、深層学習では損失がしばらく横ばいになってから下がることがあり、収束したと思い違いをしやすいと書いている。損失の曲線が平らになっただけでは、学習が終わったと言い切れない。

自社でモデルを学習させるとき

PyTorch では学習させる値と学習率を渡して更新の方法(オプティマイザー)を作る。層ごとに違う学習率も指定できる。エポックの数に応じて学習率を変える仕組みや、検証用のデータでの測定値をもとに学習率を下げる仕組みもある。CS231n のノートは、深いネットワークでは時間とともに学習率を下げると役立つことが多いと書いている。

注意点と限界

Google の用語集によると、線形モデルの損失は凸(U字のような形)になるが、深いモデルの損失は凸にならない。凸の問題向けの方法は、深いモデルでもそれなりの解を見つけることが多い。ただし、深いモデルでは見つけた解が全体で最小だという保証はない。

見つかるのは最小に近い値だ。Google の講座は、モデルが損失を最小にする値そのものをほとんど見つけず、それにとても近い値を見つけると書いている。

勾配が小さすぎたり大きすぎたりすると、学習が難しくなるか、できなくなる。用語集によると、勾配消失問題では深いネットワークの初めの層の勾配が平らになり、学習がほとんど進まない。勾配爆発問題では勾配が急になり、重みの更新が大きくなりすぎる。

学習率の下げ方にも加減がいる。CS231n のノートは、ゆっくり下げると計算が無駄になり、急に下げすぎると届きうる最良の位置まで届かないと書いている。

よくある質問

勾配降下法と SGD は同じものか

SGD は勾配降下法の一種だ。Google の用語集はバッチサイズを1にして、ランダムに選んだ1件ずつで学ぶものを SGD と呼ぶ。CS231n のノートによると、ミニバッチを使う場合も SGD と呼ぶことが多い。

なぜ毎回すべてのデータで計算しないのか

データが多いと、1回の更新のために全件の損失を計算するのは効率が悪いからだ。CS231n のノートは、学習用のデータが互いに相関していることを、ミニバッチでうまくいく理由に挙げている。

学習率はどう決めるのか

大きすぎず小さすぎない値を選ぶ。Google の講座によると、学習率は人が決める値(ハイパーパラメーター)で、速く収束する値を選ぶのが目標だ。PyTorch には学習の途中で学習率を変える仕組みも用意されている。

Adam と SGD はどちらを使えばよいか

CS231n のノートは Adam を標準の方法として勧め、SGD にネステロフのモーメンタムを加えた方法も試す価値があるとしている。どちらも学習率の設定は要る。

勾配降下法は深いモデルでも使われるのか

使われる。CS231n のノートは、勾配降下法がニューラルネットワークの損失を最小にする方法として、いまのところもっとも一般的で確立した方法だと書いている。ディープラーニングで使う深いニューラルネットワークでも、誤差逆伝播法で勾配を求めて重みを動かす。

関連する用語

出典

公開
執筆
TRAIL編集部(編集方針)