bsmart.scans.MLS

Machine Learning Scan

Ported from xBit by F. Staub [arXiv: 1906.03277](https://arxiv.org/abs/1906.03277) Based on approach proposed by J. Ren, L. Wu, J.M. Yang, J. Zhao [arXiv: 1708.06615](https://arxiv.org/abs/1708.06615)

This version written by M. D. Goodsell (goodsell@lpthe.jussieu) and F. Ibrahimov (Farid.Ibrahimov@liverpool.ac.uk)

Basic idea: 1. Start with random sample 2. Train NN 3. Use NN to propose new points with a ‘good likelihood’

In BSMArt, the variables are specified with names and ranges, e.g.:

"Variables": {
            "m0": { "RANGE": [200,2500]},
        "m12": { "RANGE": [200,2500]}
     },

The scan will sample values within these ranges (by mapping from a hypercube)

The likelihood is computed from observables. Any observable that contains the key ‘SCALING’ will contribute, e.g.

“Observables”: { “lres”: {“SLHA”: [“DUMMY”,[1]], “SCALING”: “USER”}}

or “mh” : { “SLHA”: [“MASS”, [25]], “SCALING”: “GAUSS” , “MEAN”: 125.09, “VARIANCE”: 3.0}

The scan will either attempt to learn the likelihood based on the observables, or try to learn the values of the observables and use those to construct the likelihoods of proposed points.

The settings for the scan are all specified in “Setup”:

"Setup":{
        "RunName": "TestMLS",
        "Type": "MLS",
        "Cores": 4,
        "Output File": "MSSM_Output",
        "Spectrum File": "SPheno.spc.MSSM",
        "LR": 0.01,                 (learning rate)
        "Neurons": [50,50,50],
        "Points": 10,               (points per batch)
        "Iterations": 30,           (number of batches)
        "Epochs" : 1000,            (number of epochs of training)
        "TrainLH": "True",          (Train Likelihood if True, learn observables if False)
        "Classifier": "False",      (include a classifier to filter out possibly invalid points)
        "LogLike": "True"           (Use log likelihood rather than the likelihood)
        "DensityPenaly": "True"     (Include a penalty for points too close to existing ones)
    },

Information

BSMArt Name: MLS

Requires:
  • torch

  • numpy

Settings:

  • RunName: String

  • Cores: Int

  • Output File: Path

  • Spectrum File: Path

  • LR: Float

  • Neurons: List[Int]

  • Points: Int

  • Iterations: Int

  • Epochs: Int

  • TrainLH: Boolean

  • Classifier: Boolean

  • LogLike: Boolean

  • DensityPenaly: Boolean

class bsmart.scans.MLS.NewScan(inputs, log)[source]

Bases: Scan, NNMLS

call_batch(input_torch)[source]

Handles running of the points

input_torch is a torch tensor

generate_parameter_points(num_points)[source]

Generate random points in a unit hypercube Can use torch rand for this!

guess_LH(x_in)[source]
initialise()[source]

method to allow the user scan to overload run settings etc during the initialisation process

min_Delta_LH(lh, xval)[source]
new_points(good_points, points)[source]
postprocess(Point, observables, data_point, temp_dir, log, lock=None)[source]

If we are learning the likelihood we want to return just the likelihood If we are learning the observables then we want to return just them

run()[source]
upscale(input_torch)[source]

Creates a list of inputs to feed to run_batch when given a tensor of dim (*, num_variables)