机器学习(三)求导计算

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

一、基本概念

1. 求导(Derivative)

  • 定义:函数在某点的瞬时变化率。即自变量变化时,函数值变化的速度。
  • 记号:如果 ( y = f(x) ),则导数记为 ( \frac{dy}{dx} ) 或 ( f’(x) )。

几何意义
函数曲线在某点的切线斜率。

2. 求偏导(Partial Derivative)

  • 定义:多元函数对某一个自变量的导数,其他变量视为常数。
  • 记号:如果 ( z = f(x, y) ),则对 ( x ) 的偏导记为 ( \frac{\partial z}{\partial x} )。

几何意义
在多维空间中,沿着某一个变量方向的变化率。


二、公式与运算规则

1. 常见函数的导数

函数导数
( f(x) = x^n )( f’(x) = n x^{n-1} )
( f(x) = \sin x )( f’(x) = \cos x )
( f(x) = \cos x )( f’(x) = -\sin x )
( f(x) = e^x )( f’(x) = e^x )
( f(x) = \ln x )( f’(x) = \frac{1}{x} )

2. 求导的基本法则

  • 加法法则:( (f(x) + g(x))’ = f’(x) + g’(x) )
  • 乘法法则:( (f(x)g(x))’ = f’(x)g(x) + f(x)g’(x) )
  • 链式法则:( (f(g(x)))’ = f’(g(x)) \cdot g’(x) )
  • 商法则:( \left(\frac{f(x)}{g(x)}\right)’ = \frac{f’(x)g(x) - f(x)g’(x)}{[g(x)]^2} )

3. 偏导运算规则

  • 对某个变量求偏导时,其他变量视为常数。
  • 链式法则同样适用于偏导。

三、举例详解

1. 单变量求导

例1:
( f(x) = x^3 + 2x )
( f’(x) = 3x^2 + 2 )

例2:
( f(x) = \sin(x^2) )
链式法则:
( f’(x) = \cos(x^2) \cdot 2x )

2. 多变量偏导

例1:
( f(x, y) = x^2y + y^3 )

对 ( x ) 求偏导:
( \frac{\partial f}{\partial x} = 2xy )

对 ( y ) 求偏导:
( \frac{\partial f}{\partial y} = x^2 + 3y^2 )

例2:
( f(x, y, z) = xyz )

对 ( x ) 求偏导:
( \frac{\partial f}{\partial x} = yz )


四、机器学习中的应用

1. 梯度下降法

  • 用导数/偏导数计算损失函数对参数的变化率(梯度),更新参数使损失最小化。

2. 反向传播(Backpropagation)

  • 神经网络训练时,利用链式法则对每层参数求偏导,计算梯度,进行参数更新。

3. 自动微分(Autograd)

  • 现代深度学习框架(如PyTorch、TensorFlow)自动计算复杂函数的导数/偏导数。

五、代码实现

1. SymPy符号求导(Python)

import sympy as sp

# 单变量求导
x = sp.symbols('x')
f = x**3 + 2*x
df_dx = sp.diff(f, x)
print("f'(x):", df_dx)

# 多变量偏导
y = sp.symbols('y')
g = x**2 * y + y**3
dg_dx = sp.diff(g, x)
dg_dy = sp.diff(g, y)
print("∂g/∂x:", dg_dx)
print("∂g/∂y:", dg_dy)

2. 自动微分(PyTorch)

import torch

x = torch.tensor(2.0, requires_grad=True)
y = torch.tensor(3.0, requires_grad=True)
f = x**2 * y + y**3
f.backward()
print("∂f/∂x:", x.grad.item())
print("∂f/∂y:", y.grad.item())

六、几何与物理意义

  • 导数:切线斜率,瞬时速度。
  • 偏导数:多维空间中,沿某一方向的变化速率。

七、常见问题与技巧

  1. 链式法则:复合函数求导必用。
  2. 偏导和全导:多变量函数如果变量间有依赖,要用全微分。
  3. 高阶导数:可以连续对同一变量求导,得到二阶、三阶导等。

八、机器学习中的典型案例

1. 损失函数求梯度

假设线性回归损失函数:
[
L(w) = \frac{1}{2}(y - wx)^2
]
对 ( w ) 求导:
[
\frac{dL}{dw} = -(y - wx)x
]

2. 神经网络反向传播

每一层的梯度都用链式法则递归求导,从输出层回传到输入层。


总结

  • 求导是单变量函数的变化率,偏导是多变量函数对某一变量的变化率。
  • 链式法则是复合函数和神经网络反向传播的核心。
  • 机器学习几乎所有优化算法都依赖导数/偏导数。
  • Python有丰富的自动求导工具(如SymPy、Autograd、PyTorch等)。

九. 链式法则详细推导与应用

