進階最佳化

AdamW 與解耦權重衰減(AdamW / decoupled weight decay)

對單純的 SGD 而言,把 L2 懲罰加進損失、與每一步把權重「衰減」一點點,是完全相同的操作。人們假設這個等價性會延續到 Adam,但它不會。因為 Adam 會把每個梯度除以「該參數近期大小」的逐參數估計,把 L2 項摺進損失就表示那一項也被同一個分母除掉,於是被大量更新的權重所受的衰減,遠少於只被輕微更新的權重。正規化變得不一致,並與最佳化器狀態糾纏在一起。

AdamW 把這兩者解耦。它不把懲罰放進損失裡(那會讓它流經自適應分母),而是在每一步末尾、與自適應更新並列地,直接從權重中減去衰減:theta <- theta - eta (m-hat / (sqrt(v-hat) + epsilon) + lambda theta)。如今每個權重都依其自身大小成真正的比例縮小,不受自適應縮放如何對待它的梯度影響,而這正是權重衰減一直以來該做的事。

這個小修正在實務上影響極大:AdamW 如今是 Transformer 與大型語言模型訓練的預設最佳化器。解耦恢復了誠實、與參數無關的正規化,也讓你能或多或少獨立地調整學習率與衰減強度,而不必讓它們透過二階矩項互相干擾。

\theta_t = \theta_{t-1} - \eta\!\left(\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon} + \lambda\,\theta_{t-1}\right)

衰減項 lambda*theta 加在自適應分母之外。

在數學上,對損失做 L2 正規化與解耦權重衰減只有在逐參數預條件子為單位矩陣時才一致——這對 SGD 成立,對 Adam 則永遠不成立。

又称
AdamWdecoupled weight decay解耦權重衰減