Cosine Decay(餘弦學習率衰減)
3 秒看懂
一句話:讓學習率從高到低按”餘弦曲線”平滑下降——訓練初期大步快走,後期小步微調,比階梯式衰減更絲滑、更穩定。
類比:像跑馬拉松——前半程配速較高穩步輸出,後半程逐漸降速保留體力衝刺,而不是突然停跑再起步。
3 分鐘產業解釋
這是什麼?
Cosine Decay(餘弦衰減)是深度學習訓練中**學習率排程策略(Learning Rate Schedule)**的一種,核心思想是讓學習率按照餘弦函式的半個週期(從1降到0)進行平滑衰減。
為什麼重要?
在大型模型時代,訓練一次 GPT-4 量級模型的成本可達數億美元。學習率排程直接影響:
- 收斂質量:最終模型效能(loss 下限)
- 訓練穩定性:避免 loss spike 或發散
- 算力效率:相同算力下達到更低的 loss
Cosine Decay 已成為事實上的預設標準排程策略——從 GPT 系列到 LLaMA、從 Stable Diffusion 到 ResNet,幾乎所有主流架構的訓練都採用它或其變體。
行業地位
Cosine Decay 的論文(Loshchilov & Hutter, 2017)是機器學習領域引用量最高的論文之一。它不是”可選項”,而是大型模型訓練配方(Training Recipe)的基礎設施。
15 分鐘專家深入
核心機制
Cosine Decay 的數學表示式:
η(t) = η_min + ½(η_max - η_min)(1 + cos(πt / T))
其中:
η(t)= 第 t 步的學習率η_max= 初始最大學習率η_min= 最終最小學習率(常設為 0 或 η_max 的 1/10)T= 總訓練步數(或總 epoch 數)t= 當前步數(從 0 開始)
曲線特徵:
學習率
↑
η_max ┤●
│ ╲
│ ╲
│ ╲ ← 前期下降較慢,保留大步長探索
│ ╲
│ ╲
│ ╲ ← 中期下降最快
│ ╲
│ ╲
η_min ┤──────────────────●
└──────────────────→ 訓練步數
0 T
與 Warmup 的配合
實際工程中,Cosine Decay 幾乎總是與 Warmup 階段配合使用:
學習率
↑
η_max ┤ ●────────●
│ ╱ ╲
│ ╱ ╲
│ ╱ ╲
│ ╱ ╲
│ ╱ ╲
│● ╲
0 ┤ ●
└───────────────────────→ 步數
│warmup│ │ cosine decay │
完整流程:
- Warmup 階段(通常 0.1%~5% 總步數):學習率從 0 或極小值線性升至 η_max
- Cosine Decay 階段:從 η_max 按餘弦曲線降至 η_min
關鍵變體
| 變體 | 核心改動 | 適用場景 |
|---|---|---|
| 標準 Cosine Decay | 單週期餘弦衰減 | 通用訓練 |
| Cosine with Warmup | 前置線性 warmup | 大型模型訓練(標配) |
| SGDR (Warm Restarts) | 週期性重啟(多次餘弦週期) | 需要跳出區域性最優 |
| Cosine with Floor | η_min > 0,不到零 | 微調場景,保留最低學習能力 |
| WSD (Warmup-Stable-Decay) | 先穩定再餘弦衰減 | 最近的大型模型訓練趨勢 |
技術原理
為什麼是餘弦?而非線性或指數?
直覺:餘弦函式在兩端變化緩慢、中間變化快,這恰好匹配了訓練的最佳化景觀:
訓練階段: │ 早期(探索) │ 中期(快速下降) │ 後期(精細調優) │
│ │ │ │
學習率需求: │ 需要大步長 │ 快速降低步長 │ 極小步長穩定 │
│ 探索引數空間 │ 避免震盪 │ 收斂到最優解 │
│ │ │ │
餘弦曲線: │ 變化平緩 │ 變化最快 │ 變化平緩 │
│ 保持大 LR │ 快速下降 LR │ LR 接近零 │
數學角度:
- 線性衰減:全程恆定斜率,前期降得太快(過早喪失探索能力),後期降得太慢(接近最優時仍較大)
- 指數衰減:前期下降快但後期下降慢,容易導致訓練末期學習率過小而”停滯”
- 餘弦衰減:兩端慢、中間快,與 loss landscape 的收斂動態更匹配
與損失函式曲面的對應關係
引數空間示意(俯檢視):
訓練早期: 訓練後期:
· · · ·
· · · · · · ·
· · · · · → · ● · ← 收斂到最優附近
· · · · · · ·
· · · ·
大範圍隨機探索 小範圍精細搜尋
需要大 LR 需要小 LR
PyTorch 實現虛擬碼
import math
def cosine_decay(step, total_steps, lr_max, lr_min=0.0):
"""標準 Cosine Decay(不含 warmup)"""
# 歸一化進度到 [0, 1]
progress = step / total_steps
# 餘弦衰減公式
cosine_factor = 0.5 * (1 + math.cos(math.pi * progress))
# 線性插值
lr = lr_min + (lr_max - lr_min) * cosine_factor
return lr
def cosine_with_warmup(step, warmup_steps, total_steps, lr_max, lr_min=0.0):
"""帶 Warmup 的 Cosine Decay"""
if step < warmup_steps:
# 線性 warmup
return lr_max * (step / warmup_steps)
else:
# 餘弦衰減
decay_steps = total_steps - warmup_steps
progress = (step - warmup_steps) / decay_steps
cosine_factor = 0.5 * (1 + math.cos(math.pi * progress))
return lr_min + (lr_max - lr_min) * cosine_factor
關鍵超引數
| 超引數 | 含義 | 典型取值 | 影響 |
|---|---|---|---|
η_max | 峰值學習率 | 1e-4 ~ 3e-3(取決於模型大小和批大小) | 最重要的超引數之一 |
η_min | 最終學習率 | 0 或 η_max/10 | 過高則不收斂,過低無影響 |
T | 總步數 | 由訓練配置決定 | 必須準確設定,否則衰減曲線不匹配 |
warmup_steps | 預熱步數 | 總步數的 0.1%~5% | 過短可能不穩定,過長浪費算力 |
技術演進史
時間線:
2012 │ AlexNet 使用手動階梯衰減(step decay)
│ ↓ 學習率在特定 epoch 除以 10
│
2015 │ "Cyclical Learning Rates" (Smith, 2015)
│ ↓ 首次提出週期性變化學習率
│
2017 │ ★ SGDR: Stochastic Gradient Descent with Warm Restarts (Loshchilov & Hutter)
│ ↓ 論文首次提出 Cosine Annealing / Cosine Decay
│ ↓ 提出帶重啟的變體(Warm Restarts)
│ ↓ [論文原作:ICLR 2017, arXiv:1608.03983]
│
2018 │ 逐漸成為 CV 領域標配(ResNet、DenseNet 訓練)
│
2020 │ GPT-3 訓練採用 cosine schedule
│ ↓ 標誌著進入大型模型訓練標配
│
2023 │ LLaMA、Mistral 等開源模型訓練預設使用
│ ↓ 幾乎成為唯一主流選擇
│
2024 │ WSD (Warmup-Stable-Decay) 作為替代方案開始出現
│ ↓ MiniCPM、部分實驗顯示可行性
│ ↓ 但 cosine 仍是絕對主流
│
至今 │ Cosine Decay + Warmup = 行業標準配方
關鍵轉折點:2017年 Loshchilov & Hutter 的論文是里程碑。在此之前,學習率排程主要是工程經驗(手動設階梯衰減);在此之後,有了統一的數學架構。
技術路線對比
| 排程策略 | 公式 | 優點 | 缺點 | 使用場景 |
|---|---|---|---|---|
| Step Decay | LR = LR₀ × γ^(floor(epoch/milestone)) | 簡單直觀 | 不連續、需手動調閾值 | 早期經典訓練 |
| Exponential Decay | LR = LR₀ × γ^t | 平滑連續 | 後期下降過快 | 較少單獨使用 |
| Cosine Decay | LR = η_min + ½(η_max-η_min)(1+cos(πt/T)) | 平滑、兩端慢中間快、廣泛驗證 | 需預知總步數 | 主流標配 |
| Linear Decay | LR = η_max - (η_max-η_min)×(t/T) | 最簡單 | 前期衰減太快 | 簡單場景 |
| WSD | Warmup → 恆定 LR → 短期快速衰減 | 可靈活延長訓練 | 新方法、驗證較少 | 探索中 |
| Inverse Sqrt | LR = η_max / √t | 無需預知總步數 | 後期衰減太快 | NLP 部分場景 |
| Constant LR | LR = η_max | 最簡單 | 不收斂到最優 | 僅用於預實驗 |
量化比較(示意性,非精確基準):
最終 loss 對比(相同訓練設定,越低越好):
Step Decay: ████████████░░░░░░░ 0.35
Exponential: █████████████░░░░░░ 0.32
Linear Decay: █████████████░░░░░░ 0.31
Cosine Decay: ██████████████░░░░░ 0.28 ← 通常最優或接近最優
WSD: ██████████████░░░░░ 0.28 ← 可比,但需更多驗證
注:具體數值取決於模型、資料、超參,此為趨勢性示意 [估算]
上下游
上游(輸入端)
┌─────────────────────────────────────────────────────┐
│ 訓練配置 │
├─────────────────────────────────────────────────────┤
│ ● 最佳化器 (Optimizer) │
│ └── Adam / AdamW / SGD → 提供梯度方向 │
│ │
│ ● 學習率排程 (LR Schedule) ← Cosine Decay 在此 │
│ └── 決定每步的學習率大小 │
│ │
│ ● 批大小 (Batch Size) │
│ └── 通常與學習率線性相關(linear scaling rule) │
│ │
│ ● 總訓練步數 │
│ └── 決定餘弦週期長度 T │
└─────────────────────────────────────────────────────┘
↓ 輸出:每步學習率 η(t)
下游(輸出端)
┌─────────────────────────────────────────────────────┐
│ 模型引數更新 │
├─────────────────────────────────────────────────────┤
│ θ(t+1) = θ(t) - η(t) × [最佳化器更新方向] │
│ │
│ ● 引數更新幅度 → 影響收斂軌跡 │
│ ● 最終模型效能 → loss / 準確率 / 瓶頸 │
│ ● 訓練穩定性 → 避免發散和 loss spike │
└─────────────────────────────────────────────────────┘
完整訓練配方中的位置
訓練配方 (Training Recipe) 組成:
[資料] + [模型架構] + [最佳化器] + [學習率排程] + [正則化]
↑
Cosine Decay
(核心元件之一)
關鍵指標
| 指標 | 含義 | 如何評估 |
|---|---|---|
| 最終 Loss | 訓練結束時的損失值 | 越低越好,直接比較 |
| 收斂速度 | 達到目標 loss 所需步數 | 越少越省算力 |
| Loss 曲線平滑度 | 訓練過程中 loss 波動程度 | 越平滑越穩定 |
| 泛化效能 | 驗證集/測試集表現 | 最終指標 |
| 超引數敏感度 | 對 η_max 等引數的魯棒性 | 越不敏感越好調 |
Cosine Decay 的典型特徵:
- Loss 曲線呈現前期快降、中期穩定下降、後期緩慢收斂的形態
- 與 Step Decay 相比,loss 曲線更平滑,較少出現”階梯跳變”後的震盪
供需與市場資料
應用廣度(定性)
Cosine Decay 在主流模型訓練中的採用情況:
大語言模型 (LLM):
├── GPT 系列 → 採用 [OpenAI 技術報告]
├── LLaMA 系列 → 採用 [Meta 技術報告]
├── Mistral → 採用
├── Qwen → 採用
└── 幾乎所有主流 LLM → 採用或變體
計算機視覺 (CV):
├── ResNet → 採用
├── ViT → 採用
├── CLIP → 採用
└── Stable Diffusion → 採用
行業採用率:估計 >90% 的正式訓練使用 cosine 或其變體 [行業估算]
訓練成本影響
學習率排程本身計算開銷幾乎為零(每步多一次餘弦運算),但其對訓練效率的影響巨大:
- 好的排程:相同算力,更低 loss
- 差的排程:浪費數百至數百萬美元的 GPU 時間
以 GPT-4 量級模型為例:假設訓練成本 $100M,學習率排程最佳化 1% 的效率 = 節省 $1M [粗略估算]。
代表公司與資本對映
使用方(所有人)
| 公司 | 代表模型 | 是否使用 Cosine Decay |
|---|---|---|
| OpenAI | GPT-4 | 是(技術報告未公開排程細節,行業推測繼承自GPT-3) |
| Meta | LLaMA 系列 | 是(技術報告明確記載) |
| PaLM/Gemini | 是 | |
| Anthropic | Claude | 大機率是(行業標準) |
| Mistral | Mistral 系列 | 是 |
| 阿里巴巴 | Qwen | 是 |
| DeepSeek | DeepSeek | 是 |
關鍵認知:Cosine Decay 是公共知識,不構成任何公司的競爭壁壘。它是訓練配方的”水電煤”。
最佳化器生態
最佳化器 + Cosine Decay 的組合:
Adam + Cosine Decay → 經典組合
AdamW + Cosine Decay → 當前最主流(L2 正則 + 餘弦衰減)
SGD + Cosine Decay → CV 部分場景
Adafactor + Cosine Decay → 節省記憶體的變體
Lion + Cosine Decay → Google 提出的新最佳化器
投資邏輯
核心觀點
Cosine Decay 本身不是投資標的,但它揭示了幾個投資相關的關鍵洞察:
1. 訓練配方標準化 = 降低門檻
訓練配方標準化程度:
├── 架構:Transformer 已成標準
├── 最佳化器:Adam/AdamW 已成標準
├── 學習率排程:Cosine Decay 已成標準 ← 此處
├── 資料處理:仍在演進
└── 對齊方法:仍在演進
結論:標準化降低追趕門檻,技術護城河收窄
投資含義:關注仍在演化的”非標準化”環節(資料、對齊、推論最佳化)。
2. 訓練基礎設施的價值
Cosine Decay 是訓練基礎設施的一部分。訓練基礎設施的改進直接影響:
- GPU 利用率:同樣的硬體,更好的訓練配方 = 更多產出
- 訓練成功率:減少失敗的訓練 run = 節省成本
相關標的:訓練架構公司、AI Infra 公司(如 Weights & Biases、Modal 等)。
3. 對硬體的間接影響
學習率排程影響:
- 梯度更新幅度 → 影響視訊記憶體中的啟用值大小
- 訓練穩定性 → 影響是否需要重啟(浪費算力)
- 收斂速度 → 影響 GPU 使用時長
常見誤讀糾偏
誤讀 1:「Cosine Decay 是 LLM 訓練專用的」
糾偏:
Cosine Decay 最初是在 CV(計算機視覺) 領域提出的(2017年論文主要實驗是 ResNet/DenseNet)。後來才被 NLP/LLM 訓練廣泛採用。
事實:Cosine Decay 是通用的訓練技術,適用於幾乎所有深度學習場景——CV、NLP、多模態、強化學習等。
誤讀 2:「Cosine Decay 一定比其他排程策略好」
糾偏:
Cosine Decay 是經驗上表現最好的預設選擇之一,但並非在所有場景下都絕對最優:
- 某些小模型 + 小資料場景,Step Decay 可能足夠好
- 某些需要無限訓練的場景(如線上學習),Cosine Decay 需要預知總步數,可能不適用
- WSD(Warmup-Stable-Decay)在某些實驗中顯示可比甚至更優的效能 [MiniCPM 相關工作]
正確理解:Cosine Decay 是經過廣泛驗證的安全預設選項,但特定場景可能有更好的選擇。
誤讀 3:「設了 Cosine Decay 就不用管學習率了」
糾偏:
Cosine Decay 需要正確配置至少三個超引數:
η_max(峰值學習率):最重要的超引數,需要根據模型大小、批大小仔細調整η_min(最終學習率):設為 0 還是 η_max/10 會有影響warmup_steps:太短可能不穩定,太長浪費算力
事實:Cosine Decay 只是架構,超引數調優仍然是必要的工作。
誤讀 4:「Cosine Decay 和 Cosine Annealing 是不同的東西」
糾偏:
它們是同一個東西的不同稱呼:
- Cosine Decay / Cosine Schedule:側重描述”衰減”動作
- Cosine Annealing:側重描述”退火”過程
原論文標題中的 “Cosine Annealing” 和後來社群常用的 “Cosine Decay” 指的是相同的方法。
補充:Cosine Annealing with Warm Restarts(SGDR)是變體,允許週期性重啟,但基礎版本相同。
學習路徑
入門(1-2 小時)
-
閱讀原論文摘要:
- Loshchilov & Hutter, 2017, “SGDR: Stochastic Gradient Descent with Warm Restarts”
- arXiv:1608.03983
-
動手實驗:
# PyTorch 內建實現 from torch.optim.lr_scheduler import CosineAnnealingLR optimizer = Adam(model.parameters(), lr=1e-3) scheduler = CosineAnnealingLR(optimizer, T_max=100, eta_min=0) for epoch in range(100): train(...) scheduler.step() -
視覺化理解:用 matplotlib 畫出學習率曲線,觀察不同超引數的影響。
進階(1-2 天)
-
對比實驗:在同一個任務上,分別用 Step Decay、Exponential Decay、Cosine Decay 訓練,比較最終 loss 和收斂曲線。
-
閱讀大型模型技術報告:
- LLaMA 技術報告中的訓練細節
- GPT-3 論文附錄中的訓練配置
-
理解與最佳化器的互動:
- 學習率與批大小的關係(linear scaling rule)
- AdamW 的權重衰減與學習率衰減的區別
深入(持續學習)
- 研究變體:SGDR、OneCycleLR、WSD 的原理和適用場景
- 關注前沿:大型模型訓練中學習率排程的最新研究
- 工程實踐:在分散式訓練中正確實現學習率排程
一句話總結
Cosine Decay 是深度學習訓練中經過廣泛驗證的預設學習率排程策略,通過餘弦函式實現前期大步探索、後期精細調優的平滑衰減,已成為從 GPT 到 LLaMA 的行業標準配方元件。
延伸閱讀與來源
核心論文
-
[原論文] Loshchilov, I., & Hutter, F. (2017). “SGDR: Stochastic Gradient Descent with Warm Restarts.” ICLR 2017. arXiv:1608.03983
- Cosine Decay 的首次提出,必讀
-
[大型模型應用] Brown, T. et al. (2020). “Language Models are Few-Shot Learners.” NeurIPS 2020
- GPT-3 論文,附錄中有 cosine schedule 的使用細節
-
[LLaMA] Touvron, H. et al. (2023). “LLaMA: Open and Efficient Foundation Language Models”
- Meta 的 LLaMA 技術報告,公開了訓練配方
教程與實現
-
PyTorch 官方文件:
torch.optim.lr_scheduler.CosineAnnealingLR- 包含完整的 API 說明和示例
-
Hugging Face Transformers:
get_cosine_schedule_with_warmup()函式- 被廣泛使用的實現
社群討論
- PyTorch Forums / Hugging Face 論壇:
- 大量關於學習率排程的實戰討論
重要宣告
資料來源說明:
- 數學公式、原論文資訊:基於公開學術文獻
- 大型模型採用情況:基於各公司公開的技術報告
- 行業採用率估計:基於行業共識的定性判斷,無精確統計
- 效率改進估算:示意性計算,非嚴謹基準測試
本文不構成任何投資建議。技術分析僅供學習參考。