NextStatNextStat

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 + neosNextStat
Язык реализацииЧистый 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