st,j=st−1,j+gt,j 2s_{t,j}=s_{t-1,j}+g_{t,j}^{\,2}
wt+1,j=wt,j−ηst,j+εgt,jw_{t+1,j}=w_{t,j}-\frac{\eta}{\sqrt{s_{t,j}}+\varepsilon}g_{t,j}

完整講解與原文對照 / Full explanation and source comparison

動機:一個學習率管不了所有維度

在深度學習中,學習率通常手動設定後再隨訓練調整。但不同參數維度的梯度大小往往差異很大——某些維度梯度一直很大,某些則長期很小。若用同一個全局學習率,大梯度維度可能步幅過大、小梯度維度則幾乎不動。AdaGrad(Adaptive Gradient)[18] 的解法很直覺:為每個維度各自維護一個學習率。

更新規則(式 (37)–(39))

AdaGrad 的參數更新寫成(式 (37)):

w(k+1):=w(k)−η(k)G−1∇fi(w(k)), \boldsymbol{w}^{(k+1)}:=\boldsymbol{w}^{(k)}-\eta^{(k)} \boldsymbol{G}^{-1} \nabla f_{i}\left(\boldsymbol{w}^{(k)}\right),

其中 G\boldsymbol{G} 是 (d×d)(d \times d) 對角矩陣,第 (j,j)(j,j) 元素為(式 (38)):

G(j,j):=ε+∑τ=0k(∇jfiτ(w(τ)))2. \boldsymbol{G}(j, j):=\sqrt{\varepsilon+\sum_{\tau=0}^{k}\left(\nabla_{j} f_{i_{\tau}}\left(\boldsymbol{w}^{(\tau)}\right)\right)^{2}} .

ε≥0\varepsilon \geq 0 確保數值穩定,iτi_{\tau} 是第 τ\tau 次迭代抽到的樣本索引,∇jfiτ\nabla_{j} f_{i_{\tau}} 是梯度的第 jj 分量。

代入後,逐維度的簡化形式(式 (39))更清楚:

wj(k+1):=wj(k)−η(k)ε+∑τ=0k(∇jfiτ(w(τ)))2∇fj(wj(k)). w_{j}^{(k+1)}:=w_{j}^{(k)}-\frac{\eta^{(k)}}{\sqrt{\varepsilon+\sum_{\tau=0}^{k}\left(\nabla_{j} f_{i_{\tau}}\left(\boldsymbol{w}^{(\tau)}\right)\right)^{2}}} \nabla f_{j}\left(\boldsymbol{w}_{j}^{(k)}\right) .

核心機制:累積梯度平方 → 逐維衰減

AdaGrad 累積歷史梯度資訊——對每個維度 jj,把過去所有迭代的梯度平方加總起來。效果是:

這確保了各維度的更新步幅趨於平衡,讓長期被忽略的維度也能得到足夠的更新。

優點與隱憂

AdaGrad 的優點是對稀疏特徵特別友好——罕見但重要的特徵維度會得到較大的有效學習率。但累積和只增不減,長期訓練後所有維度的有效學習率都會趨近 0,可能導致過早停止學習。這個問題正是下一節 RMSProp 要解決的。

教授祕笈:AdaGrad——誰跑得兇誰被勒韁,活躍維度被罰小步

同學,KP-9 剛講完:一個全局步長 η\eta 等於幫整座山規定同一種跨步。問題是,深網的參數不是一匹馬,是一排馬——有的維度梯度長期很大(狂奔),有的幾乎沒動(慢跑)。同一個 η\eta,狂奔的會衝過頭,慢跑的原地踏步。主線比喻就一個:勒韁。AdaGrad 看誰過去跑得兇,就把那一維的韁繩勒緊——活躍維度被罰小步,安靜維度反而鬆一點,讓各維齊步。

先把任務講成一句人話

一句話:別再用同一個學習率管所有維度;把每個維度歷史梯度的平方累加起來當分母,跑得兇的有效步長自動變小。

鷹架式:先直覺,再符號

為什麼需要它?因為「大梯度維度」跟「小梯度維度」對同一個 η\eta 的體感完全不同:前者一步像跨條河,後者一步像挪一公分。AdaGrad 的解法很土、但有效——每個維度自己記一本帳:把過去所有梯度平方加起來。帳越厚,分母越大,有效學習率 η/分母\eta/\text{分母} 越小。稀疏、罕見、但重要的特徵(長期梯度小)會得到較大的有效學習率,這也是它對稀疏資料特別友善的原因。

符號逐個拆(式 (37)–(39))

更新寫成(式 (37)):

w(k+1):=w(k)−η(k) G−1∇fi(w(k)). \boldsymbol{w}^{(k+1)}:=\boldsymbol{w}^{(k)}-\eta^{(k)}\,\boldsymbol{G}^{-1}\nabla f_{i}\bigl(\boldsymbol{w}^{(k)}\bigr).

G\boldsymbol{G} 是 d×dd\times d 對角矩陣,第 (j,j)(j,j) 個元素是(式 (38)):

G(j,j):=ε+∑τ=0k(∇jfiτ(w(τ)))2. \boldsymbol{G}(j,j):=\sqrt{\varepsilon+\sum_{\tau=0}^{k}\bigl(\nabla_{j}f_{i_{\tau}}(\boldsymbol{w}^{(\tau)})\bigr)^{2}}.

