← 返回《人工智能数学基础》
📑 查看全课大纲(第 53 / 93 节)
  1. 1.概论和集合的定义
  2. 2.逼疯康托的实数集理论
  3. 3.常用不等式与映射
  4. 4.函数及特殊函数
  5. 5.序列极限的定义
  6. 6.序列极限的性质与夹逼定理
  7. 7.重要极限
  8. 8.无穷小量,无穷大量和一组重要的阶的比较关系
  9. 9.聚点原理
  10. 10.函数极限及其性质
  11. 11.重要极限与等价无穷小
  12. 12.连续函数
  13. 13.导数的概念(那些年,扛起牛顿的胡克)
  14. 14.定义法求导
  15. 15.函数四则运算的导数与反函数求导法则
  16. 16.复合函数,隐函数,参数式求导
  17. 17.不定式求导之“洛必达与伯努利的师生情”
  18. 18.一阶微分
  19. 19.高阶导数
  20. 20.高阶微分
  21. 21.罗尔中值定理与拉格朗日中值定理
  22. 22.柯西空降科学院遭排挤
  23. 23.泰勒公式与泰勒的克妻属性
  24. 24.利用泰勒展开唯一性定理计算泰勒展开
  25. 25.泰勒公式的余项估计
  26. 26.极值问题与导数
  27. 27.函数凹凸性
  28. 28.无卵用的渐近线与函数作图
  29. 29.不定积分的定义
  30. 30.第一换元法
  31. 31.第二换元法
  32. 32.分部积分法
  33. 33.有理式积分
  34. 34.三角替换
  35. 35.定积分的概念
  36. 36.定积分的性质与积分中值定理
  37. 37.变上限定积分
  38. 38.微积分基本定理之“高斯教你如何优雅地装逼”
  39. 39.定积分的换元法
  40. 40.奇偶函数与周期函数的定积分
  41. 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
  42. 42.旋转体体积
  43. 43.旋转体侧面积
  44. 44.极坐标下图形的面积(数学系常用表白曲线)
  45. 45.欧式空间
  46. 46.点列极限,开集与闭集
  47. 47.多元函数的定义
  48. 48.多元函数的极限
  49. 49.多元连续函数
  50. 50.一阶偏导数
  51. 51.高阶偏导数
  52. 52.全微分
  53. 53.方向导数与梯度
  54. 54.链式法则
  55. 55.一阶全微分形式的不变性与高阶微分
  56. 56.多元函数的泰勒公式
  57. 57.隐函数存在定理与逆映射存在定理
  58. 58.多元函数的极值
  59. 59.矩阵基础知识
  60. 60.行列式的定义与特殊矩阵的行列式
  61. 61.行列式的性质
  62. 62.行列式按k行展开
  63. 63.线性方程组初步与高斯消元法
  64. 64.齐次线性方程组与Cramer法则
  65. 65.线性空间
  66. 66.线性相关与线性无关
  67. 67.向量组的秩
  68. 68.矩阵的秩与线性方程组有解的充要条件
  69. 69.齐次线性方程组的解集结构
  70. 70.非齐次线性方程组解集结构
  71. 71.基与维数
  72. 72.矩阵的乘法
  73. 73.特殊矩阵
  74. 74.矩阵乘积的秩与行列式
  75. 75.矩阵的逆
  76. 76.正交矩阵
  77. 77.矩阵对角化与特征值特征向量
  78. 78.实对称矩阵对角化
  79. 79.二次型与正定矩阵
  80. 80.LU分解
  81. 81.Cholesky分解
  82. 82.SVD分解
  83. 83.线搜索
  84. 84.步长
  85. 85.最速下降法和牛顿法
  86. 86.共轭梯度法
  87. 87.拟牛顿法
  88. 88.无约束优化
  89. 89.若干知识点补充(一)
  90. 90.若干知识点补充(二)
  91. 91.凸优化问题
  92. 92.对偶问题(一)
  93. 93.对偶问题(二)

方向导数与梯度

约 37 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

方向导数与梯度

小象实战讲义 · 人工智能数学基础

