Neural Ordinary Differential Equations (Neural ODEs)
Neural ODE thay các layer xếp chồng bằng đạo hàm được học và bộ giải ODE. Cách huấn luyện bằng phương pháp adjoint, trường hợp phù hợp và code có thể chạy.
Phương trình vi phân thường nơ-ron (Neural ODE) là mạng nơ-ron xác định cách trạng thái ẩn thay đổi liên tục theo thời gian, thay vì dùng một chuỗi lớp cố định. Một mạng nhỏ f học đạo hàm dh/dt = f(h, t), còn bộ giải ODE số tích phân đạo hàm đó từ trạng thái ban đầu đến thời điểm cần đầu ra. Ricky Chen, Yulia Rubanova, Jesse Bettencourt và David Duvenaud giới thiệu ý tưởng này trong bài báo năm 2018, bài báo nhận giải bài báo xuất sắc nhất tại NeurIPS.
Từ residual block đến độ sâu liên tục#
Một mạng residual cập nhật trạng thái theo công thức h(t + 1) = h(t) + f(h(t)), chính là một bước của phương pháp Euler để giải ODE với kích thước bước bằng 1. Neural ODE lấy giới hạn của vô số bước cực nhỏ và giao việc tích phân cho bộ giải. Phần mềm số cổ điển như solve_ivp của SciPy giải cùng loại bài toán giá trị ban đầu cho các phương trình được viết thủ công.
Điều này làm thay đổi ý nghĩa của “độ sâu”. Các bộ giải thích nghi thuộc họ Runge-Kutta, chẳng hạn phương pháp Dormand-Prince, thực hiện các bước nhỏ khi động lực học thay đổi nhanh và các bước lớn khi động lực học trơn. Chi phí của một lượt lan truyền xuôi là số lần đánh giá hàm mà bộ giải cần thực hiện; con số này phụ thuộc vào đầu vào, động lực học đã học và dung sai sai số. Nới lỏng dung sai khi suy luận sẽ đánh đổi độ chính xác để giảm độ trễ suy luận mà không cần huấn luyện lại.
Huấn luyện bằng phương pháp adjoint#
Lan truyền ngược thông thường qua bộ giải lưu trữ mọi trạng thái trung gian, nên bộ nhớ tăng theo số bước giải. Phương pháp độ nhạy adjoint tránh điều này bằng cách giải một ODE thứ hai theo chiều thời gian ngược để truyền gradient, đồng thời tính toán lại các trạng thái thay vì lưu chúng. Chi phí bộ nhớ không đổi theo độ sâu, đổi lại cần tính toán nhiều hơn và có sai khác số học nhỏ giữa quỹ đạo xuôi và ngược.
Gói torchdiffeq cung cấp các bộ giải khả vi cho PyTorch, với odeint để lan truyền ngược trực tiếp và odeint_adjoint cho phương pháp adjoint:
import torch
from torch import nn
from torchdiffeq import odeint
torch.manual_seed(0)
# Mạng dự đoán đạo hàm dh/dt của trạng thái ẩn 2D
dynamics = nn.Sequential(nn.Linear(2, 32), nn.Tanh(), nn.Linear(32, 2))
# Truy vấn trạng thái tại các mốc thời gian không đều, như khi đọc dữ liệu cảm biến rời rạc
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)
# Gradient lan truyền ngược qua bộ giải đến các trọng số của mạng
loss = trajectory[-1].square().sum()
loss.backward()
print(trajectory.squeeze(1))
print(dynamics[0].weight.grad.norm())Quỹ đạo lưu trạng thái tại mỗi thời điểm được yêu cầu, từ các mốc gần nhau 0.3 và 0.35 đến khoảng cách dài trước 1.1; bộ giải tự chọn các bước nội bộ. Chuẩn gradient khác không cho thấy một hàm loss được đánh giá tại thời điểm cuối có thể huấn luyện mạng nơ-ron thông qua bộ giải. Thay odeint bằng odeint_adjoint sẽ chuyển sang gradient có bộ nhớ không đổi, với điều kiện hàm động lực học là nn.Module để bộ giải có thể tìm các tham số của hàm.
Vị trí của Neural ODE#
Chuỗi thời gian lấy mẫu không đều là trường hợp phù hợp rõ nhất. Các model Latent ODE do Rubanova và các đồng nghiệp giới thiệu năm 2019 mã hóa chuỗi quan sát thành trạng thái ẩn rồi cho trạng thái đó tiến hóa liên tục, nhờ vậy có thể mô hình hóa hồ sơ y tế hoặc nhật ký cảm biến với các khoảng cách không đồng đều mà không cần ép chúng vào một lưới cố định. Mạng neural hồi tiếp chỉ cập nhật tại các bước rời rạc và cần thêm cơ chế để xử lý mốc thời gian bị thiếu hoặc không đều, một vấn đề cốt lõi trong phân tích chuỗi thời gian.
Dữ liệu tracking có cùng dạng. Track mode trong Ultralytics YOLO26 xuất ra vị trí của từng ID track trong mỗi khung hình, với khoảng trống khi đối tượng bị che khuất hoặc bị bỏ sót. Tracker mặc định giữ mỗi track đã mất trong track_buffer khung hình—mặc định là 30—bằng bộ lọc Kalman, có model chuyển động vận tốc không đổi là một ODE tuyến tính cố định được bước tiến một lần mỗi khung hình. Neural ODE được khớp với cùng các vị trí đó sẽ học chính chuyển động, dưới dạng quỹ đạo liên tục có thể truy vấn giữa các khung hình hoặc xuyên qua khoảng trống trong tracking đa đối tượng.
Mô hình hóa sinh là ứng dụng chính thứ hai. Normalizing flow liên tục, được phát triển trong bài báo Neural ODE ban đầu và mở rộng trong FFJORD, biến đổi một phân phối đơn giản thành phân phối phức tạp bằng cách tích phân một trường vector đã học. Sau đó, flow matching giúp giảm đáng kể chi phí huấn luyện các model này bằng cách học trực tiếp trường vector mà không cần giải ODE trong lúc huấn luyện. Các bộ tạo ảnh rectified flow như Stable Diffusion 3 lấy mẫu bằng cách tích phân một ODE như vậy; diffusion model cũng có thể được lấy mẫu theo cách xác định bằng cách tích phân ODE luồng xác suất của chúng.
Giới hạn và các model thời gian liên tục liên quan#
Các quỹ đạo của ODE không thể giao nhau, vì vậy Neural ODE có số chiều bằng không gian đầu vào không thể biểu diễn một số ánh xạ đơn giản. Neural ODE tăng cường, do Emilien Dupont và các cộng sự đề xuất năm 2019, khắc phục điều này bằng cách thêm các chiều bổ sung vào trạng thái. Động lực học cứng và số lần đánh giá hàm tăng trong quá trình huấn luyện có thể khiến Neural ODE chậm hơn mạng có độ sâu cố định.
Các kiến trúc khác dựa trên động lực học thời gian liên tục với những điểm đánh đổi khác nhau. Mạng nơ-ron chất lỏng là các ô hồi quy được định nghĩa bằng ODE, có hằng số thời gian phụ thuộc vào đầu vào. Model không gian trạng thái như S4 và Mamba bắt đầu từ hệ thống thời gian liên tục tuyến tính, x'(t) = Ax(t) + Bu(t), rồi rời rạc hóa thành một phép hồi quy cũng có thể tính dưới dạng tích chập dài hoặc quét song song. Điều này giúp chúng chạy nhanh trên chuỗi dài, nơi Neural ODE tổng quát cần bộ giải thích nghi.










