JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

超越 Adam:預條件與更新的幾何

每一個最佳化器都是一種幾何的選擇。學會把 SGD、動量、AdamW 與鏡像下降讀成對同一個問題的不同回答:梯度步應該在哪一種度量下才算是一步?

最佳化器其實是一種度量

你已經熟悉梯度下降:把縮放後的梯度從權重中減去。但梯度其實不是權重空間中的一個方向——它是一個餘向量(covector),吃進一個方向、吐出一個斜率。要把它變成一次移動,你必須挑一個度量,告訴你兩組參數設定之間有多遠。單純的 SGD 默默假設了歐氏度量(Euclidean metric):改變每個座標的代價都一樣。對深度網路而言這個假設幾乎從不成立——某一層的權重可能比另一層敏感上千倍。

一旦這樣看,整個進階最佳化器的動物園就化約成一個有許多面孔的想法:用對局部幾何的估計來對梯度做預條件(precondition),然後再走一步。更新式是 `w ← w − η P⁻¹ g`,其中 `g` 是梯度、`P` 是把空間重新縮放(並旋轉)的預條件子。SGD 取 `P = I`;Adam 取由梯度平方構成的對角 `P`;二階方法則從曲率取 `P`。關鍵的手藝是挑一個既有資訊量便宜的 `P`。

w \;\leftarrow\; w - \eta\, P^{-1} g

本指南中的每一个优化器都是这同一个更新——矩阵 P 编码了梯度步所处的几何。

AdamW:最重要的一行修正

過去十年最有後果的一項改良,小得幾乎令人尷尬。經典 Adam 搭配 L2 正則化時,會在自適應縮放之前把 `λw` 加進梯度。這表示每個權重的有效衰減被它自己的梯度大小估計給除掉了——梯度大的權重幾乎不衰減,梯度小的權重卻重重衰減。你以為設好的正則化,根本不是你拿到的那個。AdamW 透過解耦(decouple)衰減來修正:先做自適應更新,再用一個獨立的乘性項 `w ← (1 − ηλ) w` 來收縮權重。

# AdamW: decay is NOT mixed into the gradient
m = b1*m + (1-b1)*g
v = b2*v + (1-b2)*(g*g)
mh, vh = m/(1-b1**t), v/(1-b2**t)
w = w - lr*(mh/(vh.sqrt()+eps) + wd*w)   # wd*w sits OUTSIDE the 1/sqrt(v) rescale
解耦權重衰減:`wd*w` 這一項不會被二階動量估計除掉。

為何要在意一項而已?因為權重衰減是少數能可靠改善過參數化網路泛化能力的旋鈕之一,而把它和最佳化器耦合在一起,會把一個乾淨的超參數變成一團亂麻。AdamW 如今幾乎是所有 transformer 的預設值。如果這篇你只帶走一件實務上的事,那就是:用 AdamW,而不是 Adam 加 L2,並且把衰減和學習率分開調。

w_t \leftarrow w_{t-1} - \eta\,\dfrac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} - \eta\,\lambda\, w_{t-1}

AdamW 的一行修正:权重衰减项 λw 被直接相减,绝不经过自适应二阶矩的重新缩放。

把動量做對:重球法與 Nesterov

動量累積一個速度,讓迭代點滾過小梯度、並抑制在狹窄山谷裡橫向的振盪。經典的重球法(heavy-ball)在當前點計算梯度後加進速度。Nesterov 加速梯度只做一個外科手術般的更動:在一個前瞻點(look-ahead point)——速度即將把你帶到的地方——計算梯度,再從那裡修正。直覺是:這顆球能看見前方的坡度,在衝過頭之前就先煞車,而不是之後。

观察迭代点沿损失曲面向下滚动——动量让它带着速度穿过小梯度,并抑制在狭窄山谷间的振荡。

一个小球沿损失曲面向最小值滚动的交互演示。

在光滑的凸(convex)問題上,這不只是一個經驗法則:Nesterov 法可被證明把收斂率從 `O(1/t)` 改善到 `O(1/t²)`,這個加速率達到了一階方法的下界。深度網路是非凸的,所以定理並不字面成立——但前瞻修正仍帶來真實、可量測的振盪下降,這也是為何多數框架在 SGD 上都提供 `nesterov=True` 旗標。

鏡像下降:當幾何不是歐氏的

有時候正確的度量根本不是歐氏空間的縮放。如果你的參數活在機率單純形上(必須非負且總和為一),歐氏步可能直接把你走出這個集合。鏡像下降把梯度下降推廣到由 Bregman 散度(Bregman divergence)所定義的幾何——一種由嚴格凸位能函數建構出來的距離。選平方歐氏位能,你就還原成普通的 SGD;選負熵,你就還原成指數化梯度(exponentiated-gradient)更新,它依建構就停留在單純形上,並以乘性而非加性的方式縮放。

w_{t+1} = \arg\min_{w}\;\langle g_t,\, w\rangle + \tfrac{1}{\eta}\, D_\psi\!\left(w,\, w_t\right)

镜像下降:最小化线性化损失加上一个 Bregman 距离,使“接近”在你所选的非欧几何中度量。

鏡像下降在這裡之所以重要有兩個原因。第一,它是最乾淨的形式化陳述,說明幾何是一種設計選擇、而非自然律——這正是 AdamW 與自然梯度在數值上兌現的同一個洞見。第二,若干現代技巧(乘性權重更新、某些針對 attention logits 的最佳化器、線上學習演算法)其實都是偽裝的鏡像下降,因此認出這個模式能讓你在它們之間轉移理論保證。

一個可用的心智模型

  1. 把任何更新寫成 `w ← w − η P⁻¹ g`。問:`P` 是什麼?它對局部幾何說的是不是實話?
  2. 把任何在概念上與梯度步分離的東西解耦——首先就是權重衰減(AdamW)。
  3. 若問題是在山谷間振盪,就加動量,並偏好 Nesterov 前瞻變體。
  4. 若參數活在受約束的集合或非歐空間上,問問鏡像下降是否給出更自然的一步。

把這個 `P⁻¹ g` 模板放在腦中。接下來的一切——費雪度量、Kronecker 因子、銳度懲罰、逐層縮放——都是對「`P` 該是什麼」這同一個問題的更有野心的回答。學習軌其餘部分,不過就是愈來愈好的 `P`。