{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Dynamic Models\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "### Preliminaries\n", "\n", "- Goal \n", " - Introduction to dynamic (=temporal) Latent Variable Models, including the Hidden Markov Model and Kalman filter. \n", "- Materials\n", " - Mandatory\n", " - These lecture notes\n", " - Optional \n", " - Bishop pp.605-615 on Hidden Markov Models\n", " - Bishop pp.635-641 on Kalman filters\n", " - Faragher (2012), [Understanding the Basis of the Kalman Filter](https://github.com/bertdv/BMLIP/blob/master/lessons/notebooks/files/Faragher-2012-Understanding-the-Basis-of-the-Kalman-Filter.pdf)\n", " - Minka (1999), [From Hidden Markov Models to Linear Dynamical Systems](https://github.com/bertdv/BMLIP/blob/master/lessons/notebooks/files/Minka-1999-from-HMM-to-LDS.pdf)\n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example Problem\n", "\n", "- We consider a one-dimensional cart position tracking problem, see [Faragher (2012)](https://github.com/bertdv/BMLIP/blob/master/lessons/notebooks/files/Faragher-2012-Understanding-the-Basis-of-the-Kalman-Filter.pdf). \n", "\n", "- The hidden states are the position $z_t$ and velocity $\\dot z_t$. We can apply an external acceleration/breaking force $u_t$. (Noisy) observations are represented by $x_t$. \n", "\n", "- The equations of motions are given by\n", "\n", "$$\\begin{align*}\n", "\\begin{bmatrix} z_t \\\\ \\dot{z_t}\\end{bmatrix} &= \\begin{bmatrix} 1 & \\Delta t \\\\ 0 & 1\\end{bmatrix} \\begin{bmatrix} z_{t-1} \\\\ \\dot z_{t-1}\\end{bmatrix} + \\begin{bmatrix} (\\Delta t)^2/2 \\\\ \\Delta t\\end{bmatrix} u_t + \\mathcal{N}(0,\\Sigma_z) \\\\\n", "x_t &= \\begin{bmatrix} z_t \\\\ \\dot{z_t}\\end{bmatrix} + \\mathcal{N}(0,\\Sigma_x) \n", "\\end{align*}$$\n", "\n", "- Task: Infer the position $z_t$ after 10 time steps. (Solution later in this lesson).\n", "\n", "

\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Dynamical Models\n", "\n", "- In this lesson, we consider models where the sequence order of observations matters. \n", "\n", "- Consider the _ordered_ observation sequence $x^T \\triangleq \\left(x_1,x_2,\\ldots,x_T\\right)$.\n", " - (For brevity, in this lesson we use the notation $x_t^T$ to denote $(x_t,x_{t+1},\\ldots,x_T)$ and drop the subscript if $t=1$, so $x^T = x_1^T = \\left(x_1,x_2,\\ldots,x_T\\right)$)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We wish to develop a generative model\n", " $$ p( x^T )$$\n", "that 'explains' the time series $x^T$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- We cannot use the IID assumption $p( x^T ) = \\prod_t p(x_t )$ for a time series, since consecutive observations may have statistical dependencies. In general, we can _always_ use the **chain rule** (a.k.a. **the general product rule**)\n", "\n", "$$\\begin{align*}\n", "p(x^T) &= p(x_T|x^{T-1}) \\,p(x^{T-1}) \\\\\n", " &= p(x_T|x^{T-1}) \\,p(x_{T-1}|x^{T-2}) \\cdots p(x_2|x_1)\\,p(x_1) \\\\\n", " &= p(x_1)\\prod_{t=2}^T p(x_t\\,|\\,x^{t-1})\n", "\\end{align*}$$\n", "which is true for any model $p(x^T)$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Generally, we will want to limit the depth of dependencies on previous observations. For example, a $K$-th order linear **Auto-Regressive** (AR) model is given by\n", "$$\\begin{align*}\n", " p(x_t\\,|\\,x^{t-1}) = \\mathcal{N}\\left(x_t \\,\\middle|\\, \\sum_{k=1}^K a_k x_{t-k}\\,,\\sigma^2\\,\\right) \n", "\\end{align*}$$\n", "limits the dependencies to the past $K$ samples." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### State-space Models\n", "\n", "- A limitation of AR models is that they need a lot of parameters in order to create a flexible model. E.g., if $x_t \\in \\mathbb{R}^M$ is an $M$-dimensional time series, then the $K$-th order AR model for $x_t$ will have $KM^2$ parameters. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Similar to our work on Gaussian Mixture models, we can create a flexible dynamic system by introducing _latent_ (unobserved) variables $z^T \\triangleq \\left(z_1,z_2,\\dots,z_T\\right)$ (one $z_t$ for each observation $x_t$). In dynamic systems, observation-dependent latent variables $z_t$ are called _state variables_." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- A **state space model** is a particular latent variable dynamical model defined by\n", "$$\\begin{align*}\n", " p(x^T,z^T) &= \\underbrace{p(z_1)}_{\\text{initial state}} \\prod_{t=2}^T \\underbrace{p(z_t\\,|\\,z_{t-1})}_{\\text{state transitions}}\\,\\prod_{t=1}^T \\underbrace{p(x_t\\,|\\,z_t)}_{\\text{observations}}\n", "\\end{align*}$$\n", " - The condition $p(z_t\\,|\\,z^{t-1}) = p(z_t\\,|\\,z_{t-1})$ is called a $1$-st order Markov condition.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- The Forney-style factor graph for a state-space model:\n", "\n", "

" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Hidden Markov Models and Linear Dynamical Systems\n", "\n", "- A **Hidden Markov Model** (HMM) is a specific state-space model with discrete-valued state variables $z_t$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Typically, $z_t$ is a $K$-dimensional one-hot coded latent 'class indicator' with transition probabilities $a_{jk} \\triangleq p(z_{tk}=1\\,|\\,z_{t-1,j}=1)$, or equivalently,\n", " $$p(z_t|z_{t-1}) = \\prod_{k=1}^K \\prod_{j=1}^K a_{jk}^{z_{t-1,j}\\cdot z_{tk}}$$\n", "which is usually accompanied by an initial state distribution $p(z_{1k}=1) = \\pi_k$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", "- The classical HMM has also discrete-valued observations but in pratice any (probabilistic) observation model $p(x_t|z_t)$ may be coupled to the hidden Markov chain. \n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- Another well-known state-space model with continuous-valued state variables $z_t$ is the **(Linear) Gaussian Dynamical System** (LGDS), which is defined as\n", "\n", "$$\\begin{align*}\n", "p(z_t\\,|\\,z_{t-1}) &= \\mathcal{N}\\left(z_t \\,|\\, A z_{t-1},\\,\\Sigma_z\\right) \\\\ \n", "p(x_t\\,|\\,z_t) &= \\mathcal{N}\\left(x_t\\,|\\, C z_t,\\,\\Sigma_x\\right) \\\\\n", "p(z_1) &= \\mathcal{N}\\left(z_1\\,|\\, \\mu_1,\\,\\Sigma_1\\right)\n", "\\end{align*}$$\n", "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Note that the joint distribution over all states and observations $\\{(x_1,z_1),\\ldots,(x_t,z_t)\\}$ is a (large-dimensional) Gaussian distribution. This means that, in principle, every inference problem on the LGDS model also leads to a Gaussian distribution." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- HMM's and LGDS's (and variants thereof) are at the basis of a wide range of complex information processing systems, such as speech and language recognition, robotics and automatic car navigation, and even processing of DNA sequences. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Common Signal Processing Tasks as Message Passing-based Inference\n", "\n", "- As we have seen, inference tasks in linear Gaussian state space models can be analytically solved.\n", "\n", "- However, these derivations quickly become cumbersome and prone to errors.\n", "\n", "- Alternatively, we could specify the generative model in a (Forney-style) factor graph and use automated message passing to infer the posterior over the hidden variables. Here follows some examples.\n", "\n", "- **Filtering**, a.k.a. state estimation: estimation of a state (at time step $t$), based on past and current (at $t$) observations. \n", "

\n", "\n", "- **Smoothing**: estimation of a state based on both past and future observations. Needs backward messages from the future. \n", "\n", "

\n", "\n", "- **Prediction**: estimation of future state or observation based only on observations of the past.\n", "\n", "

\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### An Analytical Derivation of the Kalman Filter\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ " \n", "- Let's work out the Kalman filter for a scalar linear Gaussian dynamical system:\n", "$$\\begin{aligned}\n", " p(z_t\\,|\\,z_{t-1}) &= \\mathcal{N}(z_t\\,|\\,a z_{t-1},\\sigma_z^2) \\qquad &&\\text{(state transition)} \\\\\n", " p(x_t\\,|\\,z_t) &= \\mathcal{N}(x_t\\,|\\,c z_t,\\sigma_x^2) \\qquad &&\\text{(observation)} \n", "\\end{aligned}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "- Technically, a [**Kalman filter**](https://en.wikipedia.org/wiki/Kalman_filter) is the solution to the recursive estimation (inference) of the hidden state $z_t$ based on past observations in an LGDS, i.e., Kalman filtering solves the problem $p(z_t\\,|\\,x^t)$ based on the previous state estimate $p(z_{t-1}\\,|\\,x^{t-1})$ (the \"prior\") and a new observation $x_t$ (in the context of the given model specification of course). \n", " " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "- In Bayesian terms, a Kalman filter computes\n", "$$\\begin{align*}\n", "\\overbrace{p(z_t\\,|\\,x^t)}^{\\text{posterior}} &\\cdot \\overbrace{p(x_t\\,|\\,x^{t-1})}^{\\text{evidence}} = p(x_t,z_t\\,|\\,x^{t-1}) \\\\\n", " &= p(x_t\\,|\\,z_t) \\cdot p(z_t\\,|\\,x^{t-1}) \\\\\n", " &= p(x_t\\,|\\,z_t) \\, \\int p(z_t,z_{t-1}\\,|\\,x^{t-1}) \\mathrm{d}z_{t-1} \\\\\n", " &= \\underbrace{p(x_t\\,|\\,z_t)}_{\\text{likelihood}} \\, \\int \\underbrace{p(z_t\\,|\\,z_{t-1})}_{\\text{state transition}} \\, \\underbrace{p(z_{t-1}\\,|\\,x^{t-1})}_{\\text{prior}} \\mathrm{d}z_{t-1} \\\\\n", " &= \\mathcal{N}(x_t|c z_t, \\sigma_x^2) \\, \\int \\mathcal{N}(z_t\\,|\\,a z_{t-1},\\sigma_z^2) \\, \\mathcal{N}(z_{t-1} \\,|\\, \\mu_{t-1}, \\sigma_{t-1}^2) \\mathrm{d}z_{t-1} \\qquad \\text{(KF-1)}\n", " \\end{align*} $$\n", "where we assumed that the previous state estimate is given by\n", "$$\\begin{align*} \n", "p(z_{t-1}\\,|\\,x^{t-1}) = \\mathcal{N}(z_{t-1} \\,|\\, \\mu_{t-1}, \\sigma_{t-1}^2) \\qquad \\text{(prior)}\n", "\\end{align*}$$ \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- The result (Eq. KF-1) can be further worked out to analytical updates for the evidence and posterior. In the following, we often run into Gaussians of the form $\\mathcal{N}(x\\,|\\,cz,\\sigma^2)$ that we need to rewrite as an argument of $z$. We wil use the following \"mean transformation\" equality:\n", " $$\\mathcal{N}(x\\,|\\,cz,\\sigma^2) = \\frac{1}{c}\\mathcal{N}\\left(z \\,\\middle|\\,\\frac{x}{c},\\left(\\frac{\\sigma}{c}\\right)^2\\right)\\,.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "- Let's further work out the Kalman filter, starting from Eq. KF-1: \n", "$$\\begin{align*}\n", " \\underbrace{\\mathcal{N}(x_t|c z_t, \\sigma_x^2)}_{\\text{likelihood}} &\\, \\int \\underbrace{\\mathcal{N}(z_t\\,|\\,a z_{t-1},\\sigma_z^2)}_{\\substack{\\text{state transition} \\\\ \\text{(use mean transformation)}} } \\, \\underbrace{\\mathcal{N}(z_{t-1} \\,|\\, \\mu_{t-1}, \\sigma_{t-1}^2) }_{\\text{prior}} \\mathrm{d}z_{t-1} = \\\\\n", "&= \\mathcal{N}(x_t|c z_t, \\sigma_x^2) \\, \\int \\frac{1}{a}\\underbrace{\\mathcal{N}\\left(z_{t-1}\\bigm| \\frac{z_t}{a},\\left(\\frac{\\sigma_z}{a}\\right)^2 \\right) \\mathcal{N}(z_{t-1} \\,|\\, \\mu_{t-1}, \\sigma_{t-1}^2)}_{\\text{use Gaussian multiplication formula SRG-6}} \\mathrm{d}z_{t-1} \\\\\n", "&= \\frac{1}{a} \\mathcal{N}(x_t|c z_t, \\sigma_x^2) \\, \\int \\underbrace{\\mathcal{N}\\left(\\mu_{t-1}\\bigm| \\frac{z_t}{a},\\left(\\frac{\\sigma_z}{a}\\right)^2 + \\sigma_{t-1}^2 \\right)}_{\\text{not a function of }z_{t-1}} \\underbrace{\\mathcal{N}(z_{t-1} \\,|\\, \\cdot, \\cdot)}_{\\text{integrates to }1} \\mathrm{d}z_{t-1} \\\\\n", "&= \\frac{1}{a} \\underbrace{\\mathcal{N}(x_t|c z_t, \\sigma_x^2)}_{\\text{use mean transformation}} \\, \\underbrace{\\mathcal{N}\\left(\\mu_{t-1}\\bigm| \\frac{z_t}{a},\\left(\\frac{\\sigma_z}{a}\\right)^2 + \\sigma_{t-1}^2 \\right)}_{\\text{use mean transformation}} \\\\\n", "&= \\frac{1}{c} \\underbrace{\\mathcal{N}\\left(z_t \\bigm| \\frac{x_t}{c}, \\left( \\frac{\\sigma_x}{c}\\right)^2 \\right) \\mathcal{N}\\left(z_t\\, \\bigm|\\,a \\mu_{t-1},\\sigma_z^2 + \\left(a \\sigma_{t-1}\\right)^2 \\right)}_{\\text{use SRG-6 again}} \\\\\n", "&= \\underbrace{\\frac{1}{c} \\mathcal{N}\\left( \\frac{x_t}{c} \\bigm| a \\mu_{t-1}, \\left( \\frac{\\sigma_x}{c}\\right)^2+ \\sigma_z^2 + \\left(a \\sigma_{t-1}\\right)^2\\right)}_{\\text{use mean transformation}} \\, \\mathcal{N}\\left( z_t \\,|\\, \\mu_t, \\sigma_t^2\\right)\\\\\n", " &= \\underbrace{\\mathcal{N}\\left(x_t \\,|\\, ca \\mu_{t-1}, \\sigma_x^2 + c^2(\\sigma_z^2+a^2\\sigma_{t-1}^2) \\right)}_{\\text{evidence } p(x_t|x^{t-1})} \\cdot \\underbrace{\\mathcal{N}\\left( z_t \\,|\\, \\mu_t, \\sigma_t^2\\right)}_{\\text{posterior }p(z_t|x^t) }\n", "\\end{align*}$$\n", "where the posterior mean $\\mu_t$ and posterior variance $\\sigma^2_t$ can be evaluated as follows:\n", "$$\\begin{align*}\n", " \\rho_t^2 &= a^2 \\sigma_{t-1}^2 + \\sigma_z^2 \\qquad &&\\text{(predicted variance)}\\\\\n", " K_t &= \\frac{c \\rho_t^2}{c^2 \\rho_t^2 + \\sigma_x^2} \\qquad &&\\text{(Kalman gain)} \\\\\n", " \\mu_t &= a \\mu_{t-1} + K_t \\cdot \\left( x_t - c a \\mu_{t-1}\\right) \\qquad &&\\text{(posterior mean)}\\\\\n", " \\sigma_t^2 &= \\left( 1 - c\\cdot K_t \\right) \\rho_t^2 \\qquad &&\\text{(posterior variance)}\n", "\\end{align*}$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Kalman filtering consists of computing/updating these last four equations for each new observation ($x_t$). This is a very efficient recursive algorithm to estimate the state $z_t$ from all observations (until $t$). \n", "\n", "- The above derivation also evaluates the \"instant\" evidence $$p(x_t|x^{t-1}) = \\mathcal{N}\\left(x_t \\,|\\, ca \\mu_{t-1}, \\sigma_x^2 + c^2(\\sigma_z^2+a^2\\sigma_{t-1}^2) \\right)$$\n", "\n", "- Note that, for observed $x^t$, the evidence $p(x_t|x^{t-1})$ is a scalar number that scores how well the model predicts $x^t$, based on past observations $x^{t-1}$.\n", "\n", "- Exam guide: the above derivation of the Kalman filter is too long and error-prone to be asked at an exam. You should be able to follow the derivation in detail, but will not be requested to reproduce the full derivation without some guidance. The complexity of the derivation underlines why inference should be automated by a toolbox (like RxInfer).\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Multi-dimensional Kalman Filtering\n", "\n", "- The Kalman filter equations can also be derived for multidimensional state-space models. In particular, for the model\n", "$$\\begin{align*}\n", "z_t &= A z_{t-1} + \\mathcal{N}(0,\\Gamma) \\\\\n", "x_t &= C z_t + \\mathcal{N}(0,\\Sigma)\n", "\\end{align*}$$\n", "the Kalman filter update equations for the posterior $p(z_t |x^t) = \\mathcal{N}\\left(z_t \\bigm| \\mu_t, V_t \\right)$ are given by (see Bishop, pg.639)\n", "$$\\begin{align*}\n", "P_t &= A V_{t-1} A^T + \\Gamma \\qquad &&\\text{(predicted variance)}\\\\\n", "K_t &= P_t C^T \\cdot \\left(C P_t C^T + \\Sigma \\right)^{-1} \\qquad &&\\text{(Kalman gain)} \\\\\n", "\\mu_t &= A \\mu_{t-1} + K_t\\cdot\\left(x_t - C A \\mu_{t-1} \\right) \\qquad &&\\text{(posterior state mean)}\\\\\n", "V_t &= \\left(I-K_t C \\right) P_{t} \\qquad &&\\text{(posterior state variance)}\n", "\\end{align*}$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Code Example: Kalman Filtering and the Cart Position Tracking Example Revisited\n", "\n", "\n", "- We can now solve the cart tracking problem of the introductory example by implementing the Kalman filter." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "using Pkg; Pkg.activate(\"../.\"); Pkg.instantiate();\n", "using IJulia; try IJulia.clear_output(); catch _ end" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Prediction: MvNormalMeanCovariance(\n", "μ: [41.20528422340451, 4.152362617652811]\n", "Σ: [1.2958787328575079 0.3921572953097835; 0.3921572953130242 0.3415636711134632]\n", ")\n", "\n", "Measurement: MvNormalMeanCovariance(\n", "μ: [39.038809889054, 4.510232821084951]\n", "Σ: [1.0 0.0; 0.0 2.0]\n", ")\n", "\n", "Posterior: MvNormalMeanCovariance(\n", "μ: [40.03710946528336, 3.8701813252381205]\n", "Σ: [0.5516100293973586 0.15018972175285758; 0.15018972175409862 0.24143326063188655]\n", ")\n", "\n" ] }, { "data": { "image/png": "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KY8//vhtt93W4wc+kp6EgjBapN/5BAb9nbY7HhN/9IO33377H//4x0Ag8LOf/Wzu3Lkffvhh/VNtHU89ffr06dOnH+vZbdu2NfzftWvXtr7k1vvb3/520003dUTJHeH1119fvHhxMBh8+umnO24vQogLLrjgxRdfnDNnTsfthZDIorM20tlcLtcll1wSCqcLLrjgoYceGjBgQFxcHAB89tlnI0aM6NWr1+DBgz/99NPQ9itXrhw+fHhmZuaZZ55ZVlYWenDBggWXX3556PcffvjhxBNPzM7OzszMfPjhhxcuXPjyyy+//PLL48aNu/nmmwFg0qRJGzZsAIDKysrLL788Ozs7Ozv7tttuCzXVvvPOO1ddddUVV1yRlpaWnZ29YMGC1rwLv99fWVkZH99E3ndPs2bNmjZtWifsqE+fPh105kFIB6ErQtLZlFIff/xx6FZTcXHxu+++u3jx4oSEhB07dlx55ZWffPLJyJEjV69ePW3atHXr1iUmJs6cOfP3v//97NmzV6xYcfLJJw8fPhwAvF7vgQMHAODQoUPnnnvuU089NXPmTCnl9u3bBwwYMHv2bAB46KGHQnssKioKZd6vf/3rYDC4Z88ev98/derUxx577K677qqpqXn99dc/+eSTf/3rX6+//vrcuXMbXVACwPvvv19bWzto0KDS0lLO+dSpUz/77LOGUxZUVlbed999U6dOPeOMM4qKioYOHRp6vLS0dMGCBfn5+S6Xq6ysrLa2dubMmcf6ZLZs2fLggw/eeuutLpcrLS2tvi1306ZN33777ZQpU/bs2bNv376CgoIJEyZE6F+jCYWFhcuXL584cWK/fv02bNjg8/nGjx9f/+zChQs3btx40UUXbd68ed26dVdddVVCQkKjEjIzMzds2FD/IRDSzdEVIek8L7zwwrhx4zIzM5cvX/7YY4+FHrzppptSUlI0TXvzzTfHjx/vOM6KFSuklAUFBd99993atWsDgcBVV10FAGPHjp06dWqjMhcsWDBkyJBQugghju7K0dA777xz7733apoWFxd32223vf3226HHTzjhhMmTJwPA9OnTd+zYEQgEGr5q8eLFo0aNevjhh5OTk88666z7779fSrl58+Y+ffrUb/Pdd9/dfPPNiPjoo48OGTKk/vEvvvjilFNO+fWvf92/f/+f/OQnf/nLX5qp3qpVq+6+++4ffvhh0aJFDe9orlmzJjEx8f777580adKZZ575wAMPNFNIOymlVqxYEQgEvvnmGwB46aWXqqqq6p+tqqoKBoMLFy5cunTp6aefLoR47733ji6kd+/eW7du7bhKEhJZdEVIOs+FF1545513JicnJyYm1j+YkZER+mX//v179+599tlnQ/87YsSIlJSU0tLStLS0+tuH9RvXO3DgQHZ2dmv27jhORUVFfQmZmZkHDx4M/Z6UlBT6xeVyIWIwGHS5XPUvHDRoUDAYzM3N7d27NwDs3LnT6/WWlpaGmnNDzj33XL/fv2TJkt/+9rcNb3aeddZZH3300cyZM5OSkqqqqoQQOWik/QAAIABJREFUzdTw0ksvLSoqSklJmTFjRsPHzzrrrP/93/+95pprhBAbNmwIVaPe2rVrX3vttaNLO/vss0Pp3iZSyunTp1922WWhW4mLFy++//77658VQpxxxhm/+c1vfvrTnwLA+vXrL7vssqMLSUhIKC4ubuuuCekqFISk8yQlJTW8imqkX79+hYWFzzzzTMMHN2/evGvXrkAgEEqmwsLCRiX079//xRdfbDS1v6ZpwWCwUfmapuXm5m7cuLFXr14AsGHDhmYq06jab7zxxmmnnQYA27dvT0tLi4+PT0xM9Hq99dtUV1d/8MEHs2fP9vl8Qoj6wEtKSvrqq6+uv/56AHj//ffPO++8mpqahgna0I4dOzZv3jxjxozq6uqGdx+TkpKWLFny4IMPAsDbb799wQUXNCxkxIgRI0aMaM0baQ1d10NnDLm5udXV1aFer0qp0LOxsbGbN28eMGAAY0wptXjx4r/97W81NTWadsSRpKampv7cgpDuj5pGSXcxe/bszZs333fffWvWrFmyZMmf/vSn4uLigQMHjhs3bu7cuWvXrn344YdDfV4aOu+883Rdv/nmm1evXv3tt9++++67ADBo0KDPP//8/fffX7VqVcONb7311jvuuGPRokUfffTRn/70p7lz57aybgsXLgw1us6bN++RRx4BgLy8vJKSktCzfr///vvvz83N3bNnz6OPPtpo5MDKlStHjx4NAAsWLLjooosa9pVtaM+ePU8//XRqauqGDRtefPHFhk+Vl5e73e7QqcCSJUsmTpz4+eeft7LmDVmWFbpX2lBRUdFvfvObho+UlZWFzhUWLFgwbty4RYsWNXxHX331VeicYPXq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", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "using RxInfer, LinearAlgebra, Plots\n", "\n", "include(\"scripts/cart_tracking_helpers.jl\")\n", "\n", "# Specify the model parameters\n", "Δt = 1.0 # assume the time steps to be equal in size\n", "A = [1.0 Δt;\n", " 0.0 1.0]\n", "b = [0.5*Δt^2; Δt] \n", "Σz = convert(Matrix,Diagonal([0.2*Δt; 0.1*Δt])) # process noise covariance\n", "Σx = convert(Matrix,Diagonal([1.0; 2.0])) # observation noise covariance;\n", "\n", "# Generate noisy observations\n", "n = 10 # perform 10 timesteps\n", "z_start = [10.0; 2.0] # initial state\n", "u = 0.2 * ones(n) # constant input u\n", "noisy_x = generateNoisyMeasurements(z_start, u, A, b, Σz, Σx);\n", "\n", "m_z = noisy_x[1] # initial predictive mean\n", "V_z = A * (1e8*Diagonal(I,2) * A') + Σz # initial predictive covariance\n", "\n", "for t = 2:n\n", " global m_z, V_z, m_pred_z, V_pred_z\n", " \n", " #predict\n", " m_pred_z = A * m_z + b * u[t] # predictive mean\n", " V_pred_z = A * V_z * A' + Σz # predictive covariance\n", " \n", " #update\n", " gain = V_pred_z * inv(V_pred_z + Σx) # Kalman gain\n", " m_z = m_pred_z + gain * (noisy_x[t] - m_pred_z) # posterior mean update\n", " V_z = (Diagonal(I,2)-gain)*V_pred_z # posterior covariance update\n", "end\n", "\n", "println(\"Prediction: \",MvNormalMeanCovariance(m_pred_z,V_pred_z))\n", "println(\"Measurement: \", MvNormalMeanCovariance(noisy_x[n],Σx))\n", "println(\"Posterior: \", MvNormalMeanCovariance(m_z,V_z))\n", "plotCartPrediction(m_pred_z[1], V_pred_z[1], m_z[1], V_z[1], noisy_x[n][1], Σx[1][1])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### The Cart Tracking Problem Revisited: Inference by Message Passing\n", "\n", "- Let's solve the cart tracking problem by sum-product message passing in a factor graph like the one depicted above. All we have to do is create factor nodes for the state-transition model $p(z_t|z_{t-1})$ and the observation model $p(x_t|z_t)$. Then we let [RxInfer](https://biaslab.github.io/rxinfer-website/) execute the message passing schedule. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "@model function cart_tracking(x, n, A, B, Σz, Σx, z_prev_m_0, z_prev_v_0, u)\n", "\n", " local z\n", " \n", " z_prior ~ MvNormalMeanCovariance(z_prev_m_0, z_prev_v_0)\n", " \n", " z_prev = z_prior\n", " for i in 1:n\n", "\n", " z[i] ~ MvNormalMeanCovariance(A*z_prev + B*u[i], Σz)\n", " x[i] ~ MvNormalMeanCovariance(z[i], Σx)\n", "\n", " z_prev = z[i]\n", " end\n", " return (z,)\n", "end" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Now that we've built the model, we can perform Kalman filtering by inserting measurement data into the model and performing message passing." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "z_prev_m_0 = noisy_x[1] \n", "z_prev_v_0 = A * (1e8*diageye(2) * A') + Σz ;\n", "\n", "result = infer(\n", " model=cart_tracking(n=n, A=A,B=b, Σz=Σz, Σx=Σx, z_prev_m_0=z_prev_m_0, z_prev_v_0=z_prev_v_0,u=u), \n", " data=(x=noisy_x,), \n", " free_energy=true\n", ");" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: both ExponentialFamily and ReactiveMP export \"MvNormalMeanScalePrecision\"; uses of it in module RxInfer must be qualified\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Prediction: MvNormalMeanCovariance(\n", "μ: [16.648335076224058, 2.6135865873691886]\n", "Σ: [0.5308027610923123 0.05645622740726185; 0.05645622740726185 0.21894113821638947]\n", ")\n", "\n", "Measurement: MvNormalMeanCovariance(\n", "μ: [17.710336153243546, 5.9979464674475205]\n", "Σ: [1.0 0.0; 0.0 2.0]\n", ")\n", "\n", "Posterior: MvNormalMeanCovariance(\n", "μ: [16.776225590587124, 2.7045056800288085]\n", "Σ: [0.2891731424490338 -0.030001367953500776; -0.030001367953500776 0.09410734708436251]\n", ")\n", "\n" ] }, { "data": { "image/png": "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4YWqqqozzjgjy894xx13fPe73831mymUxx9/fPPmzevXr4+CcOBcc801//M///Otb31rQN9FiDySa4SiAI466qi6ujoAuPbaay+//PKvfvWrjz76KAB88Ytf/NjHPrZo0aJrrrnmy1/+crTw7bfffv755z///PMf/ehHX3vttejBRYsWfe5zn4t+v+22284888wnn3zy7rvv/td//dctW7a88cYbb7zxxh133PHEE08AwCWXXLJ27VoAWL58+XHHHXfffffdfvvtJ5544vbt2wHgz3/+80c/+tGLL774iSeeuPbaa7/+9a9n8xF27do1cuTII2gclssvv3xwWixLvw65uQAAIABJREFUS0sbGxvlbnFxBMlbjTCZTDKzDAUpelBXV7dp06atW7d+5zvfOf/886MHp/3/7d13XBTH+zjwuTs4OoKgIIKAoiAiiIAoonQFQUDFXjASW9RYolGiosaWaIw9GGsiRokYAUVRQakC0qR3pBdBlHZwwN3t74/5Zn/7uTsIiQgCz/uVP/a2zq1kn5vZmWdGj758+TJCKCQkJCQkJCUlhclkstlsbW3tNWvWjBgxYt++fQkJCdra2iwWS0tLi++cqampJ0+ezMrKUlFRIVfa29sjStMoaceOHTt27Ni5cydCaP369QcPHrx27RpCqLy8PD8/X15ePjMz08zMDLfykVpbW319fWNiYpydncXExGJiYg4ePPj06VNqe2ZSUtKuXbvGjx/v7OysoqIyceJEvD4lJSUpKamiosLU1JTH4z169OjChQud3Z+7d++ePn164cKFI0aMmDVrloKCAl4fEhISFxenrq6uoqJSXl5eX1+/bdu27t/2f+vJkyepqan6+voODg7+/v4EQVAzgd28eTMsLMzDw4PD4fj7+69fv14wvo4bNy4+Pt7c3PzTFRKAHtQDNcLw8HA9Pb1hw4aNHDly6tSp+Kc3AIL8/f0XLVp09OjRefPm/fzzz3ilg4MDXoiIiBATE/Py8tqzZ8/BgweZTGZKSkpGRsbIkSNxhw4pKSkrKyu+c0ZHR1tYWFCjYGcIgkhISCBfTLq4uMTHx+PlyZMny8vLI4R0dHQaGxvxa0hSXFzcwoUL4+Pj7e3tZ82a9eDBAxaLVVZWpqSkRO4jJSX14sWLjRs3stlsMgoihMrKyiZPnhwXFzd79mwHB4fY2NguSqivrx8b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", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\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/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import RxInfer.ReactiveMP: messageout, getinterface, materialize!\n", "import RxInfer.Rocket: getrecent\n", "\n", "which_timestep = 3\n", "\n", "if which_timestep == 1\n", " z_prev_m, z_prev_S = mean_cov(result.posteriors[:z_prior])\n", "else\n", " z_prev_m, z_prev_S = mean_cov(result.posteriors[:z][which_timestep-1])\n", "end\n", "μz_prediction, Σz_prediction = (A*z_prev_m + b*u[which_timestep], A*z_prev_S*A' + Σz)\n", "μz_posterior, Σz_posterior = mean_cov.(result.posteriors[:z])[which_timestep]\n", "\n", "println(\"Prediction: \",MvNormalMeanCovariance(μz_prediction, Σz_prediction))\n", "println(\"Measurement: \", MvNormalMeanCovariance(noisy_x[which_timestep], Σx))\n", "println(\"Posterior: \", MvNormalMeanCovariance(μz_posterior, Σz_posterior))\n", "plotCartPrediction(μz_prediction[1], Σz_prediction[1], μz_posterior[1], Σz_posterior[1], noisy_x[n][1], Σx[1][1])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- Note that both the analytical Kalman filtering solution and the message passing solution lead to the same results. The advantage of message passing-based inference with RxInfer is that we did not need to derive any inference equations. RxInfer took care of all that. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Recap Dynamical Models \n", "\n", "- Dynamical systems do not obey the sample-by-sample independence assumption, but still can be specified, and state and parameter estimation equations can be solved by similar tools as for static models." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- Two of the more famous and powerful models with latent states include the hidden Markov model (with discrete states) and the Linear Gaussian dynamical system (with continuous states)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- For the LGDS, the Kalman filter is a well-known recursive state estimation procedure. The Kalman filter can be derived through Bayesian update rules on Gaussian distributions. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- If anything changes in the model, e.g., the state noise is not Gaussian, then you have to re-derive the inference equations again from scratch and it may not lead to an analytically pleasing answer. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "- $\\Rightarrow$ Generally, we will want to automate the inference processes. As we discussed, message passing in a factor graph is a visually appealing method to automate inference processes. We showed how Kalman filtering emerged naturally by automated message passing. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "##
OPTIONAL SLIDES
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Extensions of Generative Gaussian Models\n", "\n", "- Using the methods of the previous lessons, it is possible to create your own new models based on stacking Gaussian and categorical distributions in new ways: \n", "\n", "" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "open(\"../../styles/aipstyle.html\") do f display(\"text/html\", read(f, String)) end" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.10.5", "language": "julia", "name": "julia-1.10" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.10.5" } }, "nbformat": 4, "nbformat_minor": 4 }