AdaGrad (Adaptive Gradient Algorithm) による学習率調整
AdaGrad は、パラメータごとに学習率を適応的に調整する最適化アルゴリズムです。「よく更新されるパラメータは慎重に、あまり更新されないパラメータは大胆に」更新するというアイデアに基づいています。
AdaGrad の更新ステップ
時刻 \(t\) におけるパラメータ \(w\) の更新は、以下のステップで行われます。
- 勾配の計算: 現在のパラメータ \(w_t\) における損失関数の勾配 \(g_t = \nabla L(w_t)\) を計算します。
- 勾配の二乗和の蓄積: パラメータごとに、これまでの勾配の二乗和 \(h_t\) を計算します。\(h_t = h_{t-1} + g_t^2\) (要素ごとの二乗。初期値 \(h_0 = 0\)
- パラメータの更新: 蓄積された勾配の二乗和 \(h_t\) を用いて、学習率を調整しながらパラメータを更新します。
$w_{t+1} = w_t - \frac{\eta}{\sqrt{h_t + \epsilon}} g_t$
ここで、\(\eta\) は基本的な学習率(ハイパーパラメータ)、\(\epsilon\) はゼロ除算を防ぐための非常に小さな定数(例: \(10^{-8}\)です。除算と平方根は要素ごとに行われます。
この式における \(\eta'_t = \frac{\eta}{\sqrt{h_t + \epsilon}}\) が、時刻 \(t\) におけるパラメータ \(w\) に対する実効的な学習率と見なせます。
今回の問題における計算
この問題では、特定のステップにおける実効的な学習率 \(\eta'\) を計算することが求められています。与えられた値は以下の通りです。
- これまでの勾配の二乗和: \(h = 10\) (これは上記更新式の \(h_t\) に相当すると考えられます)
- 基本的な学習率: \(\eta = 0.1\)
- 現在の勾配: \(g = 3\) (この値は実効学習率の計算には直接不要ですが、\(h\) がこの勾配を含む過去の情報を蓄積した結果であることを示唆します)
- ゼロ除算防止項: \(\epsilon = 10^{-8}\) (無視できるほど小さいと仮定)
実効的な学習率 \(\eta'\) を計算します。\(\epsilon\) は無視できるため、式は \(\eta' = \frac{\eta}{\sqrt{h}}\) となります。
$\eta' = \frac{\eta}{\sqrt{h}} = \frac{0.1}{\sqrt{10}}$
\(\sqrt{10} \approx 3.16227766...\) なので、
$\eta' \approx \frac{0.1}{3.16227766} \approx 0.0316227...$
したがって、このステップで使用される実効的な学習率は約 0.0316 です。
AdaGradのポイント
- 利点: 学習率のチューニングの手間が減り、特に特徴ごとに出現頻度が大きく異なるスパースなデータ(例: 自然言語処理における単語埋め込み)に対して効果を発揮しやすいです。
- 欠点: 学習が進むにつれて勾配の二乗和 \(h\) が単調に増加し続けるため、分母が大きくなりすぎて学習率が極端に小さくなり、学習が早期に停止してしまう(更新されなくなる)問題があります。
- 改善策: この欠点を緩和するために、過去の勾配情報を指数移動平均で減衰させる RMSprop や Adam などのアルゴリズムが提案されています。