随机梯度下降(Stochastic Gradient Descent,SGD)是机器学习中最基础的优化算法之一,其核心思想是通过迭代更新参数来最小化损失函数。以下是 SGD 的公式、变种及关键特性的详细解析:
假设损失函数为 \(L(\theta; x, y)\),其中 \(\theta\) 为模型参数,\((x, y)\) 为样本数据。SGD 的参数更新过程如下:
单次迭代更新公式:
\(\theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t; x_i, y_i)\)
- 参数说明:
- \(\theta_t\):第 t 次迭代的参数向量;
- \(\eta\):学习率(Learning Rate),控制更新步长;
- \(\nabla L(\theta_t; x_i, y_i)\):单个样本 \((x_i, y_i)\) 对应的损失函数梯度;
- 核心逻辑:沿梯度反方向更新参数,使损失函数减小。
| 算法类型 | 每次更新使用的数据量 | 梯度计算方式 | 优缺点 |
| 批量梯度下降(BGD) |
全部训练数据(批量大小 = 数据集大小) |
\(\nabla L(\theta) = \frac{1}{N}\sum_{i=1}^N \nabla L(\theta; x_i, y_i)\) |
梯度稳定但计算量极大,适合数据量小的场景。 |
| 随机梯度下降(SGD) |
单个样本(批量大小 = 1) |
\(\nabla L(\theta; x_i, y_i)\) |
计算高效但梯度波动大,可能跳出局部极小值,适合大数据场景。 |
| 小批量梯度下降(Mini-Batch SGD) |
小批量样本(如批量大小 = 32/64) |
\(\nabla L(\theta) = \frac{1}{m}\sum_{i=1}^m \nabla L(\theta; x_i, y_i)\) |
平衡计算效率与梯度稳定性,现代深度学习中最常用。 |
- 公式:\(\begin{align*}
v_t &= \gamma \cdot v_{t-1} + \eta \cdot \nabla L(\theta_t - \gamma \cdot v_{t-1}) \\
\theta_{t+1} &= \theta_t - v_t
\end{align*}\)
- 在计算当前梯度前,先根据历史动量 “预更新” 参数,使梯度计算更具前瞻性,提升收敛精度。
- 衰减策略:
- 线性衰减:\(\eta_t = \eta_0 / (1 + k \cdot t)\),k 为衰减率;
- 指数衰减:\(\eta_t = \eta_0 \cdot \gamma^t\),\(\gamma\) 为衰减因子(如 0.95);
- 余弦衰减:\(\eta_t = \frac{\eta_0}{2} \left(1 + \cos\left(\frac{t \cdot \pi}{T}\right)\right)\),T 为总迭代次数,模拟余弦函数平滑衰减。
- 计算高效:每次更新仅需单个样本,适合大数据和在线学习;
- 抗过拟合:梯度的随机性相当于引入噪声,可能帮助模型跳出尖锐局部极小值,泛化能力更强;
- 实现简单:无需复杂参数(如 Adam 中的动量和二阶矩估计),调参成本低。
- 梯度波动大:单个样本的梯度可能包含大量噪声,导致收敛过程震荡;
- 学习率敏感:固定学习率可能导致收敛缓慢或发散,需精细调整衰减策略;
- 缺乏自适应能力:无法根据参数特性动态调整更新步长(对比 Adam 等自适应优化器)。
- 大规模深度学习:如训练 BERT、GPT 等大模型时,常使用 Mini-Batch SGD 结合动量加速收敛;
- 稀疏数据场景:当数据特征稀疏时,SGD 对非零特征的更新更高效(对比自适应优化器可能过度惩罚稀疏特征);
- 凸优化问题:如线性回归、逻辑回归等,SGD 可保证收敛到全局最优解。
-
SGD 为什么比 BGD 更适合深度学习?
- 答:深度学习数据集通常庞大(如 ImageNet 千万级样本),BGD 每次更新需计算全部数据梯度,内存和计算成本极高;而 SGD 或 Mini-Batch SGD 可通过小批量数据迭代,大幅降低计算量,且随机性有助于避免过拟合。
-
动量 SGD 中的动量系数如何影响训练?
- 答:
- \(\gamma\) 接近 0 时,动量作用弱,接近普通 SGD,收敛易震荡;
- \(\gamma\) 接近 1 时,动量累积效应强,参数更新方向更稳定,但可能因惯性过大跳过最优解;
- 常见取值为 0.9 或 0.99,需根据任务调整(如图像任务常用 0.9,NLP 任务可能更低)。
-
SGD 与 Adam 的区别?什么场景下 SGD 更优?
- 答:
- 区别:Adam 结合一阶矩(动量)和二阶矩(自适应学习率),对稀疏特征更友好;SGD 需手动调整学习率,梯度更新更依赖数据分布。
- SGD 更优场景:
- 数据分布均匀、非稀疏(如图像像素);
- 需模型泛化能力强(SGD 的随机性可视为隐式正则化);
- 大批量训练(如 Batch Size=1024)时,SGD + 动量的收敛速度可能超过 Adam。
SGD 的核心公式简单但内涵丰富,其随机性和高效性使其成为深度学习的基础优化工具。实际应用中,常通过结合动量、学习率调度等技巧提升性能。理解 SGD 与其他优化器的差异,以及在不同场景下的适用性,是掌握机器学习优化的关键。