Neural Ordinary Differential Equations (Neural ODEs)
了解 Neural ODEs 如何建模连续隐状态动态、支持不规则时间序列分析,并通过实际示例实现运动预测。
神经常微分方程,即 Neural ODEs,是一类对隐藏状态随时间连续变化过程进行建模的神经网络,而不是将其传递通过固定的层序列。神经常微分方程定义了一个可学习的变化率,写作 dh/dt = f(h, t, parameters),并使用数值微分方程求解器将状态从初始值演进到请求的时间。直观地说,传统的神经网络学习的是一堆变换的组合,而 Neural ODE 学习的是连接输入和输出的连续路径。
Neural ODEs 的工作原理#
函数 f 通常是一个被称为向量场或动力学函数的小型神经网络。给定当前状态 h 和可选时间 t,该函数预测该状态应移动的方向和速度。ODE 求解器会重复评估此函数并对这些变化进行积分,以估计稍后的状态。
工作流由三个组件定义:
- 初始状态: 起始时间的输入、编码观测值或已知系统条件。
- 学习到的动力学: 返回状态导数而不是直接返回下一个状态的参数化函数。
- 数值积分: 诸如龙格-库塔等近似轨迹的算法。
solve_ivpODE 接口说明了传统数值软件如何处理初值问题。
自适应求解器可以在动力学变化迅速时采用小步长,而在较平缓的区域采用较大步长。因此,计算成本取决于学习到的动力学、求解器方法、区间长度和误差容差——而不仅仅取决于预先确定的层数。DiffEqFlux Neural ODE 示例直接演示了这种连续时间公式。
与相关模型的区别#
-
残差网络: 残差块进行离散更新,例如“当前状态加上学习到的变化”。Neural ODE 可以被视为一种连续深度扩展,其中 ODE 求解器决定中间更新。
-
循环神经网络: RNN 在离散序列步骤中更新其隐藏状态。Neural ODE 持续演进,并且可以自然地查询任意时间戳的状态,尽管它们可能需要更多的计算。
-
状态空间模型: 两者都表示演进的隐藏状态。状态空间模型通常使用结构化的离散或连续动力学来进行高效的序列处理,而 Neural ODE 则特别将神经网络置于数值 ODE 求解之中。
-
神经算子: 神经算子学习整个函数或场之间的映射,通常跨越不同的空间分辨率。Neural ODE 通常从初始条件学习有限维状态的轨迹。
Neural ODE 也不同于物理信息神经网络。物理信息网络通常在受已知方程约束的同时近似 ODE 的解,而 Neural ODE 通常学习导数函数的全部或部分。
实际应用#
-
不规则时间序列分析: 医院测量数据、机器遥测数据和环境传感器可能会以不均匀的间隔到达。Neural ODE 可以在实际时间戳之间演进潜在的患者或机器状态,支持插值、预测和缺失观测处理,而无需将每个样本强制放在固定网格上。
-
目标跟踪与运动预测: 视觉系统可以使用 Ultralytics YOLO26 观察视频中的对象或关键点,然后将位置和速度传递给单独的、对连续运动进行建模的 Neural ODE。这有助于估计帧之间或短暂遮挡期间的轨迹。YOLO 本身不是 Neural ODE;ODE 充当下游时间模型。
对于此类系统的感知部分,Ultralytics 平台支持云数据集标注、模型训练、部署和监控,而自定义 Neural ODE 仍然是一个独立的动力学组件。
最小可微示例#
torchdiffeq 软件包为 PyTorch 提供了可微的 ODE 求解器。运行 pip install torch torchdiffeq 后,此示例创建一个神经向量场、对二维状态进行积分并计算训练梯度:
import torch
from torch import nn
from torchdiffeq import odeint
torch.manual_seed(0)
dynamics = nn.Sequential(
nn.Linear(2, 32),
nn.Tanh(),
nn.Linear(32, 2),
)
initial_state = torch.tensor([[1.0, 0.0]])
times = torch.linspace(0.0, 2.0, 21)
trajectory = odeint(lambda _time, state: dynamics(state), initial_state, times)
loss = trajectory[-1].square().mean()
loss.backward()
print(dynamics[0].weight.grad.norm())输出轨迹包含每个请求时间处的估计状态。非零梯度表明求解器仍然是可训练计算的一部分。这依赖于PyTorch 自动微分涵盖的概念;TensorFlow 和 JAX 中也有可比的梯度系统。
实际考量#
当连续演进、不规则时间戳或已知的动力学结构至关重要时,Neural ODE 最为有用。它们并不比普通层自动更快或更准确。
应验证求解器容差,因为宽松的容差会降低准确性,而严格的容差可能会引发许多函数评估。刚性或不连续的动力学也可能使训练变得缓慢或不稳定。团队应将直接微分与伴随灵敏度方法进行比较,监控求解器评估和梯度行为,并对照更简单的循环或状态空间基线进行基准测试。诸如 MATLAB 记录的 Neural ODE 层等生产工具也公开了求解器和梯度设置,这强调了数值配置是模型必不可少的一部分。






