UpUpstream optimization of a neural net summary statistic with respect to downstream inference goals.
Project description
neos
neuralnice end-to-end optimized statistics
About
Leverages the shoulders of giants (jax
and pyhf
) to differentiate through a high-energy physics analysis workflow, including the construction of the frequentist profile likelihood.
If you're more of a video person, see this talk given by Nathan on the broader topic of differentiable programming in high-energy physics, which also covers neos
.
Example usage -- train a neural network to optimize an expected p-value
setup
In a python 3 environment, run the following:
pip install --upgrade pip setuptools wheel
pip install neos
pip install git+http://github.com/scikit-hep/pyhf.git@make_difffable_model_ctor
With this, you should be able to run the demo notebook demo.ipynb on your pc :)
This workflow is as follows:
- From a set of normal distributions with different means, we'll generate four blobs of
(x,y)
points, corresponding to a signal process, a nominal background process, and two variations of the background from varying the background distribution's mean up and down. - We'll then feed these points into the previously defined neural network for each blob, and construct a histogram of the output using kernel density estimation. The difference between the two background variations is used as a systematic uncertainty on the nominal background.
- We can then leverage the magic of
pyhf
to construct an event-counting statistical model from the histogram yields. - Finally, we calculate the p-value of a test between the nominal signal and background-only hypotheses. This uses the familiar profile likelihood-based test statistic.
Thanks
A big thanks to the teams behind jax
, fax
, jaxopt
and pyhf
for their software and support.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.