在多元函数微积分中,我们学习了偏导数,它刻画了函数沿坐标轴方向的变化率。但在实际问题中,例如优化算法寻找函数最快下降方向,我们往往需要知道函数在任意指定方向上的变化情况。本节将引入方向导数这一概念,它推广了偏导数,并在此基础上定义出多元函数微分的核心概念——梯度。梯度不仅指示了函数值增长最快的方向,其模长也量化了变化的剧烈程度,是理解后续最优化算法(如梯度下降法)的数学基石。

💡 核心导读

  • 从特殊到一般:理解方向导数如何将“沿坐标轴求导”的偏导数,推广到“沿任意方向求导”。
  • 梯度的诞生:掌握梯度的定义,它是由所有一阶偏导数构成的向量。
  • 梯度的核心性质:学习梯度的两个关键性质:1) 方向导数在梯度方向上取得最大值;2) 梯度的方向是函数值增长最快的方向。
  • 几何直观:通过梯度场和等高线图,直观感受梯度与函数变化趋势、极值点之间的关系。
  • 计算与应用:熟练计算给定函数在指定点的梯度,并理解其物理意义。

从偏导数到方向导数

偏导数 fx\frac{\partial f}{\partial x}fy\frac{\partial f}{\partial y} 分别描述了二元函数 z=f(x,y)z = f(x, y) 在点 (x0,y0)(x_0, y_0) 处,仅沿 xx 轴或 yy 轴方向变化时的瞬时变化率。这是两个特殊的方向。

一个自然的问题是:函数在点 (x0,y0)(x_0, y_0) 处,沿任意方向 l\vec{l}的变化率是多少?这就是方向导数要回答的问题。

方向导数的定义

设二元函数 z=f(x,y)z = f(x, y) 在点 P0(x0,y0)P_0(x_0, y_0) 的某个邻域内有定义。l\vec{l}是一个给定的方向向量,其方向余弦为 (cosα,cosβ)(\cos \alpha, \cos \beta),其中 α,β\alpha, \beta 分别是 l\vec{l}xx 轴、yy 轴正方向的夹角。方向余弦满足 cos2α+cos2β=1\cos^2 \alpha + \cos^2 \beta = 1,即 l\vec{l}是单位向量。

函数 f(x,y)f(x, y) 在点 P0P_0 处沿方向 l\vec{l}方向导数定义为以下极限(如果存在):

flP0=limt0+f(x0+tcosα, y0+tcosβ)f(x0,y0)t\frac{\partial f}{\partial \vec{l}} \bigg|{P_0} = \lim{t \to 0^+} \frac{f(x_0 + t\cos\alpha,\ y_0 + t\cos\beta) - f(x_0, y_0)}{t}

这里,tt 是一个正的微小标量。分子表示函数值从 P0P_0 点沿 l\vec{l}方向移动 tt 个单位长度后的变化量,分母是自变量的变化量(即移动的距离 tt)。因此,方向导数的几何意义是:过点 P0P_0 且以 l\vec{l}为方向向量的直线,与函数曲面 z=f(x,y)z=f(x,y) 相交得到一条空间曲线,该曲线在对应点处的切线斜率。

显然,当 l\vec{l}分别取 xx 轴正方向 (1,0)(1,0)yy 轴正方向 (0,1)(0,1) 时,方向导数就退化为偏导数 fx\frac{\partial f}{\partial x}fy\frac{\partial f}{\partial y}。因此,方向导数是偏导数的推广

方向导数的计算与梯度的引入

直接根据定义计算方向导数往往比较困难。幸运的是,如果函数在一点可微,那么该点沿任意方向的方向导数都存在,并且可以通过偏导数方便地计算出来。

定理:方向导数的计算公式

如果函数 f(x,y)f(x, y) 在点 P0(x0,y0)P_0(x_0, y_0) 处可微,那么 ff 在该点沿任意方向 l=(cosα,cosβ)\vec{l} = (\cos\alpha, \cos\beta) 的方向导数都存在,且其值为:

