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]
-
- generate_parameter_points(num_points)[source]
Generate random points in a unit hypercube Can use torch rand for this!
- initialise()[source]
method to allow the user scan to overload run settings etc during the initialisation process