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 论坛:
- 大量关于学习率调度的实战讨论
重要声明
数据来源说明:
- 数学公式、原论文信息:基于公开学术文献
- 大模型采用情况:基于各公司公开的技术报告
- 行业采用率估计:基于行业共识的定性判断,无精确统计
- 效率改进估算:示意性计算,非严谨基准测试
本文不构成任何投资建议。技术分析仅供学习参考。