flP0=fxP0cosα+fyP0cosβ\frac{\partial f}{\partial \vec{l}} \bigg|{P_0} = \frac{\partial f}{\partial x} \bigg|{P_0} \cdot \cos\alpha + \frac{\partial f}{\partial y} \bigg|_{P_0} \cdot \cos\beta

证明:由可微定义,函数增量可表示为: Δf=f(x0+Δx,y0+Δy)f(x0,y0)=fxP0Δx+fyP0Δy+o(ρ)\begin{aligned} \Delta f &= f(x_0+\Delta x, y_0+\Delta y) - f(x_0, y_0) \ &= \frac{\partial f}{\partial x}\bigg|{P_0} \Delta x + \frac{\partial f}{\partial y}\bigg|{P_0} \Delta y + o(\rho) \end{aligned} 其中 ρ=(Δx)2+(Δy)2\rho = \sqrt{(\Delta x)^2 + (\Delta y)^2}o(ρ)o(\rho)ρ\rho 的高阶无穷小。

现在取 Δx=tcosα\Delta x = t\cos\alphaΔy=tcosβ\Delta y = t\cos\beta,则 ρ=tcos2α+cos2β=t\rho = t\sqrt{\cos^2\alpha + \cos^2\beta} = t。代入上式: f(x0+tcosα, y0+tcosβ)f(x0,y0)=(fxP0cosα+fyP0cosβ)t+o(t)f(x_0 + t\cos\alpha,\ y_0 + t\cos\beta) - f(x_0, y_0) = \left( \frac{\partial f}{\partial x}\bigg|{P_0} \cos\alpha + \frac{\partial f}{\partial y}\bigg|{P_0} \cos\beta \right) t + o(t) 两边同除以 tt 并取极限 t0+t \to 0^+,即得证。

观察这个计算公式,它可以写成两个向量的内积形式: flP0=(fxP0, fyP0)(cosα, cosβ)\frac{\partial f}{\partial \vec{l}} \bigg|{P_0} = \left( \frac{\partial f}{\partial x}\bigg|{P_0},\ \frac{\partial f}{\partial y}\bigg|_{P_0} \right) \cdot (\cos\alpha,\ \cos\beta)

我们记前一个向量为: fP0=(fxP0, fyP0)\nabla f\bigg|{P_0} = \left( \frac{\partial f}{\partial x}\bigg|{P_0},\ \frac{\partial f}{\partial y}\bigg|_{P_0} \right) 这个由函数在一点的所有一阶偏导数构成的向量,称为函数在该点的梯度(Gradient),记作 f\nabla fgradf\text{grad} f。符号 \nabla 读作“nabla”。

因此,方向导数的计算公式可以简洁地写为: fl=fl0\frac{\partial f}{\partial \vec{l}} = \nabla f \cdot \vec{l}_0 其中 l0=(cosα,cosβ)\vec{l}_0 = (\cos\alpha, \cos\beta) 是方向 l\vec{l}的单位向量。

梯度的性质与几何意义

梯度 f\nabla f 不仅仅是一个计算的中间结果,它本身具有极其重要的几何和物理意义。

性质一:梯度方向是方向导数取最大值的方向

根据方向导数的向量点乘公式 fl=fl0\frac{\partial f}{\partial \vec{l}} = \nabla f \cdot \vec{l}_0,以及向量点积的定义 ab=abcosθ\vec{a} \cdot \vec{b} = |\vec{a}| |\vec{b}| \cos\theta,其中 θ\theta 是两向量的夹角。因为 l0\vec{l}_0 是单位向量 (l0=1|\vec{l}_0|=1),所以有: fl=fcosθ\frac{\partial f}{\partial \vec{l}} = |\nabla f| \cdot \cos\theta 其中 θ\theta 是梯度向量 f\nabla f 与方向 l\vec{l}之间的夹角。