ε≥0\varepsilon\ge 0 是防止分母為 0 的小墊片;iτi_{\tau} 是第 τ\tau 步抽到的樣本;∇j\nabla_{j} 是梯度的第 jj 個分量。對角元素互不干擾,所以這不是在算 Hessian,只是逐維度各自開根號累加。

拆成單一維度(式 (39))更清楚:

wj(k+1):=wj(k)−η(k)ε+∑τ=0k(∇jfiτ)2 ∇jf(w(k)). w_{j}^{(k+1)}:=w_{j}^{(k)}-\frac{\eta^{(k)}}{\sqrt{\varepsilon+\sum_{\tau=0}^{k}(\nabla_{j}f_{i_{\tau}})^{2}}}\,\nabla_{j}f\bigl(\boldsymbol{w}^{(k)}\bigr).

分母裡那個和只增不減——這是優點(活躍維度被壓制),也是後面要講的隱憂。

真的算一遍:兩匹馬,三步之後步幅一樣

取 η=0.2\eta=0.2、ε=0\varepsilon=0(數字乾淨;實務會留一點 ε\varepsilon)。活躍維度 A 的歷史梯度是 3,4,123,4,12;安靜維度 B 是剛好小十倍的 0.3,0.4,1.20.3,0.4,1.2。看「有效學習率」η/∑g2\eta/\sqrt{\sum g^{2}},以及用最後一筆梯度算出的實際步幅。

維度 歷史梯度 ∑g2\sum g^{2} ∑g2\sqrt{\sum g^{2}} 有效學習率 η/⋅\eta/\sqrt{\cdot} 步幅(有效學習率 ×\times 最後一筆 gg)
A 活躍(狂奔) 3,4,123,4,12 9+16+144=1699+16+144=169 1313 0.2/13≈0.01540.2/13\approx 0.0154 0.0154×12≈0.1850.0154\times 12\approx 0.185
B 安靜(慢跑) 0.3,0.4,1.20.3,0.4,1.2 0.09+0.16+1.44=1.690.09+0.16+1.44=1.69 1.31.3 0.2/1.3≈0.1540.2/1.3\approx 0.154 0.154×1.2≈0.1850.154\times 1.2\approx 0.185

A 的當前梯度是 B 的十倍,但有效學習率被勒成 B 的十分之一,兩匹馬最後跨出的步幅都是 0.1850.185。這就是「活躍維度被罰小步」的數字版:罰的不是「不准動」,是把韁繩勒緊,讓大梯度不要把參數甩飛。

再看長期隱憂。若某一維每步梯度都是 11、η=1\eta=1、ε=0\varepsilon=0,有效學習率是 1/k1/\sqrt{k}:

累積步數 kk k\sqrt{k} 有效學習率
11 11 1.0001.000
100100 1010 0.1000.100
10 00010\,000 100100 0.0100.010

帳只會越記越厚,韁繩只會越勒越緊,最後所有維度的有效學習率都趨近 0——過早停止學習。這正是 KP-11 的 RMSProp 要拆掉的那根刺。

先留一個反轉

直覺會說:「梯度大的維度比較重要,應該給它更大的學習率,讓它學快一點。」AdaGrad 做的剛好相反:梯度長期偏大的維度,有效學習率被壓小。原因不是討厭重要維度,而是那些維度已經走很遠了,再給大步會震盪;真正缺更新的,是那些幾乎沒被梯度光顧過的安靜維度。勒的是韁繩,不是把馬打死。

換個場景,自己找出同一條路

把「維度」換成「課堂發言」。話多的學生(活躍維度)被老師限時發言(有效學習率變小),話少的被點名多講一點。各維更新步幅才會趨於平衡。

自己算一題:η=0.5\eta=0.5、ε=0\varepsilon=0,某維歷史梯度為 6,86,8。有效學習率是多少?若當前梯度仍是 88,步幅是多少?(提示:∑g2=36+64=100\sum g^{2}=36+64=100。)

大家最容易在這裡搞混

第一,「G\boldsymbol{G} 是 Hessian」。錯。G\boldsymbol{G} 只是梯度平方累加再開根號的對角矩陣,沒有二階導數。第二,「ε\varepsilon 是動量或學習率」。錯。ε\varepsilon 只是墊在分母裡防止除以零。第三,「AdaGrad 可以無限訓下去」。錯。累積和只增不減,長期有效學習率趨近 0,可能過早停學。

跨知識點掛勾

KP-2、KP-9 都還在用「一個全局 η\eta」;AdaGrad 把 η\eta 拆成「每維一個有效值」。KP-5 的動量是平滑方向;AdaGrad 是縮放步幅——兩件不同的事。KP-11 會把「永不遺忘的累加」改成會遺忘的指數平均,並加上動量,變成 Adam。

換句話重述

AdaGrad 為每個維度累積梯度平方當分母:活躍維度被勒韁、罰小步,安靜維度獲較大有效學習率。優點是稀疏特徵走得動;隱憂是帳只增不減,最後大家都走不動。

一句話收尾: 誰跑得兇誰被勒韁——活躍維度罰小步,齊步了,卻也可能把韁勒死。