Численные методы
Численные методы для ОДУ
Neural ODE - архитектура, где нейросеть задаёт дифференциальное уравнение. SIR-модели COVID-19 решались с помощью RK45 каждый день в 2020 году. Физические симуляторы в играх - это ОДУ, решаемые в реальном времени.
- **Neural ODE (torchdiffeq):** непрерывная динамика скрытого пространства; более экономное по памяти обратное распространение (adjoint method)
- **Эпидемиологические модели:** SIR/SEIR модели COVID-19 решались с помощью scipy.integrate.solve_ivp; результаты использовались для планирования локдаунов
- **Игровая физика:** интеграторы RK4 и Verlet для симуляции тел в Unity/Unreal Engine; адаптивный шаг для быстрых столкновений
Предварительные знания
Явный Эйлер и Рунге-Кутта 4
Задача Коши: dy/dt = f(t, y), y(t₀) = y₀. Численные методы аппроксимируют решение шагами: yₙ₊₁ = yₙ + шаг. Явный Эйлер - первый порядок. Рунге-Кутта 4 (RK4) - четвёртый порядок: использует 4 вычисления f на шаг для достижения ошибки O(h⁴).
**Явный Эйлер:** yₙ₊₁ = yₙ + h·f(tₙ, yₙ) Локальная ошибка: O(h²), глобальная: O(h) **Рунге-Кутта 4 (RK4):** k₁ = h·f(tₙ, yₙ) k₂ = h·f(tₙ + h/2, yₙ + k₁/2) k₃ = h·f(tₙ + h/2, yₙ + k₂/2) k₄ = h·f(tₙ + h, yₙ + k₃) yₙ₊₁ = yₙ + (k₁ + 2k₂ + 2k₃ + k₄)/6 Локальная ошибка: O(h⁵), глобальная: O(h⁴)
| Метод | Порядок | f вычисл/шаг | Применение |
|---|---|---|---|
| Явный Эйлер | O(h) | 1 | Обучение, не для продакшена |
| Эйлер-Хёйн (Heun) | O(h²) | 2 | Прогноз-коррекция |
| RK4 | O(h⁴) | 4 | Стандартный выбор |
| RK45 (Dormand-Prince) | O(h⁴)/O(h⁵) | 6 | Адаптивный шаг |
| RK23 | O(h²)/O(h³) | 3 | Менее гладкие задачи |
Почему RK4 использует 4 вычисления f на шаг, а не 1 как Эйлер?
Адаптивный шаг: RK45
Фиксированный шаг h неэффективен: там, где решение быстро меняется, нужен малый h, где гладкое - можно взять большой h. Адаптивные методы (RK45, RK23) оценивают ошибку на каждом шаге и автоматически уменьшают или увеличивают h.
**Dormand-Prince RK45:** Метод использует 6 вычислений f. Строятся два приближения: - y_5: порядок 5 (высокая точность) - y_4: порядок 4 (более грубое) Оценка ошибки: err = ||y_5 − y_4|| Адаптация шага: - err < tol: шаг принят, h_new = h·(tol/err)^{1/5} - err > tol: шаг отклонён, уменьшаем h `scipy.integrate.solve_ivp(f, t_span, y0, method='RK45')`
Как RK45 оценивает ошибку и адаптирует шаг?
Приложения: Neural ODE и SIR-модель
Neural ODE (Chen et al., 2018) - нейронная сеть, где скрытое состояние эволюционирует как ОДУ: dh/dt = f_θ(h, t), где f_θ - нейросеть. Это позволяет использовать ОДУ-солверы как дифференцируемые слои. Обратное распространение через солвер - метод сопряжённых состояний.
Для Neural ODE используйте библиотеку `torchdiffeq`. Она предоставляет `odeint` с автоматическим дифференцированием через RK4/RK45, что позволяет обучать нейросеть с помощью градиентного спуска через ОДУ-солвер.
Что такое Neural ODE и чем оно отличается от обычной нейросети?
Ключевые идеи
- **Явный Эйлер:** O(h) глобальная ошибка; 1 вычисление f на шаг; только для обучения
- **RK4:** O(h⁴) глобальная ошибка; 4 вычисления f; стандарт для фиксированного шага
- **RK45 (Dormand-Prince):** адаптивный шаг; оценка ошибки через y_4 vs y_5; scipy.integrate.solve_ivp
- **solve_ivp:** единый интерфейс для RK45/RK23/DOP853; параметры rtol, atol; dense_output для непрерывного решения
Связанные темы
Методы для ОДУ масштабируются до жёстких систем и Neural ODE:
- Жёсткие системы — Явные методы (Эйлер, RK4) расходятся для жёстких ОДУ - нужны неявные методы
- Численное интегрирование — Каждый шаг RK4 - это квадратурная формула для интеграла ∫f(t,y) dt
Вопросы для размышления
- Почему метод Верле (Verlet), используемый в молекулярной динамике, предпочтительнее RK4, хотя он только второго порядка?
- Как метод сопряжённых состояний (adjoint method) в Neural ODE экономит память по сравнению со стандартным backprop?
- Что означает dense_output=True в solve_ivp и когда это полезно?