由于 cosθ\cos\theta 的取值范围是 [1,1][-1, 1],因此:

  • θ=0\theta = 0,即方向 l\vec{l}与梯度 f\nabla f 方向一致时,cosθ=1\cos\theta = 1,方向导数取得最大值 f|\nabla f|
  • θ=π\theta = \pi,即方向 l\vec{l}与梯度 f\nabla f 方向相反时,cosθ=1\cos\theta = -1,方向导数取得最小值 f-|\nabla f|
  • θ=π/2\theta = \pi/2,即方向 l\vec{l}与梯度 f\nabla f 方向垂直时,cosθ=0\cos\theta = 0,方向导数为 00,表示函数在该方向上没有瞬时变化。

结论

  1. 梯度方向是函数值增加最快的方向,其增加率(即方向导数的最大值)等于梯度的模长 f|\nabla f|
  2. 负梯度方向是函数值减少最快的方向,其减少率等于 f-|\nabla f|
  3. 垂直于梯度的方向是函数的“等高线”方向,函数值瞬时变化率为零。

这一性质是梯度下降法等最优化算法的核心数学原理:为了最小化一个函数,我们沿着其负梯度方向迭代更新参数。

性质二:梯度是一个向量值函数

对于一个 nn 元函数 f(x1,x2,,xn)f(x_1, x_2, \dots, x_n),其在点 x\mathbf{x} 处的梯度定义为: f(x)=(fx1, fx2, , fxn)T\nabla f(\mathbf{x}) = \left( \frac{\partial f}{\partial x_1},\ \frac{\partial f}{\partial x_2},\ \dots,\ \frac{\partial f}{\partial x_n} \right)^T 梯度运算 \nabla 将一个标量值函数 f:RnRf: \mathbb{R}^n \to \mathbb{R},映射为一个向量值函数 f:RnRn\nabla f: \mathbb{R}^n \to \mathbb{R}^n务必牢记,梯度的计算结果是一个向量

梯度的计算示例

让我们通过一个例子来熟悉梯度的计算。

:求函数 f(x,y,z)=xyzf(x, y, z) = xyz 在点 (1,2,3)(1, 2, 3) 处的梯度。

:首先计算函数在各个变量上的偏导数: fx=yz,fy=xz,fz=xy\frac{\partial f}{\partial x} = yz, \quad \frac{\partial f}{\partial y} = xz, \quad \frac{\partial f}{\partial z} = xy 因此,梯度为: f(x,y,z)=(yz, xz, xy)\nabla f(x, y, z) = (yz,\ xz,\ xy) 将点 (1,2,3)(1, 2, 3) 代入: f(1,2,3)=(2×3, 1×3, 1×2)=(6, 3, 2)\nabla f(1, 2, 3) = (2 \times 3,\ 1 \times 3,\ 1 \times 2) = (6,\ 3,\ 2) 所以,函数在 (1,2,3)(1,2,3) 处的梯度向量是 (6,3,2)(6, 3, 2)。这意味着在该点,函数值增长最快的方向是 (6,3,2)(6,3,2) 方向,最大增长率为 62+32+22=7\sqrt{6^2+3^2+2^2} = 7

我们可以用 Python 的 SymPy 库来验证这个计算:

import sympy as sp

# 定义符号和函数
x, y, z = sp.symbols('x y z')
f = x * y * z

# 计算梯度(即所有一阶偏导数)
grad_f = [sp.diff(f, var) for var in (x, y, z)]
print("梯度表达式:", grad_f)  # 输出: [y*z, x*z, x*y]

# 在点 (1, 2, 3) 处求值
point = {x: 1, y: 2, z: 3}
grad_at_point = [expr.subs(point) for expr in grad_f]
print("在点 (1,2,3) 处的梯度:", grad_at_point)  # 输出: [6, 3, 2]

# 计算梯度的模长(增长率)
import numpy as np
grad_np = np.array(grad_at_point, dtype=float)
norm = np.linalg.norm(grad_np)
print("梯度模长 (最大增长率):", norm)  # 输出: 7.0

梯度场与等高线:直观理解函数行为

为了更直观地理解梯度,我们可以引入梯度场等高线的概念。

梯度场 (Gradient Field)

