Skip to content

Instantly share code, notes, and snippets.

@matthieubulte
Last active June 2, 2019 18:18
Show Gist options
  • Save matthieubulte/54155bcbe9d3e43d6d8fb6e6efd174a7 to your computer and use it in GitHub Desktop.
Save matthieubulte/54155bcbe9d3e43d6d8fb6e6efd174a7 to your computer and use it in GitHub Desktop.
MLSSMC Tutorial
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import scipy.stats as stats\n",
"import matplotlib.pyplot as plt\n",
"import ipywidgets as widgets\n",
"from scipy import integrate\n",
"import matplotlib as mpl\n",
"\n",
"import plotting\n",
"from config import *\n",
"from mlssmc import *\n",
"\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# The $\\text{MLS}^2\\text{MC}$ Algorithm\n",
"\n",
"In this notebook, we provide a step by step introduction to the $\\text{MLS}^2\\text{MC}$ [1] algorithm. We do this through the study of solving a specific inverse problem. In this inverse problem, the task is to estimate the gravitational acceleration of the Earth $g^\\dagger \\approx 9.808\\ \\text{m}\\text{s}^{-2}$ from observations collected from a simple pendulum. We solve this inverse problem using the Bayesian approach and present several approximations of the solution using the adaptive Sequential Monte Carlo (aSMC), Multi-Level Bridging (MLB) and MultiLevel Sequential2 Monte Carlo ($\\text{MLS}^2\\text{MC}$) algorithms.\n",
"\n",
"\n",
"## 1. Modeling for the pendulum\n",
"To describe the dynamics of the pendulum, we used a simplified model described in [2, Section 2.1], given by the following initial value problem (IVP)\n",
"\n",
"$$\\begin{align*}\n",
" \\ddot{x}(\\tau; g) &= -\\frac{g}{\\ell}\\sin(x(\\tau; g)),\\\\\n",
" \\dot{x}(0; g) &= v_0,\\\\\n",
" x(0; g) &= x_0,\n",
"\\end{align*}$$\n",
"\n",
"where $x$ is the angle of pendulum, $g$ is the gravitational acceleration of the Earth, $l$ denotes the length of the string that connects the two ends of the pendulum (here $l = 7.5$), and $τ \\in [0, \\infty)$ denotes time.\n",
"\n",
"Since the IVP describing the motion of the pendulum does not have an analytical solution, we use a numerical approximation instead. Here, we use an Euler discretization of the solution with different discretization levels $l = 1, \\ldots, 5$ corresponding to the step sizes $2^{-3}, \\ldots, 2^{-7}$.\n",
"\n",
"We start by defining the discretized solution to the IVP and setup the Bayesian inverse problem."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# We use a CostCounter to later compare the performance of different algorithms\n",
"cost = CostCounter()\n",
"\n",
"# The Euler discretization is a first order approximation method. The approximation error for\n",
"# each discretization level h is of order O(h).\n",
"def euler_pendulum(g, initial_value, times, h):\n",
" result = np.zeros((g.size, times.size))\n",
" steps = int(times[-1]/h)\n",
" current = np.matlib.repmat(initial_value, g.size, 1)\n",
" t = 0; j = 0\n",
" \n",
" cost.count_cost(steps)\n",
" \n",
" for i in range(steps):\n",
" tmp = current.copy()\n",
" current[:,1] -= h * np.multiply(g, np.sin(tmp[:,0])) / string_length\n",
" current[:,0] += h * tmp[:,1]\n",
" \n",
" while j < times.size and t + h >= times[j]:\n",
" w = (times[j] - t) / h\n",
" result[:,j] = (1 - w) * tmp[:,0] + w * current[:,0]\n",
" j += 1\n",
" t += h\n",
" \n",
" return result\n",
"\n",
"# We can then define the probabilistic model associated to the inverse problem\n",
"prior = stats.truncnorm(-10,10,loc=12,scale=1)\n",
"\n",
"error_std = 0.05\n",
"error_model = stats.norm(loc=0,scale=error_std)\n",
"\n",
"# Continue with defining observations and variables relevant to the experiment\n",
"observations = np.array([6.64, 9.39, 12.19, 14.9, 17.65, 20.4, 23.2, 25.97, 28.67, 31.44])\n",
"initial_values = [5*np.pi/180, 0]\n",
"string_length = 7.5\n",
"\n",
"# And for each discretization level h, define an approximation of the log likelihood\n",
"evaluation_mesh = np.append([0], observations)\n",
"def discretized_potential(g, h):\n",
" return error_model.logpdf(euler_pendulum(g, initial_values, evaluation_mesh, h)).sum(axis=1)\n",
"\n",
"# This allows us to define a list of models that will be used by the different\n",
"# posterior approximations algorithms.\n",
"levels = np.power(1/2, range(3,8))\n",
"max_level = len(levels)-1\n",
"def make_model(h): return lambda x: discretized_potential(x, h)\n",
"models = list(map(make_model, levels))\n",
"\n",
"\n",
"# Finally, since all of the algorithms are based on MCMC updates, we define a shared \n",
"# MCMC proposal kernel.\n",
"proposal_std = 0.25\n",
"def gaussian_proposal(x):\n",
" return stats.norm(x, scale=proposal_std).rvs()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the following sections, we will study and compare different algorithms to approximate the solution of the Bayesian inverse problem. All algorithms belong to the class of particle approximations in which a set of points from the parameter space are weighted to create an empirical distribution approximating the posterior distribution, solution of the Bayesian inverse problem.\n",
"\n",
"Since it is often hard or impossible to directly create a *good* set of points to approximate the posterior distributions, all algorithms presented below rely on first sampling the set of point from the prior distribution and creating an artificial interpolation sequence between the prior distribution and the posterior distribution. The Sequential Monte Carlo [3] algorithm is then used to evolve the set of particles to approximate each of the artificial distributions, making each transition easier than directly transitioning from prior to posterior.\n",
"\n",
"The question all of these algorithm try to answer is: which sequence of artificial distributions will allow the SMC algorithm to transform a approximation of the prior distribution into an approximation of the posterior distribution at a high accurracy and low cost?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Adaptive Sequential Monte Carlo\n",
"\n",
"The first algorithm presented is the adaptive Sequential Monte Carlo algorithm. As described in [1, Section 3.1; 1, Section 3.4], the algorithm constructs an artificial sequence of distributions geometrically interpolating between the prior and posterior distributions (at its maximal discretization level) according to a sequence of tempering parameters $(\\beta_0 = 0, \\ldots, \\beta_{N_T} = 1)$. \n",
"\n",
"The adaptivity of the method comes from the automatic choice of the tempering coefficients. These coefficients are computed on the fly to minimize the number of intermediary distributions (and thus reduce the cost) while maintaining the quality of the estimation above a target level."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total cost = 44264\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl4lNXZ+PHvPVsSEgIkoCwBAyQoBEKURSiCW1lcWBQEFMtS3MrPFvHVgl2oS99Wqy0tKvJaF6hiQVEULGIVN6wUSRQQZIsQQsIWCNmTWc/vj1nIMpmZhAzZzue6cmXyPOd5njOD5s7Z7iNKKTRN0zQtEENjV0DTNE1r+nSw0DRN04LSwULTNE0LSgcLTdM0LSgdLDRN07SgdLDQNE3TgtLBQtM0TQtKBwtN0zQtKB0sNE3TtKBMjV2BhtKxY0eVmJjY2NXQNE1rVjIyMk4rpToFK9digkViYiLp6emNXQ1N07RmRUSOhFJOd0NpmqZpQelgoWmapgUV1mAhIuNEZL+IZIrIIj/nR4nINyLiEJEp1c71EJF/i8heEfleRBLDWVdN0zStdmEbsxARI/A8MBrIAbaLyHql1PeVimUDs4GH/NziH8D/KqU+EpEYwBWuumrNn91uJycnh4qKisauiqY1SZGRkSQkJGA2m+t1fTgHuIcCmUqpQwAishqYCPiChVIqy3OuSiAQkX6ASSn1kadcSRjrqbUAOTk5tG3blsTERESksaujaU2KUoozZ86Qk5NDz54963WPcHZDdQOOVvo5x3MsFH2AAhF5R0S+FZGnPS0VTfOroqKC+Ph4HSg0zQ8RIT4+/rxa3uEMFv7+rw11Wz4TMBJ399QQoBfu7qqqDxC5R0TSRSQ9Ly+vvvXUWggdKDStduf7/0c4g0UO0L3SzwnAsTpc+61S6pBSygG8C1xRvZBS6kWl1GCl1OBOnYKuKdE0TdPqKZzBYjuQLCI9RcQCTAfW1+HaDiLijQDXUWmsQ9OamqysLPr371+na1asWMGxY6H+/RTYH//4R5KSkrj00kv58MMP/ZZ57rnnSEpKQkQ4ffp0lXOfffYZaWlppKSkcPXVV/uOFxQUMGXKFC677DL69u3L1q1bA9ZjxYoV3H///ef/hs7znkVFRXTr1q3B69KahW2AWynlEJH7gQ8BI/CKUmqPiDwOpCul1ovIEGAd0AEYLyKPKaVSlFJOEXkI2CzutlMG8Pdw1bUl2rBhQ5Wfx48f30g10WqzYsUK+vfvT9euXc/rPt9//z2rV69mz549HDt2jB//+MccOHAAo7HqMN+IESO4+eabueaaa6ocLygoYN68eWzatIkePXpw6tQp37n58+czbtw41q5di81mo6ys7LzqeqH89re/rRL0tPMX1nUWSqmNSqk+SqneSqn/9RxbrJRa73m9XSmVoJSKVkrFK6VSKl37kVIqVSk1QCk1WyllC2ddNe18ORwOZs2aRWpqKlOmTPH9Ys3IyODqq69m0KBBjB07luPHj7N27VrS09OZMWMGaWlplJeX8/jjjzNkyBD69+/PPffcg1KhDfG99957TJ8+nYiICHr27ElSUhJff/11jXKXX345/vKnvfHGG9x666306NEDgIsuughw/3X+xRdfMHfuXAAsFgvt27cP+fPIy8tj8uTJDBkyhCFDhvCf//wHl8tFYmIiBQUFvnJJSUmcPHnSb/n6yMjI4OTJk4wZM6Ze12v+tZjcUJrm9diGPXx/rKhB79mvayy/G58SsMz+/ft5+eWXGTFiBD/96U9ZtmwZ8+fP5+c//znvvfcenTp1Ys2aNfz617/mlVde4bnnnuOZZ55h8ODBANx///0sXrwYgJ/85Ce8//77jB8/nqeffppVq1bVeN6oUaNYunQpubm5DBs2zHc8ISGB3NzckN/bgQMHsNvtXHPNNRQXFzN//nxmzpzJoUOH6NSpE3PmzGHnzp0MGjSIv/3tb0RHR4d03/nz57NgwQKuuuoqsrOzGTt2LHv37mXixImsW7eOOXPmsG3bNhITE7n44ou54447/JavbNWqVTz99NM1npWUlMTatWtxuVz8z//8D6+99hqbN28O+TPQgtPBogWp3vWkXVjdu3dnxIgRANx5550sXbqUcePGsXv3bkaPHg2A0+mkS5cufq//9NNP+dOf/kRZWRn5+fmkpKQwfvx4Hn74YR5++OFan+uvBVKXmS8Oh4OMjAw2b95MeXk5w4cPZ9iwYTgcDr755hueffZZrrzySubPn8+TTz7JE088EdJ9P/74Y77//txQY1FREcXFxUybNo3HH3+cOXPmsHr1aqZNmxawfGUzZsxgxowZtT5z2bJl3HjjjXTv3r3WMlr96GChtTjBWgDhUv0XtIiglCIl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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# We start by creating a particle approximation of the prior distribution\n",
"M = 2000 # Number of particles\n",
"asmc_approximation = ParticleApproximation(ParticleSet(prior.rvs(M), models))\n",
"\n",
"# We then define the a TemperingWeight function, representing the unnormalized posterior density\n",
"# for a given discretization level and beta.\n",
"beta = 0\n",
"tempering_weight = TemperingWeight(prior, level=max_level, beta=beta)\n",
"\n",
"# Then initialize the cost monitoring\n",
"cost.start()\n",
"\n",
"# And proceed to increase the tempering coefficient adaptively until the posterior is reached\n",
"while beta < adaptive_threshold:\n",
" # The temperature_subupdate procedure finds the next optimal tempering coefficient\n",
" # and updates the approximation to approximate the intermediate distribution corresponding to\n",
" # the optimal coefficient.\n",
" asmc_approximation, beta = temperature_subupdate(asmc_approximation, beta, max_level, tempering_weight, gaussian_proposal)\n",
" tempering_weight = tempering_weight.configure(beta=beta)\n",
" \n",
" # We can then plot the intermediary posterior densities for each beta\n",
" tempering_weight.configure(scale=\"normed\") \\\n",
" .plot(np.linspace(9, 15, 100), models)\n",
" \n",
"print(\"Total cost = %d\" % cost.finish())\n",
"\n",
"# And the resulting approximation of the posterior\n",
"asmc_approximation.hist(bins=50, label=u\"Posterior approximation for $β=1$\", alpha=0.3, color=\"black\")\n",
"\n",
"plt.ylabel(\"Probability density\")\n",
"plt.xlabel(\"Gravitational acceleration\")\n",
"plt.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Multi-Level Bridging \n",
"\n",
"While the aSMC method does provide an efficient tempering schedule to interpolate between the prior and posterior distributions, it requires to perform all calculation at the highest level of accuracy of the model. For model requiring to solve complex differential equation, computing an approximation at a very high accuracy can prohibitively expensive.\n",
"\n",
"The Multi-Level Bridging method [1, Section 3.3] attempts to solve this computational issue to adapt the aSMC method to more expensive models. We consider the case were several level of discretizations $l = 1, \\ldots, N_L$ of the forward model are available, where the precision of the model and its evaluation cost increases with $l$. \n",
"\n",
"The MLB method works as following: it starts by approximating the posterior distribution at the level $l = 0$ using the aSMC algorithm. Then, for each $l = 1, \\ldots, N_L$, use the current approximation of level $l - 1$ to create an approximation of level $l$. This is done by adaptively Bridging [1, Section 3.2; 1, Section 3.4] between each approximation level similarly to using the aSMC algorithm between two discretiztion levels."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Total steps = 91279\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Monitor the total cost of the algorithm\n",
"total_cost = 0\n",
"\n",
"# Since we will plot many of the intermediary densities, we first define a mesh on which to plot them.\n",
"g_values = np.linspace(9.5, 10.5, 100)\n",
"\n",
"# As before, we start by an approximation of the prior distribution.\n",
"mlb_approximation = ParticleApproximation(ParticleSet(prior.rvs(M), models))\n",
"\n",
"# We then initialize the tempering coefficients and model level.\n",
"level = 0\n",
"beta = 0\n",
"\n",
"# We monitor the cost of each step individually to understand the cost behaviour of the algorithm.\n",
"cost.start()\n",
"\n",
"# And perform the first step of the algorithm: approximating the posterior at level l=0 using aSMC\n",
"mlb_weight = TemperingWeight(prior, level=level, beta=beta)\n",
"mlb_approximation, _, beta = temperature_update(mlb_approximation, level, mlb_weight, gaussian_proposal)\n",
"mlb_weight = mlb_weight.configure(beta=beta)\n",
"\n",
"step_cost = cost.finish()\n",
"total_cost += step_cost\n",
"\n",
"# We can then plot the density at level l=0 that is currently approximated.\n",
"mlb_weight.configure(scale=\"normed\") \\\n",
" .plot(g_values, models, label=\"Level=%d, cost=%d\" % (level, step_cost))\n",
"\n",
"# The algorithm continues by sequentially bridging from the previous to the current model level.\n",
"level += 1\n",
"\n",
"while level < len(levels):\n",
" cost.start()\n",
" \n",
" # For each iteration of this loop, we want to find an optimal sequence of intermediary distributions\n",
" # between the level l-1 for which an approximation is available and the current level.\n",
" \n",
" # The tempering parameter for the bridging step use the letter zeta instead of beta\n",
" zeta = 0\n",
" \n",
" while zeta < adaptive_threshold: # adaptive_threshold ≈ 1\n",
" # The bridging_subupdate function finds the optimal Bridging coefficient zeta and updates the\n",
" # approximation to approximate the new intermediary distribution based on the optimal zeta.\n",
" mlb_approximation, zeta = bridging_subupdate(mlb_approximation, zeta, beta, level, mlb_weight, gaussian_proposal)\n",
" \n",
" # We plot these intermediary Bridging density in grey\n",
" mlb_weight.configure(level=level, zeta=zeta, scale=\"normed\") \\\n",
" .plot(g_values, models, label=None, color=\"grey\", alpha=0.3)\n",
" \n",
" \n",
" step_cost = cost.finish()\n",
" total_cost += step_cost\n",
" \n",
" # And plot in color the posterior density of each model level as well as the cost\n",
" # of each update in the legend.\n",
" mlb_weight.configure(level=level, zeta=zeta, scale=\"normed\") \\\n",
" .plot(g_values, models, label=\"Level=%d, cost=%d\" % (level, step_cost))\n",
" \n",
" level += 1\n",
" mlb_weight = mlb_weight.configure(level=level)\n",
" \n",
"plt.ylabel(\"Probability density\")\n",
"plt.xlabel(\"Gravitational acceleration\")\n",
"plt.legend();\n",
"print(\"\\nTotal steps = %d\" % total_cost)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We observe several characteristics of the algorithm:\n",
"\n",
"1. The cost of performing aSMC at the lowest model level is drastically lower than performing it at the highest level.\n",
"\n",
"2. However, bridging between different approximation levels can be very expensive. Indeed, bridging between levels 0 and 1 is as expensive as running aSMC at the highest level. This can be explained by the almost singularity of the posteriors at level 0 and 1, requiring many intermediary distributions.\n",
"\n",
"3. Nonetheless, the algorithm seems to efficiently interpolate between the higher-level models.\n",
"\n",
"## 4. Multi-Level Sequential^2 Monte Carlo \n",
"\n",
"We now view the construction of our algorithms as a sequence of decisions, in which we have to choose between updating the tempering coefficient and updating the model level. The two previous algorithms provided update strategies only moving along one update axis, either only updating the tempering coefficients while staying at the highest model level (aSMC) or after some initialization, only updating the model level (MLB). The Multi-Level Sequential^2 Monte Carlo ($\\text{MLS}^2\\text{MC}$ or MLSSMC) [1, Section 4] proposes a fully adaprive algorithm to choose on the fly the best update strategy. We illustrate these update strategies in the following figure [1, Figure 4.1] where the green path corresponds to the aSMC update strategy, the pink path to the MLB update strategy and the blue path to the MLSSMC update strategy.\n",
"\n",
"![Overview of different update schemes](./update_schemes.png)\n",
"\n",
"The goal of the MLSSMC is to find an update strategy that minimizes the cost of coming from an approximation of the prior distribution to an approximation of the posterior distribution at level $l = N_L$ at a minimal cost.\n",
"\n",
"Since the cost has to stay minimal, the MLSSMC algorithm attempts to perform as many tempering updates as possible at lower model levels. However, as seen in the MLB section, performing a level update can be very expensive if the distributions of two different level are too different. The MLSSMC algorithm thus works at each step by performing a tempering update whenever the tempered posterior at the current level is close enough to the above level, otherwise performing a level update to avoid the high cost of later bridging between two dissimilar distributions. \n",
"\n",
"Similarly to other adaptive update strategies, the MLSSMC approximates the loss of accuracy of the estimation from performing an update to decide which update is optimal (aSMC & MLB look for optimal tempering/bridging coefficient updates). However, while other methods can re-use the model evaluations after using them to approximate a loss of accuracy, it is not the case when performing updates in parameter the two dimensions of the distribution interpolation (tempering coefficient and level). Thus, the MLSSMC algorithm reduces the cost of this decision by basing it on a less accurate estimation of the loss of accuracy, created by using a subsample of the approximation of the current intermediary distribution."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total cost = 53315\n",
"\tBridging cost = 24646 (46.2 %)\n",
"\tTempering cost = 20370 (38.2 %)\n",
"\tApproximation cost = 8299 (15.6 %)\n"
]
}
],
"source": [
"# Setup cost monitoring of the algorithm.\n",
"bridging_cost = 0\n",
"tempering_cost = 0\n",
"approx_cost = 0\n",
"updates = [] # We record all updates perform for later analysis\n",
"\n",
"# As before, we start by an approximation of the prior distribution.\n",
"mls2mc_approximation = ParticleApproximation(ParticleSet(prior.rvs(M), models))\n",
"mls2mc_weight = TemperingWeight(prior, beta=0, zeta=1)\n",
"\n",
"# Initialize tempering coefficients and model level\n",
"level = 0\n",
"beta = 0\n",
"\n",
"# And define the number of particles used for the accuracy loss estimation\n",
"lu_M = 200\n",
"\n",
"# The algorithm runs until the highest model level and tempering coefficient is reached\n",
"while level + 1 < len(levels) or beta < adaptive_threshold:\n",
" \n",
" # If it's still required to perform a level update\n",
" if level + 1 < len(levels):\n",
" cost.start()\n",
" \n",
" # Then approximate the accuracy loss using a sub-sample of the current approximation\n",
" lu_approx, lu_indices = mls2mc_approximation.sub_approx(lu_M, return_indices=True)\n",
"\n",
" lu_importance_pot = beta*(lu_approx.particle_set.get_evaluations(level) - lu_approx.particle_set.get_evaluations(level-1))\n",
" lu_weights = potentials_to_weights(lu_importance_pot)\n",
" lu_ess = 1.0 / np.dot(lu_weights, lu_weights)\n",
" \n",
" # Then, if the accuracy loss is too large, perform a bridging update\n",
" if lu_ess < lu_target_ess_ratio * lu_M:\n",
" level += 1\n",
" mls2mc_weight = mls2mc_weight.configure(level=level)\n",
" mls2mc_approximation.particle_set.extend(lu_approx.particle_set, lu_indices)\n",
" mls2mc_approximation, n_steps = bridging_update(mls2mc_approximation, beta, level, mls2mc_weight, gaussian_proposal) \n",
"\n",
" # Stats\n",
" updates.append({\"type\":\"LU\"})\n",
" bridging_cost += cost.finish()\n",
" \n",
" # As described in [1, Section 4.5], if no temperature parameter is required anymore and\n",
" # the accuracy loss between the current and next level low enough is, we can terminate\n",
" # the algorithm\n",
" elif beta >= adaptive_threshold:\n",
" break\n",
" \n",
" else:\n",
" approx_cost += cost.finish()\n",
"\n",
" # If it's still required to perform a termpering update, always do it (see [1, Section 4.4])\n",
" if beta < adaptive_threshold:\n",
" cost.start()\n",
" \n",
" mls2mc_approximation, beta = temperature_subupdate(mls2mc_approximation, beta, level, mls2mc_weight, gaussian_proposal)\n",
" mls2mc_weight = mls2mc_weight.configure(beta=beta)\n",
"\n",
" # Stats\n",
" updates.append({\"type\":\"TU\", \"beta\":beta})\n",
" tempering_cost += cost.finish()\n",
"\n",
"\n",
"total_cost = bridging_cost + tempering_cost + approx_cost\n",
"print(\"Total cost = %d\" % total_cost)\n",
"print(\"\\tBridging cost = %d (%.1f %%)\" % (bridging_cost, 100.0*bridging_cost/total_cost))\n",
"print(\"\\tTempering cost = %d (%.1f %%)\" % (tempering_cost, 100.0*tempering_cost/total_cost))\n",
"print(\"\\tApproximation cost = %d (%.1f %%)\" % (approx_cost, 100.0*approx_cost/total_cost))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The MLSSMC approximation is less expensive than the MLB approximation, but still more expensive than a direct aSMC approximation. This can be explained by the low-dimensionality of our model. Indeed, using the construction of model level we have used, the cost ratio between two models is of $2^d$ where $d$ is the dimensionality of the model. Since we are working with a model of 1 dimension, the factor is only of 2, and using here MLSSMC is not beneficial. However, it quickly becomes a more performant method as the dimension of the model increases.\n",
"\n",
"You can try this by yourself by modifying the definition of the method `euler_pendulum`. If you replace on line 12 the cost increase `cost.count_cost(steps)` by `cost.count_cost(steps**d)` replacing $d=2,3,\\ldots$, you can then re-run the algorithm to observe the performance gain that the MLSSMC algorithm could bring on a problem of dimension $d$. For $d = 2$, MLSSMC is on par with aSMC and for $d > 2$, the MLSSMC outperforms aSMC.\n",
"\n",
"We can also plot the update strategy that was computed during the run of the algorithm."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"states = plotting.plot_mlssmc_schedule(levels, updates)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we informally verify that the three algorithms have computed a similar approximation of the posterior distribution. To do this, we plot for each of the approximations a kernel estimation of their empirical density and visually check that these densities are matching."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# You can try and change the bandwidth parameter of the KDE estimate\n",
"kde_bandwidth = 0.5\n",
"\n",
"# Plot the three kernel density estimations of the approximated posteriors\n",
"plotting.plot_approximation_kde(asmc_approximation, g_values, kde_bandwidth, label=\"aSMC\")\n",
"plotting.plot_approximation_kde(mlb_approximation, g_values, kde_bandwidth, label=\"MLB\")\n",
"plotting.plot_approximation_kde(mls2mc_approximation, g_values, kde_bandwidth, label=\"MLSSMC\")\n",
"\n",
"plt.ylabel(\"Probability density\")\n",
"plt.xlabel(\"Gravitational acceleration\")\n",
"plt.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### References\n",
"\n",
"[1] Latz, J., Papaioannou, I., Ullmann, E.: Multilevel Sequential2 Monte Carlo for Bayesian Inverse Problems. Journal of Computational Physics 368 (2018): 154-178.\n",
"\n",
"[2] Bulté, M., Latz, J., Ullmann, E.: A practical example for the non-linear Bayesian filtering of model parameters. Submitted. (2018)\n",
"\n",
"[3] Del Moral, P., Doucet, A., Jasra, A.: Sequential Monte Carlo samplers. J. R. Statist. Soc. B, 68(3):411–436, 2006."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment