AdaGradとは?学習率を自動調整する仕組みと注意点をわかりやすく解説

AIの初心者
『エイダグラッド』は、学習の進め方を調整する手法ですよね?普通の方法と比べて、何が違うんですか?

AI専門家
そうだね。AdaGradは、過去の勾配の大きさを記録しながら、パラメータごとに学習の歩幅を変える最適化手法だよ。通常の勾配降下法より、細かく学習率を調整できるところが特徴なんだ。

AIの初心者
過去の勾配を記録すると、なぜ学習しやすくなるのでしょうか?

AI専門家
大きく動いてきた方向では歩幅を小さくし、あまり動いていない方向では歩幅を保てるからだよ。ただし、記録した量は増え続けるので、後半に学習が進みにくくなる弱点もあるんだ。
AdaGradとは。
AdaGrad(エイダグラッド)は、機械学習でモデルを訓練するときに使う最適化手法の一つです。過去の勾配の二乗和をパラメータごとに蓄積し、その値に応じて学習率を自動的に調整します。よく更新されるパラメータはだんだん小さく動かし、あまり更新されていないパラメータは相対的に動きやすくする点が特徴です。
AdaGradとは?学習率を自動調整する最適化手法

機械学習では、モデルの予測と正解のずれを小さくするために、パラメータを少しずつ更新します。この更新の方向を示す情報が勾配で、更新の大きさを決める値が学習率です。学習率が大きすぎると最適な値を通り過ぎやすく、小さすぎると学習がなかなか進みません。
AdaGradは、すべてのパラメータに同じ学習率を使うのではなく、パラメータごとに学習率を変える手法です。過去に大きな勾配が何度も出たパラメータでは更新幅を小さくし、あまり勾配が出ていないパラメータでは更新幅を相対的に保ちます。
この性質により、特徴量ごとに出現頻度や重要度が大きく異なるデータでも、学習の進み方を調整しやすくなります。たとえば自然言語処理では、よく出る単語とまれにしか出ない単語が混在します。AdaGradは、このような偏りがあるデータで、まれな特徴量を過度に置き去りにしにくい点が評価されてきました。
勾配降下法との違い

通常の勾配降下法や確率的勾配降下法(SGD)は、現在の勾配を見てパラメータを更新します。基本的な考え方は、損失が小さくなる方向へ一定の歩幅で進むことです。実装が単純で理解しやすい一方、どのパラメータにも同じ学習率を使うと、よく動く方向とあまり動かない方向を同じ基準で扱ってしまいます。
一方、AdaGradは過去の勾配を記録します。過去に大きく変化した方向では「もう十分に動いている」と判断して歩幅を小さくし、変化が少なかった方向では相対的に歩幅を保ちます。山を下る例でいえば、SGDは同じ歩幅で斜面を下る方法、AdaGradはこれまでの足取りを見ながら方向ごとに歩幅を変える方法です。
| 手法 | 学習率の扱い | 特徴 |
|---|---|---|
| 勾配降下法・SGD | 全体で同じ学習率を使うことが多い | 単純で扱いやすいが、学習率の調整に試行錯誤が必要 |
| AdaGrad | パラメータごとに学習率を自動調整する | 過去の勾配が大きい方向ほど更新幅を小さくする |
AdaGradが学習率を調整する仕組み

AdaGradの中心にあるのは、過去の勾配の二乗和を蓄積するという考え方です。勾配をそのまま足すのではなく二乗して足すため、正負の向きに関係なく「どれくらい大きく動いてきたか」を記録できます。
あるパラメータで大きな勾配が何度も出ると、そのパラメータに対応する蓄積値は大きくなります。AdaGradでは、この蓄積値の平方根で学習率を割るため、蓄積値が大きいほど実際の更新幅は小さくなります。逆に、勾配があまり出ていないパラメータでは蓄積値が小さいため、更新幅が急激には小さくなりません。
この仕組みによって、学習の初期には比較的大きく動き、学習が進むにつれて慎重に更新する流れを作れます。手動で細かく学習率を変えなくても、各パラメータの過去の動きに応じた調整が入る点が、AdaGradの大きな利点です。
更新式の読み方

