为了训练深度学习模型,我们的目标是找到一组参数(权重和偏差),使其能够使给定数据的特定损失函数最小化。优化算法是我们有效进行这项寻找的工具。最基本的算法,也是构建许多其他算法的基础的算法,就是梯度下降。您可能从机器学习入门知识中会想起梯度下降。其核心思想直接明了:迭代调整模型参数,使其沿着能最大限度减少损失函数的方向移动。我们如何知道哪个方向能最大限度地减少损失?我们使用梯度。梯度:下坡的指引损失函数$J( heta)$衡量模型在当前参数$ heta$下的表现。这个函数存在于一个高维空间中(每个参数对应一个维度)。目标是找到这个空间中对应着最低损失的点。损失函数关于参数的梯度,表示为$\nabla J(\theta)$,是一个指向损失函数在$\theta$点最陡峭上升方向的向量。由于我们希望最小化损失,我们应该沿着与梯度相反的方向移动。想象您正站在一片雾蒙蒙的山坡上,想要到达山谷底部(最低海拔,即最低损失)。您看不到整个区域,但能感受到脚下的坡度。梯度告诉您最陡峭的上坡路径方向。要下山,您就朝完全相反的方向迈一步。更新规则梯度下降通过一个简单的更新规则将这种直觉形式化。在每一步中,我们按照以下方式更新参数$\theta$:$$ \theta_{\text{new}} = \theta_{\text{old}} - \alpha \nabla J(\theta_{\text{old}}) $$我们来分解一下:$\theta_{\text{old}}$:模型参数的当前值。$\nabla J(\theta_{\text{old}})$:使用当前参数$\theta_{\text{old}}$计算的损失函数梯度。这个向量告诉我们损失最陡峭增加的方向。$\alpha$:学习率。这是一个小的正标量超参数,控制我们沿着梯度相反方向迈步的大小。选择一个好的学习率很要紧:太小,训练会非常慢;太大,我们可能会越过最小值甚至发散。$\theta_{\text{new}}$:迈出一步后更新的参数值。我们迭代重复这个更新过程,计算梯度并更新参数,希望收敛到一组参数$\theta$,使得损失函数$J(\theta)$的值较低。{"layout": {"title": "梯度下降在损失曲面上的步骤", "xaxis": {"title": "参数 1 (θ₁)", "range": [-2.5, 2.5]}, "yaxis": {"title": "参数 2 (θ₂)", "range": [-2.5, 2.5]}, "showlegend": false, "width": 600, "height": 450}, "data": [{"type": "contour", "z": [[13, 8, 5, 4, 5, 8, 13], [8, 3, 0, -1, 0, 3, 8], [5, 0, -3, -4, -3, 0, 5], [4, -1, -4, -5, -4, -1, 4], [5, 0, -3, -4, -3, 0, 5], [8, 3, 0, -1, 0, 3, 8], [13, 8, 5, 4, 5, 8, 13]], "x": [-2, -1.33, -0.67, 0, 0.67, 1.33, 2], "y": [-2, -1.33, -0.67, 0, 0.67, 1.33, 2], "colorscale": "Blues", "reversescale": true, "contours": {"coloring": "heatmap"}}, {"type": "scatter", "x": [-1.8, -1.2, -0.7, -0.3, -0.1], "y": [1.8, 1.2, 0.7, 0.3, 0.1], "mode": "lines+markers", "line": {"color": "#f03e3e", "width": 2}, "marker": {"color": "#f03e3e", "size": 8}}]}一个简化的2D损失曲面(等高线代表等损失值)。红线显示了梯度下降所走的路径,它从一个起始点开始,沿着与梯度相反的方向迈步,走向最小值(最深蓝色区域)。批量梯度下降梯度下降的“标准”版本,通常被称为批量梯度下降(BGD),有一个特定特点:在每个更新步骤中,为了计算梯度$\nabla J(\theta)$,它会处理整个训练数据集。它会在进行一次参数更新之前,计算所有训练样本的平均损失和平均梯度。这给出了整个数据集真实梯度的非常准确的估计,导致收敛路径平稳地趋向最小值。然而,正如章节引言中提到的,对于深度学习中常用的海量数据集来说,计算整个数据集的梯度在计算量上是难以承受的。想象一下,仅仅为了对模型权重做一次微小的调整,就要计算数百万张图像的预测和梯度!这种计算负担是促使我们接下来讨论的梯度下降变体(例如随机梯度下降(SGD)和迷你批量梯度下降)产生的主要原因。这些方法提供了更快更新的方式,尽管有一些权衡,但它们使优化过程在大规模深度学习中变得可行。了解批量梯度下降的机制,为理解这些变体为何被开发以及它们如何运作提供了必要的铺垫。