Neural Ordinary Differential Equations (Neural ODEs)
神经常微分方程(Neural ODEs)用学习得到的导数和 ODE 求解器取代堆叠层。了解它们如何通过伴随方法训练、适用场景,以及可运行代码。
神经常微分方程(Neural ODEs)是能够定义隐藏状态如何随时间连续变化的神经网络,而不是固定层数的堆叠结构。一个小型网络 f 会学习导数 dh/dt = f(h, t),数值 ODE 求解器再从初始状态对该导数进行积分,直到所需的输出时刻。Ricky Chen、Yulia Rubanova、Jesse Bettencourt 和 David Duvenaud 在一篇2018 年论文中提出了这一概念,该论文获得了 NeurIPS 最佳论文奖。
从残差块到连续深度#
残差网络按 h(t + 1) = h(t) + f(h(t)) 更新其状态,这恰好相当于用步长为 1 的欧拉方法求解 ODE 的一步。神经 ODE 将步长缩小到无穷小、步数增加到无穷多,并把积分过程交给求解器处理。SciPy 等经典数值软件(例如 solve_ivp)可以为手写方程求解相同类型的初值问题。
这改变了“深度”的含义。Runge-Kutta 系列中的自适应求解器,例如 Dormand-Prince 方法,会在动态变化较快的地方采用小步长,在变化平缓的地方采用大步长。一次前向传播的成本取决于求解器需要执行多少次函数评估,而评估次数又取决于输入、学到的动态特性和误差容差。推理时放宽容差,无需重新训练就能以精度换取更低的推理延迟。
使用伴随法训练#
通过求解器进行常规反向传播时,需要存储每个中间状态,因此内存占用会随求解器步数增加。伴随灵敏度法通过沿时间反向求解第二个携带梯度的 ODE 来避免这一点,它会在过程中重新计算状态,而不是存储这些状态。内存成本不会随深度增加,但代价是需要额外计算,而且前向与反向轨迹之间会存在微小的数值差异。
torchdiffeq 软件包为 PyTorch 提供可微分求解器,其中 odeint 用于直接反向传播,odeint_adjoint 用于伴随方法:
import torch
from torch import nn
from torchdiffeq import odeint
torch.manual_seed(0)
# 网络预测二维隐藏状态的导数 dh/dt
dynamics = nn.Sequential(nn.Linear(2, 32), nn.Tanh(), nn.Linear(32, 2))
# 像零星的传感器读数一样,在不规则时间戳处查询状态
initial_state = torch.tensor([[1.0, 0.0]])
times = torch.tensor([0.0, 0.3, 0.35, 1.1, 2.0])
trajectory = odeint(lambda t, h: dynamics(h), initial_state, times)
# 梯度会通过求解器反向传递到网络权重
loss = trajectory[-1].square().sum()
loss.backward()
print(trajectory.squeeze(1))
print(dynamics[0].weight.grad.norm())轨迹会保存每个请求时刻的状态,从间隔很近的 0.3 和 0.35,到相距较远的 1.1;求解器会自行选择内部步长。非零梯度范数表明,在最终时刻计算的损失函数可以通过求解器训练网络。将 odeint 替换为 odeint_adjoint,即可切换到恒定内存梯度,前提是动态函数是 nn.Module,这样求解器才能找到其参数。
神经 ODE 的适用场景#
不规则采样的时间序列是最典型的适用场景。Rubanova 及其同事于 2019 年提出的潜变量 ODE 模型会将一系列观测编码为隐藏状态,并使其连续演化,因此可以对间隔不均的医疗记录或传感器日志进行建模,而无需强行映射到固定网格上。循环神经网络只会在离散步长上更新,处理缺失或不规则时间戳时需要额外机制;这是时间序列分析中的一个核心问题。
跟踪数据结构也相同。Ultralytics YOLO26的跟踪模式会为每一帧中的每个跟踪 ID 输出一个位置;物体被遮挡或漏检时,位置序列中会出现间隔。默认跟踪器会将每个丢失的跟踪目标延续 track_buffer 帧,默认值为 30,并使用卡尔曼滤波器;该滤波器采用的恒速运动模型是固定线性 ODE,每帧执行一次。对相同位置拟合的 Neural ODE 会学习运动本身,形成可在帧间或跨越间隔查询的连续轨迹,用于多目标跟踪。
生成式建模是第二个主要应用方向。最初的 Neural ODE 论文提出了连续归一化流,随后 FFJORD 对其进行了扩展:通过积分学得的向量场,将简单分布变换为复杂分布。流匹配随后通过直接学习向量场大幅降低了这类模型的训练成本,训练时无需求解 ODE。像 Stable Diffusion 3 这样的整流流图像生成器会通过积分此类 ODE 进行采样;扩散模型也可以通过积分其概率流 ODE 实现确定性采样。
局限性与相关连续时间模型#
ODE 的轨迹不能彼此交叉,因此输入维度与其相同的 Neural ODE 无法表示某些简单映射。Emilien Dupont 及其同事于 2019 年提出的增强型 Neural ODE 通过为状态增加额外维度解决了这一问题。动态特性刚性以及训练过程中函数评估次数增加,都可能使 Neural ODE 比固定深度网络运行更慢。
其他架构也基于连续时间动态构建,但各自有不同取舍。液态神经网络是由 ODE 定义、时间常数取决于输入的循环单元。状态空间模型,例如 S4 和 Mamba,以线性连续时间系统 x'(t) = Ax(t) + Bu(t) 为基础,并将其离散化为递归结构;该结构也可以通过长卷积或并行扫描计算,因此在长序列上运行很快,而通用 Neural ODE 则需要自适应求解器。










