{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Stein variational gradient descent\n", "\n", "\n", "Star\n", "Issue\n", "Watch\n", "Follow\n", "\n", "One central challenge in Statistics and Bayesian machine learning is dealing with intractable distributions.\n", "In many cases, our models involve complicated distributions, which can be difficult to integrate out or sample from - consider for example the posterior distribution over the parameters of a Bayesian neural network.\n", "A great deal of approaches have been devised to enable efficient handling of complicated distributions, broadly falling in two categories: Variational Inference (VI) and Markov Chain Monte Carlo (MCMC) - we focus on the former only here.\n", "\n", "Suppose we are working with an intractable distribution $p$.\n", "VI seeks to approximate $p$ by another approximate distribution $q$, constrained to be in a tractable family of distributions - such as an independent Gaussian.\n", "By optimising a similarity metric between $q$ and $p$, such as the KL-divergence, VI produces a (hopefully) decent approximation which captures some of the important aspects of the target.\n", "VI can be much faster than MCMC, but it is an approximate method. The severity of approximation involved in VI is largely affected by the family of the approximate distribution, and can be very large for many applications of interest.\n", "\n", "Stein Variational Gradient Descent (SVGD) {cite}`liu2019stein` is an algorithm which enables approximate inference for intractable distributions, wihtout the severe constraints of the approximating family of VI.\n", "Much like VI, it minimises the KL divergence between $q$ and $p$, but unlike VI it does not involve heavy assumptions on the family of $q$.\n", "Instead, SVGD evolves a finite set of particles, which approximates $q$, by a sequence of transformations such that $q$ gets progressively closer to $p$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "import numpy as np\n", "\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "from matplotlib_inline.backend_inline import set_matplotlib_formats\n", "\n", "set_matplotlib_formats('pdf', 'svg')\n", "\n", "matplotlib.rcParams['mathtext.fontset'] = 'stix'\n", "matplotlib.rcParams['font.family'] = 'STIXGeneral'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Derivation of SVGD\n", "\n", "The idea SVGD is to approximate a target distribution $p$ by an approximate distribution $q$, by applying a sequence of transformations to $q$ which will bring it closer to $p$. By applying the transformation (from a restricted family of transformations) which most rapidly reduces the KL divergence, we will obtain an algorithm that looks much like steepest-direction gradient descent.\n", "\n", "### Invertible transformations\n", "\n", "Suppose we have an initial distribution $q$, which we pass through a transformation $T : \\mathbb{R}^N \\to \\mathbb{R}^N$, that is\n", "\n", "$$\\begin{align}\n", "z = T(x),~~\\text{ where } x \\sim q(x).\n", "\\end{align}$$\n", "\n", "If the map $T$ is invertible, we can easily compute the density of the transformed variable $z$ via the change of variables formula. To ensure $T$ is invertible, let us set $T(x) = x + \\epsilon \\phi(x)$, where $\\epsilon$ is a small coefficient and $\\phi : \\mathbb{R}^N \\to \\mathbb{R}^N$. If $\\phi$ is smooth and $\\epsilon$ is sufficiently small, then $T$ is invertible, which which means we can easily compute the density of $z$. We turn to the question of how to pick an appropriate $\\phi$.\n", "\n", "### Direction of steepest descent\n", "\n", "Let us use the subscript notation $q_{[T]}$ to denote the distribution obtained by passing $q$ through $T$. Then we are interested in picking a $T$ which minimises $\\text{KL}(q_{[T]} || p)$. First, we compute the derivative of the KL w.r.t. $\\epsilon$, which we obtain in closed form.\n", "\n", ":::{prf:theorem} Proof: Gradient of KL is the KSD\n", "\n", "Let $x \\sim q(x)$, and $T(x) = x + \\epsilon \\phi(x)$, where $\\phi$ is a smooth function. Then\n", " \n", "$$\\begin{align}\n", "\\nabla_{\\epsilon}\\text{KL}(q_{[T]} || p) \\big|_{\\epsilon = 0} = - \\mathbb{E}_{x \\sim q}\\left[\\text{trace} \\mathcal{A}_p \\phi(x) \\right],\n", "\\end{align}$$\n", " \n", "where $q_{[T]}$ is the density of $T(x)$ and\n", " \n", "$$\\begin{align}\n", "\\mathcal{A}_p \\phi(x) = \\nabla_x \\log p(x)\\phi^\\top(x) + \\nabla_x \\phi(x).\n", "\\end{align}$$\n", " \n", ":::\n", "\n", ":::{dropdown} Gradient of KL is the KSD\n", " \n", "Let $p_{\\left[T^{-1}\\right]}(x)$ denote the density of $z = T^{-1}(x)$ when $x \\sim p(x)$. By changing the variable of integration from $z$ to $x = T^{-1}(x)$, we obtain\n", " \n", "$$\\begin{align}\n", "\\text{KL}(q_{[T]} || p) &= \\int q_{[T]}(z) \\log \\frac{q_{[T]}(z)}{p(z)} dz \\\\\n", " &= \\int q(x) \\left[ \\log q(x) - \\log p_{\\left[T^{-1}\\right]}(x) \\right] dx.\n", "\\end{align}$$\n", " \n", "This change of variables is convenient because now only one term in the integral depends on $\\epsilon$, that is $p_{\\left[T^{-1}\\right]}(x)$. Now taking the derivative with respect to $\\epsilon$ we obtain\n", " \n", "$$\\begin{align}\n", "\\nabla_{\\epsilon} \\text{KL}(q_{[T]} || p) &= - \\int q(x) \\nabla_{\\epsilon} \\log p_{\\left[T^{-1}\\right]}(x) dx, \\\\\n", " &= - \\int q(x) \\nabla_{\\epsilon} \\log p_{\\left[T^{-1}\\right]}(x) dx,\n", "\\end{align}$$\n", " \n", "and using the fact that\n", "\n", "$$\\begin{align}\n", "\\log p_{\\left[T^{-1}\\right]}(x) &= \\log p(T(x)) + \\log |\\nabla_x T(x)|,\n", "\\end{align}$$\n", " \n", "we obtain the expression\n", "\n", "$$\\begin{align}\n", "\\nabla_{\\epsilon} \\log p_{\\left[T^{-1}\\right]}(x) &= \\nabla \\log p(T(x))^\\top \\nabla_\\epsilon T(x) + \\nabla_\\epsilon \\log |\\nabla_x T(x)|, \\\\\n", " &= \\nabla \\log p(T(x))^\\top \\nabla_\\epsilon T(x) + \\text{trace}\\left[(\\nabla_x T(x))^{-1} \\nabla_\\epsilon \\nabla_x T(x)\\right],\n", "\\end{align}$$\n", " \n", "where we have used the identity\n", " \n", "$$\\begin{align}\n", "\\nabla_{\\epsilon} \\log |\\det A| = \\text{trace} A^{-1} \\nabla_{\\epsilon} A,\n", "\\end{align}$$\n", " \n", "we arrive at the following expression for the derivative\n", " \n", "$$\\begin{align}\n", "\\nabla_{\\epsilon} \\text{KL}(q_{[T]} || p) &= - \\mathbb{E}_{x \\sim q} \\left[\\nabla \\log p(T(x))^\\top \\nabla_\\epsilon T(x) + \\text{trace} (\\nabla_x T(x))^{-1} \\nabla_\\epsilon \\nabla_x T(x)\\right].\n", "\\end{align}$$\n", " \n", "Setting $T(x) = x + \\epsilon \\phi(x)$ yields the result\n", " \n", "$$\\begin{align}\n", "\\nabla_{\\epsilon} \\text{KL}(q_{[T]} || p) &= - \\mathbb{E}_{x \\sim q} \\left[\\nabla \\log p(x)^\\top \\phi(x) + \\text{trace}\\left[\\nabla_x \\phi(x) \\right]\\right], \\\\\n", " &= - \\mathbb{E}_{x \\sim q} \\left[\\text{trace} \\mathcal{A}_p \\phi(x) \\right].\n", "\\end{align}$$\n", ":::\n", "\n", "\n", "This result gives us the rate of change of the KL as $\\epsilon$ increases, for given $\\phi$. Now, we want to pick $\\phi$ such that $-\\mathbb{E}_{x \\sim q} \\left[\\text{trace} \\mathcal{A}_p \\phi(x) \\right]$ is as negative as possible. However, this minimisation is not well defined, because one can scale $\\phi$ by an arbitrary scalar making the expectation unbounded. Further, the minimisation is not analytically or computationally tractable either. This issue can be resolved by considering a constrained version of this optimisation problem instead, using Reproducing Kernel Hilbert Spaces (RKHS).\n", "\n", "Let $k$ be a positive-definite kernel, defining a corresponding RKHS $\\mathcal{H}$ with inner product $\\langle\\cdot, \\cdot \\rangle_{\\mathcal{H}}$. Let also $\\mathcal{H}_D = \\mathcal{H} \\times ... \\times \\mathcal{H}$ be the Hilbert space of $D$-dimensional vector valued functions $f = (f_1, ..., f_D) : f_1, ..., f_D \\in \\mathcal{H}$ with corresponding inner product\n", "\n", "$$\\begin{align}\n", "\\langle f, g \\rangle_{\\mathcal{H}_D} = \\sqrt{\\sum_{d = 1}^D \\langle f_d, g_d \\rangle_{\\mathcal{H}_D}^2}.\n", "\\end{align}$$\n", "\n", "If we now constrain $\\phi \\in \\mathcal{H}_D$ and $|| \\phi ||_{\\mathcal{H}_D} \\leq 1$ we obtain{cite}`liu2016kernelized` the following analytic expression for the direction of steepest descent." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ":::{prf:theorem} Direction of steepest descent\n", "\n", "The function $\\phi^* \\in \\mathcal{H}_D, || \\phi^* ||_{\\mathcal{H}_D} \\leq 1$ which maximises the rate of decrease KL-divergence is\n", " \n", "$$\\begin{align}\n", "\\phi^*(\\cdot) = \\beta / ||\\beta||_{\\mathcal{H}_d} ,~~\\beta(\\cdot) = \\mathbb{E}_{x \\sim q}\\left[ k(x, \\cdot) \\nabla_x \\log p(x) + \\nabla_x k(x, \\cdot)\\right].\n", "\\end{align}$$\n", " \n", ":::\n", "\n", ":::{dropdown} Proof: Direction of steepest descent\n", " \n", "For $f \\in \\mathcal{H}_D$ we have the following equality\n", " \n", "$$\\begin{align}\n", "\\langle f, \\beta \\rangle_{\\mathcal{H}_D} &= \\sum_{d = 1}^D \\langle f_d(\\cdot), \\beta_d \\rangle_{\\mathcal{H}} \\\\\n", " &= \\sum_{d = 1}^D \\left \\langle f_d(\\cdot), \\mathbb{E}_{x \\sim q}\\left[k(x, \\cdot) \\nabla_{x_d} \\log p(x) + \\nabla_{x_d} k(x, \\cdot)\\right] \\right\\rangle_{\\mathcal{H}} \\\\\n", " &= \\sum_{d = 1}^D \\mathbb{E}_{x \\sim q}\\left[\\nabla_{x_d} \\log p(x) \\langle f_d(\\cdot), k(x, \\cdot) \\rangle + \\langle f_d(\\cdot), \\nabla_{x_d} k(x, \\cdot) \\rangle \\right] \\rangle_{\\mathcal{H}} \\\\\n", " &= \\sum_{d = 1}^D \\mathbb{E}_{x \\sim q}\\left[\\nabla_{x_d} \\log p(x) f_d(x) + \\nabla_{x_d} f_d(x) \\right] \\\\\n", " &= \\mathbb{E}_{x \\sim p}\\left[\\mathcal{A}_q f(x)\\right].\n", "\\end{align}$$\n", " \n", "Therefore, the $f \\in \\mathcal{H}_D$ which maximises $\\mathbb{E}_{x \\sim p}\\left[\\mathcal{A}_q f(x)\\right]$ is the one which maximises the inner product $\\langle f, \\beta \\rangle_{\\mathcal{H}_D}$, which occurs when $f$ is proportional to $\\beta$.\n", " \n", ":::\n", "\n", "### Empirical approximation\n", "\n", "Now, if we approximate $q$ by a finite set of $N$ particles at locations $x_n^{(i)}, n = 1, ..., N$, at the $i^{th}$ iteration, we obtain at the following iterative algorithm.\n", "\n", ":::{prf:definition} Stein variational gradient descent\n", "\n", "Given a distribution $p(x)$, a postive definite kernel $k(x, x')$ and a set of particles with initial positions $\\{x_n^{(0)}\\}_{n=1}^N$, Stein variational gradient descent evolves the particles according to\n", " \n", "$$\\begin{align}\n", "x^{(i + 1)}_n = x^{(i)}_n + \\frac{\\epsilon^{(i)}}{N}\\sum_{m = 1}^N \\left[ k(x_n, x_m) \\nabla_x \\log p(x)|_{x_n} + \\nabla_x k(x_m, x) |_{x_n}\\right].\n", "\\end{align}$$\n", ":::" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementation\n", "\n", "The SVGD algorithm is surprisingly easy to implement, while also each step is quite cheap to evaluate.\n", "We will use SVGD to approximate a mixture-of-gaussians distribution, to allow for multiple modes." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "import tensorflow as tf\n", "\n", "def mixture_of_gaussians_logprob(locs, scales, probs):\n", " \n", " def logprob(x):\n", " \n", " # Dimension of x\n", " D = x.shape[-1]\n", " \n", " # Ensure MoG weight probabilities sum to 1\n", " log_probs = tf.math.log(probs[None, :] / tf.reduce_sum(probs))\n", " \n", " # Differences between x and gaussian locations\n", " diff = x[:, None, :] - locs[None, :, :]\n", " \n", " # Compute log of gaussian, including the normalising constant\n", " quad = -0.5 * tf.reduce_sum((diff / scales) ** 2, axis=2)\n", " quad = quad - 0.5 * D * tf.math.log(2 * np.pi * tf.reduce_prod(scales, axis=-1) ** 2)\n", " \n", " # Compute log-probability using the log-sum-exp trick for stability\n", " summands = log_probs + quad\n", " max_summand = tf.reduce_max(summands, axis=1)\n", " \n", " summed = tf.reduce_sum(tf.exp(summands - max_summand[:, None]), axis=1)\n", " summed = max_summand + tf.math.log(summed)\n", " \n", " return summed\n", " \n", " return logprob" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "tags": [ "center-output", "remove-input" ] }, "outputs": [ { "data": { "application/pdf": "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ZSAvdHdvIDcxIC9HIDc3IC9NIDk3IC9hIDEwMCAvZCAvZSAvZiAxMDUgL2kgMTEwCi9uIC9vIDExNCAvciAvcyAvdCAvdSAxMjAgL3ggL3kgXQo+PgovV2lkdGhzIDEzIDAgUiA+PgplbmRvYmoKMTQgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQ1pSQkxSK1NUSVhHZW5lcmFsLVJlZ3VsYXIgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC05NzAgLTQ0MyAyMDAwIDEwMjMgXSAvQXNjZW50IDEwNTUgL0Rlc2NlbnQgLTQ1NSAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTEwOSA+PgplbmRvYmoKMTMgMCBvYmoKWyAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAzMzMgNDA4IDUwMCA1MDAKNzQ3IDc3OCAxODAgMzMzIDMzMyA1MDAgNjg1IDI1MCAzMzMgMjUwIDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwCjUwMCA1MDAgMjc4IDI3OCA2ODUgNjg1IDY4NSA0NDQgOTIxIDcyMiA2NjcgNjY3IDcyMiA2MTEgNTU2IDcyMiA3MjIgMzMzIDM3Mwo3MjIgNjExIDg4OSA3MjIgNzIyIDU1NyA3MjIgNjY3IDU1NiA2MTEgNzIyIDcyMiA5NDQgNzIyIDcyMiA2MTIgMzMzIDI3OCAzMzMKNDY5IDUwMCAzMzMgNDQ0IDUwMCA0NDQgNTAwIDQ0NCAzMzMgNTAwIDUwMCAyNzggMjc4IDUwMCAyNzggNzc4IDUwMCA1MDAgNTAwCjUwMCAzMzMgMzg5IDI3OCA1MDAgNTAwIDcyMiA1MDAgNTAwIDQ0NCA0ODAgMjAwIDQ4MCA1NDEgMjUwIDUwMCAyNTAgMzMzIDQzNAo0NDQgMTAwMCA1MDAgNTAwIDMzMyAxMTA5IDU1NiAzMzMg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MjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDMzMyA0MjAgNTAxIDUwMAo3NTUgNzc4IDIxNCAzMzMgMzMzIDUwMCA2NzUgMjUwIDMzMyAyNTAgMjc4IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAKNTAwIDUwMCAzMzMgMzMzIDY3NSA2NzUgNjc1IDUwMCA5MjAgNjExIDYxMSA2NjcgNzIyIDYxMSA2MTEgNzIyIDcyMiAzMzMgNDQ0CjY2NyA1NTYgODMzIDY2NyA3MjIgNjExIDcyMiA2MTEgNTAwIDU1NiA3MjIgNjExIDgzMyA2MTEgNTU2IDU1NiAzODkgMjc4IDM4OQo0MjIgNTAwIDMzMyA1MDEgNTAwIDQ0NCA1MDAgNDQ0IDI3OCA1MDAgNTAwIDI3OCAyNzggNDQ0IDI3OCA3MjIgNTAwIDUwMCA1MDQKNTAwIDM4OSAzODkgMjc4IDUwMCA0NDQgNjY3IDQ0NCA0NDQgMzg5IDQwMCAyNzUgNDAwIDU0MSAyNTAgNTAwIDI1MCAzMzMgNDcyCjU1NiA4ODkgNTAwIDUwMCAzMzMgMTExNyA1MDAgMzMzIDk0NCAyNTAgNTU2IDI1MCAyNTAgMzMzIDMzMyA1NTYgNTU2IDUyMwo1MDAgODg5IDMzMyA5ODAgMzg5IDMzMyA2NjcgMjUwIDM4OSA1NTYgMjUwIDM4OSA1MDAgNTAwIDUwMCA1MDAgMjc1IDUwMCAzMzMKNzYwIDI3NiA1MDAgNjc1IDMzMyA3NjAgMzMzIDQwMCA2NzUgMzAwIDMwMCAzMzMgNTAwIDU1OSAyNTAgMzMzIDMwMCAzMTAgNTAwCjc1MCA3NTAgNzUwIDUwMCA2MTEgNjExIDYxMSA2MTEgNjExIDYxMSA4ODkgNjY3IDYxMSA2MTEgNjExIDYxMSAzMzMgMzMzIDMzMwozMzMgNzIyIDY2NyA3MjIgNzIyIDcyMiA3MjIgNzIyIDY3NSA3MjIgNzIyIDcyMiA3MjIgNzIyIDU1NiA2MTEgNTAwIDUwMSA1MDEKNTAxIDUwMSA1MDEgNTAxIDY2NyA0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDI3OCAyNzggMjc4IDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwCjUwMCA1MDAgNjc1IDUwMCA1MDAgNTAwIDUwMCA1MDAgNDQ0IDUwMCA0NDQgXQplbmRvYmoKNDAgMCBvYmoKPDwgL3ggNDEgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNSAwIFIgL0YyIDM5IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRjEtU1RJWEdlbmVyYWwtbWludXMgMjQgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iago0MiAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjApCi9DcmVhdGlvbkRhdGUgKEQ6MjAyMzExMzAxODAxMjUrMDEnMDAnKSA+PgplbmRvYmoKeHJlZgowIDQzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDE3NDgwIDAwMDAwIG4gCjAwMDAwMTcyNDYgMDAwMDAgbiAKMDAwMDAxNzI4OSAwMDAwMCBuIAowMDAwMDE3Mzg4IDAwMDAwIG4gCjAwMDAwMTc0MDkgMDAwMDAgbiAKMDAwMDAxNzQzMCAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDMgMDAwMDAgbiAKMDAwMDAwNjY5OCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDY2NzcgMDAwMDAgbiAKMDAwMDAxMzgyNyAwMDAwMCBuIAowMDAwMDEzNjExIDAwMDAwIG4gCjAwMDAwMTMxODQgMDAwMDAgbiAKMDAwMDAxNDg3NCAwMDAwMCBuIAowMDAwMDA2NzE4IDAwMDAwIG4gCjAwMDAwMDcxMTcgMDAwMDAgbiAKMDAwMDAwNzQ0MSAwMDAwMCBuIAowMDAwMDA3OTE2IDAwMDAwIG4gCjAwMDAwMDgzMDQgMDAwMDAgbiAKMDAwMDAwODYyNCAwMDAwMCBuIAowMDAwMDA4OTM1IDAwMDAwIG4gCjAwMDAwMDkyNDQgMDAwMDAgbiAKMDAwMDAwOTQxMyAwMDAwMCBuIAowMDAwMDA5NzcxIDAwMDAwIG4gCjAwMDAwMTAwNjkgMDAwMDAgbiAKMDAwMDAxMDI4OCAwMDAwMCBuIAowMDAwMDEwNjI2IDAwMDAwIG4gCjAwMDAwMTEwNDYgMDAwMDAgbiAKMDAwMDAxMTEzNSAwMDAwMCBuIAowMDAwMDExNDAxIDAwMDAwIG4gCjAwMDAwMTE3MDMgMDAwMDAgbiAKMDAwMDAxMjAzMyAwMDAwMCBuIAowMDAwMDEyNDQxIDAwMDAwIG4gCjAwMDAwMTI4MzIgMDAwMDAgbiAKMDAwMDAxNjE2OSAwMDAwMCBuIAowMDAwMDE1OTUwIDAwMDAwIG4gCjAwMDAwMTU2MjEgMDAwMDAgbiAKMDAwMDAxNzIxNCAwMDAwMCBuIAowMDAwMDE1MDk3IDAwMDAwIG4gCjAwMDAwMTc1NDAgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA0MyAvUm9vdCAxIDAgUiAvSW5mbyA0MiAwIFIgPj4Kc3RhcnR4cmVmCjE3Njk3CiUlRU9GCg==", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-11-30T18:01:25.780390\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.0, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Float dtype to use\n", "dtype = tf.float32\n", "\n", "# Parameters for mixture of gaussians pdf\n", "locs = tf.convert_to_tensor([[-1e0, 0.], [1e0, 0.]], dtype=dtype)\n", "scales = tf.convert_to_tensor([2e-1, 2e-1], dtype=dtype)\n", "probs = tf.convert_to_tensor([5e-1, 5e-1], dtype=dtype)\n", "\n", "# Discretisation grid reslution\n", "grid_res = 100\n", "\n", "# Create log-probabilty lambda\n", "logprob = mixture_of_gaussians_logprob(\n", " locs=locs,\n", " scales=scales,\n", " probs=probs,\n", ")\n", "\n", "# Input locations at which to compute log-probabilities\n", "x_plot = np.linspace(-2.5, 2.5, grid_res)\n", "x_plot = np.stack(np.meshgrid(x_plot, x_plot), axis=-1)\n", "x_plot = tf.convert_to_tensor(np.reshape(x_plot, (-1, 2)), dtype=dtype)\n", "\n", "# Compute log-probabilities\n", "logp = logprob(x_plot)\n", "\n", "# Reshape to 3D and 2D arrays for plotting\n", "x_plot = np.reshape(x_plot, (grid_res, grid_res, 2))\n", "logp = tf.reshape(logp, (grid_res, grid_res))\n", "\n", "# Contourplot levels corresponding to standard deviations\n", "levels = np.max(np.exp(logp)) * np.exp(- np.linspace(4, 0, 5) ** 2)\n", "\n", "# Plot density\n", "plt.figure(figsize=(5, 5))\n", "plt.contourf(\n", " x_plot[:, :, 0],\n", " x_plot[:, :, 1],\n", " np.exp(logp),\n", " cmap=\"coolwarm\",\n", ")\n", "\n", "# Format plot\n", "plt.xticks(np.linspace(-2, 2, 5), fontsize=16)\n", "plt.yticks(np.linspace(-2, 2, 5), fontsize=16)\n", "plt.xlim([-2., 2.])\n", "plt.ylim([-2., 2.])\n", "plt.xlabel('$x_1$', fontsize=20)\n", "plt.ylabel('$x_2$', fontsize=20)\n", "plt.title('Mixture of Gaussians density', fontsize=20)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although SVGD can use any positive-semidefinite kernel, we will focus our attention to the standard EQ kernel\n", "\n", "$$\\begin{align}\n", "k(x, x') = \\exp\\left(-\\frac{1}{2\\ell^2} (x - x')^2\\right),\n", "\\end{align}$$\n", "\n", "implemented by the `eq` function below. The `svgd_grad` computes the SVGD gradients for a set of particles, using Tensorflow's batch jacobians." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def eq(lengthscales):\n", " \n", " def kernel(x, x_):\n", " \n", " diff = x[:, None, :] - x_[None, :, :]\n", " quad = tf.reduce_sum((diff / lengthscales) ** 2, axis=2)\n", " exp = tf.exp(-0.5 * quad)\n", " \n", " return exp\n", " \n", " return kernel\n", "\n", "\n", "@tf.function\n", "def svgd_grad(x, logprob, kernel):\n", " \n", " x_ = tf.convert_to_tensor(x[:], dtype=tf.float32)\n", " x = tf.convert_to_tensor(x, dtype=tf.float32)\n", " \n", " with tf.GradientTape(persistent=True) as tape:\n", " \n", " tape.watch(x)\n", " \n", " logp = logprob(x)\n", " k = kernel(x, x_)\n", " \n", " dlogp = tape.gradient(logp, x)\n", " dk = tape.batch_jacobian(k, x)\n", " \n", " svg = (k @ dlogp + tf.reduce_sum(dk, axis=0)) / x.shape[0]\n", " \n", " return svg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Demo on mixture of Gaussians\n", "\n", "We can now run SVGD using a modest number of particles initialised in between the two modes." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Number of particles to simulate\n", "num_particles = 100\n", "\n", "# Initial positions of particles\n", "x = 2e-1 * np.random.normal(size=(num_particles, 2)).astype(np.float32)\n", "\n", "# Create EQ kernel\n", "eq_scales = tf.convert_to_tensor([2e-1, 2e-1], dtype=dtype)\n", "kernel = eq(eq_scales)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "tags": [ "center-output", "remove-input" ] }, "outputs": [ { "data": { "application/pdf": "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u3ToE4VTvCrV2x0UFNLJ/ZaosyaHQllPfBmO/+xez/cTZIQXcxRKdqMP2azZqO6/XNqp+Rp3y8KZqmB6kO0ahlHy+43RkKaYa6pNDb+6IXJviGH0qzdXljUk5Iw9n6xYuINpKecJalQNWzL1XLKdBv6NyNTXL3oYaJ4KZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0NaUkJMUitTVElYR2VuZXJhbC1SZWd1bGFyIC9GaXJzdENoYXIgMAovTGFzdENoYXIgMjU1IC9Gb250RGVzY3JpcHRvciAxNiAwIFIgL1N1YnR5cGUgL1R5cGUzCi9OYW1lIC9DWlJCTFIrU1RJWEdlbmVyYWwtUmVndWxhciAvRm9udEJCb3ggWyAtOTcwIC00NDMgMjAwMCAxMDIzIF0KL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0NoYXJQcm9jcyAxOCAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgNDggL3plcm8gL29uZSAvdHdvIDczIC9JIDk3IC9hIDEwMSAvZSAxMDUgL2kgMTEwIC9uIC9vIDExNCAvcgoxMTYgL3QgXQo+PgovV2lkdGhzIDE1IDAgUiA+PgplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQ1pSQkxSK1NUSVhHZW5lcmFsLVJlZ3VsYXIgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC05NzAgLTQ0MyAyMDAwIDEwMjMgXSAvQXNjZW50IDEwNTUgL0Rlc2NlbnQgLTQ1NSAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTEwOSA+PgplbmRvYmoKMTUgMCBvYmoKWyAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAzMzMgNDA4IDUwMCA1MDAKNzQ3IDc3OCAxODAgMzMzIDMzMyA1MDAgNjg1IDI1MCAzMzMgMjUwIDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwCjUwMCA1MDAgMjc4IDI3OCA2ODUgNjg1IDY4NSA0NDQgOTIxIDcyMiA2NjcgNjY3IDcyMiA2MTEgNTU2IDcyMiA3MjIgMzMzIDM3Mwo3MjIgNjExIDg4OSA3MjIgNzIyIDU1NyA3MjIgNjY3IDU1NiA2MTEgNzIyIDcyMiA5NDQgNzIyIDcyMiA2MTIgMzMzIDI3OCAzMzMKNDY5IDUwMCAzMzMgNDQ0IDUwMCA0NDQgNTAwIDQ0NCAzMzMgNTAwIDUwMCAyNzggMjc4IDUwMCAyNzggNzc4IDUwMCA1MDAgNTAwCjUwMCAzMzMgMzg5IDI3OCA1MDAgNTAwIDcyMiA1MDAgNTAwIDQ0NCA0ODAgMjAwIDQ4MCA1NDEgMjUwIDUwMCAyNTAgMzMzIDQzNAo0NDQgMTAwMCA1MDAgNTAwIDMzMyAxMTA5IDU1NiAzMzMgODg5IDI1MCA2MTIgMjUwIDI1MCAzMzMgMzMzIDQ0NCA0NDQgNTIzCjUwMCAxMDAwIDMzMyA5ODAgMzg5IDMzMyA3MjIgMjUwIDQ0NCA3MjIgMjUwIDMzMCA1MDAgNTAwIDUwMCA1MDAgMjAwIDUwMAozMzMgNzYwIDI3NiA1MDAgNjAwIDMzMyA3NjAgMzMzIDQwMCA2ODUgMzAwIDMwMCAzMzMgNTAwIDU5MiAyNTAgMzMzIDMwMCAzMTAKNTAwIDc1MCA3NTAgNzUwIDQ0NCA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA4ODkgNjY3IDYxMSA2MTEgNjExIDYxMSAzMzMgMzMzCjMzMyAzMzMgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDY0MCA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA1NTYgNTAwIDQ0NAo0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDY2NyA0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDI3OCAyNzggMjc4IDI3OCA1MDAgNTAwIDUwMCA1MDAKNTAwIDUwMCA1MDAgNTY0IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgXQplbmRvYmoKMTggMCBvYmoKPDwgL0kgMTkgMCBSIC9hIDIwIDAgUiAvZSAyMSAwIFIgL2kgMjIgMCBSIC9uIDI0IDAgUiAvbyAyNSAwIFIgL29uZSAyNiAwIFIKL3IgMjcgMCBSIC9zcGFjZSAyOCAwIFIgL3QgMjkgMCBSIC90d28gMzAgMCBSIC96ZXJvIDMxIDAgUiA+PgplbmRvYmoKMzYgMCBvYmoKPDwgL0xlbmd0aCA0NTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLZNJjiQxCEX3PgUXCMkMns6TpVIvou+/rQfORQSI4fMZHBHS5bEpj3aJWHwqP9osXHwM+d+Mv50tb7PTsZm4bvF9xIMU0j7Np0k43h0FEH2W/LQgtiwGtOc3KhIPFcL8FtW4skd5lvhJj19E8nzt9LiiaeX5BFmvxNNXaX7gtfrlt2ZyW2gb1jPlQGpJPHE179lLiE3nSwalZd+Tjy6NmqYnc7oLKW/LpEFNrKS6J93CLMXH9e4uu8wQ2LO6SWJ7Cf2l+cjJZk20Q/oEshxnopHA4JVK0VVUrQY6KwYGoAw6hrEhgshKZUZPLslrpwbmU0syRlgWmnroC37VayYCkcOgS/aDAzPVlQG+TVkhprfB1I7QEiATnagBeLK8wP6ttEo+5XvgkbbHVFZdml7hWlYOJflyPwkyZeTOMp0V0AZ1Vv4+TUcVHemgYMWRM3qS42LoKjIOzlHjJU4BPBmozNGYH93kcXj1lUBkaS2KyQ+tTRAdYLEPJS5PUi2+p5mAZWEDuZO8npNV593i22aG5mtZYNyKbCcPV+d9XUrcfRzW73OxPH8GbzkGyyUagw7NdeTRwP37HD/tX/v9AwICr4EKZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0ZUWFdaQStTVElYR2VuZXJhbC1JdGFsaWMgL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUgL0ZvbnREZXNjcmlwdG9yIDMzIDAgUiAvU3VidHlwZSAvVHlwZTMKL05hbWUgL0ZUWFdaQStTVElYR2VuZXJhbC1JdGFsaWMgL0ZvbnRCQm94IFsgLTk3MCAtMzA1IDE0MjkgMTAyMyBdCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9DaGFyUHJvY3MgMzUgMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcgL0RpZmZlcmVuY2VzIFsgMTIwIC94IF0gPj4gL1dpZHRocyAzMiAwIFIgPj4KZW5kb2JqCjMzIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0ZUWFdaQStTVElYR2VuZXJhbC1JdGFsaWMgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC05NzAgLTMwNSAxNDI5IDEwMjMgXSAvQXNjZW50IDEwNTUgL0Rlc2NlbnQgLTQ1NSAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgNDM5MDkgL1N0ZW1WIDAgL01heFdpZHRoIDExMTcgPj4KZW5kb2JqCjMyIDAgb2JqClsgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMzMzIDQyMCA1MDEgNTAwCjc1NSA3NzggMjE0IDMzMyAzMzMgNTAwIDY3NSAyNTAgMzMzIDI1MCAyNzggNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMAo1MDAgNTAwIDMzMyAzMzMgNjc1IDY3NSA2NzUgNTAwIDkyMCA2MTEgNjExIDY2NyA3MjIgNjExIDYxMSA3MjIgNzIyIDMzMyA0NDQKNjY3IDU1NiA4MzMgNjY3IDcyMiA2MTEgNzIyIDYxMSA1MDAgNTU2IDcyMiA2MTEgODMzIDYxMSA1NTYgNTU2IDM4OSAyNzggMzg5CjQyMiA1MDAgMzMzIDUwMSA1MDAgNDQ0IDUwMCA0NDQgMjc4IDUwMCA1MDAgMjc4IDI3OCA0NDQgMjc4IDcyMiA1MDAgNTAwIDUwNAo1MDAgMzg5IDM4OSAyNzggNTAwIDQ0NCA2NjcgNDQ0IDQ0NCAzODkgNDAwIDI3NSA0MDAgNTQxIDI1MCA1MDAgMjUwIDMzMyA0NzIKNTU2IDg4OSA1MDAgNTAwIDMzMyAxMTE3IDUwMCAzMzMgOTQ0IDI1MCA1NTYgMjUwIDI1MCAzMzMgMzMzIDU1NiA1NTYgNTIzCjUwMCA4ODkgMzMzIDk4MCAzODkgMzMzIDY2NyAyNTAgMzg5IDU1NiAyNTAgMzg5IDUwMCA1MDAgNTAwIDUwMCAyNzUgNTAwIDMzMwo3NjAgMjc2IDUwMCA2NzUgMzMzIDc2MCAzMzMgNDAwIDY3NSAzMDAgMzAwIDMzMyA1MDAgNTU5IDI1MCAzMzMgMzAwIDMxMCA1MDAKNzUwIDc1MCA3NTAgNTAwIDYxMSA2MTEgNjExIDYxMSA2MTEgNjExIDg4OSA2NjcgNjExIDYxMSA2MTEgNjExIDMzMyAzMzMgMzMzCjMzMyA3MjIgNjY3IDcyMiA3MjIgNzIyIDcyMiA3MjIgNjc1IDcyMiA3MjIgNzIyIDcyMiA3MjIgNTU2IDYxMSA1MDAgNTAxIDUwMQo1MDEgNTAxIDUwMSA1MDEgNjY3IDQ0NCA0NDQgNDQ0IDQ0NCA0NDQgMjc4IDI3OCAyNzggMjc4IDUwMCA1MDAgNTAwIDUwMCA1MDAKNTAwIDUwMCA2NzUgNTAwIDUwMCA1MDAgNTAwIDUwMCA0NDQgNTAwIDQ0NCBdCmVuZG9iagozNSAwIG9iago8PCAveCAzNiAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE3IDAgUiAvRjIgMzQgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9NMCAxMyAwIFIgL00xIDE0IDAgUiAvRjEtU1RJWEdlbmVyYWwtbWludXMgMjMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybQovQkJveCBbIC02LjU4MTEzODgzMDEgLTYuNTgxMTM4ODMwMSA2LjU4MTEzODgzMDEgNi41ODExMzg4MzAxIF0gL0xlbmd0aCAxMzkKL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicbZAxDsMwDAN3vcIfoGHaMuCsHfuNLEGB/n9N0iaqCnkxBEo+SmR6SUlPOR4w90G2Jb2lZOXSanNiyaOy13FKSu2amMlRmp7KVa1yN2HzRoBRf9DPD3Ow9pfhEBffGbnmPR3pVq4ycUdgYOaEsA/izvi7CZOjEaPBNELEqDH1gTtvE3nIDsrUVxAKZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybQovQkJveCBbIC02LjU4MTEzODgzMDEgLTYuNTgxMTM4ODMwMSA2LjU4MTEzODgzMDEgNi41ODExMzg4MzAxIF0gL0xlbmd0aCAxMzkKL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicbZAxDsMwDAN3vcIfoGHaMuCsHfuNLEGB/n9N0iaqCnkxBEo+SmR6SUlPOR4w90G2Jb2lZOXSanNiyaOy13FKSu2amMlRmp7KVa1yN2HzRoBRf9DPD3Ow9pfhEBffGbnmPR3pVq4ycUdgYOaEsA/izvi7CZOjEaPBNELEqDH1gTtvE3nIDsrUVxAKZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iagozNyAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjApCi9DcmVhdGlvbkRhdGUgKEQ6MjAyMzExMzAxODAwMDIrMDEnMDAnKSA+PgplbmRvYmoKeHJlZgowIDM4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDI0Nzc2IDAwMDAwIG4gCjAwMDAwMjM5MDggMDAwMDAgbiAKMDAwMDAyMzk1MSAwMDAwMCBuIAowMDAwMDI0MDUwIDAwMDAwIG4gCjAwMDAwMjQwNzEgMDAwMDAgbiAKMDAwMDAyNDA5MiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDMgMDAwMDAgbiAKMDAwMDAxNjE5MCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMTYxNjggMDAwMDAgbiAKMDAwMDAyNDE2NCAwMDAwMCBuIAowMDAwMDI0NDcwIDAwMDAwIG4gCjAwMDAwMjA1NTkgMDAwMDAgbiAKMDAwMDAyMDM0MyAwMDAwMCBuIAowMDAwMDE5OTQwIDAwMDAwIG4gCjAwMDAwMjE2MDYgMDAwMDAgbiAKMDAwMDAxNjIxMCAwMDAwMCBuIAowMDAwMDE2NDQ1IDAwMDAwIG4gCjAwMDAwMTY5MjAgMDAwMDAgbiAKMDAwMDAxNzI0MCAwMDAwMCBuIAowMDAwMDE3NTQ5IDAwMDAwIG4gCjAwMDAwMTc3MTggMDAwMDAgbiAKMDAwMDAxODA3NiAwMDAwMCBuIAowMDAwMDE4Mzc0IDAwMDAwIG4gCjAwMDAwMTg1OTMgMDAwMDAgbiAKMDAwMDAxODkzMSAwMDAwMCBuIAowMDAwMDE5MDIwIDAwMDAwIG4gCjAwMDAwMTkyODYgMDAwMDAgbiAKMDAwMDAxOTU4OCAwMDAwMCBuIAowMDAwMDIyODMxIDAwMDAwIG4gCjAwMDAwMjI2MTIgMDAwMDAgbiAKMDAwMDAyMjI4MyAwMDAwMCBuIAowMDAwMDIzODc2IDAwMDAwIG4gCjAwMDAwMjE3NTkgMDAwMDAgbiAKMDAwMDAyNDgzNiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDM4IC9Sb290IDEgMCBSIC9JbmZvIDM3IDAgUiA+PgpzdGFydHhyZWYKMjQ5OTMKJSVFT0YK", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-11-30T18:00:02.697723\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.0, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step size and number of gradient descent steps\n", "stepsize = 1e-1\n", "num_steps = 100\n", "\n", "plt.figure(figsize=(8, 4))\n", "\n", "for i in range(num_steps + 1):\n", " \n", " # Plot 0th iteration and last iteration\n", " if i in [0, num_steps]:\n", " \n", " # Choose appropriate subplot\n", " plt.subplot(1, 2, (i > 0) + 1)\n", " \n", " # Plot particles and probabilities\n", " plt.scatter(x[:, 0], x[:, 1], zorder=2, c='k', s=10)\n", " plt.contourf(\n", " x_plot[:, :, 0],\n", " x_plot[:, :, 1],\n", " np.exp(logp),\n", " cmap=\"coolwarm\",\n", " )\n", " \n", " plt.xlim([-2., 2.])\n", " plt.ylim([-2., 2.])\n", " \n", " plt.xticks(fontsize=16)\n", " plt.yticks(np.linspace(-2., 2., 5), fontsize=16)\n", " plt.xlabel('$x_1$', fontsize=20)\n", " \n", " if i > 0:\n", " plt.yticks([])\n", " \n", " else:\n", " plt.ylabel('$x_2$', fontsize=20)\n", " \n", " plt.title(f'Iteration {i}', fontsize=22)\n", " \n", " # Compute Stein variational gradient\n", " svg = svgd_grad(x, logprob=logprob, kernel=kernel)\n", " \n", " # Adapt particle locations using the SVG\n", " x = x + stepsize * svg.numpy()\n", " \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that some of the particles fall into each of the two modes, capturing the bimodality of the target, something which VI with a mean-field Gaussian $q$ cannot do.\n", "\n", "### Failure mode on mixture of Gaussians\n", "\n", "However, SVGD also has failure modes, as illustrated below.\n", "If we initialise the particles on one mode of two well-separated Gaussians, then the optimisation gets stuck at a local optimum which fails to capture one of the two modes of the mixture of Gaussians.\n", "Even though SVGD may be able to express more expressive approximate distributions than mean-field VI, it is not guaranteed that the optimisation will be able to find such a distribution." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Parameters for mixture of gaussians pdf\n", "locs = tf.convert_to_tensor([[-1e0, 0.], [1e0, 0.]], dtype=dtype)\n", "scales = tf.convert_to_tensor([2e-1, 2e-1], dtype=dtype)\n", "probs = tf.convert_to_tensor([0.5, 0.5], dtype=dtype)\n", "\n", "# Number of particles to simulate\n", "num_particles = 100\n", "\n", "# Initial positions of particles\n", "x = 2e-1 * np.random.normal(size=(num_particles, 2)).astype(np.float32) \n", "x = x - np.array([[-1e0, 0]]).astype(np.float32)\n", "\n", "# Create EQ kernel\n", "eq_scales = tf.convert_to_tensor([2e-1, 2e-1], dtype=dtype)\n", "kernel = eq(eq_scales)\n", "\n", "# Create log-probabilty lambda\n", "logprob = mixture_of_gaussians_logprob(\n", " locs=locs,\n", " scales=scales,\n", " probs=probs,\n", ")" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "tags": [ "center-output", "remove-input" ] }, "outputs": [ { "data": { "application/pdf": "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Xs/3E2SEF3MUSnajD9ms2ajuv1zaqfkad8vCmapgepDtGoZR8vuN0ZCmmGuqTQ2/uiFyb4hh9Ks3V5Y1JOSMPZ+sWLiDaSnnCWpUDVsy9VyynQb+jcjU1y96GGieCmVuZHN0cmVhbQplbmRvYmoKMTcgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9DWlJCTFIrU1RJWEdlbmVyYWwtUmVndWxhciAvRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDI1NSAvRm9udERlc2NyaXB0b3IgMTYgMCBSIC9TdWJ0eXBlIC9UeXBlMwovTmFtZSAvQ1pSQkxSK1NUSVhHZW5lcmFsLVJlZ3VsYXIgL0ZvbnRCQm94IFsgLTk3MCAtNDQzIDIwMDAgMTAyMyBdCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9DaGFyUHJvY3MgMTggMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMzIgL3NwYWNlIDQ4IC96ZXJvIC9vbmUgL3R3byA3MyAvSSA5NyAvYSAxMDEgL2UgMTA1IC9pIDExMCAvbiAvbyAxMTQgL3IKMTE2IC90IF0KPj4KL1dpZHRocyAxNSAwIFIgPj4KZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0NaUkJMUitTVElYR2VuZXJhbC1SZWd1bGFyIC9GbGFncyAzMgovRm9udEJCb3ggWyAtOTcwIC00NDMgMjAwMCAxMDIzIF0gL0FzY2VudCAxMDU1IC9EZXNjZW50IC00NTUgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDExMDkgPj4KZW5kb2JqCjE1IDAgb2JqClsgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMzMzIDQwOCA1MDAgNTAwCjc0NyA3NzggMTgwIDMzMyAzMzMgNTAwIDY4NSAyNTAgMzMzIDI1MCAyNzggNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMAo1MDAgNTAwIDI3OCAyNzggNjg1IDY4NSA2ODUgNDQ0IDkyMSA3MjIgNjY3IDY2NyA3MjIgNjExIDU1NiA3MjIgNzIyIDMzMyAzNzMKNzIyIDYxMSA4ODkgNzIyIDcyMiA1NTcgNzIyIDY2NyA1NTYgNjExIDcyMiA3MjIgOTQ0IDcyMiA3MjIgNjEyIDMzMyAyNzggMzMzCjQ2OSA1MDAgMzMzIDQ0NCA1MDAgNDQ0IDUwMCA0NDQgMzMzIDUwMCA1MDAgMjc4IDI3OCA1MDAgMjc4IDc3OCA1MDAgNTAwIDUwMAo1MDAgMzMzIDM4OSAyNzggNTAwIDUwMCA3MjIgNTAwIDUwMCA0NDQgNDgwIDIwMCA0ODAgNTQxIDI1MCA1MDAgMjUwIDMzMyA0MzQKNDQ0IDEwMDAgNTAwIDUwMCAzMzMgMTEwOSA1NTYgMzMzIDg4OSAyNTAgNjEyIDI1MCAyNTAgMzMzIDMzMyA0NDQgNDQ0IDUyMwo1MDAgMTAwMCAzMzMgOTgwIDM4OSAzMzMgNzIyIDI1MCA0NDQgNzIyIDI1MCAzMzAgNTAwIDUwMCA1MDAgNTAwIDIwMCA1MDAKMzMzIDc2MCAyNzYgNTAwIDYwMCAzMzMgNzYwIDMzMyA0MDAgNjg1IDMwMCAzMDAgMzMzIDUwMCA1OTIgMjUwIDMzMyAzMDAgMzEwCjUwMCA3NTAgNzUwIDc1MCA0NDQgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgODg5IDY2NyA2MTEgNjExIDYxMSA2MTEgMzMzIDMzMwozMzMgMzMzIDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA2NDAgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgNTU2IDUwMCA0NDQKNDQ0IDQ0NCA0NDQgNDQ0IDQ0NCA2NjcgNDQ0IDQ0NCA0NDQgNDQ0IDQ0NCAyNzggMjc4IDI3OCAyNzggNTAwIDUwMCA1MDAgNTAwCjUwMCA1MDAgNTAwIDU2NCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIF0KZW5kb2JqCjE4IDAgb2JqCjw8IC9JIDE5IDAgUiAvYSAyMCAwIFIgL2UgMjEgMCBSIC9pIDIyIDAgUiAvbiAyNCAwIFIgL28gMjUgMCBSIC9vbmUgMjYgMCBSCi9yIDI3IDAgUiAvc3BhY2UgMjggMCBSIC90IDI5IDAgUiAvdHdvIDMwIDAgUiAvemVybyAzMSAwIFIgPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9MZW5ndGggNDUxIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nC2TSY4kMQhF9z4FFwjJDJ7Ok6VSL6Lvv60HzkUEiOHzGRwR0uWxKY92iVh8Kj/aLFx8DPnfjL+dLW+z07GZuG7xfcSDFNI+zadJON4dBRB9lvy0ILYsBrTnNyoSDxXC/BbVuLJHeZb4SY9fRPJ87fS4omnl+QRZr8TTV2l+4LX65bdmcltoG9Yz5UBqSTxxNe/ZS4hN50sGpWXfk48ujZqmJ3O6Cylvy6RBTaykuifdwizFx/XuLrvMENizukliewn9pfnIyWZNtEP6BLIcZ6KRwOCVStFVVK0GOisGBqAMOoaxIYLISmVGTy7Ja6cG5lNLMkZYFpp66At+1WsmApHDoEv2gwMz1ZUBvk1ZIaa3wdSO0BIgE52oAXiyvMD+rbRKPuV74JG2x1RWXZpe4VpWDiX5cj8JMmXkzjKdFdAGdVb+Pk1HFR3poGDFkTN6kuNi6CoyDs5R4yVOATwZqMzRmB/d5HF49ZVAZGktiskPrU0QHWCxDyUuT1ItvqeZgGVhA7mTvJ6TVefd4ttmhuZrWWDcimwnD1fnfV1K3H0c1u9zsTx/Bm85BsslGoMOzXXk0cD9+xw/7V/7/QMCAq+BCmVuZHN0cmVhbQplbmRvYmoKMzQgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9GVFhXWkErU1RJWEdlbmVyYWwtSXRhbGljIC9GaXJzdENoYXIgMAovTGFzdENoYXIgMjU1IC9Gb250RGVzY3JpcHRvciAzMyAwIFIgL1N1YnR5cGUgL1R5cGUzCi9OYW1lIC9GVFhXWkErU1RJWEdlbmVyYWwtSXRhbGljIC9Gb250QkJveCBbIC05NzAgLTMwNSAxNDI5IDEwMjMgXQovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvQ2hhclByb2NzIDM1IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nIC9EaWZmZXJlbmNlcyBbIDEyMCAveCBdID4+IC9XaWR0aHMgMzIgMCBSID4+CmVuZG9iagozMyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9GVFhXWkErU1RJWEdlbmVyYWwtSXRhbGljIC9GbGFncyA5NgovRm9udEJCb3ggWyAtOTcwIC0zMDUgMTQyOSAxMDIzIF0gL0FzY2VudCAxMDU1IC9EZXNjZW50IC00NTUgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDQzOTA5IC9TdGVtViAwIC9NYXhXaWR0aCAxMTE3ID4+CmVuZG9iagozMiAwIG9iagpbIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDMzMyA0MjAgNTAxIDUwMAo3NTUgNzc4IDIxNCAzMzMgMzMzIDUwMCA2NzUgMjUwIDMzMyAyNTAgMjc4IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAKNTAwIDUwMCAzMzMgMzMzIDY3NSA2NzUgNjc1IDUwMCA5MjAgNjExIDYxMSA2NjcgNzIyIDYxMSA2MTEgNzIyIDcyMiAzMzMgNDQ0CjY2NyA1NTYgODMzIDY2NyA3MjIgNjExIDcyMiA2MTEgNTAwIDU1NiA3MjIgNjExIDgzMyA2MTEgNTU2IDU1NiAzODkgMjc4IDM4OQo0MjIgNTAwIDMzMyA1MDEgNTAwIDQ0NCA1MDAgNDQ0IDI3OCA1MDAgNTAwIDI3OCAyNzggNDQ0IDI3OCA3MjIgNTAwIDUwMCA1MDQKNTAwIDM4OSAzODkgMjc4IDUwMCA0NDQgNjY3IDQ0NCA0NDQgMzg5IDQwMCAyNzUgNDAwIDU0MSAyNTAgNTAwIDI1MCAzMzMgNDcyCjU1NiA4ODkgNTAwIDUwMCAzMzMgMTExNyA1MDAgMzMzIDk0NCAyNTAgNTU2IDI1MCAyNTAgMzMzIDMzMyA1NTYgNTU2IDUyMwo1MDAgODg5IDMzMyA5ODAgMzg5IDMzMyA2NjcgMjUwIDM4OSA1NTYgMjUwIDM4OSA1MDAgNTAwIDUwMCA1MDAgMjc1IDUwMCAzMzMKNzYwIDI3NiA1MDAgNjc1IDMzMyA3NjAgMzMzIDQwMCA2NzUgMzAwIDMwMCAzMzMgNTAwIDU1OSAyNTAgMzMzIDMwMCAzMTAgNTAwCjc1MCA3NTAgNzUwIDUwMCA2MTEgNjExIDYxMSA2MTEgNjExIDYxMSA4ODkgNjY3IDYxMSA2MTEgNjExIDYxMSAzMzMgMzMzIDMzMwozMzMgNzIyIDY2NyA3MjIgNzIyIDcyMiA3MjIgNzIyIDY3NSA3MjIgNzIyIDcyMiA3MjIgNzIyIDU1NiA2MTEgNTAwIDUwMSA1MDEKNTAxIDUwMSA1MDEgNTAxIDY2NyA0NDQgNDQ0IDQ0NCA0NDQgNDQ0IDI3OCAyNzggMjc4IDI3OCA1MDAgNTAwIDUwMCA1MDAgNTAwCjUwMCA1MDAgNjc1IDUwMCA1MDAgNTAwIDUwMCA1MDAgNDQ0IDUwMCA0NDQgXQplbmRvYmoKMzUgMCBvYmoKPDwgL3ggMzYgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNyAwIFIgL0YyIDM0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvTTAgMTMgMCBSIC9NMSAxNCAwIFIgL0YxLVNUSVhHZW5lcmFsLW1pbnVzIDIzIDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0KL0JCb3ggWyAtNi41ODExMzg4MzAxIC02LjU4MTEzODgzMDEgNi41ODExMzg4MzAxIDYuNTgxMTM4ODMwMSBdIC9MZW5ndGggMTM5Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nG2QMQ7DMAwDd73CH6Bh2jLgrB37jSxBgf5/TdImqgp5MQRKPkpkeklJTzkeMPdBtiW9pWTl0mpzYsmjstdxSkrtmpjJUZqeylWtcjdh80aAUX/Qzw9zsPaX4RAX3xm55j0d6VauMnFHYGDmhLAP4s74uwmToxGjwTRCxKgx9YE7bxN5yA7K1FcQCmVuZHN0cmVhbQplbmRvYmoKMTQgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0KL0JCb3ggWyAtNi41ODExMzg4MzAxIC02LjU4MTEzODgzMDEgNi41ODExMzg4MzAxIDYuNTgxMTM4ODMwMSBdIC9MZW5ndGggMTM5Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nG2QMQ7DMAwDd73CH6Bh2jLgrB37jSxBgf5/TdImqgp5MQRKPkpkeklJTzkeMPdBtiW9pWTl0mpzYsmjstdxSkrtmpjJUZqeylWtcjdh80aAUX/Qzw9zsPaX4RAX3xm55j0d6VauMnFHYGDmhLAP4s74uwmToxGjwTRCxKgx9YE7bxN5yA7K1FcQCmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZXMgL0tpZHMgWyAxMSAwIFIgXSAvQ291bnQgMSA+PgplbmRvYmoKMzcgMCBvYmoKPDwgL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuOC4wLCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuOC4wKQovQ3JlYXRpb25EYXRlIChEOjIwMjMxMTMwMTgwMDA1KzAxJzAwJykgPj4KZW5kb2JqCnhyZWYKMCAzOAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAyNDc0NyAwMDAwMCBuIAowMDAwMDIzODc5IDAwMDAwIG4gCjAwMDAwMjM5MjIgMDAwMDAgbiAKMDAwMDAyNDAyMSAwMDAwMCBuIAowMDAwMDI0MDQyIDAwMDAwIG4gCjAwMDAwMjQwNjMgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzQzIDAwMDAwIG4gCjAwMDAwMTYxNjEgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDE2MTM5IDAwMDAwIG4gCjAwMDAwMjQxMzUgMDAwMDAgbiAKMDAwMDAyNDQ0MSAwMDAwMCBuIAowMDAwMDIwNTMwIDAwMDAwIG4gCjAwMDAwMjAzMTQgMDAwMDAgbiAKMDAwMDAxOTkxMSAwMDAwMCBuIAowMDAwMDIxNTc3IDAwMDAwIG4gCjAwMDAwMTYxODEgMDAwMDAgbiAKMDAwMDAxNjQxNiAwMDAwMCBuIAowMDAwMDE2ODkxIDAwMDAwIG4gCjAwMDAwMTcyMTEgMDAwMDAgbiAKMDAwMDAxNzUyMCAwMDAwMCBuIAowMDAwMDE3Njg5IDAwMDAwIG4gCjAwMDAwMTgwNDcgMDAwMDAgbiAKMDAwMDAxODM0NSAwMDAwMCBuIAowMDAwMDE4NTY0IDAwMDAwIG4gCjAwMDAwMTg5MDIgMDAwMDAgbiAKMDAwMDAxODk5MSAwMDAwMCBuIAowMDAwMDE5MjU3IDAwMDAwIG4gCjAwMDAwMTk1NTkgMDAwMDAgbiAKMDAwMDAyMjgwMiAwMDAwMCBuIAowMDAwMDIyNTgzIDAwMDAwIG4gCjAwMDAwMjIyNTQgMDAwMDAgbiAKMDAwMDAyMzg0NyAwMDAwMCBuIAowMDAwMDIxNzMwIDAwMDAwIG4gCjAwMDAwMjQ4MDcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAzOCAvUm9vdCAxIDAgUiAvSW5mbyAzNyAwIFIgPj4Kc3RhcnR4cmVmCjI0OTY0CiUlRU9GCg==", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2023-11-30T18:00:05.647224\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.0, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Step size and number of gradient descent steps\n", "stepsize = 1e-1\n", "num_steps = 100\n", "\n", "plt.figure(figsize=(8, 4))\n", "\n", "for i in range(num_steps + 1):\n", " \n", " # Plot 0th iteration and last iteration\n", " if i in [0, num_steps]:\n", " \n", " # Choose appropriate subplot\n", " plt.subplot(1, 2, (i > 0) + 1)\n", " \n", " # Plot particles and probabilities\n", " plt.scatter(x[:, 0], x[:, 1], zorder=2, c='k', s=10)\n", " plt.contourf(\n", " x_plot[:, :, 0],\n", " x_plot[:, :, 1],\n", " np.exp(logp),\n", " cmap=\"coolwarm\",\n", " )\n", " \n", " plt.xlim([-2., 2.])\n", " plt.ylim([-2., 2.])\n", " \n", " plt.xticks(fontsize=16)\n", " plt.yticks(np.linspace(-2., 2., 5), fontsize=16)\n", " plt.xlabel('$x_1$', fontsize=20)\n", " \n", " if i > 0:\n", " plt.yticks([])\n", " \n", " else:\n", " plt.ylabel('$x_2$', fontsize=20)\n", " \n", " plt.title(f'Iteration {i}', fontsize=22)\n", " \n", " # Compute Stein variational gradient\n", " svg = svgd_grad(x, logprob=logprob, kernel=kernel)\n", " \n", " # Adapt particle locations using the SVG\n", " x = x + stepsize * svg.numpy()\n", " \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "This section presented SVGD, a very interesting general-purpose algorithm for approximate inference.\n", "SVGD works by simulating a set of particles, regarded as an empirical approximation of a distribution $q$ which itself approximates the target distribution $p$.\n", "By evolving $q$ according to a sequence of transformations, each of which is determined as the direction of steepest decrease in the KL between $q$ and $p$, SVGD can produce a flexible approximation to the target $p$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "```{bibliography}\n", ":filter: docname in docnames\n", "```" ] } ], "metadata": { "kernelspec": { "display_name": "venv-rw", "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.10.14" } }, "nbformat": 4, "nbformat_minor": 4 }