bopp.core
defopt
macro
(defopt name & args)
doopt
(doopt algorithm opt-query opt-query-args num-samples & {:keys [speed-option bo-options opt-type opt-program-transformation opt-sample-summarizer opt-bo-target-transformation num-particles acq-opt-num-starts ais-num-steps ais-start-exponent ais-end-exponent output-extractor f-theta-inf], :or {speed-option :fast, opt-type :mmap, ais-start-exponent 0.001, ais-end-exponent 10, output-extractor get-result-vector, f-theta-inf -100000.0}})
Calls BOPP on a target query as defined by defopt, returning a lazy
infinite sequence of increasingly optimal estimates.
For more details please see the README and the
paper. https://github.com/twgr/bopp/blob/master/README.md
http://papers.nips.cc/paper/6421-bayesian-optimization-for-probabilistic-programs
Input:
algorithm ... Inference algorithm
[:smc, :pcascade, :importance]
opt-query ... Query to be optimized, defined by defopt.
opt-query-args ... Arguments of opt-query.
num-samples ... Number of samples for constructing the estimator to be
optimized
Optional keyword arguments:
Speed option:
speed-option ... Set the default options to a set of pre-tuned values to
be able to switch between the different modes of running depending on
speed. Can be overriden by user post-hoc.
[:careful, :fast] (Default: :fast)
Bayesian optimization (BO) options:
bo-options ... look at documentation of Deodorant, this should be a map
with those options, i.e.:
{:initial-points <initial-points>
:num-scaling-thetas <num-scaling-thetas>
:num-initial-points <num-initial-points>
:cov-fn-form <cov-fn-form>
... etc.}
You only need to provide options whose defaults that you want to
override.
(Default:
if :speed-option is :careful
{:hmc-num-leapfrog-steps 5
:hmc-num-mcmc-steps 50
:hmc-num-opt-steps 15
:hmc-num-chains 8
:hmc-max-gps 50}
if :speed-option is :fast
{:hmc-num-leapfrog-steps 2
:hmc-num-mcmc-steps 20
:hmc-num-opt-steps 10
:hmc-num-chains 4
:hmc-max-gps 20})
Optimization options:
opt-type ... Optimization type. Use :custom to customize the
optimization; must provide opt-program-transformation,
opt-sample-summarizer, opt-bo-target-transformation in this case.
[:mmap, :ml2, :risk-minimization :custom] (Default: :mmap)
opt-program-transformation ... Custom program transformation for
optimization.
[nil, :mmap, :ml2] (Default: nil)
opt-sample-summarizer ... Custom sample summarizer for optimizer. Takes
in a sequence of Anglican samples, outputs target scalar for BO.
(Default: nil; Suggested: anglican.inference/log-marginal)
opt-bo-target-transformation ... Custom BO target transformation for
optimization. Takes in BO target, outputs alternative target.
(Default: nil; Suggested: identity, - for minimization)
Inference options:
num-particles ... Number of particles during inference.
(Default: num-samples)
Acquisition optimization/AIS options:
acq-opt-num-starts ... Number of parallel optimizations to prevent
multimodality. (Default: 4 if :speed-option is :fast 16 if :careful)
ais-num-steps ... Number of MCMC steps performed during acquisition
function optimization.
(Default: (max 100 (int (* 2 (/ num-samples acq-opt-num-starts)))))
ais-start-exponent ... Start exponent for annealed importance sampling
(Default: 0.001)
ais-end-exponent ... End exponent for annealed importance sampling
(Default: 10)
Other options
output-extractor ... Takes in an Anglican sample, returns its output.
(Default: #(into [] (anglican.state/get-result sample));
Alternatives: anglican.state/get-result, anglican.state/get-predicts)
f-theta-inf ... Replace -Infinity during BO by this. (Default: -1e5)
Output:
Lazy list of increasingly optimal (in the MMAP sense) triples
(opt-vars, log-marginal, program-results):
opt-vars ... optimization variables
log-marginal ... the log marginal likelihood p(observes, opt-vars)
program-results ... program results associated with opt-vars
See paper for details.