资讯动态

深入解析 SGD(随机梯度下降) 优化器

发布时间:2026/9/9 17:54:11 来源:尧图企业网站定制
tensorflow.keras.optimizers.SGD是随机梯度下降Stochastic Gradient Descent, SGD优化器在 TensorFlow/Keras 中的实现。它是深度学习中最基础、最经典的优化算法之一尽管简单但在许多场景下依然有效尤其在配合动量Momentum或学习率调度时表现优异。下面从作用、用法、数学原理三个方面进行详细介绍一、作用What it doesSGD 的核心目标是通过迭代更新模型参数最小化损失函数。“随机”指每次更新使用一个小批量mini-batch数据计算梯度而非全量数据即“批量梯度下降”从而大幅加速训练并引入噪声有助于跳出局部极小值。基础 SGD 仅使用当前梯度方向更新参数但 Keras 的SGD支持动量Momentum、Nesterov 动量等增强机制显著提升收敛速度和稳定性。适用场景图像分类如 ResNet 训练常用带 Momentum 的 SGD需要强泛化能力的任务有研究表明 SGD 泛化性优于 Adam微调大型预训练模型如 ViT、BERT 微调阶段。二、用法How to use in TensorFlow/Keras1. 基础用法无动量importtensorflowastf modeltf.keras.Sequential([...])model.compile(optimizersgd,# 使用默认 SGDlearning_rate0.01losscategorical_crossentropy,metrics[accuracy])2. 自定义参数推荐显式声明optimizertf.keras.optimizers.SGD(learning_rate0.01,# 学习率关键超参momentum0.9,# 动量系数0 表示关闭nesterovFalse,# 是否使用 Nesterov 动量nameSGD)model.compile(optimizeroptimizer,...)3. 结合学习率调度最佳实践# 学习率衰减每 10 个 epoch 衰减为原来的 0.9lr_scheduletf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate0.1,decay_steps1000,decay_rate0.9)optimizertf.keras.optimizers.SGD(learning_ratelr_schedule,momentum0.9,nesterovTrue# 常用于 ResNet 等架构)经验建议图像任务常用lr0.1momentum0.9nesterovTrue若训练不稳定可降低学习率如 0.01 或 0.001。三、数学原理How it works1. 基础 SGD无动量设第 $ t $ 步的参数为 $ \theta_t $损失函数对 $ \theta $ 的梯度为 $ g_t \nabla_\theta J(\theta_t) $则更新规则为θt1θt−η⋅gt \theta_{t1} \theta_t - \eta \cdot g_tθt1​θt​−η⋅gt​其中 $ \eta $ 是学习率。缺点易震荡、收敛慢、易陷入局部极小值。2. 带动量的 SGDMomentum引入速度项$ v_t $累积历史梯度信息平滑更新路径vtγvt−1ηgtθt1θt−vt v_t \gamma v_{t-1} \eta g_t \\ \theta_{t1} \theta_t - v_tvt​γvt−1​ηgt​θt1​θt​−vt​其中$ \gamma $ 是动量系数通常 0.9$ v_0 0 $。效果加速收敛、减少震荡、帮助越过局部极小值。3. Nesterov 动量Nesterov Accelerated Gradient, NAGNesterov 动量是对标准动量的改进先根据动量“向前看一步”再计算该位置的梯度。更新公式Keras 实现方式vtγvt−1η⋅∇θJ(θt−γvt−1)θt1θt−vt v_t \gamma v_{t-1} \eta \cdot \nabla_\theta J\left( \theta_t - \gamma v_{t-1} \right) \\ \theta_{t1} \theta_t - v_tvt​γvt−1​η⋅∇θ​J(θt​−γvt−1​)θt1​θt​−vt​优势更“前瞻”能提前减速避免冲过头理论收敛更快。在 Keras 中只需设置nesterovTrue即启用。四、关键参数详解参数默认值说明learning_rate(η\etaη)0.01控制步长最重要超参momentum(γ\gammaγ)0.0动量系数[0,1)常用 0.9nesterovFalse是否使用 Nesterov 动量name‘SGD’优化器名称调试用五、SGD vs Adam如何选择特性SGD带动量Adam收敛速度较慢需 warmup 或者调 lr快泛化能力通常更好尤其在 CV 任务有时泛化稍差超参敏感度对 lr 敏感对 lr 不敏感内存占用低仅存动量较高存一阶二阶矩默认选择图像分类微调NLP、快速原型经验法则训练 CNN如 ResNet、EfficientNet→SGD Momentum LR Decay训练 Transformer / 快速实验 →Adam六、注意事项学习率至关重要SGD 对学习率非常敏感建议配合ReduceLROnPlateau或CosineDecay。Batch Size 影响有效学习率大 batch 时可能需要增大学习率如 linear scaling rule。不要忽略 warmup在 large batch 或 fine-tuning 时前几个 epoch 用小 lr warmup 可提升稳定性。Nesterov 并非总是更好某些任务中标准 Momentum 更稳定。总结SGD 是深度学习的“基石优化器”。虽然简单但配合动量、Nesterov、学习率调度后仍是计算机视觉等领域的黄金标准。在 TensorFlow/Keras 中tf.keras.optimizers.SGD提供了灵活且高效的实现既可用于教学理解优化原理也可用于工业级模型训练。掌握它是深入理解深度学习训练过程的关键一步。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价