对于一个二元函数 f(x,y)f(x, y),我们可以在其定义域的许多采样点 (xi,yi)(x_i, y_i) 处,计算出该点的梯度向量 f(xi,yi)\nabla f(x_i, y_i),并将这个向量以箭头的形式画在对应坐标点上。所有这些箭头构成的图形,就称为该函数的梯度场

梯度场像一幅“指南针地图”,在每个点都指示了函数值增长最快的方向(箭头方向)和增长的剧烈程度(箭头长度)。

等高线 (Contour Line)

等高线是满足 f(x,y)=cf(x, y) = ccc 为常数)的所有点 (x,y)(x, y) 构成的曲线。它来源于地理学,表示海拔高度相同的点连成的线。

梯度场与等高线的关系

将梯度场与等高线画在同一张图上,我们会发现两个关键现象:

  1. 垂直性:在任意一点,梯度向量的方向总是与经过该点的等高线垂直。这是因为沿着等高线方向,函数值不变,方向导数为零,而梯度方向是方向导数最大的方向,两者必然垂直。
  2. 密集度与陡峭度:等高线越密集的区域,梯度向量的模长(箭头长度)通常越大。因为等高线密集意味着在很短的水平距离内,函数值变化很大,这正是方向导数(或梯度模长)大的表现,对应着陡峭的地形。

让我们用代码可视化函数 f(x,y)=x2xyf(x, y) = x^2 - xy 的梯度场和等高线。

import numpy as np
import matplotlib.pyplot as plt

# 定义函数及其梯度
def f(x, y):
    return x**2 - x * y

def grad_f(x, y):
    # 梯度 (df/dx, df/dy) = (2x - y, -x)
    return 2*x - y, -x

# 创建网格
x = np.linspace(-2, 2, 20)
y = np.linspace(-2, 2, 20)
X, Y = np.meshgrid(x, y)

# 计算函数值和梯度
Z = f(X, Y)
U, V = grad_f(X, Y)  # U, V 是梯度向量的两个分量

# 创建图形
plt.figure(figsize=(12, 5))

# 子图1: 梯度场
plt.subplot(1, 2, 1)
plt.quiver(X, Y, U, V, color='blue', alpha=0.7, scale=30, width=0.004)
plt.title('梯度场')
plt.xlabel('x')
plt.ylabel('y')
plt.axis('equal')
plt.grid(True, linestyle='--', alpha=0.5)

# 子图2: 梯度场与等高线叠加
plt.subplot(1, 2, 2)
# 绘制等高线
contour_levels = np.linspace(Z.min(), Z.max(), 15)
contour = plt.contour(X, Y, Z, levels=contour_levels, colors='gray', linestyles='--', alpha=0.7)
plt.clabel(contour, inline=True, fontsize=8)
# 绘制梯度场
plt.quiver(X, Y, U, V, color='red', alpha=0.6, scale=30, width=0.004)
plt.title('梯度场与等高线')
plt.xlabel('x')
plt.ylabel('y')
plt.axis('equal')
plt.grid(True, linestyle='--', alpha=0.5)

plt.tight_layout()
plt.show()

运行这段代码,你可以观察到:

  • 在左上和右下区域,箭头较长,对应函数曲面较陡峭的区域。
  • 在中间一条带状区域(近似于直线 y=2xy=2x 附近),箭头很短甚至接近零点,对应函数曲面平缓的区域。
  • 在右图中,红色梯度箭头总是垂直于灰色的等高线。

梯度场与极值点

梯度场还能帮助我们识别函数的极值点(局部极大/极小值点):

  • 局部极大值点:梯度场中的箭头都指向该点。因为从该点出发,任何方向都是下坡(函数值减小),即方向导数为负,所以周围点的梯度方向都指向该点。
  • 局部极小值点:梯度场中的箭头都背离该点。因为从该点出发,任何方向都是上坡(函数值增加),即方向导数为正,所以周围点的梯度方向都背离该点。
  • 鞍点:梯度场在该点附近呈现复杂的模式,有些方向指向它,有些方向背离它。

