梯度下降法(SGD)原理

目录

梯度下降法(SGD)原理:求偏导

1. 梯度(在数学上的定义)

2. 梯度下降法迭代步骤

BGD批量梯度下降算法

BGD、SGD在工程选择上的tricks


梯度下降法(SGD)原理:求偏导

1. 梯度(在数学上的定义)

表示某一函数在该点处方向导数沿着该方向取得最大值(即最大方向导数的方向),也就是函数在该点处沿着该方向变化最快,变化率最大(为该梯度的模)。

梯度下降

2. 梯度下降法迭代步骤

梯度下降的一个直观的解释:
比如我们在一座大山上的 某处位置,由于我们不知道怎么下山,于是决定 走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度, 沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后 继续求解当前位置梯度,向这一步所在位置沿着 最陡峭最易下山的位置走一步。 这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了 某一个局部的山峰低处

BGD批量梯度下降算法

是一种基于梯度的优化方法,其工作原理是通过多次迭代来寻找误差函数的最小值。在每次迭代中,算法会基于一组训练样本计算误差函数的梯度,并在此基础上更新模型参数。由于BGD算法在每次迭代时都需要计算所有训练样本的梯度,因此它通常会对内存和计算资源产生较大的压力。

相对于其他梯度下降算法,BGD具有以下优点:

  • 能够在较短时间内获得较好的收敛效果。
  • 通常能够避免陷入局部最小值的情况。
  • 具有较强的鲁棒性,能够处理较大的输入数据集。

尽管BGD算法具有上述优势,但仍然存在一些需要注意的问题。其中一个重要的问题是算法收敛速度的慢。由于每次迭代都需要计算所有训练样本的梯度,因此算法的收敛速度往往较慢。此外,BGD算法不容易处理在线学习问题,因为在线学习通常需要对单个样本进行计算,而批量梯度下降算法需要对所有样本进行计算。

为了解决BGD算法的上述问题,研究人员提出了一些变体算法。其中最常见的是随机梯度下降(SGD)算法。与BGD算法不同,SGD算法在每次迭代时只计算单个训练样本的梯度,从而大大提升了算法的计算速度。此外,SGD算法还能够较好地处理在线学习问题,因为它只需要对单个样本进行计算。

总之,BGD算法是一种常用的机器学习算法,适用于大规模数据集的优化。虽然存在一些缺点,但可以通过一些变体算法来加以解决。在实际应用中,我们应该根据数据集大小和问题要求选择最合适的优化算法。

BGD、SGD在工程选择上的tricks

BGD:相对噪声低些,幅度也大一些,你可以继续找最小值。
SGD:大部分时候你向着全局最小值靠近,有时候你会远离最小值,因为那个样本恰好给你指的方向不对,因此SGD是有很多噪声的,平均来看,它最终会靠近最小值,不过有时候也会方向错误,因为SGD永远不会收敛,而是会一直在最小值附近波动。一次性只处理了一个训练样本,这样效率过于低下。
mini-batch:实践中最好选择不大不小的 mini-batch,得到了大量向量化,效率高,收敛快。

调节 Batch_Size 对训练效果影响到底如何?

  1. Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
  2. 随着 Batch_Size 增大,处理相同数据量的速度越快。
  3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

如果训练集较小(小于 2000 个样本),直接使用BGD法,一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini-batch 大小是 2� ,代码会运行地快一些。

 梯度下降法(SGD)原理解析及其改进优化算法 - 知乎

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/133361586