通过 Python 示例理解反向传播 — 第3部分

发布: (2026年1月18日 GMT+8 03:54)
3 min read
原文: Dev.to

Source: Dev.to

回顾(第 2 部分)

在上一篇文章中,我们将 平方残差和(SSR) 对偏置 (b_3) 作图,以可视化损失的最小位置。粉色曲线展示了两者的关系,曲线的最低点对应于最佳偏置值。

使用梯度下降寻找最佳偏置

与其手动评估大量偏置值,我们可以使用梯度下降。这需要计算 SSR 对 (b_3) 的导数。

通过链式法则求导

[ \frac{\partial \text{SSR}}{\partial b_3} = \sum_{i=1}^{n} \frac{\partial \text{SSR}}{\partial \hat{y}_i} \cdot \frac{\partial \hat{y}_i}{\partial b_3} ]

对于每个训练样本,其贡献为:

[ -2 \times (y_i - \hat{y}_i) \times 1 ]

其中 (y_i) 为真实目标,(\hat{y}_i) 为预测值(预测对偏置的导数为 1)。

第一次迭代( (b_3 = 0) )

输入向量 ([0, 1, 0]) 时模型预测:

样本(y_i)(\hat{y}_i)
10-2.6
21-1.6
30-2.61

梯度为:

[ \begin{aligned} &-2 \times (0 - (-2.6)) \times 1 \ &;+; -2 \times (1 - (-1.6)) \times 1 \ &;+; -2 \times (0 - (-2.61)) \times 1 \ &= -15.7 \end{aligned} ]

使用学习率 (\alpha = 0.1):

[ \text{步长} = \text{梯度} \times \alpha = -15.7 \times 0.1 = -1.57 ]

[ b_3^{\text{new}} = b_3^{\text{old}} - \text{步长} = 0 - (-1.57) = 1.57 ]

绿色曲线(新预测)此时看起来有所改善。

第二次迭代( (b_3 = 1.57) )

预测值变为:

样本(y_i)(\hat{y}_i)
10-1.03
21-0.03
30-1.04

梯度:

[ \begin{aligned} &-2 \times (0 - (-1.03)) \times 1 \ &;+; -2 \times (1 - (-0.03)) \times 1 \ &;+; -2 \times (0 - (-1.04)) \times 1 \ &= -6.26 \end{aligned} ]

步长:

[ \text{步长} = -6.26 \times 0.1 = -0.626 ]

更新偏置:

[ b_3^{\text{new}} = 1.57 - (-0.626) = 2.19 ]

收敛

重复更新步骤会使梯度的绝对值逐渐减小。当 (b_3 \approx 2.61) 时,梯度接近 0,表明损失已经达到最小。因此,(b_3 = 2.61) 是此简单示例的最佳偏置。

要点

梯度下降提供了一种高效的方法来定位 SSR 曲线的最小点,而无需穷举搜索。通过在梯度相反方向上迭代调整偏置,我们能够快速收敛到最优值。

欢迎在 Python notebook 中实验这些计算,以加深对概念的理解。

Back to Blog

相关文章

阅读更多 »

重构你的简历

简历生成器 - FlowCV – 我个人最喜欢的。它免费、现代,而且布局非常不易被“破坏”。 - Standard Resume – 极简主义,高可读性布局……