计算成本函数的梯度是优化的主要步骤。一个简单的线性模型,$y = mx + b$,用于表示数据。为了衡量这条直线与数据的拟合程度,通常使用成本函数(如均方误差MSE)来量化误差。目标是找到 $m$(斜率)和 $b$(y轴截距)的值,使这个成本尽可能小。梯度下降算法需要方向。它需要知道:“如果我稍微改变 $m$,成本会如何变化?” 以及 “如果我稍微改变 $b$,成本会如何变化?” 这正是偏导数所告诉我们的。我们需要计算成本函数 $\nabla C$ 的梯度,它由关于每个参数 $m$ 和 $b$ 的偏导数组成。成本函数:均方误差 (MSE)假设我们有 $N$ 个数据点:$(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)$。对于任何给定的 $m$ 和 $b$,我们的模型对每个输入 $x_i$ 预测得到 $y_{pred, i} = mx_i + b$。实际值为 $y_i$。均方误差成本函数 $C(m, b)$ 定义为预测值与实际值之间平方差的平均值:$$ C(m, b) = \frac{1}{N} \sum_{i=1}^{N} (y_{pred, i} - y_{actual, i})^2 $$代入模型的预测结果:$$ C(m, b) = \frac{1}{N} \sum_{i=1}^{N} ( (mx_i + b) - y_i )^2 $$这个函数 $C(m,b)$ 以 $m$ 和 $b$ 为输入,输出一个代表平均误差的数值。我们现在的任务是找出 $\frac{\partial C}{\partial m}$ 和 $\frac{\partial C}{\partial b}$。计算关于 $m$ 的偏导数 ($\frac{\partial C}{\partial m}$)为了找出 $\frac{\partial C}{\partial m}$,我们对成本函数 $C(m, b)$ 关于 $m$ 进行求导,同时将 $b$(以及所有 $x_i$、$y_i$ 和 $N$)视为常数。让我们逐项分析这个表达式:常数因子: $\frac{1}{N}$ 是一个常数乘数,因此它保持不变。求和法则: 和的导数是导数的和。我们可以将导数移到求和符号内部: $$ \frac{\partial C}{\partial m} = \frac{1}{N} \sum_{i=1}^{N} \frac{\partial}{\partial m} (mx_i + b - y_i)^2 $$链式法则: 我们需要对 $(mx_i + b - y_i)^2$ 关于 $m$ 进行求导。设 $u = mx_i + b - y_i$。我们正在对 $u^2$ 关于 $m$ 求导。链式法则指出 $\frac{d}{dm}(u^2) = 2u \cdot \frac{\partial u}{\partial m}$。第一部分:$2u = 2(mx_i + b - y_i)$。第二部分:我们需要 $\frac{\partial u}{\partial m} = \frac{\partial}{\partial m} (mx_i + b - y_i)$。由于 $b$ 和 $y_i$ 被视为常数,它们的导数为零。$mx_i$ 关于 $m$ 的导数就是 $x_i$(因为 $x_i$ 被视为 $m$ 的常数系数)。所以, $\frac{\partial u}{\partial m} = x_i$。组合起来: 代回链式法则公式:$\frac{\partial}{\partial m} (mx_i + b - y_i)^2 = 2(mx_i + b - y_i) \cdot x_i$。$\frac{\partial C}{\partial m}$ 的最终结果: 现在将其代回求和式中: $$ \frac{\partial C}{\partial m} = \frac{1}{N} \sum_{i=1}^{N} 2(mx_i + b - y_i) x_i $$ 我们可以将常数 2 提出求和符号: $$ \frac{\partial C}{\partial m} = \frac{2}{N} \sum_{i=1}^{N} (mx_i + b - y_i) x_i $$这个表达式告诉我们,当我们稍微改变斜率 $m$ 时,成本如何变化。请注意,它取决于每个数据点的误差项 $(mx_i + b - y_i)$ 和输入值 $x_i$。计算关于 $b$ 的偏导数 ($\frac{\partial C}{\partial b}$)现在我们重复这个过程,但这次我们对 $C(m, b)$ 关于 $b$ 进行求导,同时将 $m$ 视为常数。常数因子和求和法则: 同前述步骤,我们得到: $$ \frac{\partial C}{\partial b} = \frac{1}{N} \sum_{i=1}^{N} \frac{\partial}{\partial b} (mx_i + b - y_i)^2 $$链式法则: 同样,设 $u = mx_i + b - y_i$。我们需要 $\frac{d}{db}(u^2) = 2u \cdot \frac{\partial u}{\partial b}$。第一部分:$2u = 2(mx_i + b - y_i)$。第二部分:我们需要 $\frac{\partial u}{\partial b} = \frac{\partial}{\partial b} (mx_i + b - y_i)$。这次,$m$、$x_i$ 和 $y_i$ 被视为常数。$mx_i$ 关于 $b$ 的导数为 0。$b$ 关于 $b$ 的导数为 1。$y_i$ 关于 $b$ 的导数为 0。所以, $\frac{\partial u}{\partial b} = 1$。组合起来: $\frac{\partial}{\partial b} (mx_i + b - y_i)^2 = 2(mx_i + b - y_i) \cdot 1$。$\frac{\partial C}{\partial b}$ 的最终结果: 代回求和式中: $$ \frac{\partial C}{\partial b} = \frac{1}{N} \sum_{i=1}^{N} 2(mx_i + b - y_i) (1) $$ 将常数 2 提出: $$ \frac{\partial C}{\partial b} = \frac{2}{N} \sum_{i=1}^{N} (mx_i + b - y_i) $$这个表达式告诉我们,当我们稍微改变y轴截距 $b$ 时,成本如何变化。它仅取决于每个数据点的误差项 $(mx_i + b - y_i)$。梯度向量 $\nabla C$我们已经成功计算出偏导数!现在我们可以将它们组合成成本函数 $C(m, b)$ 的梯度向量:$$ \nabla C(m, b) = \left[ \frac{\partial C}{\partial m}, \frac{\partial C}{\partial b} \right] $$代入我们找到的表达式:$$ \nabla C(m, b) = \left[ \frac{2}{N} \sum_{i=1}^{N} (mx_i + b - y_i) x_i, \quad \frac{2}{N} \sum_{i=1}^{N} (mx_i + b - y_i) \right] $$这个向量 $\nabla C$ 是基本要素。对于任何给定的 $m$ 和 $b$ 值:第一个分量 ($\frac{\partial C}{\partial m}$) 告诉我们,如果只沿着 $m$ 方向移动,成本函数的变化率。它的符号告诉我们增加 $m$ 是增加还是减少成本。第二个分量 ($\frac{\partial C}{\partial b}$) 告诉我们,如果只沿着 $b$ 方向移动,成本函数的变化率。它的符号告诉我们增加 $b$ 是增加还是减少成本。重要的一点是,梯度向量 $\nabla C$ 指向成本函数 $C(m,b)$ 在当前点 $(m,b)$ 处 增长最快 的方向。由于我们希望 最小化 成本,梯度下降将涉及沿着与梯度 相反 的方向迈步。有了这些计算出的梯度,我们现在就有了迭代更新 $m$ 和 $b$ 所需的精确信息,以找到最拟合数据的直线。下一步是了解这些梯度在梯度下降算法中是如何使用的。