餘弦退火 是什麼?

Cosine Annealing:餘弦退火 的完整解釋

學習率沿著餘弦函數曲線逐漸衰減,從初始值平滑降低到最小值,使模型在訓練後期細微調整參數。

核心概念

Cosine Annealing 的靈感來自模擬退火(simulated annealing)演算法。餘弦函數的特性很適合學習率衰減:初期(0 度)從最大值開始,中期(90 度)衰減,末期(180 度)趨近最小值,整個過程光滑連續。

標準的 cosine annealing 公式: lr(t) = lr_min + 0.5 * (lr_max - lr_min) * (1 + cos(π * t / T))

其中 t 是當前訓練步驟,T 是總訓練步數。當 t = 0 時,lr = lr_max;當 t = T 時,lr = lr_min。

運作原理

Cosine Annealing 的核心機制如下:

  1. 設定初始學習率 lr_max 和最小學習率 lr_min(通常 lr_min = 0 或很小的值)
  2. 設定訓練總長度 T(總訓練步數或 epoch 數)
  3. 在每個步驟 t,計算當前學習率:lr(t) = lr_min + 0.5 * (lr_max - lr_min) * (1 + cos(π * t / T))
  4. 用 lr(t) 進行參數更新

餘弦函數的衰減特性:在 [0, π] 區間上,cos 從 1 逐漸降至 -1。映射到 [0, T],cos(π * t / T) 從 1 衰減到 -1,所以 (1 + cos(π * t / T)) 從 2 衰減到 0。

實際例子:若 lr_max = 0.1,lr_min = 0,T = 100000 步,則:

  • 步驟 0:lr = 0.1
  • 步驟 25000:lr ≈ 0.038(cos 為負值)
  • 步驟 50000:lr ≈ 0(餘弦函數最低點)
  • 步驟 75000:lr ≈ 0.038
  • 步驟 100000:lr ≈ 0(接近最小值)

實際應用

Cosine Annealing 在深度學習社區中廣泛流行,特別是通過 SGDR(Stochastic Gradient Descent with Warm Restarts)論文推廣後。許多獲獎的深度學習模型都採用 cosine annealing 作為默認調度。

在影像分類(ImageNet、CIFAR)中,cosine annealing 能產生比階梯式衰減更好的收斂曲線。ResNet、EfficientNet 等現代架構的官方實現都使用 cosine annealing。

Transformer 模型訓練中,cosine annealing 成為標準。BERT、GPT、Vision Transformer 等模型都採用 cosine 衰減,結合預熱實現「上升-衰減」的完整學習率時間表。

Cosine Annealing with Warm Restarts(SGDR)提出了週期性重啟的概念:訓練分為多個週期,每個週期內使用 cosine annealing,週期結束後重新啟動學習率。這能幫助逃離局部最小值。

在遷移學習中,cosine annealing 也很有用。調整預訓練模型時,平滑的學習率衰減能防止大幅破壞預訓練權重。

常見誤區

誤區一:認為 cosine annealing 會自動解決所有收斂問題。實際上,cosine annealing 是良好的衰減計劃,但不能替代其他改進(如架構設計、資料品質、正則化)。

誤區二:誤認為 cosine annealing 需要提前知道確切的訓練步數。實際上只需要一個合理估計,因為余弦衰減相對魯棒。若步數估計有誤,最多影響末期學習率大小,通常不會導致完全失敗。

誤區三:應用 cosine annealing 時未設定合理的 lr_min。若 lr_min = 0,訓練末期梯度更新會非常小。合理的做法是設定 lr_min 為 lr_max 的 1/100 或 1/1000。

與相關技術的比較

  • Cosine Annealing vs Step Decay:Step Decay 在固定步驟後陡峭下降,產生階梯型曲線。Cosine 提供平滑衰減,通常能達到更好的最終性能。Cosine 在訓練末期保持某種學習能力,而 Step Decay 可能過早停止。

  • Cosine Annealing vs Exponential Decay:指數衰減初期下降快,末期變慢。Cosine 衰減在中期最快,初末期較慢。兩者都是連續衰減,但曲線形狀不同。

  • Cosine Annealing vs Linear Warmup:預熱是初期的上升過程,annealing 是後期的衰減過程。通常結合使用:先預熱到目標值,再進行 cosine annealing。

  • Cosine Annealing vs SGDR:SGDR 在 cosine annealing 基礎上加入週期性重啟。在每個週期內使用 cosine,然後重置。SGDR 適合多週期訓練,而單純 cosine 適合單一長訓練。

常見問題