\(
h_t = h_{t-1} + g_t^2
\)
\(
\theta_{t+1} = \theta_t – \frac{\eta}{\sqrt{h_t} + \epsilon} g_t
\)
ここで、\(g_t\) は時刻 \(t\) の勾配、\(h_t\) は過去の勾配の二乗和、\(\eta\) は元になる学習率、\(\epsilon\) はゼロ除算や数値的な不安定さを避けるための小さな値です。\(\theta\) はモデルが学習しているパラメータを表します。
式の意味を言葉で読むと、まず現在の勾配を二乗して、これまでの蓄積値に足します。次に、その蓄積値の平方根で学習率を割り、調整済みの学習率として使います。つまり、勾配が大きく出続けたパラメータほど、次回以降の更新幅が小さくなるという動きになります。
初心者がつまずきやすい点は、「学習率がなくなる」のではなく「元の学習率がパラメータごとに割り引かれる」と考えることです。AdaGradでは、学習率そのものを一つだけ変更しているのではなく、各パラメータに対して実効的な学習率を計算しています。
長所と短所
AdaGradの長所は、学習率の調整をある程度自動化できることです。すべてのパラメータに同じ歩幅を与えるよりも、過去の動きに応じて更新幅を変えられるため、学習が安定しやすくなります。特に、入力の特徴量が疎で、よく現れる特徴とまれに現れる特徴が混在する場合に有効です。
一方で、短所も明確です。AdaGradの蓄積値 \(h_t\) は、学習が進むほど基本的に大きくなり続けます。そのため、分母も大きくなり、実効的な学習率はだんだん小さくなります。初期にはうまく働いていても、後半では更新幅が小さくなりすぎ、最適な値にたどり着く前に学習が停滞することがあります。
| 観点 | 内容 |
|---|---|
| 長所 | パラメータごとに学習率を調整でき、手動調整の負担を減らしやすい |
| 長所 | 疎な特徴量を含むデータで、まれな特徴を学習に反映しやすい |
| 短所 | 勾配の二乗和が増え続けるため、学習の後半で更新が小さくなりすぎる |
| 短所 | 長時間の学習や複雑なニューラルネットワークでは、RMSPropやAdamのほうが扱いやすい場合がある |
RMSPropやAdamとの関係

AdaGradの弱点である「学習率が小さくなり続ける」問題を緩和するために、RMSPropやAdamのような手法が広く使われるようになりました。RMSPropは、過去の勾配情報をすべて同じ重さで蓄積するのではなく、古い情報の影響を徐々に弱めます。これにより、分母が一方的に大きくなり続ける問題を抑えます。
Adamは、RMSPropのような二乗勾配の移動平均に加えて、勾配そのものの移動平均も利用する手法です。実務ではAdamが初期選択として使われることも多いですが、AdaGradを理解しておくと、これらの発展手法が何を改善しているのかを追いやすくなります。
つまり、AdaGradは古い手法として片づけるものではなく、適応的学習率の基本を理解するうえで重要な土台です。学習率を固定する考え方から、パラメータごとに調整する考え方へ移る橋渡しとして捉えると理解しやすくなります。
AdaGradを使うときの注意点
AdaGradを使うときは、まずデータやモデルの性質を確認することが大切です。特徴量が疎で、出現頻度に大きな差がある場合は、AdaGradの個別調整が役立つことがあります。一方、深いニューラルネットワークを長く学習させる場合は、学習後半の停滞が問題になる可能性があります。
また、元の学習率 \(\eta\) を完全に考えなくてよいわけではありません。AdaGradは学習率を自動調整しますが、最初に与える学習率が極端に大きい、または小さい場合は、学習が不安定になったり進まなかったりします。最適化手法を選ぶときは、損失の推移、検証データでの性能、更新が止まっていないかを合わせて確認します。
実装上は、多くの機械学習ライブラリにAdaGradが用意されています。自分で式を実装する場合は、分母に小さな \(\epsilon\) を足すこと、パラメータごとに蓄積値を持つこと、勾配を二乗して蓄積することを忘れないようにします。
まとめ
AdaGradは、過去の勾配の二乗和を使って、パラメータごとに学習率を自動調整する最適化手法です。よく更新されるパラメータでは歩幅を小さくし、あまり更新されないパラメータでは相対的に歩幅を保つことで、学習の進み方を細かく調整します。
勾配降下法との大きな違いは、現在の勾配だけでなく、過去の勾配の履歴を使う点です。この仕組みにより、疎な特徴量を含むデータでは有効に働きやすい一方、蓄積値が増え続けるため、学習後半に更新が小さくなりすぎる弱点があります。
RMSPropやAdamは、この弱点を改善する方向で発展した手法です。AdaGradの仕組みを理解しておくと、学習率調整、適応的最適化、各手法の使い分けをより自然に理解できます。
更新履歴
| 日付 | 内容 |
|---|---|
| 2025年1月31日 | 初回公開 |
| 2026年5月17日 | 更新式、関連手法、学習停滞の注意点を本文に反映 |
