學習率預熱 是什麼?
Learning Rate Warmup:學習率預熱 的完整解釋
訓練初期逐漸增加學習率,避免初始化不佳導致的訓練不穩定,通常在前幾個 epoch 內從 0 線性增加到目標值。
核心概念
Learning Rate Warmup 的核心思想是:在訓練初期,模型的梯度估計可能不夠準確,過大的學習率會導致參數劇烈波動,造成訓練不穩定。通過在初期使用較小的學習率,讓模型有機會逐漸調整,梯度估計逐漸變得更可靠,然後再過渡到完整的學習率。
預熱通常與其他學習率衰減策略(如 cosine annealing)結合使用。標準的設定是:在前 k 個訓練步驟中,學習率從 0 線性增加到目標值 η;之後按計劃衰減目標值。
運作原理
Learning Rate Warmup 的實現有多種方式:
- 線性預熱:設定預熱步數 w,在前 w 步內,學習率 = (step / w) * η
- 指數預熱:學習率 = η * (base ^ step),其中 base 略大於 1
- 平方根預熱:學習率 = η * sqrt(step / w)
最常見的是線性預熱。舉例:如果總訓練 100000 步,預熱 4000 步,目標學習率 0.001,那麼:
- 步驟 0:lr = 0
- 步驟 1000:lr = 0.00025
- 步驟 2000:lr = 0.0005
- 步驟 4000:lr = 0.001
- 步驟 5000 及之後:按衰減計劃調整
預熱不是替代優化器的調度(schedule),而是在優化器調度前面進行的前置處理。許多實現中,預熱和衰減是兩個獨立的過程:先預熱到目標值,再按衰減計劃(如 cosine annealing)調整。
實際應用
Learning Rate Warmup 在大規模深度學習訓練中已成為標準做法。在 Transformer 模型訓練中(包括 BERT、GPT 等),預熱是必要的。Google 的論文建議針對 Transformer 使用預熱,發現 4000 步的預熱能穩定大規模模型訓練。
在分布式訓練中,預熱特別重要。初期的大批次梯度估計方差大,預熱讓所有工作節點有時間同步訓練狀態。許多分布式框架(如 Horovod)都內建預熱支持。
ResNet 等深層卷積網路的訓練也常用預熱。在 ImageNet 分類中,一個 warmup epoch(或前 5 個 epoch 的漸進式預熱)能顯著改善最終準確度。
遷移學習中,預熱也很有用。當用預訓練權重初始化時,較小的初始學習率和預熱能防止過度調整預訓練特徵。
常見誤區
誤區一:認為預熱步數越多越好。過長的預熱會浪費訓練時間,因為在這段期間模型的實際學習進度較慢。預熱步數應與總訓練步數成比例,通常為 5-10%。
誤區二:誤認為預熱是解決所有訓練不穩定問題的方案。預熱只適用於初期不穩定,如果是梯度爆炸或消失,可能需要梯度剪裁或不同的初始化策略。
誤區三:使用預熱而忽視其他超參數調整。預熱有效的前提是其他超參數(如基礎學習率、批量大小、最佳化器選擇)都相對合理。
與相關技術的比較
Learning Rate Warmup vs 梯度剪裁:梯度剪裁通過限制梯度大小來穩定訓練,而預熱通過逐漸增加學習率來穩定。兩者可以結合使用,處理不同的不穩定來源。
Learning Rate Warmup vs 批量歸一化:批量歸一化(Batch Normalization)也能穩定訓練初期的梯度,但兩者原理不同。BN 是在網路內部進行,預熱是在最佳化層面。現代模型通常結合使用。
Learning Rate Warmup vs Cosine Annealing:預熱和 cosine annealing 通常結合,預熱在初期逐漸增加學習率,annealing 在後期逐漸減小。他們作用於訓練的不同階段。
Learning Rate Warmup vs Learning Rate Decay:預熱是初期增加過程,衰減是後期遞減過程。預熱之後通常跟著衰減,兩者組成完整的學習率時間表。