AdaGradとは?意味をわかりやすく簡単に解説
公開:
AdaGradとは
AdaGradとは、機械学習における最適化アルゴリズムの一種で、学習率を各パラメータごとに適応的に調整する手法です。2011年にDuchiらによって提案されたこのアルゴリズムは、過去の勾配情報を蓄積することで、頻繁に更新されるパラメータの学習率を小さくし、まれに更新されるパラメータの学習率を大きく保ちます。
このアルゴリズムは確率的勾配降下法における、学習率の手動調整の問題を解決するために開発されました。AdaGradでは、各パラメータの過去の勾配の二乗和を記録し、その平方根で学習率を除算することで、パラメータごとに異なる学習率を自動的に設定します。
学習率の適応的調整メカニズム
AdaGradの学習率調整は、各パラメータの勾配履歴を累積する行列を用いて実現されます。具体的に言うと、時刻tにおけるパラメータθの更新式は、θ = θ - η / √(G + ε) × gとなり、ここでGは過去の勾配gの二乗和、ηは初期学習率、εは数値安定性のための微小値です。
| 変数名 | 説明 |
|---|---|
| θ | 更新対象のパラメータ |
| η | 初期学習率(0.01程度) |
| G | 勾配の二乗和累積値 |
| g | 現在の勾配ベクトル |
| ε | ゼロ除算防止値(10^-8) |
この仕組みにより、大きな勾配を持つパラメータは学習率が急速に減少し、小さな勾配を持つパラメータは比較的大きな学習率を維持します。テキスト分類や自然言語処理のような「まばらなデータ」を扱うタスクでは、出現頻度の低い特徴量に対しても適切な学習が可能になるため、特に有効性を発揮します。
Pythonによる実装例
AdaGradをPythonで実装する場合、NumPyライブラリを使用して勾配の二乗和を管理します。以下は基本的な実装例で、パラメータ更新の一連の流れを示しています。
import numpy as np
class AdaGrad:
def __init__(self, learning_rate=0.01, epsilon=1e-8):
self.lr = learning_rate
self.epsilon = epsilon
self.h = None
def update(self, params, grads):
if self.h is None:
self.h = np.zeros_like(params)
self.h += grads * grads
params -= self.lr * grads / (np.sqrt(self.h) + self.epsilon)
return params
上記のコードでは、h変数が勾配の二乗和を累積する役割を果たし、初回の更新時にパラメータと同じ形状のゼロ配列として初期化されます。updateメソッドでは、現在の勾配gradsの二乗をhに加算し、学習率をhの平方根で除算した値を用いてパラメータを更新することで、適応的な学習率調整を実現しています。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
左へフリックで次のページ、右へフリックで前のページに戻れます左右の矢印ボタン、左右のスワイプで移動できます