单变量链式法则

如果 ( y = f(u) ), ( u = g(x) ),则
[
\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}
]

例子:
( y = \sin(x^2) )
设 ( u = x^2 ), ( y = \sin(u) )

[
\frac{dy}{dx} = \cos(x^2) \cdot 2x
]

多变量链式法则(神经网络常用)

如果 ( z = f(x, y) ), ( x = g(t), y = h(t) ),则
[
\frac{dz}{dt} = \frac{\partial f}{\partial x} \cdot \frac{dx}{dt} + \frac{\partial f}{\partial y} \cdot \frac{dy}{dt}
]

例子:
( z = x^2y ), ( x = t^2, y = \sin t )
[
\frac{dz}{dt} = 2xy \cdot \frac{dx}{dt} + x^2 \cdot \frac{dy}{dt}
]
[
\frac{dx}{dt} = 2t, \quad \frac{dy}{dt} = \cos t
]


十. 高阶偏导与全微分

高阶偏导

对同一变量连续求偏导,得到二阶、三阶偏导。

例子:
( f(x, y) = x^2y + y^3 )

二阶偏导:
[
\frac{\partial^2 f}{\partial x^2} = \frac{\partial}{\partial x}(2xy) = 2y
]
[
\frac{\partial^2 f}{\partial y^2} = \frac{\partial}{\partial y}(x^2 + 3y^2) = 6y
]
混合偏导:
[
\frac{\partial^2 f}{\partial x \partial y} = \frac{\partial}{\partial x}(x^2 + 3y^2) = 2x
]

全微分

如果 ( f(x, y) ) 是多变量函数,
[
df = \frac{\partial f}{\partial x} dx + \frac{\partial f}{\partial y} dy
]
在变量间有依赖时,需用全微分。


十一. 机器学习中复杂梯度的推导

神经网络反向传播链式法则

假设神经元输出 ( a = \sigma(wx + b) ),损失函数 ( L = (a - y)^2 )

对 ( w ) 求导:
[
\frac{dL}{dw} = 2(a - y) \cdot \frac{da}{dw}
]
[
\frac{da}{dw} = \sigma’(wx + b) \cdot x
]
所以
[
\frac{dL}{dw} = 2(a - y) \cdot \sigma’(wx + b) \cdot x
]

更复杂的网络(多层链式法则)

每一层的梯度都依赖上一层的输出,对每层参数应用链式法则递归求导。


十二. 自动微分原理与工程实现

自动微分(Autograd)

自动微分通过记录运算过程的“计算图”,在反向传播时自动应用链式法则,实现高效、准确的梯度计算。

  • 前向传播:计算输出并记录操作。
  • 反向传播:从输出反向递归求导,自动应用链式法则。

PyTorch自动微分示例

import torch

x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)
z = x * y + torch.sin(x)
z.backward()
print("dz/dx:", x.grad.item())
print("dz/dy:", y.grad.item())

十三. 常见问题解析与实战技巧

1. 偏导与梯度的关系

  • 多变量函数的所有偏导数组成梯度向量:
    [
    \nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots \right)
    ]

2. 雅可比矩阵与海森矩阵

  • 雅可比矩阵:多元向量函数的一阶偏导矩阵。
  • 海森矩阵:标量函数的二阶偏导矩阵,常用于优化算法(如牛顿法)。

示例:计算海森矩阵

import sympy as sp

x, y = sp.symbols('x y')
f = x**2 * y + y**3
H = sp.hessian(f, (x, y))
print("海森矩阵:\n", H)

3. 实战技巧

  • 链式法则是梯度计算的核心,尤其在深度网络反向传播中。
  • 自动微分框架优先选用,避免手动推导出错。
  • 数值稳定性:如除以很小的数时加上微小常数(如 ( 1e-7 ))。

十四. 复杂案例:Softmax与交叉熵的梯度

假设 softmax 输出 ( p_i = \frac{e^{z_i}}{\sum_j e^{z_j}} ),交叉熵损失 ( L = -\sum_i y_i \log p_i )

对 ( z_k ) 求导:
[
\frac{\partial L}{\partial z_k} = p_k - y_k
]
这是深度学习分类问题中最常见的梯度公式之一。


十五. 总结

  • 链式法则是复杂函数求导的核心,尤其在神经网络和机器学习优化中。
  • 偏导、梯度、雅可比、海森矩阵是多变量分析的基础工具。
  • 自动微分极大简化了工程实现,推荐优先使用。
  • 掌握这些理论和技巧,能让你在机器学习和深度学习模型设计、调优中游刃有余。

十六、其他扩展

1. 梯度、雅可比、海森矩阵详解

