---
title: "AdaGradとは？【G検定対策】"
description: "AdaGradは、パラメータごとに過去すべての勾配の二乗和を累積し、更新が多いほど学習率を小さくする最適化手法です。疎な特徴量に向く理由、学習率が下がり続ける弱点、RMSprop・Adam・SGDとの違いを整理します。"
last_modified_at: "2026-07-13"
canonical_url: "https://stemtazoo.github.io/gk/adagrad/"
section: "gk"
---

## まず結論

AdaGrad（Adaptive Gradient）は、**パラメータごとに学習率を自動調整する最適化手法**です。

過去すべての勾配の二乗和を累積し、よく更新されたパラメータほど学習率を小さくします。

G検定では、次のように判断します。

- 「過去すべての勾配の二乗和」→ AdaGrad
- 「学習率が下がり続ける」→ AdaGradの弱点
- 「過去を徐々に忘れる」→ RMSprop
- 「MomentumとRMSpropを組み合わせる」→ Adam

## 直感的な説明

AdaGradは、パラメータごとに歩幅を変える学習方法です。

- 何度も更新されたパラメータ → 歩幅を小さくする
- あまり更新されていないパラメータ → 比較的大きな歩幅を保つ

たとえば文章データでは、「の」「は」のような頻出語に対応するパラメータは何度も更新されます。
一方、珍しい専門用語に対応するパラメータは、更新される機会が少なくなります。

AdaGradは、頻出する特徴量の更新を慎重にし、珍しい特徴量には比較的大きな更新を残します。

このため、**疎な特徴量を扱う自然言語処理などに向く**と説明されます。

## 定義・仕組み

AdaGradは、勾配降下法を改良した最適化手法です。

各パラメータについて、過去の勾配の二乗を足し続けます。

```text
G_t = G_{t-1} + g_t^2
```

- `g_t`：時刻tの勾配
- `G_t`：時刻tまでの勾配二乗和

実際の更新では、学習率を `G_t` の平方根で割るイメージです。

```text
更新幅 ≒ 学習率 × 勾配 / √(過去の勾配二乗和)
```

過去の勾配二乗和は学習が進むほど大きくなります。
そのため、分母が大きくなり、更新幅は次第に小さくなります。

### パラメータごとに学習率が変わる

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. 過去すべての勾配二乗和を使って、パラメータごとの学習率を調整する
2. 過去の勾配を一定期間で完全に削除し、常に同じ学習率を使う
3. 複数の弱学習器を順番に学習させるアンサンブル手法である
4. 勾配の方向だけを平均し、学習率は一切変更しない

<details>
<summary>答えを見る</summary>

**正解：1**

AdaGradは、各パラメータについて過去すべての勾配二乗和を累積し、その値を使って更新幅を調整します。

2はRMSpropの説明としても不正確です。3はAdaBoost、4はMomentumに近い説明ですが、AdaGradではありません。

</details>

## まとめ（試験直前用）

- AdaGradは**パラメータごとに学習率を調整する最適化手法**
- 過去すべての勾配の二乗和を累積する
- 更新が多いパラメータほど学習率が小さくなる
- 疎な特徴量に向く
- 学習率が下がり続ける弱点をRMSpropが改善する
