{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# meta-data does not work yet in VScode\n", "# https://github.com/microsoft/vscode-jupyter/issues/1121\n", "\n", "{\n", " \"tags\": [\n", " \"hide-cell\"\n", " ]\n", "}\n", "\n", "\n", "### Install necessary libraries\n", "\n", "try:\n", " import jax\n", "except:\n", " # For cuda version, see https://github.com/google/jax#installation\n", " %pip install --upgrade \"jax[cpu]\" \n", " import jax\n", "\n", "try:\n", " import distrax\n", "except:\n", " %pip install --upgrade distrax\n", " import distrax\n", "\n", "try:\n", " import jsl\n", "except:\n", " %pip install git+https://github.com/probml/jsl\n", " import jsl\n", "\n", "try:\n", " import rich\n", "except:\n", " %pip install rich\n", " import rich\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "{\n", " \"tags\": [\n", " \"hide-cell\"\n", " ]\n", "}\n", "\n", "\n", "### Import standard libraries\n", "\n", "import abc\n", "from dataclasses import dataclass\n", "import functools\n", "import itertools\n", "\n", "from typing import Any, Callable, NamedTuple, Optional, Union, Tuple\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "\n", "import jax\n", "import jax.numpy as jnp\n", "from jax import lax, vmap, jit, grad\n", "from jax.scipy.special import logit\n", "from jax.nn import softmax\n", "from functools import partial\n", "from jax.random import PRNGKey, split\n", "\n", "import inspect\n", "import inspect as py_inspect\n", "import rich\n", "from rich import inspect as r_inspect\n", "from rich import print as r_print\n", "\n", "def print_source(fname):\n", " r_print(py_inspect.getsource(fname))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```{math}\n", "\n", "\\newcommand\\floor[1]{\\lfloor#1\\rfloor}\n", "\n", "\\newcommand{\\real}{\\mathbb{R}}\n", "\n", "% Numbers\n", "\\newcommand{\\vzero}{\\boldsymbol{0}}\n", "\\newcommand{\\vone}{\\boldsymbol{1}}\n", "\n", "% Greek https://www.latex-tutorial.com/symbols/greek-alphabet/\n", "\\newcommand{\\valpha}{\\boldsymbol{\\alpha}}\n", "\\newcommand{\\vbeta}{\\boldsymbol{\\beta}}\n", "\\newcommand{\\vchi}{\\boldsymbol{\\chi}}\n", "\\newcommand{\\vdelta}{\\boldsymbol{\\delta}}\n", "\\newcommand{\\vDelta}{\\boldsymbol{\\Delta}}\n", "\\newcommand{\\vepsilon}{\\boldsymbol{\\epsilon}}\n", "\\newcommand{\\vzeta}{\\boldsymbol{\\zeta}}\n", "\\newcommand{\\vXi}{\\boldsymbol{\\Xi}}\n", "\\newcommand{\\vell}{\\boldsymbol{\\ell}}\n", "\\newcommand{\\veta}{\\boldsymbol{\\eta}}\n", "%\\newcommand{\\vEta}{\\boldsymbol{\\Eta}}\n", "\\newcommand{\\vgamma}{\\boldsymbol{\\gamma}}\n", "\\newcommand{\\vGamma}{\\boldsymbol{\\Gamma}}\n", "\\newcommand{\\vmu}{\\boldsymbol{\\mu}}\n", "\\newcommand{\\vmut}{\\boldsymbol{\\tilde{\\mu}}}\n", "\\newcommand{\\vnu}{\\boldsymbol{\\nu}}\n", "\\newcommand{\\vkappa}{\\boldsymbol{\\kappa}}\n", "\\newcommand{\\vlambda}{\\boldsymbol{\\lambda}}\n", "\\newcommand{\\vLambda}{\\boldsymbol{\\Lambda}}\n", "\\newcommand{\\vLambdaBar}{\\overline{\\vLambda}}\n", "%\\newcommand{\\vnu}{\\boldsymbol{\\nu}}\n", "\\newcommand{\\vomega}{\\boldsymbol{\\omega}}\n", "\\newcommand{\\vOmega}{\\boldsymbol{\\Omega}}\n", "\\newcommand{\\vphi}{\\boldsymbol{\\phi}}\n", "\\newcommand{\\vvarphi}{\\boldsymbol{\\varphi}}\n", "\\newcommand{\\vPhi}{\\boldsymbol{\\Phi}}\n", "\\newcommand{\\vpi}{\\boldsymbol{\\pi}}\n", "\\newcommand{\\vPi}{\\boldsymbol{\\Pi}}\n", "\\newcommand{\\vpsi}{\\boldsymbol{\\psi}}\n", "\\newcommand{\\vPsi}{\\boldsymbol{\\Psi}}\n", "\\newcommand{\\vrho}{\\boldsymbol{\\rho}}\n", "\\newcommand{\\vtheta}{\\boldsymbol{\\theta}}\n", "\\newcommand{\\vthetat}{\\boldsymbol{\\tilde{\\theta}}}\n", "\\newcommand{\\vTheta}{\\boldsymbol{\\Theta}}\n", "\\newcommand{\\vsigma}{\\boldsymbol{\\sigma}}\n", "\\newcommand{\\vSigma}{\\boldsymbol{\\Sigma}}\n", "\\newcommand{\\vSigmat}{\\boldsymbol{\\tilde{\\Sigma}}}\n", "\\newcommand{\\vsigmoid}{\\vsigma}\n", "\\newcommand{\\vtau}{\\boldsymbol{\\tau}}\n", "\\newcommand{\\vxi}{\\boldsymbol{\\xi}}\n", "\n", "\n", "% Lower Roman (Vectors)\n", "\\newcommand{\\va}{\\mathbf{a}}\n", "\\newcommand{\\vb}{\\mathbf{b}}\n", "\\newcommand{\\vBt}{\\mathbf{\\tilde{B}}}\n", "\\newcommand{\\vc}{\\mathbf{c}}\n", "\\newcommand{\\vct}{\\mathbf{\\tilde{c}}}\n", "\\newcommand{\\vd}{\\mathbf{d}}\n", "\\newcommand{\\ve}{\\mathbf{e}}\n", "\\newcommand{\\vf}{\\mathbf{f}}\n", "\\newcommand{\\vg}{\\mathbf{g}}\n", "\\newcommand{\\vh}{\\mathbf{h}}\n", "%\\newcommand{\\myvh}{\\mathbf{h}}\n", "\\newcommand{\\vi}{\\mathbf{i}}\n", "\\newcommand{\\vj}{\\mathbf{j}}\n", "\\newcommand{\\vk}{\\mathbf{k}}\n", "\\newcommand{\\vl}{\\mathbf{l}}\n", "\\newcommand{\\vm}{\\mathbf{m}}\n", "\\newcommand{\\vn}{\\mathbf{n}}\n", "\\newcommand{\\vo}{\\mathbf{o}}\n", "\\newcommand{\\vp}{\\mathbf{p}}\n", "\\newcommand{\\vq}{\\mathbf{q}}\n", "\\newcommand{\\vr}{\\mathbf{r}}\n", "\\newcommand{\\vs}{\\mathbf{s}}\n", "\\newcommand{\\vt}{\\mathbf{t}}\n", "\\newcommand{\\vu}{\\mathbf{u}}\n", "\\newcommand{\\vv}{\\mathbf{v}}\n", "\\newcommand{\\vw}{\\mathbf{w}}\n", "\\newcommand{\\vws}{\\vw_s}\n", "\\newcommand{\\vwt}{\\mathbf{\\tilde{w}}}\n", "\\newcommand{\\vWt}{\\mathbf{\\tilde{W}}}\n", "\\newcommand{\\vwh}{\\hat{\\vw}}\n", "\\newcommand{\\vx}{\\mathbf{x}}\n", "%\\newcommand{\\vx}{\\mathbf{x}}\n", "\\newcommand{\\vxt}{\\mathbf{\\tilde{x}}}\n", "\\newcommand{\\vy}{\\mathbf{y}}\n", "\\newcommand{\\vyt}{\\mathbf{\\tilde{y}}}\n", "\\newcommand{\\vz}{\\mathbf{z}}\n", "%\\newcommand{\\vzt}{\\mathbf{\\tilde{z}}}\n", "\n", "\n", "% Upper Roman (Matrices)\n", "\\newcommand{\\vA}{\\mathbf{A}}\n", "\\newcommand{\\vB}{\\mathbf{B}}\n", "\\newcommand{\\vC}{\\mathbf{C}}\n", "\\newcommand{\\vD}{\\mathbf{D}}\n", "\\newcommand{\\vE}{\\mathbf{E}}\n", "\\newcommand{\\vF}{\\mathbf{F}}\n", "\\newcommand{\\vG}{\\mathbf{G}}\n", "\\newcommand{\\vH}{\\mathbf{H}}\n", "\\newcommand{\\vI}{\\mathbf{I}}\n", "\\newcommand{\\vJ}{\\mathbf{J}}\n", "\\newcommand{\\vK}{\\mathbf{K}}\n", "\\newcommand{\\vL}{\\mathbf{L}}\n", "\\newcommand{\\vM}{\\mathbf{M}}\n", "\\newcommand{\\vMt}{\\mathbf{\\tilde{M}}}\n", "\\newcommand{\\vN}{\\mathbf{N}}\n", "\\newcommand{\\vO}{\\mathbf{O}}\n", "\\newcommand{\\vP}{\\mathbf{P}}\n", "\\newcommand{\\vQ}{\\mathbf{Q}}\n", "\\newcommand{\\vR}{\\mathbf{R}}\n", "\\newcommand{\\vS}{\\mathbf{S}}\n", "\\newcommand{\\vT}{\\mathbf{T}}\n", "\\newcommand{\\vU}{\\mathbf{U}}\n", "\\newcommand{\\vV}{\\mathbf{V}}\n", "\\newcommand{\\vW}{\\mathbf{W}}\n", "\\newcommand{\\vX}{\\mathbf{X}}\n", "%\\newcommand{\\vXs}{\\vX_{\\vs}}\n", "\\newcommand{\\vXs}{\\vX_{s}}\n", "\\newcommand{\\vXt}{\\mathbf{\\tilde{X}}}\n", "\\newcommand{\\vY}{\\mathbf{Y}}\n", "\\newcommand{\\vZ}{\\mathbf{Z}}\n", "\\newcommand{\\vZt}{\\mathbf{\\tilde{Z}}}\n", "\\newcommand{\\vzt}{\\mathbf{\\tilde{z}}}\n", "\n", "\n", "%%%%\n", "\\newcommand{\\hidden}{\\vz}\n", "\\newcommand{\\hid}{\\hidden}\n", "\\newcommand{\\observed}{\\vy}\n", "\\newcommand{\\obs}{\\observed}\n", "\\newcommand{\\inputs}{\\vu}\n", "\\newcommand{\\input}{\\inputs}\n", "\n", "\\newcommand{\\hmmTrans}{\\vA}\n", "\\newcommand{\\hmmObs}{\\vB}\n", "\\newcommand{\\hmmInit}{\\vpi}\n", "\\newcommand{\\hmmhid}{\\hidden}\n", "\\newcommand{\\hmmobs}{\\obs}\n", "\n", "\\newcommand{\\ldsDyn}{\\vA}\n", "\\newcommand{\\ldsObs}{\\vC}\n", "\\newcommand{\\ldsDynIn}{\\vB}\n", "\\newcommand{\\ldsObsIn}{\\vD}\n", "\\newcommand{\\ldsDynNoise}{\\vQ}\n", "\\newcommand{\\ldsObsNoise}{\\vR}\n", "\n", "\\newcommand{\\ssmDyn}{f}\n", "\\newcommand{\\ssmObs}{h}\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(sec:ssm-intro)=\n", "# What are State Space Models?\n", "\n", "\n", "A state space model or SSM\n", "is a partially observed Markov model,\n", "in which the hidden state, $\\hidden_t$,\n", "evolves over time according to a Markov process,\n", "possibly conditional on external inputs or controls $\\input_t$,\n", "and each hidden state generates some\n", "observations $\\obs_t$ at each time step.\n", "(In this book, we mostly focus on discrete time systems,\n", "although we consider the continuous-time case in XXX.)\n", "We get to see the observations, but not the hidden state.\n", "Our main goal is to infer the hidden state given the observations.\n", "However, we can also use the model to predict future observations,\n", "by first predicting future hidden states, and then predicting\n", "what observations they might generate.\n", "By using a hidden state $\\hidden_t$\n", "to represent the past observations, $\\obs_{1:t-1}$,\n", "the model can have ``infinite'' memory,\n", "unlike a standard Markov model.\n", "\n", "Formally we can define an SSM \n", "as the following joint distribution:\n", "```{math}\n", ":label: SSMfull\n", "p(\\hmmobs_{1:T},\\hmmhid_{1:T}|\\inputs_{1:T})\n", " = \\left[ p(\\hmmhid_1|\\inputs_1) \\prod_{t=2}^{T}\n", " p(\\hmmhid_t|\\hmmhid_{t-1},\\inputs_t) \\right]\n", " \\left[ \\prod_{t=1}^T p(\\hmmobs_t|\\hmmhid_t, \\inputs_t, \\hmmobs_{t-1}) \\right]\n", "```\n", "where $p(\\hmmhid_t|\\hmmhid_{t-1},\\inputs_t)$ is the\n", "transition model,\n", "$p(\\hmmobs_t|\\hmmhid_t, \\inputs_t, \\hmmobs_{t-1})$ is the\n", "observation model,\n", "and $\\inputs_{t}$ is an optional input or action.\n", "See {numref}`Figure %s ` \n", "for an illustration of the corresponding graphical model.\n", "\n", "\n", "```{figure} /figures/SSM-AR-inputs.png\n", ":scale: 100%\n", ":name: ssm-ar\n", "\n", "Illustration of an SSM as a graphical model.\n", "```\n", "\n", "We often consider a simpler setting in which there\n", "are no external inputs,\n", "and the observations are conditionally independent of each other\n", "(rather than having Markovian dependencies) given the hidden state.\n", "In this case the joint simplifies to \n", "```{math}\n", ":label: SSMsimplified\n", "p(\\hmmobs_{1:T},\\hmmhid_{1:T})\n", " = \\left[ p(\\hmmhid_1) \\prod_{t=2}^{T}\n", " p(\\hmmhid_t|\\hmmhid_{t-1}) \\right]\n", " \\left[ \\prod_{t=1}^T p(\\hmmobs_t|\\hmmhid_t \\right]\n", "```\n", "See {numref}`Figure %s ` \n", "for an illustration of the corresponding graphical model.\n", "Compare {eq}`SSMfull` and {eq}`SSMsimplified`.\n", "\n", "\n", "```{figure} /figures/SSM-simplified.png\n", ":scale: 100%\n", ":name: ssm-simplified\n", "\n", "Illustration of a simplified SSM.\n", "```\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(sec:hmm-intro)=\n", "# Hidden Markov Models\n", "\n", "In this section, we discuss the\n", "hidden Markov model or HMM,\n", "which is a state space model in which the hidden states\n", "are discrete, so $\\hmmhid_t \\in \\{1,\\ldots, K\\}$.\n", "The observations may be discrete,\n", "$\\hmmobs_t \\in \\{1,\\ldots, C\\}$,\n", "or continuous,\n", "$\\hmmobs_t \\in \\real^D$,\n", "or some combination,\n", "as we illustrate below.\n", "More details can be found in e.g., \n", "{cite}`Rabiner89,Fraser08,Cappe05`.\n", "For an interactive introduction,\n", "see https://nipunbatra.github.io/hmm/." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(sec:casino)=\n", "### Example: Casino HMM\n", "\n", "To illustrate HMMs with categorical observation model,\n", "we consider the \"Ocassionally dishonest casino\" model from {cite}`Durbin98`.\n", "There are 2 hidden states, representing whether the dice being used in the casino is fair or loaded.\n", "Each state defines a distribution over the 6 possible observations.\n", "\n", "The transition model is denoted by\n", "```{math}\n", "p(z_t=j|z_{t-1}=i) = \\hmmTrans_{ij}\n", "```\n", "Here the $i$'th row of $\\vA$ corresponds to the outgoing distribution from state $i$.\n", "This is a row stochastic matrix,\n", "meaning each row sums to one.\n", "We can visualize\n", "the non-zero entries in the transition matrix by creating a state transition diagram,\n", "as shown in \n", "{numref}`Figure %s `\n", "%{ref}`casino-fig`.\n", "\n", "```{figure} /figures/casino.png\n", ":scale: 50%\n", ":name: casino-fig\n", "\n", "Illustration of the casino HMM.\n", "```\n", "\n", "The observation model\n", "$p(\\obs_t|\\hidden_t=j)$ has the form\n", "```{math}\n", "p(\\obs_t=k|\\hidden_t=j) = \\hmmObs_{jk} \n", "```\n", "This is represented by the histograms associated with each\n", "state in {ref}`casino-fig`.\n", "\n", "Finally,\n", "the initial state distribution is denoted by\n", "```{math}\n", "p(z_1=j) = \\hmmInit_j\n", "```\n", "\n", "Collectively we denote all the parameters by $\\vtheta=(\\hmmTrans, \\hmmObs, \\hmmInit)$.\n", "\n", "Now let us implement this model in code." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# state transition matrix\n", "A = np.array([\n", " [0.95, 0.05],\n", " [0.10, 0.90]\n", "])\n", "\n", "# observation matrix\n", "B = np.array([\n", " [1/6, 1/6, 1/6, 1/6, 1/6, 1/6], # fair die\n", " [1/10, 1/10, 1/10, 1/10, 1/10, 5/10] # loaded die\n", "])\n", "\n", "pi = np.array([0.5, 0.5])\n", "\n", "(nstates, nobs) = np.shape(B)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "import distrax\n", "from distrax import HMM\n", "\n", "\n", "hmm = HMM(trans_dist=distrax.Categorical(probs=A),\n", " init_dist=distrax.Categorical(probs=pi),\n", " obs_dist=distrax.Categorical(probs=B))\n", "\n", "print(hmm)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Let's sample from the model. We will generate a sequence of latent states, $\\hid_{1:T}$,\n", "which we then convert to a sequence of observations, $\\obs_{1:T}$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Printing sample observed/latent...\n", "x: 633665342652353616444236412331351246651613325161656366246242\n", "z: 222222211111111111111111111111111111111222111111112222211111\n" ] } ], "source": [ "\n", "\n", "\n", "seed = 314\n", "n_samples = 300\n", "z_hist, x_hist = hmm.sample(seed=PRNGKey(seed), seq_len=n_samples)\n", "\n", "z_hist_str = \"\".join((np.array(z_hist) + 1).astype(str))[:60]\n", "x_hist_str = \"\".join((np.array(x_hist) + 1).astype(str))[:60]\n", "\n", "print(\"Printing sample observed/latent...\")\n", "print(f\"x: {x_hist_str}\")\n", "print(f\"z: {z_hist_str}\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  def sample(self,\n",
       "             *,\n",
       "             seed: chex.PRNGKey,\n",
       "             seq_len: chex.Array) -> Tuple:\n",
       "    \"\"\"Sample from this HMM.\n",
       "\n",
       "    Samples an observation of given length according to this\n",
       "    Hidden Markov Model and gives the sequence of the hidden states\n",
       "    as well as the observation.\n",
       "\n",
       "    Args:\n",
       "      seed: Random key of shape (2,) and dtype uint32.\n",
       "      seq_len: The length of the observation sequence.\n",
       "\n",
       "    Returns:\n",
       "      Tuple of hidden state sequence, and observation sequence.\n",
       "    \"\"\"\n",
       "    rng_key, rng_init = jax.random.split(seed)\n",
       "    initial_state = self._init_dist.sample(seed=rng_init)\n",
       "\n",
       "    def draw_state(prev_state, key):\n",
       "      state = self._trans_dist.sample(seed=key)\n",
       "      return state, state\n",
       "\n",
       "    rng_state, rng_obs = jax.random.split(rng_key)\n",
       "    keys = jax.random.split(rng_state, seq_len - 1)\n",
       "    _, states = jax.lax.scan(draw_state, initial_state, keys)\n",
       "    states = jnp.append(initial_state, states)\n",
       "\n",
       "    def draw_obs(state, key):\n",
       "      return self._obs_dist.sample(seed=key)\n",
       "\n",
       "    keys = jax.random.split(rng_obs, seq_len)\n",
       "    obs_seq = jax.vmap(draw_obs, in_axes=(0, 0))(states, keys)\n",
       "\n",
       "    return states, obs_seq\n",
       "\n",
       "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Here is the source code for the sampling algorithm.\n", "\n", "print_source(hmm.sample)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our primary goal will be to infer the latent state from the observations,\n", "so we can detect if the casino is being dishonest or not. This will\n", "affect how we choose to gamble our money.\n", "We discuss various ways to perform this inference below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Linear Gaussian SSMs\n", "\n", "Blah blah" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(sec:tracking-lds)=\n", "## Example: model for 2d tracking\n", "\n", "Blah blah" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(sec:inference)=\n", "# Inferential goals\n", "\n", "```{figure} /figures/dbn-inference-problems.png\n", ":scale: 100%\n", ":name: dbn-inference\n", "\n", "Illustration of the different kinds of inference in an SSM.\n", " The main kinds of inference for state-space models.\n", " The shaded region is the interval for which we have data.\n", " The arrow represents the time step at which we want to perform inference.\n", " $t$ is the current time, $T$ is the sequence length,\n", "$\\ell$ is the lag and $h$ is the prediction horizon.\n", "```\n", "\n", "\n", "\n", "Given the sequence of observations, and a known model,\n", "one of the main tasks with SSMs\n", "to perform posterior inference,\n", "about the hidden states; this is also called\n", "state estimation.\n", "At each time step $t$,\n", "there are multiple forms of posterior we may be interested in computing,\n", "including the following:\n", "- the filtering distribution\n", "$p(\\hmmhid_t|\\hmmobs_{1:t})$\n", "- the smoothing distribution\n", "$p(\\hmmhid_t|\\hmmobs_{1:T})$ (note that this conditions on future data $T>t$)\n", "- the fixed-lag smoothing distribution\n", "$p(\\hmmhid_{t-\\ell}|\\hmmobs_{1:t})$ (note that this\n", "infers $\\ell$ steps in the past given data up to the present).\n", "\n", "We may also want to compute the\n", "predictive distribution $h$ steps into the future:\n", "\\begin{align}\n", "p(\\hmmobs_{t+h}|\\hmmobs_{1:t})\n", "&= \\sum_{\\hmmhid_{t+h}} p(\\hmmobs_{t+h}|\\hmmhid_{t+h}) p(\\hmmhid_{t+h}|\\hmmobs_{1:t})\n", "\\end{align}\n", "where the hidden state predictive distribution is\n", "\\begin{align}\n", "p(\\hmmhid_{t+h}|\\hmmobs_{1:t})\n", "&= \\sum_{\\hmmhid_{t:t+h-1}}\n", " p(\\hmmhid_t|\\hmmobs_{1:t}) \n", " p(\\hmmhid_{t+1}|\\hmmhid_{t})\n", " p(\\hmmhid_{t+2}|\\hmmhid_{t+1})\n", "\\cdots\n", " p(\\hmmhid_{t+h}|\\hmmhid_{t+h-1})\n", "\\end{align}\n", "See \\cref{fig:dbn_inf_problems} for a summary of these distributions.\n", "\n", "In addition to comuting posterior marginals,\n", "we may want to compute the most probable hidden sequence,\n", "i.e., the joint MAP estimate\n", "```{math}\n", "\\arg \\max_{\\hmmhid_{1:T}} p(\\hmmhid_{1:T}|\\hmmobs_{1:T})\n", "```\n", "or sample sequences from the posterior\n", "```{math}\n", "\\hmmhid_{1:T} \\sim p(\\hmmhid_{1:T}|\\hmmobs_{1:T})\n", "```\n", "\n", "Algorithms for all these task are discussed in the following chapters,\n", "since the details depend on the form of the SSM.\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: inference in the casino HMM\n", "\n", "We now illustrate filtering, smoothing and MAP decoding applied\n", "to the casino HMM from {ref}`sec:casino`. \n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/anaconda3/lib/python3.8/site-packages/jax/_src/numpy/lax_numpy.py:5154: UserWarning: Explicitly requested dtype requested in astype is not available, and will be truncated to dtype int32. To enable more dtypes, set the jax_enable_x64 configuration option or the JAX_ENABLE_X64 shell environment variable. See https://github.com/google/jax#current-gotchas for more.\n", " lax_internal._check_user_dtype_supported(dtype, \"astype\")\n" ] } ], "source": [ "# Call inference engine\n", "\n", "filtered_dist, _, smoothed_dist, loglik = hmm.forward_backward(x_hist)\n", "map_path = hmm.viterbi(x_hist)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Find the span of timesteps that the simulated systems turns to be in state 1\n", "def find_dishonest_intervals(z_hist):\n", " spans = []\n", " x_init = 0\n", " for t, _ in enumerate(z_hist[:-1]):\n", " if z_hist[t + 1] == 0 and z_hist[t] == 1:\n", " x_end = t\n", " spans.append((x_init, x_end))\n", " elif z_hist[t + 1] == 1 and z_hist[t] == 0:\n", " x_init = t + 1\n", " return spans" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Plot posterior\n", "def plot_inference(inference_values, z_hist, ax, state=1, map_estimate=False):\n", " n_samples = len(inference_values)\n", " xspan = np.arange(1, n_samples + 1)\n", " spans = find_dishonest_intervals(z_hist)\n", " if map_estimate:\n", " ax.step(xspan, inference_values, where=\"post\")\n", " else:\n", " ax.plot(xspan, inference_values[:, state])\n", "\n", " for span in spans:\n", " ax.axvspan(*span, alpha=0.5, facecolor=\"tab:gray\", edgecolor=\"none\")\n", " ax.set_xlim(1, n_samples)\n", " # ax.set_ylim(0, 1)\n", " ax.set_ylim(-0.1, 1.1)\n", " ax.set_xlabel(\"Observation number\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Filtered')" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/Users/kpmurphy/github/ssm-book/_build/jupyter_execute/chapters/ssm/ssm_19_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ " # Filtering\n", "fig, ax = plt.subplots()\n", "plot_inference(filtered_dist, z_hist, ax)\n", "ax.set_ylabel(\"p(loaded)\")\n", "ax.set_title(\"Filtered\")\n", " \n", "\n", " " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Smoothed')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/Users/kpmurphy/github/ssm-book/_build/jupyter_execute/chapters/ssm/ssm_20_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Smoothing\n", "fig, ax = plt.subplots()\n", "plot_inference(smoothed_dist, z_hist, ax)\n", "ax.set_ylabel(\"p(loaded)\")\n", "ax.set_title(\"Smoothed\")\n", "\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Viterbi')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/Users/kpmurphy/github/ssm-book/_build/jupyter_execute/chapters/ssm/ssm_21_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# MAP estimation\n", "fig, ax = plt.subplots()\n", "plot_inference(map_path, z_hist, ax, map_estimate=True)\n", "ax.set_ylabel(\"MAP state\")\n", "ax.set_title(\"Viterbi\")\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# TODO: posterior samples\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: inference in the tracking SSM\n", "\n", "We now illustrate filtering, smoothing and MAP decoding applied\n", "to the 2d tracking HMM from {ref}`sec:tracking-lds`. " ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }