参数 $\alpha$ 在核心的梯度下降更新规则 $\theta := \theta - \alpha \nabla J(\theta)$ 中扮演着重要作用。这个参数被称为学习率。它决定了算法在每次迭代中沿着下坡方向迈出的步长大小。你可以想象成,在下坡时根据坡度(梯度)调整你的步幅。梯度 $\nabla J(\theta)$ 指示了最陡峭的上升方向。由于我们希望最小化成本函数 $J(\theta)$,因此我们朝着相反的方向移动,这就是更新规则中出现负号的原因。学习率 $\alpha$ 随后调整这一步的大小。它是一个正的标量值。选择一个合适的学习率对于梯度下降的表现非常关键。学习率值的影响$\alpha$ 的选择直接影响收敛速度以及算法是否能收敛。如果学习率 $\alpha$ 过小: 梯度下降在每次迭代中会迈出非常小的步子。这意味着它需要很多次迭代才能达到最小值,这可能导致训练过程非常缓慢。虽然它很可能会最终收敛,但对于大型数据集或复杂模型来说,所需时间可能不切实际。如果学习率 $\alpha$ 过大: 梯度下降可能会越过最小值。想象一下大步跳下山坡;你可能会直接跳过最低点,落在另一侧,甚至可能比你开始的位置更高。在这种情况下,成本函数 $J(\theta)$ 可能会在最小值附近剧烈震荡或未能下降,在最坏的情况下,它可能完全发散,成本随每次迭代而增加。以下图表展示了不同的学习率如何影响成本函数随迭代的收敛情况。{"layout": {"title": "学习率 (\u03b1) 对收敛的影响", "xaxis": {"title": "迭代次数"}, "yaxis": {"title": "成本 J(\u03b8)"}}, "data": [{"x": [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50], "y": [5, 4.8, 4.6, 4.41, 4.23, 4.05, 3.28, 2.67, 2.18, 1.77, 1.44, 0.96, 0.64], "mode": "lines", "name": "\u03b1 过小 (例如 0.01)", "line": {"color": "#fd7e14"}}, {"x": [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50], "y": [5, 3.5, 2.45, 1.71, 1.2, 0.84, 0.2, 0.05, 0.01, 0.00, 0.00, 0.00, 0.00], "mode": "lines", "name": "\u03b1 '合适' (例如 0.1)", "line": {"color": "#228be6"}}, {"x": [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50], "y": [5, 1, 5.5, 1.5, 6, 2, 6.5, 2.5, 7, 3, 7.5, 4, 8.5], "mode": "lines", "name": "\u03b1 过大 (例如 0.6)", "line": {"color": "#f03e3e"}}]}梯度下降在不同学习率下的收敛表现。小的 $\alpha$ 会导致收敛缓慢,大的 $\alpha$ 会导致震荡或发散,而选择得当的 $\alpha$ 则能高效收敛。选择学习率那么,如何找到一个好的 $\alpha$ 值呢?没有一个单一的神奇数字,理想的学习率通常取决于具体问题、数据集和模型架构。试错: 选择学习率通常是一个经验过程。一个常用方法是尝试几个不同的值,例如相差10倍的数值(如 0.001, 0.01, 0.1, 1),并观察结果。监控成本函数: 在训练过程中,绘制成本函数 $J(\theta)$ 随迭代次数变化的图表。如果成本持续下降但非常缓慢,你的学习率可能过小。尝试提高它。如果成本震荡、增加或表现异常,你的学习率很可能过大。尝试降低它,例如降低3倍或10倍。如果成本稳定下降然后趋于平坦,你可能找到了一个合理的学习率,并收敛到了一个最小值(或接近最小值)。从小值开始: 通常更安全的方法是先从较小的学习率开始,如果收敛太慢再增加它,而不是一开始就设置过大,冒发散的风险。找到一个合适的学习率是有效应用梯度下降的基本组成部分。虽然我们通常从固定学习率开始,但更高级的优化算法(超出本节讨论范围)会采用技术在训练过程中调整学习率。目前,理解这个单一参数的影响是掌握基于梯度的优化方法的重要一步。