我们已经知道如何使用损失函数 $L$ 来衡量网络的误差。损失值高表示预测不佳,而损失值低则表示网络表现良好。训练的目标是找到能够使此损失函数最小化的权重 $W$ 和偏置 $b$ 的集合。但我们如何系统地找到这些最佳参数呢?可以把损失函数看作定义了一个地形,其中可能有山丘和山谷,任何一点的高度都对应着网络权重和偏置某种特定配置下的损失值。我们的目标是找到这个地形中的最低点,即山谷的底部。想象你站在这个地形的某个山丘上,也许身处浓雾之中,你只能感觉到周围的地形。为了到达最低点,一个明智的办法是感受地面,判断哪个方向向下坡度最陡,然后朝那个方向迈出一步。通过重复这个过程,你应该会逐渐走向谷底。这正是梯度下降背后的思路。在数学上,我们当前在损失曲面上的位置,在每个可能方向上的“斜度”或“陡峭程度”由梯度表示。损失函数相对于参数的梯度,通常表示为 $ \nabla L $,是一个向量。这个向量的每个分量都表示损失函数对一个特定参数(一个权重或一个偏置)的偏导数。重要的是,梯度向量指向损失函数增加最快的方向。因为我们的目标是减少损失,所以我们需要朝着与梯度相反的方向移动。损失 $L$ 取决于网络中所有可调整的参数。因此,梯度 $ \nabla L $ 告诉我们损失对每个参数的微小变化有多敏感。例如,偏导数 $ \frac{\partial L}{\partial w_{ij}} $ 量化了如果我们对连接神经元 $i$ 到神经元 $j$ 的特定权重 $w_{ij}$ 进行微小调整,损失 $L$ 会改变多少。梯度下降使用这些梯度信息来迭代更新网络的参数。在训练过程的每次迭代中:我们根据权重和偏置的当前值计算梯度 $ \nabla L $。(我们将在下一节看到如何使用反向传播有效地进行此计算。)我们通过朝着其对应梯度分量相反的方向迈出小步来调整每个参数。这个“步长”的大小由一个称为学习率的参数决定(通常表示为 $ \eta $ 或 $ \alpha $),它用于缩放梯度。我们很快会更详细地讨论学习率,但单个参数(比如权重 $w$)的更新规则如下所示:$$ w_{new} = w_{old} - \eta \frac{\partial L}{\partial w_{old}} $$这个公式表明,权重的新值是旧值减去该权重梯度分量的一小部分(由 $ \eta $ 决定)。我们同时对网络中的所有权重和偏置执行此更新。让我们直观地理解这个过程。设想一个简化的情况,损失 $L$ 仅取决于一个参数 $w$。损失函数可以由一条曲线表示。梯度下降从某个初始猜测值 $w_0$ 开始,并沿着曲线的斜坡逐步下降,直到接近最小值点。{"layout": {"title": "一维损失曲面上的梯度下降", "xaxis": {"title": "参数 (w)", "range": [-4.5, 4.5]}, "yaxis": {"title": "损失 L(w)", "range": [0, 18]}, "showlegend": true, "legend": {"x": 0.05, "y": 0.95}}, "data": [{"x": [-4, -3, -2, -1, 0, 1, 2, 3, 4], "y": [17, 10, 5, 2, 1, 2, 5, 10, 17], "mode": "lines", "name": "损失函数 L(w) = w^2 + 1", "line": {"color": "#228be6", "width": 2}}, {"x": [4, 2.4, 1.44, 0.864, 0.518, 0.311], "y": [17, 6.76, 3.07, 1.75, 1.27, 1.10], "mode": "markers+lines", "name": "梯度下降步骤", "marker": {"color": "#f03e3e", "size": 9, "symbol": "arrow-down"}, "line": {"color": "#f03e3e", "dash": "dot", "width": 1.5}}]}从一个初始参数值(例如,w=4)开始,梯度下降迭代计算当前点的斜率(梯度),然后向下坡迈出一步(朝着与梯度相反的方向),趋近最小损失。学习率控制着这些步长的大小。在实际的神经网络中,参数空间不是简单的1D曲线,甚至也不是2D曲面。它是由数千或数百万个参数定义的高维空间。尽管无法直观地展示,但梯度下降的数学原理保持不变:计算梯度向量 $ \nabla L $(其中包含每个权重和偏置的偏导数),并通过朝着其梯度分量相反的方向同时更新所有参数,并按学习率进行缩放。计算梯度和更新参数的这个过程会重复多次。每次迭代(当处理整个训练数据集时通常称为一个“周期”),参数应逐渐调整到产生更低损失的值。我们通常会持续这个迭代过程,直到损失值收敛,即它不再显著下降,这表明我们已经找到了损失中的一个最小值点。尽管梯度下降提供了一种优化网络参数的强大方法,但它并非没有挑战。神经网络复杂的高维损失曲面通常是非凸的,这意味着它们除了期望的全局最小值外,还可能包含许多局部最小值(指比其直接周围区域低,但并非总体最低的点)。算法可能会收敛到局部最小值,这可能不是最佳解决方案。此外,学习率的选择以及所使用的梯度下降的具体变体可以显著影响训练速度和稳定性。这些是我们后续会考量的问题。目前,核心思路是清晰的:沿着负梯度方向下降以最小化损失。下一步是理解如何有效地计算该梯度。