游戏数学 · Game MathNote

多元微积分、梯度与自动微分

Multivariable Calculus, Gradients & Automatic Differentiation

多元微积分提供描述游戏运动、优化、物理和可微渲染的共同语言:梯度给出标量函数上升最快方向,雅可比描述向量函数的局部线性变化,链式法则把复杂计算图的导数连接起来。自动微分 (Automatic Differentiation, AD) 不是有限差分,也不是把公式全部手推,而是沿程序执行图精确应用链式法则。

核心概念

对标量函数 f(x)f(\mathbf{x}),梯度为:

∇f=[∂f∂x1,…,∂f∂xn]T\nabla f = \left[\frac{\partial f}{\partial x_1},\ldots,\frac{\partial f}{\partial x_n}\right]^T

向量函数 y=g(x)\mathbf{y}=g(\mathbf{x}) 的雅可比矩阵为 Jij=∂yi/∂xjJ_{ij}=\partial y_i/\partial x_j。复合函数使用链式法则:

∂f∂x=∂f∂y∂y∂x\frac{\partial f}{\partial \mathbf{x}} = \frac{\partial f}{\partial \mathbf{y}}\frac{\partial \mathbf{y}}{\partial \mathbf{x}}

在游戏里,梯度可用于轨迹优化、相机/灯光参数拟合、IK 目标、材质或神经表示优化;普通实时玩法仍常用显式几何和数值方法,因为可控性、成本和稳定性更重要。

自动微分的两种方向

  • 前向模式:同时传播变量值和导数,适合输入维度小、输出多的函数。
  • 反向模式:先前向记录中间值,再从输出反向传播伴随量,适合参数多、标量损失少的优化问题。

反向模式需要保存中间状态,显存/内存和控制流是主要代价;原地修改、不可微分分支和浮点误差会破坏梯度或使其不稳定。有限差分可作为黑盒校验,但步长过大有截断误差,过小有消减误差。

应用:从图形参数到损失

flowchart LR
    P["场景参数"] --> R["可微计算/渲染"]
    R --> L["损失函数"]
    L --> B["反向自动微分"]
    B --> G["参数梯度"]
    G --> U["优化器更新"]
    U --> P

工程上应同时记录参数范围、损失定义、梯度检查、学习率/步长、收敛条件和失败回滚。对旋转、归一化、深度和可见性等操作,先确认导数定义与数值稳定性,再接入优化。

取舍与常见坑

  • 把 AD 当黑盒魔法:仍需理解计算图、导数方向、内存和数值稳定性。
  • 用梯度优化一切:离散状态、碰撞、排序和硬可见性可能不可微,应采用平滑近似或混合求解。
  • 忽略尺度:不同参数量纲会造成病态梯度;需要归一化、预条件或合适参数化。
  • 只看损失下降:还要检查约束、视觉质量、实时预算和泛化行为。
  1. ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010
  2. arxiv.org/abs/1502.05767
  3. cs231n.github.io/optimization-1

相关页面

游戏数学齐次坐标与矩阵约定Homogeneous Coordinates & Matrix Conventions实时渲染用 4×4 矩阵和四元素齐次坐标统一表示点和方向:方向向量 w=0,点 w=1。这样线性变换与平移可以合成为仿射变换并连乘。RTR4 采用列向量记法、右手观察坐标系;DirectX 采用行向量记法,书中强调这只是记法差异。游戏数学数值积分Numerical Integration游戏中的力是交互的、无法事先预测的,运动方程(常微分方程)几乎没有解析解,所以物理引擎采用数值积分:以大致恒定的时间步长 \Delta t 逐步推进,由当前时刻 t1 的 \mathbf r(t1)、\mathbf v(t1) 和力函数 \mathbf F(t,\mathbf r,\mathbf v) 求出 t2=t1+\Delta t 时的位置与速度。衡量方法好坏看收敛性、阶、稳定性三项。显式欧拉最简单但误差大、不稳定;GEA 认为交互游戏中最常用的大概是 Verlet,尤其是速度 Verlet(GEA4 卷 II 14.4.4)。图形学可微渲染与神经渲染Differentiable & Neural Rendering逆向渲染 (inverse rendering) 要从图像反推场景参数 \mathbf x(形状、材质、光照……),通常写成优化问题 \mathbf x^=\arg\min{\mathbf x}g(f(\mathbf x)),其中 f 是渲染器,g 是损失函数。参数维度可达数百万,只能用梯度下降,因此需要可微渲染 (differentiable rendering):不构造巨大的雅可比矩阵,直接计算"图像空间梯度 × 雅可比"这一向量-矩阵乘积。难点是可见性造成的不连续、反向模式的内存开销和导数积分的采样。机器学习与渲染的结合可分三类:用学习得到的数据结构替换传统数据结构、用神经网络改进传统渲

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原