导数 $f'(x)$ 衡量单变量函数 $f(x)$ 的瞬时变化率。然而,机器学习模型通常依赖于许多输入或参数。以一个依赖于两个权重 $w_1$ 和 $w_2$ 的简单成本函数 $J(w_1, w_2)$ 为例。我们如何衡量 $J$ 的变化?如果调整 $w_1$ 或 $w_2$,它会变化得更快吗?这就是偏导数的用武之地。当函数有多个输入变量时,偏导数衡量当一个特定输入变量变化而所有其他输入变量保持不变时,函数如何变化。偏导数的定义假设你有一个函数 $f(x, y)$。 函数 $f$ 对 $x$ 的偏导数说明了当我们对 $x$ 进行微小调整时 $f$ 如何变化,前提是 $y$ 保持不变。同样,函数 $f$ 对 $y$ 的偏导数说明了当我们调整 $y$ 时 $f$ 如何变化,同时保持 $x$ 固定。记号我们使用一个特殊符号 $\partial$ (通常读作“del”或直接称作“偏导符号”) 来表示偏导数。函数 $f$ 对 $x$ 的偏导数记作 $\frac{\partial f}{\partial x}$ 或有时记作 $f_x$。函数 $f$ 对 $y$ 的偏导数记作 $\frac{\partial f}{\partial y}$ 或有时记作 $f_y$。如果函数是 $z = f(x, y)$,你可能还会看到记号 $\frac{\partial z}{\partial x}$ 和 $\frac{\partial z}{\partial y}$。如何计算偏导数计算过程非常直接:确定你要求导的变量(例如,$x$)。将所有其他独立变量视为常数(例如,将 $y$ 视为一个数字,如 5 或 $c$)。应用你为单变量函数学过的标准求导法则。我们来看一个例子。假设我们有以下函数: $$ f(x, y) = x^2 + 3xy + y^3 $$求 $\frac{\partial f}{\partial x}$ (对 $x$ 的偏导数):我们将 $y$ 视为常数。$x^2$ 对 $x$ 的导数是 $2x$。$3xy$ 对 $x$ 的导数是 $3y$ (把 $3y$ 看作是乘以 $x$ 的常数系数)。$y^3$ 对 $x$ 的导数是 $0$ (因为 $y$ 被视为常数,$y^3$ 也是常数,常数的导数是零)。综合起来: $$ \frac{\partial f}{\partial x} = 2x + 3y + 0 = 2x + 3y $$求 $\frac{\partial f}{\partial y}$ (对 $y$ 的偏导数):现在,我们将 $x$ 视为常数。$x^2$ 对 $y$ 的导数是 $0$ (它被视为常数)。$3xy$ 对 $y$ 的导数是 $3x$ (把 $3x$ 看作是乘以 $y$ 的常数系数)。$y^3$ 对 $y$ 的导数是 $3y^2$。综合起来: $$ \frac{\partial f}{\partial y} = 0 + 3x + 3y^2 = 3x + 3y^2 $$请注意,偏导数通常仍然是 $x$ 和 $y$ 的函数。它们表示函数在特定点 $(x, y)$ 沿特定方向($x$ 方向或 $y$ 方向)的变化率。几何含义对于一个描述三维空间中曲面的函数 $z = f(x, y)$,偏导数具有很好的几何含义。在点 $(x_0, y_0)$ 处的 $\frac{\partial f}{\partial x}$ 是曲面 $z=f(x, y)$ 与平面 $y=y_0$ 相交形成的曲线的切线斜率。它是沿 $x$ 方向的斜率。在点 $(x_0, y_0)$ 处的 $\frac{\partial f}{\partial y}$ 是曲面 $z=f(x, y)$ 与平面 $x=x_0$ 相交形成的曲线的切线斜率。它是沿 $y$ 方向的斜率。以下可视化呈现了曲面 $z = 0.5x^2 + y^2$,并突出显示了通过在 $x=1$ 和 $y=1$ 处切割曲面而形成的曲线,它们在点 $(1, 1, 1.5)$ 处相交。点 $(1,1)$ 处的偏导数 $\frac{\partial z}{\partial x}$ 表示该点沿红色曲线 ($y=1$) 的斜率,而 $\frac{\partial z}{\partial y}$ 表示该点沿蓝色曲线 ($x=1$) 的斜率。{"layout": {"title": "曲面 z = 0.5x^2 + y^2 及在 (1,1) 处的切片", "scene": {"xaxis": {"title": "x"}, "yaxis": {"title": "y"}, "zaxis": {"title": "z=f(x,y)"}}, "margin": {"l": 0, "r": 0, "b": 0, "t": 40}}, "data": [{"type": "surface", "x": [-2, -1, 0, 1, 2], "y": [-2, -1, 0, 1, 2], "z": [[4.0, 2.5, 2.0, 2.5, 4.0], [2.5, 1.0, 0.5, 1.0, 2.5], [2.0, 0.5, 0.0, 0.5, 2.0], [2.5, 1.0, 0.5, 1.0, 2.5], [4.0, 2.5, 2.0, 2.5, 4.0]], "opacity": 0.7, "colorscale": "Blues", "name": "z = 0.5x^2 + y^2", "showscale": false}, {"type": "scatter3d", "mode": "lines", "x": [-2, -1, 0, 1, 2], "y": [1, 1, 1, 1, 1], "z": [3.0, 1.5, 1.0, 1.5, 3.0], "line": {"color": "#f03e3e", "width": 5}, "name": "y=1 切片"}, {"type": "scatter3d", "mode": "lines", "x": [1, 1, 1, 1, 1], "y": [-2, -1, 0, 1, 2], "z": [4.5, 1.5, 0.5, 1.5, 4.5], "line": {"color": "#1c7ed6", "width": 5}, "name": "x=1 切片"}, {"type": "scatter3d", "mode": "markers", "x": [1], "y": [1], "z": [1.5], "marker": {"color": "#f59f00", "size": 5}, "name": "点 (1,1,1.5)"}]}在 $(1, 1)$ 处的偏导数 $\frac{\partial f}{\partial x}$ 表示在橙色点处,曲面沿红色曲线(其中 $y=1$)的斜率。在 $(1, 1)$ 处的偏导数 $\frac{\partial f}{\partial y}$ 表示在橙色点处,曲面沿蓝色曲线(其中 $x=1$)的斜率。与机器学习的关系这为什么对机器学习有意义?考虑一个非常简单的线性模型对单个数据点 $(x, y)$ 的平方误差成本: $$ J(w, b) = (wx + b - y)^2 $$ 这里,成本 $J$ 是模型参数 $w$ (权重) 和 $b$ (偏置) 的函数。我们训练的目标通常是找到能使该成本(或许多数据点上此类成本的总和)最小化的 $w$ 和 $b$ 值。为了使用梯度下降等优化算法,我们需要得知当我们调整 $w$ 和 $b$ 时成本 $J$ 如何变化。我们需要以下偏导数:对 $w$ 的偏导数: 将 $b$, $x$ 和 $y$ 视为常数。使用链式法则: $$ \frac{\partial J}{\partial w} = 2(wx + b - y)^1 \cdot \frac{\partial}{\partial w}(wx + b - y) $$ $$ \frac{\partial J}{\partial w} = 2(wx + b - y) \cdot (x) $$对 $b$ 的偏导数: 将 $w$, $x$ 和 $y$ 视为常数。使用链式法则: $$ \frac{\partial J}{\partial b} = 2(wx + b - y)^1 \cdot \frac{\partial}{\partial b}(wx + b - y) $$ $$ \frac{\partial J}{\partial b} = 2(wx + b - y) \cdot (1) $$这些偏导数分别表示误差对权重和偏置微小变化的敏感度。例如,$\frac{\partial J}{\partial w}$ 表示当 $w$ 略微增加时,平方误差会增加或减少多少。这些信息正是基于梯度的优化算法用来更新参数并最小化成本函数的内容。理解偏导数是掌握梯度的第一步,梯度将所有偏导数组合成一个单一向量,该向量指向函数最陡峭的上升方向。我们将在下一节介绍梯度。