ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从SGD到Adam:图解十大优化算法原理,5分钟搞懂各自适用场景

从SGD到Adam:图解十大优化算法原理,5分钟搞懂各自适用场景

从SGD到Adam:图解十大优化算法原理,5分钟搞懂各自适用场景

想象你是一位登山者,目标是找到山谷的最低点。但眼前浓雾弥漫,只能依靠脚下的坡度判断方向——这正是机器学习中优化算法面临的挑战。优化器如同不同的导航策略,有的鲁莽冒进,有的谨慎保守,还有的能根据地形自动调整步伐。本文将用最直观的类比和图示,带你快速掌握十大主流优化算法的核心思想与适用场景。

1. 基础优化器:梯度下降家族

1.1 随机梯度下降(SGD):蒙眼下山的勇者

就像闭眼下山的登山者,SGD每次只根据当前位置的坡度(梯度)决定下一步方向。其更新规则简单直接:

w = w - learning_rate * gradient

典型特征

  • 步长固定(学习率不变)
  • 容易在陡坡区域震荡
  • 可能卡在平缓区域(鞍点)

适用场景:凸函数优化或需要快速迭代的初期训练阶段

1.2 批量梯度下降(BGD)与小批量梯度下降(MBGD)

这三种变体主要区别在于数据使用量:

类型样本用量稳定性内存消耗更新速度
BGD全量数据
SGD单样本
MBGD小批量中等中等中等

实际应用中,MBGD(通常batch size设为32-256)是最常见的折中选择。

2. 改进型优化器:解决SGD的痛点

2.1 Momentum:带惯性的智能下山

如同滑雪下山时会保持一定惯性,Momentum引入了速度变量:

velocity = momentum * velocity + (1 - momentum) * gradient w = w - learning_rate * velocity

核心优势

  • 在连续同方向梯度时加速
  • 在梯度方向变化剧烈时减速
  • 能越过部分局部极小点

典型应用:损失函数表面存在大量局部极小点的场景

2.2 Nesterov Accelerated Gradient (NAG)

Momentum的改进版,先预估下一步位置再计算梯度:

velocity_prev = velocity velocity = momentum * velocity - learning_rate * gradient w = w - momentum * velocity_prev + (1 + momentum) * velocity

这种"前瞻性"调整使其在RNN等序列模型中表现优异。

3. 自适应学习率优化器

3.1 Adagrad:适应不同坡度的登山鞋

为每个参数配备独立的学习率,陡坡走小步,缓坡迈大步:

cache += gradient**2 w = w - (learning_rate / (np.sqrt(cache) + eps)) * gradient

特点对比

  • 优点:适合稀疏数据(如NLP词向量)
  • 缺点:累积平方梯度导致后期学习率过小

3.2 RMSProp:解决Adagrad的激进衰减

引入衰减系数平衡历史与当前梯度:

cache = decay_rate * cache + (1 - decay_rate) * gradient**2 w = w - (learning_rate / (np.sqrt(cache) + eps)) * gradient

实际应用中,decay_rate通常取0.9-0.99。

4. 复合型优化器:强强联合

4.1 Adam:动量与自适应的完美结合

融合Momentum的一阶矩估计和RMSProp的二阶矩估计:

m = beta1*m + (1-beta1)*gradient # 动量项 v = beta2*v + (1-beta2)*gradient**2 # 自适应项 m_hat = m / (1 - beta1**t) # 偏差修正 v_hat = v / (1 - beta2**t) w = w - learning_rate * m_hat / (np.sqrt(v_hat) + eps)

超参数经验值

  • β₁通常取0.9
  • β₂通常取0.999
  • ε通常取1e-8

4.2 AdaMax与Nadam

Adam的两种改进变体:

  • AdaMax:用无穷范数替代二阶矩,更稳定
  • Nadam:融入NAG的前瞻思想,收敛更快

5. 新型优化器探索

5.1 AMSGrad:解决Adam的收敛问题

通过保持历史二阶矩最大值来保证收敛性:

v_hat = np.maximum(v_hat_prev, v) w = w - lr * m_hat / (np.sqrt(v_hat) + eps)

5.2 LAMB:适合大batch训练的优化器

特别为超大batch(>8192)设计,在BERT等大模型训练中表现出色。

6. 优化器选择实战指南

6.1 不同场景的优化器推荐

根据问题特性选择优化器:

问题特征推荐优化器理由
小数据集SGD+Momentum避免过早过拟合
稀疏特征(如NLP)Adagrad/Adam自适应学习率优势明显
深层网络Adam/AMSGrad自动调节各层学习率
需要严格收敛保证SGD/AMSGrad避免自适应方法的不收敛
超大batch训练LAMB保持训练稳定性

6.2 超参数调优技巧

  • 学习率:Adam通常从3e-4开始尝试
  • batch size:越大所需学习率通常越高
  • warmup:前5-10%训练步数逐步提高学习率

在TensorFlow/Keras中快速切换优化器:

optimizers = { 'sgd': tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9), 'adam': tf.keras.optimizers.Adam(learning_rate=0.001), 'rmsprop': tf.keras.optimizers.RMSprop(learning_rate=0.001) } model.compile(optimizer=optimizers['adam'])

实际项目中,我会先在小型验证集上快速测试多种优化器,观察初期收敛速度再决定最终选择。对于视觉任务,Adam通常是安全起点;而在需要精细调优的场景,SGD+Momentum配合学习率调度可能带来更好结果。

返回列表