Stan  2.5.0
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
stepsize_adaptation.hpp
Go to the documentation of this file.
1 #ifndef STAN__MCMC__STEPSIZE__ADAPTATION__BETA
2 #define STAN__MCMC__STEPSIZE__ADAPTATION__BETA
3 
4 #include <cmath>
6 
7 namespace stan {
8 
9  namespace mcmc {
10 
12 
13  public:
14 
15  stepsize_adaptation(): mu_(0.5), delta_(0.5), gamma_(0.05),
16  kappa_(0.75), t0_(10)
17  { restart(); }
18 
19  void set_mu(double m) { mu_ = m; }
20  void set_delta(double d) { if(d > 0 && d < 1) delta_ = d; }
21  void set_gamma(double g) { if(g > 0) gamma_ = g; }
22  void set_kappa(double k) { if(k > 0) kappa_ = k; }
23  void set_t0(double t) { if(t > 0) t0_ = t; }
24 
25  double get_mu() { return mu_; }
26  double get_delta() { return delta_; }
27  double get_gamma() { return gamma_; }
28  double get_kappa() { return kappa_; }
29  double get_t0() { return t0_; }
30 
31  void restart() {
32  counter_ = 0;
33  s_bar_ = 0;
34  x_bar_ = 0;
35  }
36 
37  void learn_stepsize(double& epsilon, double adapt_stat) {
38 
39  ++counter_;
40 
41  adapt_stat = adapt_stat > 1 ? 1 : adapt_stat;
42 
43  // Nesterov Dual-Averaging of log(epsilon)
44  const double eta = 1.0 / (counter_ + t0_);
45 
46  s_bar_ = (1.0 - eta) * s_bar_ + eta * (delta_ - adapt_stat);
47 
48  const double x = mu_ - s_bar_ * std::sqrt(counter_) / gamma_;
49  const double x_eta = std::pow(counter_, - kappa_);
50 
51  x_bar_ = (1.0 - x_eta) * x_bar_ + x_eta * x;
52 
53  epsilon = std::exp(x);
54 
55  }
56 
57  void complete_adaptation(double& epsilon) {
58  epsilon = std::exp(x_bar_);
59  }
60 
61  protected:
62 
63  double counter_; // Adaptation iteration
64  double s_bar_; // Moving average statistic
65  double x_bar_; // Moving average parameter
66  double mu_; // Asymptotic mean of parameter
67  double delta_; // Target value of statistic
68  double gamma_; // Adaptation scaling
69  double kappa_; // Adaptation shrinkage
70  double t0_; // Effective starting iteration
71 
72  };
73 
74  } // mcmc
75 
76 } // stan
77 
78 #endif
void complete_adaptation(double &epsilon)
fvar< T > pow(const fvar< T > &x1, const fvar< T > &x2)
Definition: pow.hpp:17
void learn_stepsize(double &epsilon, double adapt_stat)
fvar< T > sqrt(const fvar< T > &x)
Definition: sqrt.hpp:15
fvar< T > exp(const fvar< T > &x)
Definition: exp.hpp:16

     [ Stan Home Page ] © 2011–2014, Stan Development Team.