优化算法
机器学习中的优化算法是训练模型的核心工具,不同算法在收敛速度、内存效率、超参数敏感性等方面各有优势。
1. 梯度下降法(Gradient Descent, GD)
原理:沿负梯度方向更新参数: $\theta_{t+1} = \theta_t - \eta \nabla_\theta J(\theta)$
优势
- 理论成熟:适用于凸优化问题,保证全局收敛。
- 简单易实现。
缺点
- 计算所有样本的梯度,内存消耗大(不适合大规模数据)。
- 容易陷入局部最优(非凸问题)。
2. 随机梯度下降(Stochastic Gradient Descent, SGD)
原理:每次随机选一个样本计算梯度。
优势
- 内存高效:适合大规模数据。
- 逃离局部最优:随机性可能帮助跳出局部极小值。
缺点
- 高方差:更新方向波动大,收敛不稳定。
- 需手动调整学习率(如学习率衰减)。
改进版:Mini-batch SGD:折中方案,用小批量样本计算梯度(常用)。
3. 动量法(Momentum)
原理:引入动量项积累历史梯度: $v_t = \gamma v_{t-1} + \eta \nabla_\theta J(\theta) \ \theta_{t+1} = \theta_t - v_t$
优势
- 加速收敛:在梯度方向一致的维度上累积速度。
- 减少震荡,尤其适合高曲率或稀疏梯度问题。
4. Nesterov 加速梯度(NAG)
原理:动量法的改进,先按动量方向预测下一步梯度: $v_t = \gamma v_{t-1} + \eta \nabla_\theta J(\theta - \gamma v_{t-1}) \ \theta_{t+1} = \theta_t - v_t$
优势:比Momentum更精准地调整方向,减少振荡。
5. 自适应学习率算法
(1) AdaGrad
原理:为每个参数自适应调整学习率:$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \nabla_\theta J(\theta)$ (GtG_tGt 为历史梯度平方和)
优势:适合稀疏数据(如NLP),对低频特征更新更大。
缺点:学习率单调下降,可能过早停止学习。
(2) RMSProp
原理:引入衰减系数($\beta$)平滑:$G_t = \beta G_{t-1} + (1-\beta) \nabla_\theta J(\theta)^2$
优势:解决AdaGrad学习率消失问题,适合非凸优化。
(3) Adam(Adaptive Moment Estimation)
原理:结合动量和自适应学习率: $m_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla_\theta J(\theta) \quad \text{(一阶矩)} \ v_t = \beta_2 v_{t-1} + (1-\beta_2) \nabla_\theta J(\theta)^2 \quad \text{(二阶矩)} \ \theta_{t+1} = \theta_t - \frac{\eta \cdot m_t}{\sqrt{v_t} + \epsilon}$
优势
- 默认首选:适应不同数据分布,收敛快且稳定。
- 对超参数(如初始学习率)鲁棒性强。
(4) AdaDelta
原理:无需设置初始学习率,动态调整步长。
优势:对学习率不敏感,适合调参困难场景。
6. 二阶优化算法
(1) 牛顿法(Newton’s Method)
原理:使用Hessian矩阵(二阶导数)更新参数: $\theta_{t+1} = \theta_t - H^{-1} \nabla_\theta J(\theta)$
优势:收敛速度超线性(远快于一阶方法)。
缺点:计算Hessian矩阵及其逆的复杂度高($O(n^3)$)。
(2) 拟牛顿法(BFGS/L-BFGS)
原理:用近似矩阵替代Hessian矩阵。
优势:降低计算量(L-BFGS适合中等规模数据)。
缺点:仍需要存储近似矩阵,内存消耗较大。
对比总结
| 算法 | 优势 | 适用场景 |
|---|---|---|
| SGD | 内存高效,简单 | 大规模数据,简单模型 |
| Momentum | 加速收敛,减少振荡 | 高维稀疏梯度问题 |
| Adam | 自适应学习率,鲁棒性强 | 深度学习默认选择 |
| AdaGrad | 适合稀疏特征 | NLP、推荐系统 |
| L-BFGS | 二阶收敛快 | 中小规模凸优化问题 |
如何选择?
- 深度学习:优先尝试 Adam 或 AdamW(带权重衰减的Adam)。
- 稀疏数据:AdaGrad 或 RMSProp。
- 资源受限:SGD + Momentum(需调学习率)。
- 理论最优解:L-BFGS(若问题规模允许)。