層歸一化的放置(layer norm placement)
/ LAY-er norm PLAYS-ment /
層歸一化,是一個小小的「打理家務」的步驟,它在下一步計算之前,把流經每個詞元的數值重新縮放到一個一致、安分的範圍——不太大,也不太小。沒有它,向上穿過一摞深層的數值會失控地膨脹或縮小,訓練就散架了。所謂「放置」,指的是一個看似微不足道、卻結果舉足輕重的設計抉擇:你把這個歸一化步驟放在每一層的哪個位置。
主要有兩種選擇。在後歸一化(post-norm,即最初的設計)裡,歸一化排在注意力或前饋塊之後、且在其殘差連接之後——層先幹活,把輸入加回來,再歸一化。在前歸一化(pre-norm)裡,歸一化排在最前,在塊之前,於是殘差通路從下到上一路乾淨、未經歸一化。這看似只是瑣碎的重排,卻改變了訓練時梯度的流動方式,而一旦你堆起許多層,這一改變便變得決定性。
實踐上的結論是:前歸一化在深處遠更易訓練。後歸一化模型常需要精巧的預熱計劃與小心的調參,否則乾脆發散;而前歸一化模型即便很深也訓練穩定,這正是當今大多數大型 Transformer 採用它的原因。誠實的細微處在於:這份穩定並非免費——後歸一化在你能馴服它時,有時能達到略好的最終質量。這是一樁貨真價實的權衡,而這麼個看著不起眼的放置決定,竟能成就或毀掉一次造價上億的訓練,謙卑地提醒著我們:這門領域有多大一部分是經驗性的工程,而非乾淨的理論。
兩個模型,除一處外完全相同:一個在每個子塊之前歸一化(前歸一化),另一個在之後(後歸一化)。在 12 層時兩者都訓得好。到 48 層時,後歸一化模型需要小心的學習率預熱才不至於爆炸,而前歸一化模型開箱即可平穩訓練。
把一個步驟挪動這麼一點點,就決定了一個深層模型到底能不能訓得起來。
前歸一化與後歸一化是一樁真權衡,而非免費升級。前歸一化能穩定地訓練深層模型,是當今的常見選擇;調好的後歸一化有時能達到略高的最終質量。無論選哪種,歸一化本身都不是可選項——沒有它的深層 Transformer 根本訓不起來。