1.1 梯度(Gradient)

  • 定义:多元函数对所有变量的偏导数组成的向量。
  • 公式
    [
    \nabla f(x_1, x_2, …, x_n) = \left[ \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, …, \frac{\partial f}{\partial x_n} \right]^T
    ]
  • 意义:在点处,梯度指向函数增长最快的方向,模长表示增长速度。

应用:梯度下降法、优化算法的核心。

1.2 雅可比矩阵(Jacobian)

  • 定义:向量值函数对所有自变量的偏导组成的矩阵。
  • 公式
    [
    J = \begin{bmatrix}
    \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \
    \vdots & \ddots & \vdots \
    \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n}
    \end{bmatrix}
    ]
    适用于 ( \mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m )

应用:深度学习中的反向传播、变分自编码器、物理仿真等。

1.3 海森矩阵(Hessian)

  • 定义:标量函数的二阶偏导数组成的对称矩阵。
  • 公式
    [
    H = \begin{bmatrix}
    \frac{\partial^2 f}{\partial x_1^2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \
    \vdots & \ddots & \vdots \
    \frac{\partial^2 f}{\partial x_n \partial x_1} & \cdots & \frac{\partial^2 f}{\partial x_n^2}
    \end{bmatrix}
    ]
  • 意义:描述函数在某点的曲率,常用于二阶优化(如牛顿法)。

2. 多变量链式法则在深度学习中的应用

神经网络的反向传播本质就是多变量链式法则的应用。

假设网络第 ( l ) 层输出为 ( a^{(l)} ),参数为 ( w^{(l)} ),损失函数为 ( L ):

[
\frac{\partial L}{\partial w^{(l)}} = \frac{\partial L}{\partial a^{(L)}} \cdot \frac{\partial a^{(L)}}{\partial a^{(L-1)}} \cdots \frac{\partial a^{(l+1)}}{\partial a^{(l)}} \cdot \frac{\partial a^{(l)}}{\partial w^{(l)}}
]

每一项都是矩阵或向量的偏导,自动微分框架会自动构建这些链条。


3. 自动微分底层原理简述

自动微分(Autograd)分为两种方式:

  • 前向模式(Forward Mode):适合输入变量多、输出少的情况。
  • 反向模式(Reverse Mode):适合输出变量少、输入多(深度学习常用)。

原理

  • 构建计算图,每个节点记录操作和输入。
  • 反向遍历图,递归应用链式法则,自动计算所有梯度。

优势

  • 高效、准确,无需手动推导复杂梯度。
  • 支持高阶导数。

4. 常见机器学习模型梯度推导实例

4.1 线性回归损失函数梯度

[
L(w) = \frac{1}{2} | Xw - y |^2
]
对 ( w ) 求导:
[
\frac{\partial L}{\partial w} = X^T(Xw - y)
]

4.2 Logistic回归损失函数梯度

[
L(w) = -\sum_{i=1}^n [y_i \log(p_i) + (1 - y_i) \log(1 - p_i)]
]
其中 ( p_i = \sigma(X_i w) ), (\sigma(z) = \frac{1}{1 + e^{-z}})

对 ( w ) 求偏导:
[
\frac{\partial L}{\partial w} = X^T(p - y)
]

4.3 神经网络Softmax+交叉熵梯度

如前述,损失对每个logits的梯度为 ( p_k - y_k )。


5. 实战代码与数值计算注意事项

5.1 梯度与海森矩阵自动计算(SymPy)

import sympy as sp

x1, x2 = sp.symbols('x1 x2')
f = x1**2 * x2 + sp.sin(x2)
grad = [sp.diff(f, var) for var in (x1, x2)]
hess = sp.hessian(f, (x1, x2))
print("梯度:", grad)
print("海森矩阵:\n", hess)

5.2 自动微分高阶导数(PyTorch)

import torch

x = torch.tensor(2.0, requires_grad=True)
y = x**3
y.backward(create_graph=True)  # 保留计算图
print("一阶导:", x.grad.item())

# 二阶导
x.grad.zero_()
y = x**3
y.backward(create_graph=True)
grad1 = x.grad
grad1.backward()
print("二阶导:", x.grad.item())

5.3 数值稳定性技巧

  • 避免除零:如 softmax/log 运算时加上微小常数。
  • 梯度裁剪:防止梯度爆炸,常见于RNN训练。
  • 归一化处理:如 BatchNorm、LayerNorm。

总结

  • 梯度、雅可比、海森矩阵是多变量函数分析和机器学习优化的核心工具。
  • 多变量链式法则是深度学习反向传播的理论基础。
  • 自动微分极大简化了复杂模型的梯度计算。
  • 工程实践中要注意数值稳定性、效率和高阶导数的需求。

创作不易,点赞关注,互通有无!

您可能感兴趣的与本文相关的镜像

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩火燎猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值