{ "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": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/Documents/biaslab/5SSD0 - BMLIP/BMLIP/lessons`\n" ] } ], "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", "μ: " ] }, { "name": "stdout", "output_type": "stream", "text": [ "[41.547677453253606, 4.359437556520038]\n", "Σ: " ] }, { "name": "stdout", "output_type": "stream", "text": [ "[1.29587873356633 0.39215729555837747; 0.39215729552375644 0.3415636711872436]\n", ")\n", "\n", "Measurement: MvNormalMeanCovariance(\n", "μ: [40.28467983904122, 2.4288277653174806]\n", "Σ: [1.0 0.0; 0.0 2.0]\n", ")\n", "\n", "Posterior: MvNormalMeanCovariance(\n", "μ: [40.70601642826498, 3.9366915877624713]\n", "Σ: [0.5516100295248194 0.1501897218006391; 0.15018972178737977 0.24143326064425966]\n", ")\n", "\n" ] }, { "data": { "image/png": "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vfdebRuLi4uLi4u1a2aIOGPGjNTU1G3btlW5+6W6/Pz88vLyFnsv09SpU61Wa1pamvaI9kuXLlX5gX6zyqTyl/HAgQMt9kNs06bN008/fenSpbS0tKysLKfTmZaW5nqE5O7duwsKCqr/IK4uIyOjxX4Z3dc8bXRqJzExcePGjcnJye+88463t3dycjIiJicnS5L04osvfnCd1hhv2bJlEyZMQMS8vLxZs2Z9+eWX33zzzfjx48PDw12tT1uabdu2vfPOO9u3b9+yZcvw4cP79eunbcvLL7+8YcOGb7/9du7cuWaz+ciRI9r0MTExBw8eRESr1RoWFjZ37tydO3f26dOnJTdUe/fddz/44IMdO3asX7++a9euzz33nGvUypUr4+PjK0988uTJ8PBwh8OBiPPmzfv444937NixaNEiDw+PHTt2NHXR6+6jjz6qfPvEwIEDJ06cuHv37lGjRj3++OPawGXLlj311FPa6yVLlnTr1u27775bvHhx27ZtCwoKmqHQdZSQkOBqNfrmm296eHgsXbpU+yZu3rxZGz5+/Pg///nPiLhv374FCxZ88803mzdvvvvuu4cNGyaEaLai1472805rNZqbm+uqTMaNGxceHq7dHfHLL7+4dtQTJ05YLJZ169Z99dVXbdu23b59ezNvQC1s3769SqvRJ598Ujtb4/LRRx89+OCDiKiq6vTp0z///PPt27cnJCT4+fldvny5SYvb+Fr0DfVxcXFbtmwpLi5u167djh07tAZ4kiRNmTKltLTUdUVt0qRJsix37txZO8Pm4eHh7e29bt06VVW7d+9+9OhRV+vTlqZjx467du3as2ePh4fHkCFDEhMTtTOi7du3//LLL0tKSqKjow8fPtyjRw9t+lGjRmmngj08PPbs2bNkyZJly5Y98cQTs2bNas7NuKXu3btv2LBhy5YtgYGBs2fPfvLJJ12jFEWZP39+5Yl9fX0fffRR7QxbbGxscnJyXl5eZGTk999/f/fddzdxyd3QqVOnysfUW7duXbRo0ZIlS+Lj41977TVtYOfOnV0/nl555RVPT8933303KCjohx9+uCMOtAcPHuxq0hUSEvLUU0+dOXNG+9PVJ8DAgQNjY2MBICwsLCcnZ9WqVR4eHmPHjk1MTGz595ubTKbp06drPQZUrkx69OixfPly7TlTlXfUHj16bN26ddWqVQ6H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", "image/svg+xml": [ "\n", "\n" ], "text/html": [ "\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", " #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", " #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", "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(n, A, b, Σz, Σx, z_prev_m_0, z_prev_v_0, u)\n", " \n", " # We create constvar references for better efficiency\n", " cA = constvar(A)\n", " cB = constvar(b)\n", " cΣz = constvar(Σz)\n", " cΣx = constvar(Σx)\n", " \n", " znodes = Vector{Any}(undef, n)\n", " # `z` is a sequence of hidden states\n", " z = randomvar(n)\n", " # `x` is a sequence of \"clamped\" observations\n", " x = datavar(Vector{Float64}, n)\n", " \n", " z_prior ~ MvNormalMeanCovariance(z_prev_m_0, z_prev_v_0)\n", " \n", " z_prev = z_prior\n", " \n", " for i in 1:n\n", " znodes[i],z[i] ~ MvNormalMeanCovariance(cA * z_prev + cB*u[i], cΣz)\n", " x[i] ~ MvNormalMeanCovariance(z[i], cΣx)\n", " z_prev = z[i]\n", " end\n", " \n", " return z, x, znodes\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": [ { "name": "stdout", "output_type": "stream", "text": [ "Prediction: MvNormalMeanCovariance(\n", "μ: [41.508790206410616, 4.3605961539085225]\n", "Σ: [1.2934227334046857 0.3916229823498387; 0.3916229823498387 0.3414332606222485]\n", ")\n", "\n", "Measurement: MvNormalMeanCovariance(\n", "μ: [40.28467983904122, 2.4288277653174806]\n", "Σ: [1.0 0.0; 0.0 2.0]\n", ")\n", "\n", "Posterior: MvNormalMeanCovariance(\n", "μ: [40.6890959466951, 3.9436176815844357]\n", "Σ: [0.551150997075792 0.1501469959500068; 0.1501469959500068 0.24141815274489328]\n", ")\n", "\n" ] }, { "data": { "image/png": "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lhFCxMTErFq1qvI4L7744uLFixExLS1t2bJlGRkZqampEyZM6NOnj8cxqutd/dyPsIEwxubMmXPy5Mnw8PBRo0bpV5KVlJRERUXZbLZ33nlHH+21115r1aqVoigBAQH6kKKiohdffLGoqKh9+/ZLlixxXxLU3Kiqevjw4RUrVthsto4dO6akpCQlJelP/e1vf9N7rZswYYL7tlZeXl4mk0n/e/78+dOnTx81alSHDh1++OGHZntHRm9v7y1btnz88ceIGBcXt2nTJv3WXQDw22+/JSYmjhw5svL4vr6++pdNVVWXLVuWk5Pj5+eXmJg4Y8aM6+JmW4mJiaGhofrfkyZNOn369OTJk00m09y5c4cOHaoPDwgIUBQFAFq1arVmzZpZs2bNmTNn1KhRb7zxRpPVXWOc8+TkZP3uaVarVf81794YX3jhhcjISM55QECA/nmVlZW9/PLLZ8+ejYqKmjt37v3339+ExddQdHR0v3799L8VRZk/f/7x48eDgoKSk5NfeuklfbiXl5f7FnJz58596aWXbrvttrZt265bt+66uDl5165dKz88dOhQXFzcH/7wh8oDfXx89B2LyWRavXr1W2+95e3tfcMNN3z88cfuHVHLQF2sEUIIMbTr5hwhIYQQ0hAoCAkhhBgaBSEhhBBDoyAkhBBiaBSEhBBCDI2CkBBCiKFREBLSrJWVlTkcjss9i4ilpaUul6sxSyKkhVFmzZrV1DUQ0kKsWrVq2bJlGzZs2LBhw44dO06ePBkVFVXHvg70i5r1nhZKSkpOnToVHBzsfra4uDgkJCQqKqra2z4QQmqiWfcsQ8j15d///vcXX3wxYsQIADh58uShQ4dCQ0N//PFHdzcltZCQkNCmTRv973nz5s2aNavynYxUVY2Pj696zwdCSM1REBJSn1RVdXdkvHnz5ltuueX555//z3/+U+sZ7tq16wrPBgQEuLvtJoTUDp0jJKShDBs2bOjQoXv27NE7MszPz58+fXpSUlJSUtL06dNPnz7tHtNms73//vu33377oEGDbrvttldeeaWoqEh/aurUqT/++CMArF69es2aNVLKxy9CRKvV+uSTT27fvt09q5ycnKeffjoxMXHYsGEzZ86sfG+8zz777LXXXjtz5sy0adMSExMnTpz43XffNdJ7QUgzRkFISAPCizeUzsvLS0hI+Mc//nHDDTcMGjTos88+i4+Pd9+P/uGHH3799de7dOkyceLEXr16/fDDD+67nC9cuFC/l5O3t7d+ujH4IgCw2+0LFy48cOCAPvL+/fsTEhLWrFmTlJTUp0+fDz744IYbbnBn4ebNm5cuXTp06NDCwsLhw4dnZ2ePGzdu586djfuWENL8NOWtLwhpWR544AGz2ex+uGnTJlVVhw8fjoj33XefxWI5dOiQ/lRmZqbFYrn//vsR0el0ms3mDz/8sPKs3Pec4pzPmTNH//uNN95QFKXyaOfOnQOARYsW6Q+Tk5NDQkLy8/P1h7/88gtjzH13pwcffBAA9BvrIKLVam3duvV9991Xb8tPyPWJfhESUp9cLldCQkJCQkK3bt1GjhwZEhIyd+5cANi0adMdd9zRpUsXfbSuXbuOHz9eP9SpqqqPj8/atWszMjLc86nFPaeEEFu2bHnggQdat26tDxk8eHBSUtKaNWvc4/j5+U2ZMkX/W7+lTlZWVq0XlpCWgYKQkPqk364vOTn5vvvuW7FixeHDh/v162ez2fLz8z3uANe1a9fS0tLS0lLG2IIFC7Zv396zZ8+uXbtOmzatciLWXF5entPp9HiVbt266beS10VGRlaO2MDAwLKyslq8FiEtCbUaJaQ+KYry9ttvewwUQiCix3Xx+kNVVQHg3nvvHTt27Pr16zdu3Lh69eoFCxasX7/+pptuuqaX1i+rsNvtHq+iv4SOc/ruS4gn2ioIaXB+fn5RUVEe1zns2bMnKirK39/fPc4dd9wxb968Q4cO+fv7L1u2rOp8zGazlFJKWe2rxMTE+Pj46C1rdIi4Z8+eHj161N+iENICURAS0hgefPDBjRs3fvPNN/rDlJSUjRs3Tp48GQBKSko2btyIiPpTdrtd07TQ0NCqM2nXrh0i7t27t9qXMJlMkyZNWrVq1datW/UhCxYsyMjI0F+FEHI5dGiUkMYwY8aMnTt3TpgwoX///oi4b9++5OTkl19+GQCKioqSk5MjIyO7detmsVh27NgRFhb23HPPVZ3JuHHjunfvPmjQoMDAQADQm4xW9s4776SlpY0cOTIhIaGiouL333+fOHHi448/3ggLSMj1i7m/hxJC6ujXX3/Ny8ubMGFCtc8i4rp16/SeYgYNGjR69Gh3u5XMzMxt27bl5eVxznv06DFu3Diz2aw/9dVXX8XFxbmbwGialpqamp+f73K57r77bpfLtWbNmvj4+Pbt27tH+Pbbb9PS0lRVHTp06PDhw90F7N69+9y5c6NGjao8pKio6NZbb63nN4KQ6woFISGEEEOjc4SEEEIMjYKQEEKIoVEQEkIIMTQKQkIIIYZGQUgIIcTQKAgJIYQYGgUhIYQQQ6MgJIQQYmgUhIQQQgyNgpAQQoihURASQggxNApCQgghhkZBSAghxNAoCAkhhBgaBSEhhBBDoyAkhBBiaBSEhBBCDI2CkBBCiKFREBJCCDE0CkJCCCGGRkFICCHE0CgICSGEGBoFISGEEEOjICSEEGJoFISEEEIMjYKQEEKIoVEQEkIIMTQKQkIIIYZGQUgIIcTQKAgJIYQYGgUhIYQQQ6MgJIQQYmgUhIQQQgyNgpAQQoihURASQggxNApCQgghhkZBSAghxNAoCAkhhBgaBSEhhBBDoyAkhBBiaBSEhBBCDI2CkBBCiKH9f6kO9/aOmB9WAAAAAElFTkSuQmCC", "image/svg+xml": [ "\n", "\n" ], "text/html": [ "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import RxInfer.ReactiveMP: messageout, getinterface, materialize!\n", "import RxInfer.Rocket: getrecent\n", "\n", "z_prev_m_0 = noisy_x[1] \n", "z_prev_v_0 = A * (1e8*Diagonal(I,2) * A') + Σz ;\n", "result = inference(model=cart_tracking(n, A,b, Σz, Σx, z_prev_m_0, z_prev_v_0,u), data=(x=noisy_x,), free_energy=true);\n", "μz_posterior, Σz_posterior = mean.(result.posteriors[:z])[end], cov.(result.posteriors[:z])[end];\n", "prediction_z_1 = messageout(getinterface(result.returnval[end][end], :out))\n", "prediction = materialize!(getrecent(prediction_z_1));\n", "println(\"Prediction: \",MvNormalMeanCovariance(mean(prediction), cov(prediction)))\n", "println(\"Measurement: \", MvNormalMeanCovariance(noisy_x[n], Σx))\n", "println(\"Posterior: \", MvNormalMeanCovariance(μz_posterior, Σz_posterior))\n", "plotCartPrediction(mean(prediction)[1], cov(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": [ "##