文章摘要
损失景观的几何结构深刻影响着神经网络的泛化能力。本文深入分析SAM的理论基础、算法变体与工程实践,揭示'平坦极小值'假设如何指导现代优化算法设计。
一、引言:为什么优化方法影响泛化?
传统观点认为,只要训练损失足够低,测试性能就会好。但现实是:两个模型可能达到相同的训练损失,泛化能力却天差地别。
关键洞察:决定泛化的不仅是损失值,还有损失景观的几何结构。
2017年,Keskar等人发现:使用大batch size训练的模型倾向于收敛到"尖锐"的极小值(sharp minima),泛化差;而小batch size倾向于"平坦"的极小值(flat minima),泛化好。
这一发现催生了Sharpness-Aware Minimization (SAM) —— 一类显式寻找平坦极小值的优化算法。
四、SAM的变体与改进
4.1 ASAM:Adaptive SAM
不同参数的尺度不同,统一的ρ不合理。ASAM使用自适应邻域大小:ε_i = ρ · |w_i| · sign(∂L/∂w_i),参数越大,允许的扰动越大。
4.2 Momentum-SAM(NeurIPS 2025)
利用动量方向作为扰动方向,避免额外的反向传播:ε = ρ · momentum / ||momentum||。优点:无额外计算成本。效果:与标准SAM相当。
4.3 Tilted SAM / TSAM(ICML 2025)
使用指数倾斜平滑化:L_tilted(w) = (1/t) · log E[exp(t · L(w+ε))]。当t→∞时退化为SAM的max操作;当t较小时考虑邻域内所有点的加权平均。
4.4 稀疏SAM / SL-SAM(2026)
只对部分层应用SAM扰动,使用多臂老虎机动态选择哪些层参与扰动,减少计算成本。
五、SAM的工程实践
超参数选择
| 参数 | 推荐值 | 说明 |
|---|---|---|
| ρ | 0.05-0.1 | 邻域半径,太大训练不稳定 |
| 学习率 | 与SGD相同或略小 | SAM本身有正则化效果 |
| Batch size | 128-512 | 大batch时SAM优势更明显 |
| 权重衰减 | 1e-4 | 与L2正则化配合 |
适用场景
SAM效果显著:大batch size训练(>256)、数据噪声较多、模型过拟合严重、需要鲁棒泛化(分布偏移场景)
SAM效果有限:小batch size训练、模型已经很好泛化、计算资源紧张
PyTorch实现要点
SAM优化器需要封装一个base_optimizer,实现两步更新:
class SAM(torch.optim.Optimizer):
def __init__(self, params, base_optimizer, rho=0.05, **kwargs):
defaults = dict(rho=rho, **kwargs)
super().__init__(params, defaults)
self.base_optimizer = base_optimizer(self.param_groups, **kwargs)
@torch.no_grad()
def first_step(self, zero_grad=False):
grad_norm = self._grad_norm()
for group in self.param_groups:
scale = group["rho"] / (grad_norm + 1e-12)
for p in group["params"]:
if p.grad is None: continue
e_w = p.grad * scale
p.add_(e_w)
self.state[p]["e_w"] = e_w
if zero_grad: self.zero_grad()
@torch.no_grad()
def second_step(self, zero_grad=False):
for group in self.param_groups:
for p in group["params"]:
if p.grad is None: continue
p.sub_(self.state[p]["e_w"])
self.base_optimizer.step()
if zero_grad: self.zero_grad()六、前沿进展与总结
2025-2026前沿
- Bi-LoRA(2025):将SAM应用于大模型LoRA微调,引入辅助对抗LoRA模块解耦尖锐度优化与任务适配,并行计算将SAM开销减半
- SAFE(ICML 2025 Spotlight):寻找既平坦又稀疏的解,通过增广拉格朗日对偶方法将剪枝建模为平坦度约束优化问题,提升剪枝后的性能
- M-SAM(NeurIPS 2025):Modality-Aware SAM,通过Shapley值识别主导模态,分解损失景观以优先保证主导模态的鲁棒性,同时增强其他模态的贡献
实践建议
- 优先尝试SAM:大batch训练、噪声数据、需要鲁棒泛化
- 超参数ρ从0.05开始:太大不稳定,太小效果差
- 考虑计算成本:如果训练时间紧张,用Momentum-SAM
- 与其他正则化配合:权重衰减、Dropout、数据增强
开放问题
- 平坦度与泛化的精确关系?
- 如何高效应用于超大模型?
- 与元学习、课程学习的结合?
🎯 相关面试题
结合本篇技术观点,备战 AI 岗位面试。
- 高级系统设计高频查看详解 →
如何从零设计一个类 ChatGPT 的对话产品?
从对齐后的模型、低延迟推理服务、会话与上下文管理、安全护栏到评测飞轮的端到端对话产品设计。
- 高级系统设计查看详解 →
如何设计一个大规模分布式模型训练平台?
K8s GPU 调度 + 数据/张量/流水线并行 + checkpoint 弹性容错 + 数据管线与实验管理,关注扩展效率与故障恢复。
- 中级概念高频查看详解 →
Batch Size 的大小对训练有什么影响?BGD/SGD/MBGD 如何选?
大 batch 梯度准、训练稳、并行快但泛化可能差且占显存;小 batch 噪声大有正则效果但慢;MBGD 是主流折中。
- 中级概念查看详解 →
Transformer 计算 attention 用点乘还是加法?为什么?并解释为何要除以根号 dk
Transformer 用缩放点积而非加性注意力:点乘能复用高度优化的矩阵乘法、更快更省内存。除以 √dk 是因为高维下点积方差随 dk 增大,过大值会让 softmax 进入饱和区梯度消失,缩放把方差拉回稳定训练。
