學習率預熱是什么?
學習率預熱(Learning Rate Warmup) 是一種在深度學習訓練初期逐漸增加學習率的策略。其核心思想是:在訓練開始時使用較小的學習率,逐步增加到目標學習率,以避免模型參數在初始階段因學習率過大而劇烈波動,導致訓練不穩定。
數學公式(線性預熱)
假設目標學習率為 lrtargetlr_{target}lrtarget?,預熱總步數為 TwarmupT_{warmup}Twarmup?,當前步數為 t(0≤t<Twarmup)t(0≤t<T_{warmup})t(0≤t<Twarmup?),則預熱階段的學習率 lrtlrt? 可表示為:
lrt=lrtarget?tTwarmuplr_t=lr_{target}?\frac{t}{T_{warmup}}lrt?=lrtarget??Twarmup?t?
如果預熱階段結束后,學習率會保持lrtargetlr_{target}lrtarget?? 或根據其他策略(如衰減)調整。
學習率預熱的作用
-
緩解模型初始不穩定
模型參數在訓練初期是隨機初始化的,若直接使用大學習率更新參數,可能導致梯度爆炸或震蕩。預熱階段通過小學習率逐步調整參數,使模型逐漸穩定。 -
加速收斂
預熱后,學習率達到目標值,模型可以更快地收斂。例如,在Transformer模型中,預熱策略能顯著提升訓練效率。 -
防止過擬合
初始階段的小學習率有助于模型在數據分布上“探索”,避免過早過擬合到局部特征。
圖示說明(文字描述)
假設預熱總步數為 100,目標學習率為 0.001,則學習率變化如下:
學習率變化曲線:
|
| /\
| / \
| / \
| / \
| / \
| / \
| / \
| / \
| / \
|/__________________\______> 步數0 50 100
- 前 100 步(預熱階段):學習率從 0 線性增加到 0.001。
- 第 100 步后:學習率保持 0.001 或按衰減策略調整。
生活中的例子
-
開車起步
想象你駕駛一輛新車,如果直接猛踩油門,車可能會突然加速導致失控。相反,緩慢踩下油門(預熱階段),讓車速逐漸提升到目標速度(目標學習率),能更安全地行駛。 -
健身鍛煉
剛開始跑步時,如果直接全力沖刺,容易肌肉拉傷或疲勞。通常會先慢走或慢跑熱身(預熱階段),再逐漸加速到正常強度。
實現代碼(PyTorch 示例)
from torch.optim.lr_scheduler import LambdaLR
import torch.optim as optim# 定義優化器
optimizer = optim.Adam(model.parameters(), lr=0.001)# 預熱總步數
T_warmup = 100# 定義學習率調度器
scheduler = LambdaLR(optimizer, lr_lambda=lambda t: t / T_warmup if t < T_warmup else 1.0)# 訓練循環
for step in range(total_steps):# 訓練代碼...optimizer.step()scheduler.step()
學習率預熱策略數學公式及說明
1. 線性預熱 (Linear Warmup)
lrt=lrtarget?tTwarmuplr_t=lr_{target}?\frac{t}{T_{warmup}}lrt?=lrtarget??Twarmup?t?
原理:學習率隨時間線性增長
場景:最基礎常用的預熱方式,適用于大多數深度學習任務,BERT/GPT常用
2. 余弦預熱 (Cosine Warmup)
lrt=lrmax?1?cos?(π?tTwarmup)2lr_t=lr_{max}?\frac{1?cos?(π?\frac{t}{T_{warmup}})}{2}lrt?=lrmax??21?cos?(π?Twarmup?t?)?
原理:平滑的余弦曲線增長
場景:需要更平緩過渡的視覺任務(如CNN、ResNet)
3. 指數預熱 (Exponential Warmup)
lrt=lrmax?(1?e?αt/Twarmup)lr_t=lr_{max}?(1?e^{?αt/T_{warmup}})lrt?=lrmax??(1?e?αt/Twarmup?)
原理:指數趨近目標學習率(α控制增長速率)
場景:對初始學習率敏感的模型,需要平滑過渡的場景
4. 平方根預熱 (Sqrt Warmup)
lrt=lrmax?tTwarmuplr_t=lr_{max}?\sqrt{\frac{t}{T_{warmup}}}lrt?=lrmax??Twarmup?t??
原理:初期增長快,后期趨緩
場景:配合自適應優化器使用
5. 階梯預熱 (Step Warmup)
lrt=lrmax??t/s?Nlr_t = lr_{max} \cdot \frac{\lfloor t/s \rfloor}{N}lrt?=lrmax??N?t/s??
原理:分階段跳躍式增長
場景:分布式訓練等特殊需求
其中:
-
ttt:當前訓練步數
-
TwarmupT_{warmup}Twarmup?:預熱總步數
-
lrmaxlr_{max}lrmax?:目標學習率
-
sss:階梯步長(僅階梯預熱)
-
NNN:階梯數(僅階梯預熱)
-
ααα:指數系數(通常取5)
總結
學習率預熱通過漸進式調整學習率,解決了訓練初期的三大問題:參數震蕩、梯度統計量不準確和優化器偏差。其核心價值在于:
-
穩定訓練:避免初期高學習率導致的發散。
-
提升收斂:幫助模型找到更優的優化路徑。
-
適配大模型:尤其對Transformer、LLM等架構至關重要26。
實踐建議:
-
預熱步數:通常設為總訓練步數的5%~20%(如BERT用10%)。
-
峰值學習率:根據任務調整(大模型常用1e?41e-41e?4~5e?45e-45e?4)。
-
結合衰減策略:如“預熱+余弦退火”效果更佳。