NextStat для ML-инженеров
Розеттский камень: физика ↔ ML
NextStat — высокопроизводительный движок статистического вывода, написанный на Rust с первоклассной поддержкой Python и интеграцией с PyTorch. Если вы пришли из ML/Data Science, а не из физики частиц, эта страница переводит основные концепции на знакомые термины и показывает, что NextStat может сделать для вашего обучающего конвейера.
Почему ML-инженерам стоит обратить внимание?
В физике частиц цель — определить, существует ли сигнал в зашумлённых данных со строгой количественной оценкой неопределённостей. Это прямая аналогия обучения классификатора, где сама функция потерь учитывает систематические неопределённости. NextStat позволяет именно это — обучать нейронную сеть, чья функция потерь — полный статистический тест, а не просто кросс-энтропия.
Ключевая идея
Вместо обучения классификатора с кросс-энтропией и затем проведения статистического теста, NextStat позволяет дифференцировать через сам статистический тест. Ваша нейронная сеть напрямую оптимизирует значимость открытия (Z₀), при этом все систематические неопределённости профилируются автоматически.
Мост терминологии
| Физический термин | ML-эквивалент | NextStat API |
|---|---|---|
| Мешающие параметры | Латентные переменные / систематики | model.parameters() |
| Сила сигнала (μ) | Параметр интереса / масштабный фактор | fit_result.mu |
| Профильное правдоподобие | Функция потерь (маргинализованная по латентным) | profiled_q0_loss() |
| Significance (Z₀) | Метрика (выше = лучшее разделение) | profiled_z0_loss() |
| Набор данных Асимова (Asimov dataset) | Репрезентативные синтетические данные | nextstat.asimov_data() |
| График влияния (ranking plot) | Важность признаков | nextstat.interpret.rank_impact() |
| Шаблон гистограммы | Биновое распределение / мягкая гистограмма | SoftHistogram() |
| HistFactory Workspace | Конфигурация модели / спецификация эксперимента | nextstat.from_pyhf() |
Сквозной конвейер
# Полный дифференцируемый конвейер за 10 строк
import nextstat
from nextstat.torch import SignificanceLoss, SoftHistogram
# 1. Загружаем статистическую модель (HistFactory JSON из pyhf)
model = nextstat.from_pyhf(workspace_json)
# 2. Дифференцируемая функция потерь (использует профилированную значимость на GPU)
loss_fn = SignificanceLoss(model, "signal")
# 3. Дифференцируемый биннинг: оценки NN → мягкая гистограмма
soft_hist = SoftHistogram(bin_edges=torch.linspace(0, 1, 11))
# 4. Цикл обучения
for batch_x, batch_w in dataloader:
scores = classifier(batch_x) # NN → [N] scores
histogram = soft_hist(scores, batch_w) # → [10] soft bins
loss = loss_fn(histogram.double().cuda()) # → -Z₀ scalar
loss.backward() # gradients flow to NN
optimizer.step()Чем NextStat отличается от pyhf и neos
| Функция | pyhf + neos | NextStat |
|---|---|---|
| Язык реализации | Чистый Python (JAX/NumPy) | Ядро на Rust + Python-привязки |
| GPU-бэкенд | JAX XLA (ограниченно) | Metal + CUDA (zero-copy с PyTorch) |
| Градиенты для профилированных целей | Дифференцирование через неподвижную точку | Теорема об огибающей (точно при сходимости) |
| Интеграция с NN | Нужна специальная ветка pyhf | Нативный PyTorch `autograd.Function` |
| Поддержка | neos: последний коммит Sep 2023 | Активная разработка |
Быстрые ссылки
- Руководство по обучению — пошаговое руководство с SignificanceLoss и SoftHistogram → ML Training
- MLOps и интерпретируемость — логирование W&B, важность, Optuna → MLOps
- Дифференцируемый анализ — низкоуровневые сессии и детали autograd → Differentiable
- Gymnasium RL — reinforcement learning для оптимизации анализа → Gymnasium
