[LLM] 优化器学习笔记(GD、SGD、SGD(Momentum)、AdaGrad、RMSprop、 Adam、Muon)

优化器学习笔记(GD、SGD、SGD(Momentum)、AdaGrad、RMSprop、 Adam、Muon)

    • [📌 梯度下降法 Gradient Descent (GD)](#📌 梯度下降法 Gradient Descent (GD))
    • [⚡ 随机梯度下降 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))
    • [🌀 现代优化器基础](#🌀 现代优化器基础)
    • [⚛️ Muon 优化器](#⚛️ Muon 优化器)
    • [✅ 总结比较](#✅ 总结比较)

📌 梯度下降法 Gradient Descent (GD)

什么是 GD?

梯度下降是一种优化算法,通过不断沿函数的最陡下降方向(梯度的负方向)更新参数,寻找函数最小值。

目标:

给定一个损失函数 f ( θ ) f(\theta) f(θ),找到参数 θ \theta θ 使得函数最小化。

算法步骤(二维参数为例)

  1. 初始化参数 θ 0 \theta_0 θ0(如随机值)
  2. 计算当前梯度 ∇ f ( θ ) \nabla f(\theta) ∇f(θ)
  3. 沿负梯度方向更新参数:
    θ = θ − η ⋅ ∇ f ( θ ) \theta = \theta - \eta \cdot \nabla f(\theta) θ=θ−η⋅∇f(θ)
  4. 重复步骤 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 归一+正交+动量 更快更稳 极强 大模型预训练与微调
相关推荐
只有左边一个小酒窝9 分钟前
(十七)深度学习之线性代数:核心概念与应用解析
人工智能·深度学习·线性代数
AgilityBaby30 分钟前
UE5蓝图按键输入绑定学习笔记
笔记·学习·ue5·蓝图
棱镜研途2 小时前
学习笔记丨AR≠VR:透视沉浸式技术的“虚实象限”法则
学习·机器学习·ar·vr·虚拟现实
Blossom.1182 小时前
基于深度学习的智能视频行为识别系统:技术与实践
人工智能·深度学习·神经网络·目标检测·机器学习·音视频·sklearn
硅谷秋水2 小时前
EfficientVLA:面向视觉-语言-动作模型无训练的加速与压缩
人工智能·深度学习·机器学习·机器人
HaiQinyanAN3 小时前
【学习笔记】锁+死锁+gdb调试死锁
c++·笔记·学习
孞㐑¥4 小时前
Linux之线程同步与互斥
linux·c++·经验分享·笔记
羊小猪~~4 小时前
【NLP入门系列三】NLP文本嵌入(以Embedding和EmbeddingBag为例)
人工智能·深度学习·神经网络·自然语言处理·大模型·nlp·embedding
xx24064 小时前
React Native学习笔记
笔记·学习·react native
何双新4 小时前
第3讲、LangChain性能优化:上下文缓存与流式响应实战指南
缓存·性能优化·langchain