📝 动手练一练

  1. 计算方向导数:设函数 f(x,y)=excosyf(x, y) = e^{x} \cos y,点 P(0,π4)P(0, \frac{\pi}{4}),方向 l\vec{l}xx 轴正方向的夹角为 π3\frac{\pi}{3}。求 flP\frac{\partial f}{\partial \vec{l}} \bigg|_P

    参考答案: 首先求梯度:f=(excosy, exsiny)\nabla f = (e^x \cos y,\ -e^x \sin y)。 在点 P(0,π/4)P(0, \pi/4) 处,fP=(cos(π/4), sin(π/4))=(22, 22)\nabla f|_P = (\cos(\pi/4),\ -\sin(\pi/4)) = (\frac{\sqrt{2}}{2},\ -\frac{\sqrt{2}}{2})。 方向 l\vec{l}的单位向量为 l0=(cosπ3, sinπ3)=(12, 32)\vec{l}_0 = (\cos\frac{\pi}{3},\ \sin\frac{\pi}{3}) = (\frac{1}{2},\ \frac{\sqrt{3}}{2})。 方向导数为两者点积: flP=2212+(22)32=24(13)\frac{\partial f}{\partial \vec{l}} \bigg|_P = \frac{\sqrt{2}}{2} \cdot \frac{1}{2} + \left(-\frac{\sqrt{2}}{2}\right) \cdot \frac{\sqrt{3}}{2} = \frac{\sqrt{2}}{4}(1 - \sqrt{3})

  2. 理解梯度性质:已知函数 f(x,y)=x2+2y2f(x, y) = x^2 + 2y^2 在点 (1,1)(1, 1) 处的梯度为 (2,4)(2, 4)。 a) 在点 (1,1)(1,1),沿哪个方向函数值增长最快?增长率是多少? b) 沿方向 (1,1)(1, -1) 的方向导数是多少?这个方向是增长方向还是减少方向?

    参考答案: a) 沿梯度方向 (2,4)(2, 4) 增长最快。增长率为梯度模长 22+42=20=25\sqrt{2^2+4^2} = \sqrt{20} = 2\sqrt{5}。 b) 首先将方向 (1,1)(1,-1) 单位化:l0=(12,12)\vec{l}_0 = (\frac{1}{\sqrt{2}}, -\frac{1}{\sqrt{2}})。 方向导数 fl=(2,4)(12,12)=2242=2\frac{\partial f}{\partial \vec{l}} = (2,4) \cdot (\frac{1}{\sqrt{2}}, -\frac{1}{\sqrt{2}}) = \frac{2}{\sqrt{2}} - \frac{4}{\sqrt{2}} = -\sqrt{2}。 由于值为负,所以沿 (1,1)(1,-1) 方向函数值是减少的。

本章小结

本节我们建立了从偏导数到方向导数,再到梯度的完整知识链条:

  • 方向导数推广了偏导数,描述了函数沿任意方向的变化率。
  • 梯度 f\nabla f 是由所有一阶偏导数构成的向量,它是一个强有力的数学工具。
  • 梯度的核心性质
    1. 函数在一点的方向导数等于该点梯度与方向单位向量的点积:fl=fl0\frac{\partial f}{\partial \vec{l}} = \nabla f \cdot \vec{l}_0
    2. 梯度方向是函数值增长最快的方向,其模长 f|\nabla f| 是最大增长率。负梯度方向是下降最快的方向。
  • 几何直观:梯度场直观展示了函数在各点的变化趋势。梯度方向恒与等高线垂直。梯度场的汇聚点或发散点常对应函数的极值点。

行动清单

  1. 掌握计算:对于给定的多元函数,能熟练计算其在指定点的梯度和沿指定方向的方向导数。
  2. 理解几何:看到梯度场或等高线图,能解释其反映的函数变化特征(哪里陡、哪里平缓、极值点可能在哪里)。
  3. 联想应用:理解“负梯度方向是函数下降最快方向”这一结论,并意识到这正是梯度下降法等优化算法的基本原理。

— 小象教研组

配套学习资源与课件
  • 第9章讲义(含板书):多元微分学(PDF · 28.2MB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问