优化器学习笔记(GD、SGD、SGD(Momentum)、AdaGrad、RMSprop、 Adam、Muon)
-
- [📌 梯度下降法 Gradient Descent (GD)](#📌 梯度下降法 Gradient Descent (GD))
-
- [什么是 GD?](#什么是 GD?)
- 算法步骤(二维参数为例)
- [举例:函数 ( θ − 3 ) 2 (\theta - 3)^2 (θ−3)2](#举例:函数 ( θ − 3 ) 2 (\theta - 3)^2 (θ−3)2)
- 总结
- [⚡ 随机梯度下降 SGD](#⚡ 随机梯度下降 SGD)
-
- [什么是 SGD?](#什么是 SGD?)
- 核心流程
- [举例:线性回归 f ( x ) = w x + b f(x) = wx + b f(x)=wx+b](#举例:线性回归 f ( x ) = w x + b f(x) = wx + b f(x)=wx+b)
- [🚀 带动量的 SGD(Momentum)](#🚀 带动量的 SGD(Momentum))
-
- [什么是 Momentum?](#什么是 Momentum?)
- [举例:优化函数 J ( θ ) = θ 1 2 + 10 θ 2 2 J(\theta) = \theta_1^2 + 10\theta_2^2 J(θ)=θ12+10θ22](#举例:优化函数 J ( θ ) = θ 1 2 + 10 θ 2 2 J(\theta) = \theta_1^2 + 10\theta_2^2 J(θ)=θ12+10θ22)
- [🧠 AdaGrad(自适应学习率)](#🧠 AdaGrad(自适应学习率))
- [📉 RMSprop](#📉 RMSprop)
- [💡 Adam(Adaptive Moment Estimation)](#💡 Adam(Adaptive Moment Estimation))
- [🌀 现代优化器基础](#🌀 现代优化器基础)
-
- Over-adaptation(过度自适应)
- Scale-invariance(尺度不变性)
- [Sharpness 与 Hessian](#Sharpness 与 Hessian)
- [⚛️ Muon 优化器](#⚛️ Muon 优化器)
- [✅ 总结比较](#✅ 总结比较)
📌 梯度下降法 Gradient Descent (GD)
什么是 GD?
梯度下降是一种优化算法,通过不断沿函数的最陡下降方向(梯度的负方向)更新参数,寻找函数最小值。
目标:
给定一个损失函数 f ( θ ) f(\theta) f(θ),找到参数 θ \theta θ 使得函数最小化。
算法步骤(二维参数为例)
- 初始化参数 θ 0 \theta_0 θ0(如随机值)
- 计算当前梯度 ∇ f ( θ ) \nabla f(\theta) ∇f(θ)
- 沿负梯度方向更新参数:
θ = θ − η ⋅ ∇ f ( θ ) \theta = \theta - \eta \cdot \nabla f(\theta) θ=θ−η⋅∇f(θ) - 重复步骤 2~3,直到收敛
举例:函数 ( θ − 3 ) 2 (\theta - 3)^2 (θ−3)2
- 最小值在 θ = 3 \theta = 3 θ=3
- 梯度为 ∇ f ( θ ) = 2 ( θ − 3 ) \nabla f(\theta) = 2(\theta - 3) ∇f(θ)=2(θ−3)
- 更新公式: θ = θ − η ⋅ 2 ( θ − 3 ) \theta = \theta - \eta \cdot 2(\theta - 3) θ=θ−η⋅2(θ−3)
步骤 | θ \theta θ | 梯度 2 ( θ − 3 ) 2(\theta-3) 2(θ−3) | 更新量 | 新 θ \theta θ |
---|---|---|---|---|
0 | 0.00 | -6.00 | +0.6 | 0.60 |
1 | 0.60 | -4.80 | +0.48 | 1.08 |
... | ... | ... | ... | ... |
总结
梯度下降适用于小数据场景,通过每次全量计算梯度更新参数,稳定但收敛慢。
⚡ 随机梯度下降 SGD
什么是 SGD?
SGD 每次只使用一个样本的梯度进行参数更新,提高训练速度和计算效率。
核心流程
- 每轮训练打乱数据
- 对每个样本 ( x i , y i ) (x_i, y_i) (xi,yi):
- 计算梯度 ∇ L i ( θ ) \nabla \mathcal{L}_i(\theta) ∇Li(θ)
- 参数更新 θ = θ − η ⋅ ∇ L i ( θ ) \theta = \theta - \eta \cdot \nabla \mathcal{L}_i(\theta) θ=θ−η⋅∇Li(θ)
- 重复多个 epoch
举例:线性回归 f ( x ) = w x + b f(x) = wx + b f(x)=wx+b
- 数据: ( 1 , 3 ) , ( 2 , 5 ) , ( 3 , 7 ) (1,3), (2,5), (3,7) (1,3),(2,5),(3,7)
- 初始化 w = 0 , b = 0 , η = 0.1 w = 0, b = 0, \eta=0.1 w=0,b=0,η=0.1
经过一轮 SGD 后, w w w 和 b b b 会逐步接近目标值 ( 2 , 1 ) (2, 1) (2,1)。
🚀 带动量的 SGD(Momentum)
什么是 Momentum?
Momentum 是对梯度的指数加权平均,能加速收敛并减少振荡:
v t = γ v t − 1 + η ∇ J ( θ ) θ = θ − v t \begin{aligned} v_t &= \gamma v_{t-1} + \eta \nabla J(\theta) \\ \theta &= \theta - v_t \end{aligned} vtθ=γvt−1+η∇J(θ)=θ−vt
- γ \gamma γ 通常为 0.9 或 0.99
举例:优化函数 J ( θ ) = θ 1 2 + 10 θ 2 2 J(\theta) = \theta_1^2 + 10\theta_2^2 J(θ)=θ12+10θ22
初始参数 θ = [ 1.0 , 1.0 ] \theta = [1.0, 1.0] θ=[1.0,1.0],使用 momentum 更新方向更平滑,抑制陡峭方向震荡。
🧠 AdaGrad(自适应学习率)
核心思想
对每个参数维护其梯度平方的累积和,频繁更新的参数会自动减小学习率。
更新公式:
G t = ∑ i = 1 t g i 2 θ t + 1 = θ t − η G t + ϵ ⋅ g t G_t = \sum_{i=1}^t g_i^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t} + \epsilon} \cdot g_t Gt=i=1∑tgi2θt+1=θt−Gt +ϵη⋅gt
适合稀疏特征(如 NLP 中的低频词)。
📉 RMSprop
为解决 AdaGrad 学习率衰减过快问题,RMSprop 使用滑动平均估计梯度平方:
E [ g 2 ] t = γ E [ g 2 ] t − 1 + ( 1 − γ ) g t 2 θ t + 1 = θ t − η E [ g 2 ] t + ϵ ⋅ g t E[g^2]t = \gamma E[g^2]{t-1} + (1 - \gamma) g_t^2 \\ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot g_t E[g2]t=γE[g2]t−1+(1−γ)gt2θt+1=θt−E[g2]t+ϵ η⋅gt
通常 γ = 0.9 \gamma = 0.9 γ=0.9, η = 0.001 \eta = 0.001 η=0.001
💡 Adam(Adaptive Moment Estimation)
结合 Momentum + RMSprop:
m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 m ^ t = m t 1 − β 1 t v ^ t = v t 1 − β 2 t θ t + 1 = θ t − η ⋅ m ^ t v ^ t + ϵ \begin{aligned} m_t &= \beta_1 m_{t-1} + (1 - \beta_1) g_t \\ v_t &= \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \\ \hat{m}_t &= \frac{m_t}{1 - \beta_1^t} \\ \hat{v}t &= \frac{v_t}{1 - \beta_2^t} \\ \theta{t+1} &= \theta_t - \eta \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \end{aligned} mtvtm^tv^tθt+1=β1mt−1+(1−β1)gt=β2vt−1+(1−β2)gt2=1−β1tmt=1−β2tvt=θt−η⋅v^t +ϵm^t
Adam 是目前最常用的优化器之一。
🌀 现代优化器基础
Over-adaptation(过度自适应)
指优化器对局部梯度的变化过于敏感,导致震荡、loss 不稳定、泛化变差。
Scale-invariance(尺度不变性)
优化器不受参数或梯度绝对大小的影响,能提升大模型稳定性。
例如 Muon 对每层梯度归一化:
g ^ t = g t ∥ θ t ∥ + ϵ \hat{g}_t = \frac{g_t}{\|\theta_t\| + \epsilon} g^t=∥θt∥+ϵgt
Sharpness 与 Hessian
- Sharpness 衡量 loss 对扰动的敏感度
- Hessian 是 loss 的二阶导矩阵,描述曲率
Sharpness = max ∥ ϵ ∥ ≤ ρ L ( θ + ϵ ) − L ( θ ) 1 + L ( θ ) \text{Sharpness} = \max_{\|\epsilon\| \leq \rho} \frac{L(\theta + \epsilon) - L(\theta)}{1 + L(\theta)} Sharpness=∥ϵ∥≤ρmax1+L(θ)L(θ+ϵ)−L(θ)
⚛️ Muon 优化器
设计理念
- 结合梯度动量 + 正交化 + Scale-invariant 归一化
- 避免沿陡峭方向更新,提升训练稳定性和泛化
更新公式(简化):
M t = μ M t − 1 + ∇ L t ( W t − 1 ) O t = Orthogonalize ( M t ) W t = W t − 1 − η ( O t + λ W t − 1 ) M_t = \mu M_{t-1} + \nabla L_t(W_{t-1}) \\ O_t = \text{Orthogonalize}(M_t) \\ W_t = W_{t-1} - \eta (O_t + \lambda W_{t-1}) Mt=μMt−1+∇Lt(Wt−1)Ot=Orthogonalize(Mt)Wt=Wt−1−η(Ot+λWt−1)
其中正交化采用 Newton-Schulz 迭代方法。
✅ 总结比较
方法 | 更新依据 | 收敛速度 | 抗震荡能力 | 适用场景 |
---|---|---|---|---|
GD | 所有样本梯度 | 稳定 | 强 | 小数据理论分析 |
SGD | 单样本梯度 | 快 | 弱 | 大规模数据 |
Momentum | 历史梯度平均 | 更快 | 强 | 深度网络默认 |
AdaGrad | 累计平方梯度 | 快(早期) | 中 | 稀疏特征,NLP |
RMSprop | 滑动平均 | 快 | 中强 | 非凸、变化大场景 |
Adam | 一二阶估计 | 快 | 强 | 大模型默认优化器 |
Muon | 归一+正交+动量 | 更快更稳 | 极强 | 大模型预训练与微调 |