Skip to content

微积分与梯度

梯度下降是深度学习训练的核心引擎。理解导数和链式法则,就理解了神经网络如何学习。

一、导数基础

1.1 导数的定义

导数描述函数在某点的变化率

f(x)=limh0f(x+h)f(x)h

直觉理解:如果 f(x) 是你走路的位置,f(x) 就是你的速度。

1.2 常用导数公式

函数导数备注
c(常数)0
xnnxn1幂函数
exex指数函数求导等于自身
lnx1x自然对数
sinxcosx
cosxsinx

1.3 导数运算规则

加法法则(f+g)=f+g

乘法法则(fg)=fg+fg

除法法则(fg)=fgfgg2

链式法则(最重要!):

ddx[f(g(x))]=f(g(x))g(x)

或写作:

dzdx=dzdydydx

二、极大值与极小值

极值示意图

  • 极大值:函数在该点左侧递增,右侧递减,导数在该点为 0 且从正变负
  • 极小值:函数在该点左侧递减,右侧递增,导数在该点为 0 且从负变正
  • 拐点:函数曲率改变的点,二阶导数为 0

在机器学习中,我们寻找损失函数的极小值点,那就是最优参数所在的地方。

临界点判断方法

对于函数 f(x),若 f(x0)=0

  • f(x0)>0x0 是极小值点
  • f(x0)<0x0 是极大值点
  • f(x0)=0:需进一步判断

三、偏导数

当函数有多个变量时,偏导数是对其中一个变量求导,其他变量视为常数:

fxi=limh0f(x1,,xi+h,,xn)f(x1,,xi,,xn)h

例子:对于 f(x,y)=x2+xy+y2

fx=2x+y,fy=x+2y

四、梯度 (Gradient)

4.1 梯度的定义

梯度是函数对所有变量偏导数组成的向量:

f=[fx1fx2fxn]

核心性质:梯度方向是函数增长最快的方向!

4.2 梯度的直觉

想象你在山地上,梯度就像是指示"最陡上坡方向"的指针:

  • 梯度方向 → 上坡最快的方向
  • 负梯度方向 → 下坡最快的方向(用于梯度下降!)
  • 梯度大小 → 坡度的陡峭程度

4.3 梯度下降

梯度下降是所有机器学习优化的核心思想:

θt+1=θtαθL(θt)

其中:

  • θ:模型参数
  • α:学习率(步长)
  • L:损失函数
  • θL:损失函数关于参数的梯度
python
import numpy as np

def gradient_descent(f, grad_f, x_init, lr=0.01, n_steps=100):
    """
    通用梯度下降实现
    f: 目标函数
    grad_f: 梯度函数
    x_init: 初始点
    lr: 学习率
    """
    x = x_init.copy()
    history = [x.copy()]
    
    for _ in range(n_steps):
        gradient = grad_f(x)  # 计算梯度
        x = x - lr * gradient  # 沿负梯度方向更新
        history.append(x.copy())
    
    return x, history

# 示例:最小化 f(x) = x^2
f = lambda x: x**2
grad_f = lambda x: 2*x

x_min, history = gradient_descent(f, grad_f, x_init=np.array([5.0]))
print(f"最优解: {x_min}")  # 接近 0

五、链式法则与反向传播

5.1 链式法则

链式法则是反向传播的数学基础。对于复合函数:

z=f(y),y=g(x)

则:

dzdx=dzdydydx

对于多变量,链式法则推广为:

zx=jzyjyjx

5.2 反向传播示例

考虑一个简单的两层神经网络:

y^=σ(W2σ(W1x+b1)+b2)

反向传播计算 LW1 的过程(链式展开):

LW1=Ly^y^z2z2hhz1z1W1

每一项都可以用链式法则逐步计算!

python
import torch

# PyTorch 自动微分示例
x = torch.tensor([2.0], requires_grad=True)
y = x ** 2 + 3 * x + 1  # y = x² + 3x + 1

y.backward()  # 自动计算梯度
print(x.grad)  # dy/dx = 2x + 3 = 2*2 + 3 = 7

六、泰勒展开

泰勒展开可以将任何复杂函数近似为多项式:

f(x)f(x0)+f(x0)(xx0)+f(x0)2!(xx0)2+

特别重要的例子

ex=1+x+x22!+x33!+=n=0xnn!

这个展开式是 SVM 高斯核(RBF 核)能映射到无限维空间的数学原因!

在 XGBoost 中,对损失函数进行二阶泰勒展开来近似求解,这使得 XGBoost 可以快速找到最优分裂点。

七、总结:梯度下降的变体

方法每次使用样本数特点
批量梯度下降 (BGD)全部样本稳定但慢
随机梯度下降 (SGD)1 个样本快但震荡大
小批量梯度下降 (Mini-batch GD)32~256 个样本实际中最常用
θt+1=θtα1|B|iBLi(θt)

AI 知识体系 — 从机器学习到大语言模型