權重衰減(weight decay)
/ wayt dih-KAY /
權重衰減,是一股溫柔的壓力,讓模型內部的那些數字(它的權重)別長得太大。直覺是:一個權重巨大的模型,往往是抓住了一些尖銳、極端、專為訓練資料量身定制的規則——這常是「在死記而非在理解」的跡象。權重衰減加進一股朝更小權重推的恆定力,鼓勵更簡單、更平滑的解,而這種解往往對新資料泛化得更好。
它的做法,是往損失函數裡加一項懲罰:除了「你的預測有多錯」,模型還要為「你的權重有多大」付費。最常見的形式 L2 正則化,懲罰的是權重平方之和,會把所有權重都溫柔地縮向零。一種相關的形式 L1 正則化,懲罰的是權重絕對值之和,往往會把一些權重正好壓到零——等於把某些特徵關掉,這能讓模型更簡單、更可解釋。一個單獨的強度旋鈕,控制著這股壓力推得有多狠。
為什麼要費這個事?因為靈活性是一把雙刃劍:一個強到能學會真實模式的模型,也強到能死記雜訊,而權重衰減把它往前者那邊扳。它直接對抗過擬合,與 dropout、提前停止等手段並肩作戰。有一個值得老實交代的褶皺:在 Adam 之類的自適應優化器裡,那種樸素地加懲罰的做法,會與逐權重的步長發生不良的相互作用,這恰恰就是 AdamW 被造出來的原因——把權重衰減「解耦」開,乾淨地施加。
用一條扭來扭去的曲線去穿過10個帶雜訊的點,一個不加約束的模型會畫出一條狂野、帶尖刺的線,精確命中每一個點,卻在點與點之間荒謬地大幅擺盪。加上權重衰減,同一個模型就退而求一條平滑、和緩的曲線,每個點都略有偏差,卻抓住了真實的趨勢——對新點的預測也好得多。
對大權重施加懲罰,換來更平滑、更能泛化的曲線。
對普通 SGD 而言,「權重衰減」和「L2 正則化」是一回事,但在自適應優化器內部,二者有微妙的不同。對 Transformer,要用 AdamW,它能正確地施加解耦的權重衰減。