🎯 学习目标

  • 理解导数与梯度的概念
  • 掌握链式法则及其应用
  • 了解偏导数与方向导数
  • 理解梯度下降优化原理
💡
微积分在AI中的角色

神经网络的训练本质上是通过微积分(特别是链式法则)计算梯度,然后使用梯度下降优化损失函数。

📈 导数的概念

导数定义

导数表示函数在某点的瞬时变化率,几何意义是切线斜率。

# 导数的定义 f'(x) = lim(h→0) [f(x+h) - f(x)] / h # 数值计算导数 import numpy as np def f(x): return x ** 2 def numerical_derivative(f, x, h=1e-5): return (f(x + h) - f(x - h)) / (2 * h) print(f"x=2处的导数: {numerical_derivative(f, 2)}") # ≈ 4

📋 常见导数公式

函数 f(x) 导数 f'(x)
c(常数)0
xⁿnxⁿ⁻¹
ln(x)1/x
sin(x)cos(x)
cos(x)-sin(x)
σ(x) (sigmoid)σ(x)(1-σ(x))
tanh(x)1-tanh²(x)

⛓️ 链式法则

核心公式

如果 y = f(g(x)),则 dy/dx = f'(g(x)) · g'(x)
⚠️
链式法则的重要性

反向传播算法本质上就是对复合函数应用链式法则,逐层计算梯度。这是深度学习的核心数学基础。

# 链式法则示例 # y = (x² + 1)³ # 令 u = x² + 1, y = u³ # dy/dx = dy/du × du/dx = 3u² × 2x = 6x(x²+1)² import torch x = torch.tensor([2.0], requires_grad=True) y = (x ** 2 + 1) ** 3 y.backward() print(f"dy/dx = {x.grad}") # tensor([150.])

📐 偏导数与梯度

偏导数

多变量函数对某一变量的导数,其他变量视为常数。

# f(x,y) = x² + y² # ∂f/∂x = 2x # ∂f/∂y = 2y import torch x = torch.tensor([1.0], requires_grad=True) y = torch.tensor([2.0], requires_grad=True) f = x ** 2 + y ** 2 # 计算梯度 f.backward() print(f"∂f/∂x = {x.grad}") # 2 print(f"∂f/∂y = {y.grad}") # 4

梯度

梯度是所有偏导数组成的向量,指向函数值增长最快的方向。

# ∇f = (∂f/∂x, ∂f/∂y, ...) import torch # 多变量函数 x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) f = (x ** 2).sum() f.backward() print(f"梯度 ∇f = {x.grad}") # [2, 4, 6] # 梯度方向是函数增长最快方向 # 负梯度方向是函数下降最快方向

⬇️ 梯度下降

优化原理

梯度下降

沿着负梯度方向迭代更新参数,找到损失函数的最小值。

# 梯度下降公式 # θ = θ - α × ∇L(θ) # 其中 α 是学习率 import torch import matplotlib.pyplot as plt # 损失函数: f(x) = x² x = torch.tensor([5.0], requires_grad=True) learning_rate = 0.1 history = [x.item()] for i in range(20): # 计算函数值 y = x ** 2 # 清零梯度 x.grad = None # 反向传播计算梯度 y.backward() # 更新参数 with torch.no_grad(): x -= learning_rate * x.grad history.append(x.item()) print(f"最终 x = {x.item():.4f}") # 接近 0

📝 本节小结

  • • 导数表示函数的变化率
  • • 链式法则是反向传播的数学基础
  • • 梯度是所有偏导数组成的向量
  • • 梯度下降通过负梯度方向优化参数