最終更新日:2026年7月13日
gk neural_network optimization
まず結論
AdaGrad(Adaptive Gradient)は、パラメータごとに学習率を自動調整する最適化手法です。
過去すべての勾配の二乗和を累積し、よく更新されたパラメータほど学習率を小さくします。
G検定では、次のように判断します。
- 「過去すべての勾配の二乗和」→ AdaGrad
- 「学習率が下がり続ける」→ AdaGradの弱点
- 「過去を徐々に忘れる」→ RMSprop
- 「MomentumとRMSpropを組み合わせる」→ Adam
直感的な説明
AdaGradは、パラメータごとに歩幅を変える学習方法です。
- 何度も更新されたパラメータ → 歩幅を小さくする
- あまり更新されていないパラメータ → 比較的大きな歩幅を保つ
たとえば文章データでは、「の」「は」のような頻出語に対応するパラメータは何度も更新されます。 一方、珍しい専門用語に対応するパラメータは、更新される機会が少なくなります。
AdaGradは、頻出する特徴量の更新を慎重にし、珍しい特徴量には比較的大きな更新を残します。
このため、疎な特徴量を扱う自然言語処理などに向くと説明されます。
定義・仕組み
AdaGradは、勾配降下法を改良した最適化手法です。
各パラメータについて、過去の勾配の二乗を足し続けます。
G_t = G_{t-1} + g_t^2
g_t:時刻tの勾配G_t:時刻tまでの勾配二乗和
実際の更新では、学習率を G_t の平方根で割るイメージです。
更新幅 ≒ 学習率 × 勾配 / √(過去の勾配二乗和)
過去の勾配二乗和は学習が進むほど大きくなります。 そのため、分母が大きくなり、更新幅は次第に小さくなります。
パラメータごとに学習率が変わる
AdaGradでは、すべてのパラメータに同じ実効学習率を使うわけではありません。
たとえば2つのパラメータA、Bがあるとします。
- A:これまで何度も大きな勾配を受けた
- B:これまでほとんど勾配を受けていない
この場合、Aの累積値は大きくなり、更新幅は小さくなります。 Bの累積値は小さいため、比較的大きな更新幅を保ちます。
これが、AdaGradの「Adaptive」の意味です。
なぜ学習率が下がり続けるのか
AdaGradは、過去すべての勾配二乗和を累積します。 一度加えた値を忘れないため、累積値は基本的に増え続けます。
その結果、学習後半では更新幅が極端に小さくなり、学習が進みにくくなることがあります。
この弱点を改善するために、古い勾配の影響を徐々に小さくするRMSpropが考案されました。
いつ使う?(得意・不得意)
得意な場面
- 疎な特徴量を扱う問題
- 特徴量ごとに出現頻度が大きく異なる問題
- パラメータごとに学習率を調整したい場合
- 自然言語処理や推薦システムなど
不得意・注意点
- 長時間学習すると更新幅が小さくなりすぎる
- 一度小さくなった実効学習率が回復しにくい
- 深層学習ではRMSpropやAdamが選ばれることも多い
- 学習率の初期値が不要になるわけではない
AdaGradは学習率を自動調整しますが、最初に与える基本学習率まで不要になるわけではありません。
G検定ひっかけポイント
SGD・AdaGrad・RMSprop・Adamの違い
| 手法 | 学習率調整の考え方 | 特徴 | 注意点 |
|---|---|---|---|
| SGD | 基本的に全パラメータで同じ学習率 | 単純で基本的 | 学習率の調整が必要 |
| AdaGrad | 過去すべての勾配二乗和を累積 | 疎な特徴量に向く | 学習率が下がり続ける |
| RMSprop | 勾配二乗の移動平均を使う | 古い勾配を徐々に忘れる | ハイパーパラメータ調整が必要 |
| Adam | MomentumとRMSpropを組み合わせる | 方向と学習率を同時に調整 | 常に最良とは限らない |
AdaBoostとの違い
AdaGradとAdaBoostは名前が似ていますが、役割が違います。
- AdaGrad:ニューラルネットワークなどの最適化手法
- AdaBoost:弱学習器を組み合わせるアンサンブル学習手法
「Boost」が付いているから最適化手法、という判断は誤りです。
よくある誤り
- ❌ 過去の勾配を徐々に忘れる
- ❌ すべてのパラメータで同じ実効学習率を使う
- ❌ 学習が進むと学習率が大きくなる
- ❌ AdaBoostと同じ種類の手法
- ❌ Momentumの考え方を中心に使う
- ❌ 基本学習率の設定が不要になる
選択肢を切る判断基準
- 「過去すべてを累積」→ AdaGrad
- 「移動平均で古い情報を弱める」→ RMSprop
- 「1次モーメントと2次モーメント」→ Adam
- 「弱学習器を重み付きで組み合わせる」→ AdaBoost
- 「疎な特徴量」→ AdaGradが候補
確認問題
問題:AdaGradの説明として最も適切なものはどれか。
- 過去すべての勾配二乗和を使って、パラメータごとの学習率を調整する
- 過去の勾配を一定期間で完全に削除し、常に同じ学習率を使う
- 複数の弱学習器を順番に学習させるアンサンブル手法である
- 勾配の方向だけを平均し、学習率は一切変更しない
答えを見る
**正解:1** AdaGradは、各パラメータについて過去すべての勾配二乗和を累積し、その値を使って更新幅を調整します。 2はRMSpropの説明としても不正確です。3はAdaBoost、4はMomentumに近い説明ですが、AdaGradではありません。まとめ(試験直前用)
- AdaGradはパラメータごとに学習率を調整する最適化手法
- 過去すべての勾配の二乗和を累積する
- 更新が多いパラメータほど学習率が小さくなる
- 疎な特徴量に向く
- 学習率が下がり続ける弱点をRMSpropが改善する