優化與訓練

Adam 優化器(Adam optimizer)

/ AD-um OP-tih-my-zer /

Adam 是大多數人最先伸手去拿的優化器,因為它往往不用怎麼調就能「就這麼work了」。理解它最好的方式,是把它看成兩個更早的念頭的一次明智結合。從動量那裡,它保留一份「自己一直朝哪個方向走」的滑動記憶,於是不會東倒西歪。從 RMSprop 之類的自適應方法那裡,它給每一個權重都配一個專屬的步長,按那個權重的梯度近來抖動得有多厲害來縮放。

這個名字是「自適應矩估計」(Adaptive Moment Estimation)的縮寫。它為每個參數追蹤兩份滑動平均:梯度的平均(「一階矩」,就像動量的速度)和梯度平方的平均(「二階矩」,衡量那個方向近來有多帶雜訊)。梯度一向又大又飄忽的參數,會得到更小、更謹慎的步子;梯度一向又小又穩的參數,則會得到相對更大的步子。正是這種「逐權重」的自適應,讓 Adam 往往訓練得快,並且開箱即用就能很好地應付那些雜亂、尺度不齊的問題。

Adam 的流行實至名歸,但它並不是魔法。它的預設設置出奇地常常管用,這正是人們倚重它的原因——可在某些視覺任務上,它的泛化可能比調好的普通 SGD 略差一點,也可能收斂到不那麼「平坦」的解。被廣泛使用的變體 AdamW 修正了 Adam 處理權重衰減的方式,如今已是訓練大語言模型的標準。Adam 減少了你必須擺弄學習率的程度,但並沒有免去你設一個學習率的必要。

假設有一個權重的梯度一直又大又跳,另一個權重的梯度一直又小又穩。普通 SGD 對兩者用同樣的步長。而 Adam 因為追蹤了每個權重近來的梯度平方,會自動把那個亂跳權重的步子縮小,讓那個平穩權重走得更自如——無需逐權重地手動調。

Adam 給每個權重配一個自適應的專屬步長。

Adam 的預設值是個很好的起點,而不是保證。論泛化的極致,在某些任務上調好的帶動量 SGD 仍然勝出——而對 Transformer,要用 AdamW(權重衰減解耦的那個版本),而不是原版 Adam。

又稱
AdamAdaptive Moment EstimationAdamWAdam 优化器Adam 優化器