📈 导数的概念
导数定义
导数表示函数在某点的瞬时变化率,几何意义是切线斜率。
# 导数的定义
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
⛓️ 链式法则
核心公式
如果 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.])
⬇️ 梯度下降
优化原理
沿着负梯度方向迭代更新参数,找到损失函数的最小值。
# 梯度下降公式
# θ = θ - α × ∇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