From 50a6c69ac6c696dce21a1a3aba38d3d4ef98635b Mon Sep 17 00:00:00 2001 From: Nicolas Legrand Date: Fri, 13 Oct 2023 14:04:18 +0200 Subject: [PATCH] Add support for AR1 processes (#117) --- docs/source/notebooks/0-Theory.ipynb | 571 +++++++-------------- docs/source/notebooks/0-Theory.md | 441 ++++------------ src/pyhgf/model.py | 34 +- src/pyhgf/updates/prediction/continuous.py | 17 +- tests/test_binary.py | 6 + tests/test_continuous.py | 12 + tests/test_distribution.py | 4 +- 7 files changed, 373 insertions(+), 712 deletions(-) diff --git a/docs/source/notebooks/0-Theory.ipynb b/docs/source/notebooks/0-Theory.ipynb index c9fddfa70..40294c294 100644 --- a/docs/source/notebooks/0-Theory.ipynb +++ b/docs/source/notebooks/0-Theory.ipynb @@ -6,8 +6,20 @@ "metadata": {}, "source": [ "(theory)=\n", - "# An introduction to the Hierarchical Gaussian Filter\n", - "In this notebook, we introduce the main concepts on which the Hierarchical Gaussian Filter (HGF) is based. We describe the main equations and illustrate the examples with Python code. We start with the generative model of the HGF, which describes how the model assumes that the data is being generated. This generative structure is then used to filter the observation (i.e. the sensory part of the model), which is then used by the agent to produce behaviours (i.e. the action part of the model). Next, we show how this model can be \"inverted\" and used by an agent to infer parameter values that generated the sensory inputs. From there, we discuss the notion of prediction error and how derivations of the model can be used to infer probability densities given observed behavioural outcomes." + "# Introduction to the Hierarchical Gaussian Filter\n", + "In this notebook, we introduce the main concepts on which the Hierarchical Gaussian Filter (HGF) is based. We describe the main equations and illustrate the examples with Python code. We start with the generative model of the HGF, which describes how the model assumes that the data is being generated. This generative structure is then used to filter the observation (i.e. the sensory part of the model), which is then used by the agent to produce behaviours (i.e. the action part of the model). Next, we show how this model can be \"inverted\" and used by an agent to infer parameter values that generate the sensory inputs. From there, we discuss the notion of prediction error and how derivations of the model can be used to infer probability densities given observed behavioural outcomes." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6430ec8b-1b42-450b-9ed5-a9866384042f", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import seaborn as sns" ] }, { @@ -17,6 +29,7 @@ "source": [ "## The generative model\n", "\n", + "### Gaussian Random Walks\n", "To illustrate the generative model on which the HGF is based, we will start with a simple two-level continuous HGF (see also the tutorial {ref}`continuous_hgf`). The generative model that underpins the continuous HGF is a generalisation of the [Gaussian Random Walk](https://en.wikipedia.org/wiki/Random_walk#Gaussian_random_walk) (GRW). A GRW generate a new observation $x_1^{(k)}$ at each time step $k$ from a normal distribution and using the previous observation $x_1^{(k-1)}$ such as:\n", "\n", "$$\n", @@ -28,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "054c77b0-855c-46bf-b861-96d430d90d56", "metadata": { "tags": [ @@ -48,10 +61,6 @@ } ], "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import seaborn as sns\n", - "\n", "np.random.seed(123)\n", "\n", "# random walk\n", @@ -67,13 +76,142 @@ }, { "cell_type": "markdown", - "id": "b6505c14-61b0-4faa-81d1-016d2344fd88", + "id": "a111b343-0172-4ceb-98cc-786ab4d6eeed", + "metadata": {}, + "source": [ + "This simple process will be our first building block. Importantly here, the variability of the sensory input is constant across time: even if we don't know exactly in which direction the time series is going to move in the future, we know that it is unlikely to make certain kinds of big jumps because it is controlled by a fixed parameter, the variance $\\sigma^2$." + ] + }, + { + "cell_type": "markdown", + "id": "44be6e84-78df-4c3a-b577-3d0b732f9ef9", "metadata": {}, "source": [ - "This simple process will be our first building block. Importantly here, the variability of the sensory input is constant across time: even if we don't know exactly in which direction the time series is going to move in the future, we know that is is unlikely to make certain kind of big jumps, because it is controlled by a fixed parameter, the variance $\\sigma^2$. \n", + "#### Adding a drift to the random walk\n", + "\n", + "The Gaussian random walk can be further parametrized by adding a drift over time. This value, often noted $\\rho$, will be added at each time step:\n", + "\n", + "$$\n", + "x_1^{(k)} \\sim \\mathcal{N}(x_1^{(k-1)} + \\rho, \\sigma^2)\n", + "$$\n", + "\n", + "We run the same simulation using $\\rho = 0.1$ in the cell below:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a4cac17f-6ce5-41a3-8960-a781dc95e6b7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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eZFIBCtXrsQPfvCDSW+fzvi5//778eqrr2LLli145513EA6Hce211yKTyczU06hox+ujaDSKXbt24dFHH8WuXbuwdetWHD58GNdff/2Ec++6666i8fXcc8/NRPPnjBONJeDE73EcS2feifqpsH98Ph9eeOEFSJKEG2+8seg8jqczZzrfvSv6s0lQyV144YXi7rvvLjrW2toqvv3tb5eoRTTewMCAACDeeuut/LFbb71VbNiwoXSNmuMee+wxsXLlyklvMwxDNDQ0iCeffDJ/LB6PC6fTKf7jP/5jhlpIk7nvvvvE4sWLhWEYQgiOo3IAQLz66qv5/09n/Pj9fqFpmtiyZUv+nJ6eHiHLsvj1r389Y22fK8b30WT+8Ic/CADi2LFj+WNXXXWVuO+++85s4yhvsn460Xscx9LMm8542rBhg1i7dm3RMY6nmTX+u3elfzZxprzEkskkdu7ciXXr1hUdX7duHd59990StYrGCwQCAAC32110/M0330RdXR3OPvts3HXXXRgYGChF8+asI0eOwOv1oqWlBTfffDPa2toAAO3t7ejr6ysaVyaTCVdddRXHVQklk0n87Gc/w+233w5JkvLHOY7Ky3TGz86dO5FKpYrO8Xq9WL58OcdYiQQCAUiSBJfLVXT85ZdfhsfjwbJly/DNb36Tq4VK4HjvcRxL5ae/vx+vv/467rjjjgm3cTzNnPHfvSv9s0ktdQPmuqGhIWQyGdTX1xcdr6+vR19fX4laRYWEEHjggQdw+eWXY/ny5fnj69evx5e//GUsWLAA7e3tePTRR7F27Vrs3LkTJpOphC2eGy666CL853/+J84++2z09/fjH//xH3HppZdi3759+bEz2bg6duxYKZpLAH7xi1/A7/fjtttuyx/jOCo/0xk/fX190HUd1dXVE87hZ9fMi8fj+Pa3v40///M/h8PhyB+/5ZZb0NLSgoaGBuzduxcPP/wwPvroo/w2EjrzTvQex7FUfl566SVUVVVh48aNRcc5nmbOZN+9K/2ziUF5mSicNQKyL8bxx6g07r33Xnz88cd45513io7fdNNN+X8vX74ca9aswYIFC/D6669PeCOn02/9+vX5f69YsQKXXHIJFi9ejJdeeimfRIfjqrw8//zzWL9+Pbxeb/4Yx1H5+izjh2Ns5qVSKdx8880wDAObNm0quu2uu+7K/3v58uVY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(123)\n", + "\n", + "# add a drift at each time step\n", + "rho = .1\n", + "\n", + "# random walk\n", + "x_1 = np.cumsum(np.random.normal(loc=rho, scale=1, size=200)) # GRW\n", + "x_1 = np.insert(x_1, 0, 0) # starting at 0\n", + "\n", + "plt.figure(figsize=(12, 3))\n", + "plt.plot(x_1, \"o-\", alpha=.4);\n", + "plt.xlabel(\"Time step (k)\");\n", + "plt.ylabel(\"$x_{1}$\");\n", + "sns.despine()" + ] + }, + { + "cell_type": "markdown", + "id": "86d7744f-bafd-4b65-9a31-15beb09e841b", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "#### Autoregressive processes\n", "\n", + "We can also assume that the generative process follows an [autoregressive model](https://en.wikipedia.org/wiki/Autoregressive_model), in which case the value of the next iteration is weighted by a coefficient and called by an intercept, often note $\\phi$ and $m$ (respectively) in the Matlab toolbox.\n", + "\n", + "\n", + "$$\n", + "x_1^{(k)} \\sim \\mathcal{N}(x_1^{(k-1)} + \\phi(m - x_1^{(k-1)}), \\sigma^2)\n", + "$$\n", + "\n", + "We repeat the same simulation below using $\\phi = .4$ and $m = 12.0$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "85c9972d-3e71-4737-9465-9f0f3d54b8ce", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "hide-input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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X/umm27S5ZdfrmnTpmnFihUqLS3Vww8/PODPu3v3bo0dO7bf57Zv367TTz9d5513nh599FE5HI6s50866aRjzggAAMCKHMffBQAA5Mr06dNls/XcQ6+trdWMGTPSH9vtdlVWVqq5uVmStHnzZr377rt9iqR1dXVpx44d/X6Pr3zlK7r88su1ZcsWzZ8/X5dcconmzZs3YEyHDh1SY2OjvvjFL+qGG25Ib4/FYiotLc3a97TTTkv/3+FwaO7cuXrrrbcG/NqhUCg9+t17+xlnnKHPf/7zuu+++/r9XK/Xq2AwOODXBgDAikjKAQCwMKfTmfWxYRj9bkskEpKkRCKhOXPm6Je//GWfr5Ua9e5twYIF2rNnj5599lmtXbtWn/zkJ7Vw4UL9x3/8R7/7p77XQw89pFNPPTXrObvdftyfyTCMAZ+rqqpSa2trn+1ut1vnnXeenn32WX3zm9/sd835kSNHNGXKlON+fwAArITp6wAAFJBTTjlF77zzjmpqavSBD3wg69F7FDtTdXW1rr32Wj322GNavny5HnzwQUnJtdqSsqqa19bW6qSTTtLOnTv7fI9UYbiUV155Jf3/WCymzZs3q6GhYcA4Zs+erTfffLPPdpvNpl/84heaM2eOzj33XL333nt99vnrX/+q2bNnD/i1AQCwIpJyAAAKyNVXX62qqipdfPHFevHFF7Vr1y6tX79et956q/bt29fv5/zbv/2bnn76ab377rt644039L//+7+aNm2aJKmmpkZer1fPPfecDh48qLa2NknSkiVLtHTpUt13333avn27Xn/9da1cuVLLli3L+to//vGPtXr1ar399ttauHChWltbdf311w8Y//nnn6+NGzf229rMbrfrl7/8pWbNmqVzzz1XTU1N6ed2796t/fv367zzzjvh3xkAALlEUg4AQAHx+XzasGGDxo8fr8suu0zTpk3T9ddfr1AoJL/f3+/nuFwuLV68WB/+8Id11llnyW63a9WqVZKS68B/+MMf6oEHHtDYsWN18cUXS5K+9KUv6ac//akeeeQRzZw5U2effbYeeeSRPiPl3/ve9/T9738/XRn96aefTld2789nPvMZOZ1OrV27tt/nHQ6HnnjiCU2fPl3nnntuei39E088ofnz52vChAkn/DsDACCXDNM0zVwHAQAACsvu3bs1adIkbd26Nav3+mDcf//9evrpp/X8888Pav9wOKypU6fqiSee0Omnn/43RAsAQO5Q6A0AAFjKP/3TP6m1tVXt7e19qsj3Z8+ePbrjjjtIyAEAeYmRcgAAMOTez0g5AACjCUk5AAAAAAA5QqE3AAAAAAByhKQcAAAAAIAcISkHAAAAACBHSMoBAAAAAMgRknIAAAAAAHKEpBwAAAAAgBwhKQcAAAAAIEdIygEAAAAAyBGScgAAAAAAcuT/AyiLESMBB6QpAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(123)\n", + "\n", + "phi, m = 0.4, 12.0\n", + "\n", + "# random walk with AR1 process\n", + "x_1 = [0.0]\n", + "for i in range(200):\n", + " x_1.append(\n", + " np.random.normal(x_1[i-1] + phi * (m - x_1[i-1]) , scale=1) \n", + " )\n", + "\n", + "plt.figure(figsize=(12, 3))\n", + "plt.plot(x_1, \"o-\", alpha=.4);\n", + "plt.xlabel(\"Time step (k)\");\n", + "plt.ylabel(\"$x_{1}$\");\n", + "sns.despine()" + ] + }, + { + "cell_type": "markdown", + "id": "b6505c14-61b0-4faa-81d1-016d2344fd88", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ "### Volatility coupling\n", - "Now, we can also decide to change that and let the variance itself being a stochastic process generated by another randome walk. The HGF fundamentaly captitalize on this notion and generalize the standard GRW by letting the variance $\\sigma^2$ being controlled by a higher level node." + "Now, we can also decide to change that and let the variance itself be a stochastic process generated by another random walk. The HGF fundamentally capitalise on this notion and generalizes the standard GRW by letting the variance $\\sigma^2$ be controlled by a higher-level node." ] }, { @@ -124,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "id": "1da6f085-191c-4b9d-b425-10a0f29d9fec", "metadata": { "tags": [ @@ -197,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "id": "a44fa090-e2b0-4029-969c-595e0083d09a", "metadata": { "tags": [ @@ -262,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "id": "f31781b8-d0f5-4007-befc-439ccdfb83a5", "metadata": { "editable": true, @@ -326,87 +464,39 @@ "sns.despine()" ] }, + { + "cell_type": "markdown", + "id": "cb7d2736-c868-46e3-90e2-e6bc37f61fe5", + "metadata": {}, + "source": [ + "## Dynamic beliefs updating\n", + "### The Hierarchical Gaussian Filter in a network of predictive nodes\n", + "The coding examples introduced above illustrated generative models that can simulate data forward from a given volatility structure, with key parameters stochastically fluctuating. Based on these principles, any given latent state in the world can be modelled as having a volatility parent state, a value parent state, both, or none. When the node is an orphan, it evolves as a Gaussian random walk around its previous value with a fixed step size. Consequently, when inferring the evolution of these states, the exact belief update equations (which include the computation of new predictions, posterior values, and prediction errors, and represent an approximate inversion of this generative model, see {cite:p}`2011:mathys` depend on the nature of the coupling of a given state with its parent and children states. In particular, the nodes that implement the belief updates will communicate with their value parents via value prediction errors, or **VAPE**s, and volatility prediction errors, or **VOPE**s, with their volatility parents. Hierarchical Gaussian Filters use this as a model of the environment to make sense of new observations, also referred to as the sensory part of the HGF, or the filtering part. In this situation, new observations are coming in at the network's root and the model updates the belief structure accordingly (from bottom to top nodes). It is therefore straightforward to describe the standard two-level and three-level Hierarchical Gaussian Filters for continuous and binary inputs as the combination of value and volatility couplings (see {ref}`hgf-fig`)" + ] + }, { "cell_type": "markdown", "id": "1e76a017-b0a0-4d2a-a931-c760b14970df", "metadata": {}, "source": [ - "Based on these principles, any given state in the world can be modelled as having a volatility parent state, a value parent state, both, or none. When the node is an orphan, it evolves as a Gaussian random walk around its previous value with a fixed step size. Consequently, when inferring on the evolution of these states, the exact belief update equations (which include the computation of new predictions, posterior values, and prediction errors, and represent an approximate inversion of this generative model, see {cite:p}`2011:mathys` depend on the nature of the coupling of a given state with its parent and children states. In particular, the nodes that implement the belief updates will communicate with their value parents via value prediction errors, or **VAPE**s, and via volatility prediction errors, or **VOPE**s, with their volatility parents.\n", - "\n", "```{figure} ../images/hgf.png\n", "---\n", "name: hgf-fig\n", "---\n", - "The two-level and three-level Hierarchical Gaussian Filters for binary or continuous inputs, as described in {cite:p}`2014:mathys,2011:mathys`. The binary HGF has the particularity that it uses a sigmoid transform in the input node to convert continuous values into binary probabilities. For both models, volatility coupling is depicted with dashed lines, and value coupling with straight lines. The three-level HGF has one volatility layer more than the two-level HGF.\n", - "```\n", - "\n", - "```{hint}\n", - "A one-level HGF for continuous input is a [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter).\n", + "The two-level and three-level Hierarchical Gaussian Filters for binary or continuous inputs, as described in {cite:p}`2014:mathys,2011:mathys`. The binary HGF has the particularity that it uses a sigmoid transform in the input node to convert continuous values into binary probabilities. For both models, volatility coupling is depicted with dashed lines, and value coupling with straight lines. The three-level HGF has one volatility layer more than the two-level HGF, which is used to estimate higher-order uncertainty.\n", "```" ] }, { "cell_type": "markdown", - "id": "2bbc9839-3a71-4673-a3b1-e07d94007cb3", + "id": "427556c3-b80b-4588-af42-5dbe67c1ffc8", "metadata": {}, "source": [ - "Still assuming that Node $i$ is the value child of Node $i+1$, the prediction step consists of the following computations:\n", - "\n", - ":label: vape-prediction\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\hat{\\mu}_i^{(k+1)} &= \\mu_i^{(k)} + \\alpha_{i,i+1} \\mu_{i+1}^{(k)}\\\\\n", - "\\hat{\\pi}_i^{(k+1)} &= \\frac{1}{\\frac{1}{\\pi_i^{(k)}} + \\nu_i^{(k+1)} }\n", - "\\end{align}\n", - "$$\n", - "\n", - "with\n", - "\n", - "$$\n", - "\\begin{equation}\n", - "\\nu_i^{(k+1)} = \\exp(\\omega_i).\n", - "\\end{equation}\n", - "$$\n", - "\n", - "Note that if Node $i$ additionally has a {term}`VOPE` parent node, the estimated volatility $\\nu_i^{(k+1)}$ that enters the precision update would also depend on the posterior mean of that volatility parent (cf. {ref}`vope-prediction`).\n", - "\n", - "In general, the prediction of the mean will depend only on whether Node $i$ has a value parent or not, whereas the prediction of the precision only depends on whether Node $i$ has a volatility parent or not.\n", - "\n", - "Thus, the {ref}`vape-prediction` only depends on knowing the node's own posteriors and receiving the value parent's posterior in time before the new input arrives.\n", - "\n", - "For example, the three-level continuous HGF that is illustrated [above](hgf-fig) is built on top of the following generative model:\n", - "\n", - "$$\n", - "\\begin{align}\n", - "u^{(k)} &\\sim \\mathcal{N}(u^{(k)} | x_1^{(k)}, \\, \\sigma_u) \\\\\n", - "x_1^{(k)} &\\sim \\mathcal{N}(x_1^{(k)} | x_1^{(k-1)} + \\alpha_{2,1} x_2^{(k)}, \\, \\exp(\\kappa_1 \\check{x}_1^{(k)} + \\omega_1)) \\\\\n", - "\\check{x}_1^{(k)} &\\sim \\mathcal{N}(\\check{x}_1^{(k)} | \\check{x}_1^{(k-1)} + \\alpha_{3,\\check{1}} x_3^{(k)}, \\, \\exp(\\omega_{\\check{1}})) \\\\\n", - "x_2^{(k)} &\\sim \\mathcal{N}(x_2^{(k)} | x_2^{(k-1)}, \\, \\exp(\\kappa_2 \\check{x}_2^{(k)} + \\omega_2)) \\\\\n", - "\\check{x}_2^{(k)} &\\sim \\mathcal{N}(\\check{x}_2^{(k)} | \\check{x}_2^{(k-1)}, \\, \\exp(\\omega_{\\check{2}})) \\\\\n", - "x_3^{(k)} &\\sim \\mathcal{N}(x_3^{(k)} | x_3^{(k-1)}, \\, \\exp(\\kappa_3 \\check{x}_3^{(k)} + \\omega_3)) \\\\\n", - "\\check{x}_3^{(k)} &\\sim \\mathcal{N}(\\check{x}_3^{(k)} | \\check{x}_3^{(k-1)}, \\, \\exp(\\omega_{\\check{3}})) \\\\\n", - "\\end{align}\n", - "$$\n", + "```{hint}\n", + "Hierarchical Gaussian Filters are inspired by other simpler models for Bayesian filtering and reinforcement learning. These models can be seen for example as generalisation of the [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter) or the [Rescorla-Wagner model](https://en.wikipedia.org/wiki/Rescorla%E2%80%93Wagner_model). Specifically:\n", "\n", - "Note that in this example, all states that are value parents of other states (or outcomes) have their own volatility parent, while states that are volatility parents to other nodes either have a value parent (as state $\\check{x}_1$), or no parents (as states $\\check{x}_2$ and $\\check{x}_3$). This is deliberately so, and we will see these two motifs - every state of a hierarchy has its own volatility estimation, and volatility states only have value parents - reappear in the following chapters." - ] - }, - { - "cell_type": "markdown", - "id": "cb7d2736-c868-46e3-90e2-e6bc37f61fe5", - "metadata": {}, - "source": [ - "## Belief updates in the HGF: Computations of nodes" - ] - }, - { - "cell_type": "markdown", - "id": "7cab126a-ae8e-4487-98d0-8af8e70e6e8d", - "metadata": {}, - "source": [ - "```{note}\n", - "The update equations for volatility and value coupling in the generalized hierarchical Gaussian filter have been described in {cite:p}`weber:2023`.\n", + "* A one-level HGF for continuous input can be seen as a [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter). \n", + "* A two-level binary HGF can be seen as a [Rescorla-Wagner](https://en.wikipedia.org/wiki/Rescorla%E2%80%93Wagner_model) model with an adaptive learning rate that depends on the precision of the belief.\n", "```" ] }, @@ -417,11 +507,9 @@ "tags": [] }, "source": [ - "The coding examples introduced above illustrated generative models that can simulate data forward from a given volatility structure, with key parameters stochastically fluctuating. HGFs use this as a model of the environment to make sense of new observations, also referred to as the sensory part of the HGF, or the filtering part. In this situation, new observations are coming in and the model has to update the volatility structure accordingly (from bottom to top nodes).\n", + "### The propagation of prediction and prediction errors\n", "\n", - "In its first description, {cite:p}2011:mathys derived a set of simple, one-step update equations that represent changes in beliefs about the hidden states (i.e. the sufficient statistics of the nodes) specified in the generative model. For each state, a belief is held (and updated for every new input) by the agent and described as a Gaussian distribution, fully characterized by its mean\n", - "and its inverse variance, or precision,\n", - "on a given trial (this is the notation we have been using in the previous examples). We conceptualize each belief as a node in a network, where belief updates involve computations within nodes as well as message passing between nodes. The computations of any observation at each time point can be ordered in time as shown in the [belief update algorithm](#belief-update):" + "Having described the model as a specific configuration of predictive nodes offer many advantages, especially in term of modularity for the user. However, the model itself is not limited to the description of the generative process that we covered in the previous examples. The most interesting, and also the more complex, part of the modelling consists of the capability for the network to update the hierarchical structure in a Bayesian optimal way as new observations are presented. These steps are defined by a set of simple, one-step update equations that represent changes in beliefs about the hidden states (i.e. the sufficient statistics of the nodes) specified in the generative model. These equations were first described in {cite:t}`2011:mathys`, and the update equations for volatility and value coupling in the generalized Hierarchical Gaussian filter (on which most of the update functions in [pyhgf](https://github.com/ilabcode/pyhgf) are based) have been described in {cite:p}`weber:2023`. The exact computations in each step especially depend on the nature of the coupling (via {term}`VAPE`s vs. {term}`VOPE`s) between the parent and children nodes. It is beyond the scope of this tutorial to dive into the derivation of these steps and we refer the interested reader to the mentioned papers. Here, we provide a general overview of the dynamic of the update sequence that supports belief updating. The computations triggered by any observation at each time point can be ordered in time as shown in the [belief update algorithm](#belief-update)." ] }, { @@ -432,27 +520,25 @@ "```{note} Belief update\n", ":name: belief-update\n", "\n", - "For $i$ a {term}`node` in a probabilistic network at time $k$, with children at $i-1$ and parent at $i+1$\n", - "\n", - "1. {term}`Prediction`\n", - " Compute $\\mathrm{prediction}^{(k)}_i$ \n", - " ← receive $\\mathrm{PE}^{(k)}_{i-1}$ from $\\mathrm{node}_{i-1}$\n", - "\n", - "2. Update \n", - " compute $\\mathrm{posterior}^{(k)}_i$ \n", - " **given** $\\mathrm{PE}^{(k)}_{i-1}$ and $\\mathrm{prediction}^{(k)}_i$ \n", - " → send $\\mathrm{posterior}^{(k)}_i$ to $\\mathrm{node}_{i-1}$\n", - "\n", - "3. {term}`prediction error` \n", - " compute $\\mathrm{PE}^{(k)}_i$ \n", - " **given** $\\mathrm{prediction}^{(k)}_i$ and $\\mathrm{posterior}^{(k)}_i$ \n", - " → send $\\mathrm{PE}^{(k)}_i$ to $\\mathrm{node}_{i+1}$ \n", - " ← receive $\\mathrm{posterior}^{(k)}_{i+1}$ from $\\mathrm{node}_{i+1}$ \n", - "\n", - "4. {term}`Prediction` \n", - " compute $\\mathrm{prediction}^{(k+1)}_i$ \n", - " **given** $\\mathrm{posterior}^{(k)}_i$ and $\\mathrm{posterior}^{(k)}_{i+1}$ \n", - "\n", + "Let's consider a simple network containing $x_{node}$ be a {term}`node`, defined at time $k$, with children nodes defined at $x_{children}$ and parent at $x_{parent}$. The standard approach to update this network upon the presentation of a new observation is:\n", + "\n", + "1. {term}`Prediction` step\n", + " For $n$ in the network, starting from the leaves to the roots: \n", + " Given the time elapsed since the last update \n", + " Given the the posterior value of the node $n$ \n", + " Given the prediction from the parent nodes \n", + " - Compute the *expected_mean* and *expected precision*\n", + "\n", + "2. Beliefs propagation step \n", + "For $n$ in the network, starting from the roots to the leaves: \n", + " 1. {term}`Update` step\n", + " Given the prediction errors received from the child nodes \n", + " - Compute the new sufficient statistics for node $n$\n", + " 2. {term}`prediction error`\n", + " Given the new posterior from the update step \n", + " Given the expectation from the prediction step\n", + " - Compute a new prediction error ({term}`VAPE` or {term}`VOPE`\n", + " - Send it to the parent node\n", "```" ] }, @@ -467,275 +553,8 @@ "tags": [] }, "source": [ - "The exact computations in each step depend on the nature of the coupling (via {term}`VAPE`s vs. {term}`VOPE`s) between the parent and children nodes.\n", - "\n", "```{important}\n", - "We have placed the {term}`Prediction` step at the end of the update loop. This is because usually, we think about the beginning of a timepoint trial as starting with receiving a new input, and of a prediction as being present before that input is received (this is especially relevant to model time points as a trial in an experiment). However, in some variants of the HGF the prediction also depends on the time that has passed in between trials, which is something that can only be evaluated once the new input arrives - hence the additional computation of the (current) prediction at the beginning of the trial. Conceptually, it makes most sense to think of the prediction as happening continuously between trials. For implementational purposes, it is however most convenient to only compute the prediction once the new input (and with it its arrival time) enters. This ensures both that the posterior means of parent nodes have had enough time to be sent back to their children for preparation for the new input, and that the arrival time of the new input can be taken into account appropriately.\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "55efe417-d0dd-4c62-8b97-bbe0d11fb329", - "metadata": {}, - "source": [ - "## Computations for VAPE coupling\n", - "\n", - "The exact computations of the {term}`Update` depend on the nature of the coupling with the child node(s), while both the {term}`Prediction error` and the {term}`Prediction` step depend on the coupling with the parent node(s).\n", - "\n", - "```{admonition} Update\n", - ":class: dropdown\n", - "\n", - "If Node $i$ is the value parent of Node $i-1$, then the following update equations apply to Node $i$:\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\pi_i^{(k)} &= \\hat{\\pi}_i^{(k)} + \\alpha_{i-1,i}^2 \\hat{\\pi}_{i-1}^{(k)}\\\\\n", - "\\mu_i^{(k)} &= \\hat{\\mu}_i^{(k)} + \\frac{\\alpha_{i-1,i}^2 \\hat{\\pi}_{i-1}^{(k)}} {\\alpha_{i-1,i}^2 \\hat{\\pi}_{i-1}^{(k)} + \\hat{\\pi}_{i}^{(k)}} \\delta_{i-1}^{(k)}\n", - "\\end{align}\n", - "$$\n", - "\n", - "We note here that we can let the update of the precision happen first, and therefore use it for the update of the mean:\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\pi_i^{(k)} &= \\hat{\\pi}_i^{(k)} + \\alpha_{i-1,i}^2 \\hat{\\pi}_{i-1}^{(k)}\\\\\n", - "\\mu_i^{(k)} &= \\hat{\\mu}_i^{(k)} + \\frac{\\alpha_{i-1,i}^2 \\hat{\\pi}_{i-1}^{(k)}} {\\pi_i^{(k)}} \\delta_{i-1}^{(k)}\n", - "\\end{align}\n", - "$$\n", - "\n", - "In sum, at the time of the update, Node $i$ needs to have access to the following quantities:\n", - "\n", - "* Its own predictions: $\\hat{\\mu}_i^{(k)}$, $\\hat{\\pi}_i^{(k)}$ \n", - "* Coupling strength: $\\alpha_{i-1,i}$ \n", - "* From level below: $\\delta_{i-1}^{(k)}$, $\\hat{\\pi}_{i-1}^{(k)}$ \n", - "\n", - "All of these are available at the time of the update. Node $i$ therefore only needs to receive the PE and the predicted precision from the level below to perform its update.\n", - "\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "a4f14032-58c7-4a02-b3fa-1b509c213027", - "metadata": {}, - "source": [ - "```{admonition} Prediction error\n", - ":class: dropdown\n", - "\n", - "We will assume in the following, that Node $i$ is the value child of Node $i+1$. Then the following quantities have to be sent up to Node $i+1$ (cf. necessary information from level below in a value parent):\n", - "\n", - "* Predicted precision: $\\hat{\\pi}_{i}^{(k)}$\n", - "* Prediction error: $\\delta_{i}^{(k)}$\n", - "\n", - "Node $i$ has already performed the **PREDICTION step** on the previous trial, so it has already computed the predicted precision of the current trial, $\\hat{\\pi}_{i}^{(k)}$. Hence, in the **PE step**, it needs to perform only the following calculation:\n", - "\n", - "$$\n", - "\\begin{equation}\n", - "\\delta_i^{(k)} = \\mu_i^{(k)} - \\hat{\\mu}_i^{(k)}\n", - "\\end{equation}\n", - "$$\n", - "\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "b5a22aa0-4c68-4948-be22-da0587a97368", - "metadata": {}, - "source": [ - "```{admonition} Prediction\n", - ":class: dropdown\n", - "\n", - "Still assuming that Node $i$ is the value child of Node $i+1$, the prediction step consists of the following computations:\n", - "\n", - ":label: vape-prediction\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\hat{\\mu}_i^{(k+1)} &= \\mu_i^{(k)} + \\alpha_{i,i+1} \\mu_{i+1}^{(k)}\\\\\n", - "\\hat{\\pi}_i^{(k+1)} &= \\frac{1}{\\frac{1}{\\pi_i^{(k)}} + \\nu_i^{(k+1)} }\n", - "\\end{align}\n", - "$$\n", - "\n", - "with\n", - "\n", - "$$\n", - "\\begin{equation}\n", - "\\nu_i^{(k+1)} = \\exp(\\omega_i).\n", - "\\end{equation}\n", - "$$\n", - "\n", - "Note that if Node $i$ additionally has a {term}`VOPE` parent node, the estimated volatility $\\nu_i^{(k+1)}$ that enters the precision update would also depend on the posterior mean of that volatility parent (cf. {ref}`vope-prediction`).\n", - "\n", - "In general, the prediction of the mean will depend only on whether Node $i$ has a value parent or not, whereas the prediction of the precision only depends on whether Node $i$ has a volatility parent or not.\n", - "\n", - "Thus, the {ref}`vape-prediction` only depends on knowing the node's own posteriors and receiving the value parent's posterior in time before the new input arrives.\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "d7236b44-cce3-4c8b-8d1b-7e4651559519", - "metadata": {}, - "source": [ - "## Computations for VOPE coupling\n", - "\n", - "As in the case of {term}`VAPE` coupling, the exact computations of the [vope update](#vope-update) depend on the nature of the coupling with the child node(s), while both the [vope pe](#vope-pe) and the [vope prediction](#vope-prediction) depend on the coupling with the parent node(s).\n", - "\n", - "To describe the computations entailed by {term}`VOPE` coupling, we will introduce two changes to the notation. First of all, we will express the volatility prediction error ({term}`VOPE`) as a function of the previously defined value prediction error ({term}`VAPE`). That means from now on, we will use the character $\\delta_i$ only for {term}`VAPE`.\n", - "\n", - "$$\n", - "\\begin{equation}\n", - "\\delta_i^{(k)} \\equiv \\delta_i^{(k, VAPE)} = \\mu_i^{(k)} - \\hat{\\mu}_i^{(k)},\n", - "\\end{equation}\n", - "$$\n", - "\n", - "and introduce a new character $\\Delta_i$ for {term}`VOPE`, which we define as\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " \\begin{split}\n", - " \\Delta_i^{(k)} \\equiv \\delta_i^{(k, VOPE)} &= \\frac{ \\frac{1}{\\pi_{i}^{(k)}} + (\\mu_i^{(k)} - \\hat{\\mu}_i^{(k)})^2 }{ \\frac{1}{\\pi_{i}^{(k-1)}} + \\nu_{i}^{(k)} } - 1 \\\\\n", - " &= \\hat{\\pi}_i^{(k)} \\left( \\frac{1}{\\pi_{i}^{(k)}} + (\\mu_i^{(k)} - \\hat{\\mu}_i^{(k)})^2 \\right) - 1 \\\\\n", - " &= \\hat{\\pi}_i^{(k)} \\left( \\frac{1}{\\pi_{i}^{(k)}} + (\\delta_i^{(k)})^2 \\right) - 1 \\\\\n", - " &= \\frac{\\hat{\\pi}_i^{(k)}}{\\pi_{i}^{(k)}} + \\hat{\\pi}_i^{(k)} (\\delta_i^{(k)})^2 - 1. \\\\\n", - " \\end{split}\n", - "\\end{equation}\n", - "$$\n", - "\n", - "Note that from the first to the second line, we have used the following definition:\n", - "\n", - "$$\n", - "\\begin{equation*}\n", - "\\hat{\\pi}_{i-1}^{(k)} = \\frac{1}{ \\frac{1}{\\pi_{i-1}^{(k-1)}} + \\nu_{i-1}^{(k)} }.\n", - "\\end{equation*}\n", - "$$\n", - "\n", - "This ensures that a given node does not need to have access to the posterior precision from the level below: $\\pi_{i-1}^{(k-1)}$, which facilitates implementation.\n", - "\n", - "In sum, we are introducing a second prediction error unit $\\Delta_i$ which is concerned with deviations from predicted uncertainty and is informed by value prediction errors and other estimates of uncertainty. It is this prediction error - a function of the unweighted (squared) value prediction error with a new precision weight - which communicates between a level's nodes and a level's volatility parent's nodes.\n", - "\n", - "Second, we will introduce another quantity, which we term the (auxiliary) expected precision\n", - "\n", - "$$\n", - "\\begin{equation}\n", - "\\gamma_i^{(k)} = \\nu_i^{(k)} \\hat{\\pi}_i^{(k)},\n", - "\\end{equation}\n", - "$$\n", - "\n", - "which will be computed as part of the [vope preditions](#vope-prediction) and only serves to simplify the equations and the corresponding message passing." - ] - }, - { - "cell_type": "markdown", - "id": "9a6d7ee1-fbd6-4d7b-af11-636c2e5a78e3", - "metadata": {}, - "source": [ - "```{admonition} Update\n", - ":class: dropdown\n", - ":name: vope-update\n", - "\n", - "If Node $i$ is the volatility parent of Node $i-1$, then the following update equations apply to Node $i$:\n", - "\n", - "$$\n", - "\\begin{align*}\n", - "\\pi_i^{(k)} &= \\hat{\\pi}_i^{(k)}\n", - "+ \\frac{1}{2}(\\kappa_{i-1} \\nu_{i-1}^{(k)} \\hat{\\pi}_{i-1}^{(k)})^2\n", - "* (1 + (1 - \\frac{1}{\\pi_{i-1}^{(k-1)} \\nu_{i-1}^{(k)}})\n", - "\\delta_{i-1}^{(k)})\\\\\n", - "&= \\hat{\\pi}_i^{(k)}\n", - "+ \\frac{1}{2}(\\kappa_{i-1} \\nu_{i-1}^{(k)} \\hat{\\pi}_{i-1}^{(k)})^2\n", - "* (1 + (2 - \\frac{1}{\\hat{\\pi}_{i-1}^{(k)} \\nu_{i-1}^{(k)}})\n", - "\\delta_{i-1}^{(k)})\\\\\n", - "\\mu_i^{(k)} &= \\hat{\\mu}_i^{(k)}\n", - "+ \\frac{1}{2}\\kappa_{i-1} \\nu_{i-1}^{(k)}\n", - "\\frac{\\hat{\\pi}_{i-1}^{(k)}}{\\pi_{i}^{(k)}} \\delta_{i-1}^{(k)},\n", - "\\end{align*}\n", - "$$\n", - "\n", - "where we have again used the definition of the predicted precision $\\hat{\\pi}_{i-1}^{(k)}$ to derive an expression for the posterior precision from the previous trial $\\pi_{i-1}^{(k-1)}$:\n", - "\n", - "$$\n", - "\\begin{align*}\n", - "\\hat{\\pi}_{i-1}^{(k)} &= \\frac{1}{ \\frac{1}{\\pi_{i-1}^{(k-1)}} + \\nu_{i-1}^{(k)} }\\\\\n", - "\\Leftrightarrow \\pi_{i-1}^{(k-1)} &= \\frac{1}{ \\frac{1}{\\hat{\\pi}_{i-1}^{(k)}} - \\nu_{i-1}^{(k)} }.\n", - "\\end{align*}\n", - "$$\n", - "\n", - "With the changes from above, namely the definitions of the \\textsf{VOPE} $\\Delta_i$ and the expected precision $\\gamma_i^{(k)}$, the update equations for the precision and the mean in volatility coupling simplify to:\n", - "\\vspace{0.5cm}\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\pi_i^{(k)} &= \\hat{\\pi}_i^{(k)}\n", - "+ \\frac{1}{2} (\\kappa_{i,i-1} \\gamma_{i-1}^{(k)})^2\n", - "+ (\\kappa_{i,i-1} \\gamma_{i-1}^{(k)})^2 \\Delta_{i-1}^{(k)}\n", - "- \\frac{1}{2} \\kappa_{i,i-1}^2 \\gamma_{i-1}^{(k)} \\Delta_{i-1}^{(k)}\\\\\n", - "\\mu_i^{(k)} &= \\hat{\\mu}_i^{(k)}\n", - "+ \\frac{1}{2} \\frac{\\kappa_{i,i-1} \\gamma_{i-1}^{(k)}}{\\pi_i^{(k)}} \\Delta_{i-1}^{(k)}\n", - "\\end{align}\n", - "$$\n", - "\n", - "\n", - "Therefore, at the time of the update, Node $i$ needs to have access to the following quantities:\n", - "\n", - "* Its own predictions: $\\hat{\\mu}_i^{(k)}$, $\\hat{\\pi}_i^{(k)}$\n", - "* Coupling strength: $\\kappa_{i,i-1}$\n", - "* From level below: $\\Delta_{i-1}^{(k)}$, $\\gamma_{i-1}^{(k)}$\n", - "\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "50ac4684-5cd8-4e0a-827c-513f04f2e444", - "metadata": {}, - "source": [ - "```{admonition} Prediction-error\n", - ":class: dropdown\n", - ":name: vope-pe\n", - "\n", - "The exact computation of the prediction error depends, like the computation of the new prediction, on the nature of the coupling with the parent nodes. We will therefore assume in the following, that Node $i$ is the volatility child of Node $i+1$. Then the following quantities have to be sent up to Node $i+1$ (see also necessary information from level below in a volatility parent):\n", - "\n", - "* Expected precision: $\\gamma_{i}^{(k)}$\n", - "* Prediction error: $\\Delta_{i}^{(k)}$\n", - "\n", - "Node $i$ has already performed the {ref}`vope-prediction` on the previous trial, so it has already computed the predicted precision, $\\hat{\\pi}_{i}^{(k)}$, and the volatiliy estimate, $\\nu_i^{(k)}$, and out of these the expected precision, $\\gamma_{i}^{(k)}$, for the current trial. Hence, in the **PE step**, it needs to perform only the following calculations:\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\delta_i^{(k)} &= \\mu_i^{(k)} - \\hat{\\mu}_i^{(k)}\\\\\n", - "\\Delta_i^{(k)} &= \\frac{\\hat{\\pi}_i^{(k)}}{\\pi_{i}^{(k)}} + \\hat{\\pi}_i^{(k)} (\\delta_i^{(k)})^2 - 1.\n", - "\\end{align}\n", - "$$\n", - "\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "e8532acf-07d3-4fe3-89fb-0d6ee7538865", - "metadata": {}, - "source": [ - "```{admonition} Prediction\n", - ":class: dropdown\n", - ":name: vope-prediction\n", - "\n", - "Still assuming that Node $i$ is the volatility child of Node $i+1$, the prediction consists of the following simple computations:\n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\hat{\\mu}_i^{(k+1)} &= \\mu_i^{(k)}\\\\\n", - "\\nu_i^{(k+1)} &= \\exp(\\kappa_i \\mu_{i+1}^{(k)} + \\omega_i)\\\\\n", - "\\hat{\\pi}_i^{(k+1)} &= \\frac{1}{\\frac{1}{\\pi_i^{(k)}} + \\nu_i^{(k+1)} }\\\\\n", - "\\gamma_i^{(k+1)} &= \\nu_i^{(k+1)} \\hat{\\pi}_i^{(k+1)}\n", - "\\end{align}\n", - "$$\n", - "\n", - "Thus, the prediction for trial $k+1$ depends again only on receiving the posterior mean of Node $i+1$ on trial $k$, and knowing the Node's own posteriors.\n", - "\n", - "Note that if Node $i$ additionally has a {term}`VAPE` parent node, the prediction of the new mean, $\\hat{\\mu}_i^{k+1}$ would also depend on the posterior mean of that value parent (cf. {ref}`vape-prediction`).\n", + "We have placed the {term}`Prediction` step at the beginning of the update loop to account that the prediction depends on the time that has passed in between trials, which is something that can only be evaluated once the new input arrives. This is because we usually think about the beginning of a trial/time point as starting with receiving a new input and of a prediction as being present before that input is received. For implementational purposes, it is most convenient to only compute the prediction once the new input (and with it its arrival time) enters. However, it makes most sense to think of the prediction as happening continuously between the time points, but this is not something that is tracked continuously by the model.\n", "```" ] }, @@ -779,7 +598,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "id": "b29ec7fb-2a4b-4d64-ac66-426f3bc9b6d5", "metadata": {}, "outputs": [ @@ -787,19 +606,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Last updated: Wed Aug 09 2023\n", + "Last updated: Fri Oct 13 2023\n", "\n", "Python implementation: CPython\n", "Python version : 3.9.16\n", "IPython version : 8.14.0\n", "\n", - "pyhgf : 0.0.4\n", - "jax : 0.4.13\n", - "jaxlib: 0.4.13\n", + "pyhgf : 0.0.9\n", + "jax : 0.4.14\n", + "jaxlib: 0.4.14\n", "\n", + "seaborn : 0.12.2\n", "matplotlib: 3.7.1\n", "numpy : 1.22.0\n", - "seaborn : 0.12.2\n", "\n", "Watermark: 2.4.3\n", "\n" diff --git a/docs/source/notebooks/0-Theory.md b/docs/source/notebooks/0-Theory.md index 0c5b82307..8b545a5d7 100644 --- a/docs/source/notebooks/0-Theory.md +++ b/docs/source/notebooks/0-Theory.md @@ -5,7 +5,7 @@ jupytext: extension: .md format_name: myst format_version: 0.13 - jupytext_version: 1.14.7 + jupytext_version: 1.15.1 kernelspec: display_name: Python 3 (ipykernel) language: python @@ -13,13 +13,18 @@ kernelspec: --- (theory)= -# An introduction to the Hierarchical Gaussian Filter -In this notebook, we introduce the main concepts on which the Hierarchical Gaussian Filter (HGF) is based. We describe the main equations and illustrate the examples with Python code. We start with the generative model of the HGF, which describes how the model assumes that the data is being generated. This generative structure is then used to filter the observation (i.e. the sensory part of the model), which is then used by the agent to produce behaviours (i.e. the action part of the model). Next, we show how this model can be "inverted" and used by an agent to infer parameter values that generated the sensory inputs. From there, we discuss the notion of prediction error and how derivations of the model can be used to infer probability densities given observed behavioural outcomes. +# Introduction to the Hierarchical Gaussian Filter +In this notebook, we introduce the main concepts on which the Hierarchical Gaussian Filter (HGF) is based. We describe the main equations and illustrate the examples with Python code. We start with the generative model of the HGF, which describes how the model assumes that the data is being generated. This generative structure is then used to filter the observation (i.e. the sensory part of the model), which is then used by the agent to produce behaviours (i.e. the action part of the model). Next, we show how this model can be "inverted" and used by an agent to infer parameter values that generate the sensory inputs. From there, we discuss the notion of prediction error and how derivations of the model can be used to infer probability densities given observed behavioural outcomes. -+++ +```{code-cell} ipython3 +import matplotlib.pyplot as plt +import numpy as np +import seaborn as sns +``` ## The generative model +### Gaussian Random Walks To illustrate the generative model on which the HGF is based, we will start with a simple two-level continuous HGF (see also the tutorial {ref}`continuous_hgf`). The generative model that underpins the continuous HGF is a generalisation of the [Gaussian Random Walk](https://en.wikipedia.org/wiki/Random_walk#Gaussian_random_walk) (GRW). A GRW generate a new observation $x_1^{(k)}$ at each time step $k$ from a normal distribution and using the previous observation $x_1^{(k-1)}$ such as: $$ @@ -31,10 +36,6 @@ where $\sigma^2$ is the variance of the distribution. In the example below, we u ```{code-cell} ipython3 :tags: [hide-input] -import matplotlib.pyplot as plt -import numpy as np -import seaborn as sns - np.random.seed(123) # random walk @@ -48,10 +49,79 @@ plt.ylabel("$x_{1}$"); sns.despine() ``` -This simple process will be our first building block. Importantly here, the variability of the sensory input is constant across time: even if we don't know exactly in which direction the time series is going to move in the future, we know that is is unlikely to make certain kind of big jumps, because it is controlled by a fixed parameter, the variance $\sigma^2$. +This simple process will be our first building block. Importantly here, the variability of the sensory input is constant across time: even if we don't know exactly in which direction the time series is going to move in the future, we know that it is unlikely to make certain kinds of big jumps because it is controlled by a fixed parameter, the variance $\sigma^2$. + ++++ + +#### Adding a drift to the random walk + +The Gaussian random walk can be further parametrized by adding a drift over time. This value, often noted $\rho$, will be added at each time step: + +$$ +x_1^{(k)} \sim \mathcal{N}(x_1^{(k-1)} + \rho, \sigma^2) +$$ + +We run the same simulation using $\rho = 0.1$ in the cell below: + +```{code-cell} ipython3 +np.random.seed(123) + +# add a drift at each time step +rho = .1 + +# random walk +x_1 = np.cumsum(np.random.normal(loc=rho, scale=1, size=200)) # GRW +x_1 = np.insert(x_1, 0, 0) # starting at 0 + +plt.figure(figsize=(12, 3)) +plt.plot(x_1, "o-", alpha=.4); +plt.xlabel("Time step (k)"); +plt.ylabel("$x_{1}$"); +sns.despine() +``` + ++++ {"editable": true, "slideshow": {"slide_type": ""}} + +#### Autoregressive processes + +We can also assume that the generative process follows an [autoregressive model](https://en.wikipedia.org/wiki/Autoregressive_model), in which case the value of the next iteration is weighted by a coefficient and called by an intercept, often note $\phi$ and $m$ (respectively) in the Matlab toolbox. + + +$$ +x_1^{(k)} \sim \mathcal{N}(x_1^{(k-1)} + \phi(m - x_1^{(k-1)}), \sigma^2) +$$ + +We repeat the same simulation below using $\phi = .4$ and $m = 12.0$. + +```{code-cell} ipython3 +--- +editable: true +slideshow: + slide_type: '' +tags: [hide-input] +--- +np.random.seed(123) + +phi, m = 0.4, 12.0 + +# random walk with AR1 process +x_1 = [0.0] +for i in range(200): + x_1.append( + np.random.normal(x_1[i-1] + phi * (m - x_1[i-1]) , scale=1) + ) + +plt.figure(figsize=(12, 3)) +plt.plot(x_1, "o-", alpha=.4); +plt.xlabel("Time step (k)"); +plt.ylabel("$x_{1}$"); +sns.despine() +``` + ++++ {"editable": true, "slideshow": {"slide_type": ""}} ### Volatility coupling -Now, we can also decide to change that and let the variance itself being a stochastic process generated by another randome walk. The HGF fundamentaly captitalize on this notion and generalize the standard GRW by letting the variance $\sigma^2$ being controlled by a higher level node. +Now, we can also decide to change that and let the variance itself be a stochastic process generated by another random walk. The HGF fundamentally capitalise on this notion and generalizes the standard GRW by letting the variance $\sigma^2$ be controlled by a higher-level node. +++ {"editable": true, "slideshow": {"slide_type": ""}} @@ -214,351 +284,64 @@ axs[0].legend() sns.despine() ``` -Based on these principles, any given state in the world can be modelled as having a volatility parent state, a value parent state, both, or none. When the node is an orphan, it evolves as a Gaussian random walk around its previous value with a fixed step size. Consequently, when inferring on the evolution of these states, the exact belief update equations (which include the computation of new predictions, posterior values, and prediction errors, and represent an approximate inversion of this generative model, see {cite:p}`2011:mathys` depend on the nature of the coupling of a given state with its parent and children states. In particular, the nodes that implement the belief updates will communicate with their value parents via value prediction errors, or **VAPE**s, and via volatility prediction errors, or **VOPE**s, with their volatility parents. +## Dynamic beliefs updating +### The Hierarchical Gaussian Filter in a network of predictive nodes +The coding examples introduced above illustrated generative models that can simulate data forward from a given volatility structure, with key parameters stochastically fluctuating. Based on these principles, any given latent state in the world can be modelled as having a volatility parent state, a value parent state, both, or none. When the node is an orphan, it evolves as a Gaussian random walk around its previous value with a fixed step size. Consequently, when inferring the evolution of these states, the exact belief update equations (which include the computation of new predictions, posterior values, and prediction errors, and represent an approximate inversion of this generative model, see {cite:p}`2011:mathys` depend on the nature of the coupling of a given state with its parent and children states. In particular, the nodes that implement the belief updates will communicate with their value parents via value prediction errors, or **VAPE**s, and volatility prediction errors, or **VOPE**s, with their volatility parents. Hierarchical Gaussian Filters use this as a model of the environment to make sense of new observations, also referred to as the sensory part of the HGF, or the filtering part. In this situation, new observations are coming in at the network's root and the model updates the belief structure accordingly (from bottom to top nodes). It is therefore straightforward to describe the standard two-level and three-level Hierarchical Gaussian Filters for continuous and binary inputs as the combination of value and volatility couplings (see {ref}`hgf-fig`) + ++++ ```{figure} ../images/hgf.png --- name: hgf-fig --- -The two-level and three-level Hierarchical Gaussian Filters for binary or continuous inputs, as described in {cite:p}`2014:mathys,2011:mathys`. The binary HGF has the particularity that it uses a sigmoid transform in the input node to convert continuous values into binary probabilities. For both models, volatility coupling is depicted with dashed lines, and value coupling with straight lines. The three-level HGF has one volatility layer more than the two-level HGF. -``` - -```{hint} -A one-level HGF for continuous input is a [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter). +The two-level and three-level Hierarchical Gaussian Filters for binary or continuous inputs, as described in {cite:p}`2014:mathys,2011:mathys`. The binary HGF has the particularity that it uses a sigmoid transform in the input node to convert continuous values into binary probabilities. For both models, volatility coupling is depicted with dashed lines, and value coupling with straight lines. The three-level HGF has one volatility layer more than the two-level HGF, which is used to estimate higher-order uncertainty. ``` +++ -Still assuming that Node $i$ is the value child of Node $i+1$, the prediction step consists of the following computations: - -:label: vape-prediction - -$$ -\begin{align} -\hat{\mu}_i^{(k+1)} &= \mu_i^{(k)} + \alpha_{i,i+1} \mu_{i+1}^{(k)}\\ -\hat{\pi}_i^{(k+1)} &= \frac{1}{\frac{1}{\pi_i^{(k)}} + \nu_i^{(k+1)} } -\end{align} -$$ - -with - -$$ -\begin{equation} -\nu_i^{(k+1)} = \exp(\omega_i). -\end{equation} -$$ - -Note that if Node $i$ additionally has a {term}`VOPE` parent node, the estimated volatility $\nu_i^{(k+1)}$ that enters the precision update would also depend on the posterior mean of that volatility parent (cf. {ref}`vope-prediction`). - -In general, the prediction of the mean will depend only on whether Node $i$ has a value parent or not, whereas the prediction of the precision only depends on whether Node $i$ has a volatility parent or not. - -Thus, the {ref}`vape-prediction` only depends on knowing the node's own posteriors and receiving the value parent's posterior in time before the new input arrives. - -For example, the three-level continuous HGF that is illustrated [above](hgf-fig) is built on top of the following generative model: - -$$ -\begin{align} -u^{(k)} &\sim \mathcal{N}(u^{(k)} | x_1^{(k)}, \, \sigma_u) \\ -x_1^{(k)} &\sim \mathcal{N}(x_1^{(k)} | x_1^{(k-1)} + \alpha_{2,1} x_2^{(k)}, \, \exp(\kappa_1 \check{x}_1^{(k)} + \omega_1)) \\ -\check{x}_1^{(k)} &\sim \mathcal{N}(\check{x}_1^{(k)} | \check{x}_1^{(k-1)} + \alpha_{3,\check{1}} x_3^{(k)}, \, \exp(\omega_{\check{1}})) \\ -x_2^{(k)} &\sim \mathcal{N}(x_2^{(k)} | x_2^{(k-1)}, \, \exp(\kappa_2 \check{x}_2^{(k)} + \omega_2)) \\ -\check{x}_2^{(k)} &\sim \mathcal{N}(\check{x}_2^{(k)} | \check{x}_2^{(k-1)}, \, \exp(\omega_{\check{2}})) \\ -x_3^{(k)} &\sim \mathcal{N}(x_3^{(k)} | x_3^{(k-1)}, \, \exp(\kappa_3 \check{x}_3^{(k)} + \omega_3)) \\ -\check{x}_3^{(k)} &\sim \mathcal{N}(\check{x}_3^{(k)} | \check{x}_3^{(k-1)}, \, \exp(\omega_{\check{3}})) \\ -\end{align} -$$ - -Note that in this example, all states that are value parents of other states (or outcomes) have their own volatility parent, while states that are volatility parents to other nodes either have a value parent (as state $\check{x}_1$), or no parents (as states $\check{x}_2$ and $\check{x}_3$). This is deliberately so, and we will see these two motifs - every state of a hierarchy has its own volatility estimation, and volatility states only have value parents - reappear in the following chapters. - -+++ - -## Belief updates in the HGF: Computations of nodes - -+++ +```{hint} +Hierarchical Gaussian Filters are inspired by other simpler models for Bayesian filtering and reinforcement learning. These models can be seen for example as generalisation of the [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter) or the [Rescorla-Wagner model](https://en.wikipedia.org/wiki/Rescorla%E2%80%93Wagner_model). Specifically: -```{note} -The update equations for volatility and value coupling in the generalized hierarchical Gaussian filter have been described in {cite:p}`weber:2023`. +* A one-level HGF for continuous input can be seen as a [Kalman Filter](https://en.wikipedia.org/wiki/Kalman_filter). +* A two-level binary HGF can be seen as a [Rescorla-Wagner](https://en.wikipedia.org/wiki/Rescorla%E2%80%93Wagner_model) model with an adaptive learning rate that depends on the precision of the belief. ``` +++ -The coding examples introduced above illustrated generative models that can simulate data forward from a given volatility structure, with key parameters stochastically fluctuating. HGFs use this as a model of the environment to make sense of new observations, also referred to as the sensory part of the HGF, or the filtering part. In this situation, new observations are coming in and the model has to update the volatility structure accordingly (from bottom to top nodes). +### The propagation of prediction and prediction errors -In its first description, {cite:p}2011:mathys derived a set of simple, one-step update equations that represent changes in beliefs about the hidden states (i.e. the sufficient statistics of the nodes) specified in the generative model. For each state, a belief is held (and updated for every new input) by the agent and described as a Gaussian distribution, fully characterized by its mean -and its inverse variance, or precision, -on a given trial (this is the notation we have been using in the previous examples). We conceptualize each belief as a node in a network, where belief updates involve computations within nodes as well as message passing between nodes. The computations of any observation at each time point can be ordered in time as shown in the [belief update algorithm](#belief-update): +Having described the model as a specific configuration of predictive nodes offer many advantages, especially in term of modularity for the user. However, the model itself is not limited to the description of the generative process that we covered in the previous examples. The most interesting, and also the more complex, part of the modelling consists of the capability for the network to update the hierarchical structure in a Bayesian optimal way as new observations are presented. These steps are defined by a set of simple, one-step update equations that represent changes in beliefs about the hidden states (i.e. the sufficient statistics of the nodes) specified in the generative model. These equations were first described in {cite:t}`2011:mathys`, and the update equations for volatility and value coupling in the generalized Hierarchical Gaussian filter (on which most of the update functions in [pyhgf](https://github.com/ilabcode/pyhgf) are based) have been described in {cite:p}`weber:2023`. The exact computations in each step especially depend on the nature of the coupling (via {term}`VAPE`s vs. {term}`VOPE`s) between the parent and children nodes. It is beyond the scope of this tutorial to dive into the derivation of these steps and we refer the interested reader to the mentioned papers. Here, we provide a general overview of the dynamic of the update sequence that supports belief updating. The computations triggered by any observation at each time point can be ordered in time as shown in the [belief update algorithm](#belief-update). +++ ```{note} Belief update :name: belief-update -For $i$ a {term}`node` in a probabilistic network at time $k$, with children at $i-1$ and parent at $i+1$ - -1. {term}`Prediction` - Compute $\mathrm{prediction}^{(k)}_i$ - ← receive $\mathrm{PE}^{(k)}_{i-1}$ from $\mathrm{node}_{i-1}$ - -2. Update - compute $\mathrm{posterior}^{(k)}_i$ - **given** $\mathrm{PE}^{(k)}_{i-1}$ and $\mathrm{prediction}^{(k)}_i$ - → send $\mathrm{posterior}^{(k)}_i$ to $\mathrm{node}_{i-1}$ - -3. {term}`prediction error` - compute $\mathrm{PE}^{(k)}_i$ - **given** $\mathrm{prediction}^{(k)}_i$ and $\mathrm{posterior}^{(k)}_i$ - → send $\mathrm{PE}^{(k)}_i$ to $\mathrm{node}_{i+1}$ - ← receive $\mathrm{posterior}^{(k)}_{i+1}$ from $\mathrm{node}_{i+1}$ - -4. {term}`Prediction` - compute $\mathrm{prediction}^{(k+1)}_i$ - **given** $\mathrm{posterior}^{(k)}_i$ and $\mathrm{posterior}^{(k)}_{i+1}$ - +Let's consider a simple network containing $x_{node}$ be a {term}`node`, defined at time $k$, with children nodes defined at $x_{children}$ and parent at $x_{parent}$. The standard approach to update this network upon the presentation of a new observation is: + +1. {term}`Prediction` step + For $n$ in the network, starting from the leaves to the roots: + Given the time elapsed since the last update + Given the the posterior value of the node $n$ + Given the prediction from the parent nodes + - Compute the *expected_mean* and *expected precision* + +2. Beliefs propagation step +For $n$ in the network, starting from the roots to the leaves: + 1. {term}`Update` step + Given the prediction errors received from the child nodes + - Compute the new sufficient statistics for node $n$ + 2. {term}`prediction error` + Given the new posterior from the update step + Given the expectation from the prediction step + - Compute a new prediction error ({term}`VAPE` or {term}`VOPE` + - Send it to the parent node ``` +++ {"editable": true, "slideshow": {"slide_type": ""}} -The exact computations in each step depend on the nature of the coupling (via {term}`VAPE`s vs. {term}`VOPE`s) between the parent and children nodes. - ```{important} -We have placed the {term}`Prediction` step at the end of the update loop. This is because usually, we think about the beginning of a timepoint trial as starting with receiving a new input, and of a prediction as being present before that input is received (this is especially relevant to model time points as a trial in an experiment). However, in some variants of the HGF the prediction also depends on the time that has passed in between trials, which is something that can only be evaluated once the new input arrives - hence the additional computation of the (current) prediction at the beginning of the trial. Conceptually, it makes most sense to think of the prediction as happening continuously between trials. For implementational purposes, it is however most convenient to only compute the prediction once the new input (and with it its arrival time) enters. This ensures both that the posterior means of parent nodes have had enough time to be sent back to their children for preparation for the new input, and that the arrival time of the new input can be taken into account appropriately. -``` - -+++ - -## Computations for VAPE coupling - -The exact computations of the {term}`Update` depend on the nature of the coupling with the child node(s), while both the {term}`Prediction error` and the {term}`Prediction` step depend on the coupling with the parent node(s). - -```{admonition} Update -:class: dropdown - -If Node $i$ is the value parent of Node $i-1$, then the following update equations apply to Node $i$: - -$$ -\begin{align} -\pi_i^{(k)} &= \hat{\pi}_i^{(k)} + \alpha_{i-1,i}^2 \hat{\pi}_{i-1}^{(k)}\\ -\mu_i^{(k)} &= \hat{\mu}_i^{(k)} + \frac{\alpha_{i-1,i}^2 \hat{\pi}_{i-1}^{(k)}} {\alpha_{i-1,i}^2 \hat{\pi}_{i-1}^{(k)} + \hat{\pi}_{i}^{(k)}} \delta_{i-1}^{(k)} -\end{align} -$$ - -We note here that we can let the update of the precision happen first, and therefore use it for the update of the mean: - -$$ -\begin{align} -\pi_i^{(k)} &= \hat{\pi}_i^{(k)} + \alpha_{i-1,i}^2 \hat{\pi}_{i-1}^{(k)}\\ -\mu_i^{(k)} &= \hat{\mu}_i^{(k)} + \frac{\alpha_{i-1,i}^2 \hat{\pi}_{i-1}^{(k)}} {\pi_i^{(k)}} \delta_{i-1}^{(k)} -\end{align} -$$ - -In sum, at the time of the update, Node $i$ needs to have access to the following quantities: - -* Its own predictions: $\hat{\mu}_i^{(k)}$, $\hat{\pi}_i^{(k)}$ -* Coupling strength: $\alpha_{i-1,i}$ -* From level below: $\delta_{i-1}^{(k)}$, $\hat{\pi}_{i-1}^{(k)}$ - -All of these are available at the time of the update. Node $i$ therefore only needs to receive the PE and the predicted precision from the level below to perform its update. - -``` - -+++ - -```{admonition} Prediction error -:class: dropdown - -We will assume in the following, that Node $i$ is the value child of Node $i+1$. Then the following quantities have to be sent up to Node $i+1$ (cf. necessary information from level below in a value parent): - -* Predicted precision: $\hat{\pi}_{i}^{(k)}$ -* Prediction error: $\delta_{i}^{(k)}$ - -Node $i$ has already performed the **PREDICTION step** on the previous trial, so it has already computed the predicted precision of the current trial, $\hat{\pi}_{i}^{(k)}$. Hence, in the **PE step**, it needs to perform only the following calculation: - -$$ -\begin{equation} -\delta_i^{(k)} = \mu_i^{(k)} - \hat{\mu}_i^{(k)} -\end{equation} -$$ - -``` - -+++ - -```{admonition} Prediction -:class: dropdown - -Still assuming that Node $i$ is the value child of Node $i+1$, the prediction step consists of the following computations: - -:label: vape-prediction - -$$ -\begin{align} -\hat{\mu}_i^{(k+1)} &= \mu_i^{(k)} + \alpha_{i,i+1} \mu_{i+1}^{(k)}\\ -\hat{\pi}_i^{(k+1)} &= \frac{1}{\frac{1}{\pi_i^{(k)}} + \nu_i^{(k+1)} } -\end{align} -$$ - -with - -$$ -\begin{equation} -\nu_i^{(k+1)} = \exp(\omega_i). -\end{equation} -$$ - -Note that if Node $i$ additionally has a {term}`VOPE` parent node, the estimated volatility $\nu_i^{(k+1)}$ that enters the precision update would also depend on the posterior mean of that volatility parent (cf. {ref}`vope-prediction`). - -In general, the prediction of the mean will depend only on whether Node $i$ has a value parent or not, whereas the prediction of the precision only depends on whether Node $i$ has a volatility parent or not. - -Thus, the {ref}`vape-prediction` only depends on knowing the node's own posteriors and receiving the value parent's posterior in time before the new input arrives. -``` - -+++ - -## Computations for VOPE coupling - -As in the case of {term}`VAPE` coupling, the exact computations of the [vope update](#vope-update) depend on the nature of the coupling with the child node(s), while both the [vope pe](#vope-pe) and the [vope prediction](#vope-prediction) depend on the coupling with the parent node(s). - -To describe the computations entailed by {term}`VOPE` coupling, we will introduce two changes to the notation. First of all, we will express the volatility prediction error ({term}`VOPE`) as a function of the previously defined value prediction error ({term}`VAPE`). That means from now on, we will use the character $\delta_i$ only for {term}`VAPE`. - -$$ -\begin{equation} -\delta_i^{(k)} \equiv \delta_i^{(k, VAPE)} = \mu_i^{(k)} - \hat{\mu}_i^{(k)}, -\end{equation} -$$ - -and introduce a new character $\Delta_i$ for {term}`VOPE`, which we define as - -$$ -\begin{equation} - \begin{split} - \Delta_i^{(k)} \equiv \delta_i^{(k, VOPE)} &= \frac{ \frac{1}{\pi_{i}^{(k)}} + (\mu_i^{(k)} - \hat{\mu}_i^{(k)})^2 }{ \frac{1}{\pi_{i}^{(k-1)}} + \nu_{i}^{(k)} } - 1 \\ - &= \hat{\pi}_i^{(k)} \left( \frac{1}{\pi_{i}^{(k)}} + (\mu_i^{(k)} - \hat{\mu}_i^{(k)})^2 \right) - 1 \\ - &= \hat{\pi}_i^{(k)} \left( \frac{1}{\pi_{i}^{(k)}} + (\delta_i^{(k)})^2 \right) - 1 \\ - &= \frac{\hat{\pi}_i^{(k)}}{\pi_{i}^{(k)}} + \hat{\pi}_i^{(k)} (\delta_i^{(k)})^2 - 1. \\ - \end{split} -\end{equation} -$$ - -Note that from the first to the second line, we have used the following definition: - -$$ -\begin{equation*} -\hat{\pi}_{i-1}^{(k)} = \frac{1}{ \frac{1}{\pi_{i-1}^{(k-1)}} + \nu_{i-1}^{(k)} }. -\end{equation*} -$$ - -This ensures that a given node does not need to have access to the posterior precision from the level below: $\pi_{i-1}^{(k-1)}$, which facilitates implementation. - -In sum, we are introducing a second prediction error unit $\Delta_i$ which is concerned with deviations from predicted uncertainty and is informed by value prediction errors and other estimates of uncertainty. It is this prediction error - a function of the unweighted (squared) value prediction error with a new precision weight - which communicates between a level's nodes and a level's volatility parent's nodes. - -Second, we will introduce another quantity, which we term the (auxiliary) expected precision - -$$ -\begin{equation} -\gamma_i^{(k)} = \nu_i^{(k)} \hat{\pi}_i^{(k)}, -\end{equation} -$$ - -which will be computed as part of the [vope preditions](#vope-prediction) and only serves to simplify the equations and the corresponding message passing. - -+++ - -```{admonition} Update -:class: dropdown -:name: vope-update - -If Node $i$ is the volatility parent of Node $i-1$, then the following update equations apply to Node $i$: - -$$ -\begin{align*} -\pi_i^{(k)} &= \hat{\pi}_i^{(k)} -+ \frac{1}{2}(\kappa_{i-1} \nu_{i-1}^{(k)} \hat{\pi}_{i-1}^{(k)})^2 -* (1 + (1 - \frac{1}{\pi_{i-1}^{(k-1)} \nu_{i-1}^{(k)}}) -\delta_{i-1}^{(k)})\\ -&= \hat{\pi}_i^{(k)} -+ \frac{1}{2}(\kappa_{i-1} \nu_{i-1}^{(k)} \hat{\pi}_{i-1}^{(k)})^2 -* (1 + (2 - \frac{1}{\hat{\pi}_{i-1}^{(k)} \nu_{i-1}^{(k)}}) -\delta_{i-1}^{(k)})\\ -\mu_i^{(k)} &= \hat{\mu}_i^{(k)} -+ \frac{1}{2}\kappa_{i-1} \nu_{i-1}^{(k)} -\frac{\hat{\pi}_{i-1}^{(k)}}{\pi_{i}^{(k)}} \delta_{i-1}^{(k)}, -\end{align*} -$$ - -where we have again used the definition of the predicted precision $\hat{\pi}_{i-1}^{(k)}$ to derive an expression for the posterior precision from the previous trial $\pi_{i-1}^{(k-1)}$: - -$$ -\begin{align*} -\hat{\pi}_{i-1}^{(k)} &= \frac{1}{ \frac{1}{\pi_{i-1}^{(k-1)}} + \nu_{i-1}^{(k)} }\\ -\Leftrightarrow \pi_{i-1}^{(k-1)} &= \frac{1}{ \frac{1}{\hat{\pi}_{i-1}^{(k)}} - \nu_{i-1}^{(k)} }. -\end{align*} -$$ - -With the changes from above, namely the definitions of the \textsf{VOPE} $\Delta_i$ and the expected precision $\gamma_i^{(k)}$, the update equations for the precision and the mean in volatility coupling simplify to: -\vspace{0.5cm} - -$$ -\begin{align} -\pi_i^{(k)} &= \hat{\pi}_i^{(k)} -+ \frac{1}{2} (\kappa_{i,i-1} \gamma_{i-1}^{(k)})^2 -+ (\kappa_{i,i-1} \gamma_{i-1}^{(k)})^2 \Delta_{i-1}^{(k)} -- \frac{1}{2} \kappa_{i,i-1}^2 \gamma_{i-1}^{(k)} \Delta_{i-1}^{(k)}\\ -\mu_i^{(k)} &= \hat{\mu}_i^{(k)} -+ \frac{1}{2} \frac{\kappa_{i,i-1} \gamma_{i-1}^{(k)}}{\pi_i^{(k)}} \Delta_{i-1}^{(k)} -\end{align} -$$ - - -Therefore, at the time of the update, Node $i$ needs to have access to the following quantities: - -* Its own predictions: $\hat{\mu}_i^{(k)}$, $\hat{\pi}_i^{(k)}$ -* Coupling strength: $\kappa_{i,i-1}$ -* From level below: $\Delta_{i-1}^{(k)}$, $\gamma_{i-1}^{(k)}$ - -``` - -+++ - -```{admonition} Prediction-error -:class: dropdown -:name: vope-pe - -The exact computation of the prediction error depends, like the computation of the new prediction, on the nature of the coupling with the parent nodes. We will therefore assume in the following, that Node $i$ is the volatility child of Node $i+1$. Then the following quantities have to be sent up to Node $i+1$ (see also necessary information from level below in a volatility parent): - -* Expected precision: $\gamma_{i}^{(k)}$ -* Prediction error: $\Delta_{i}^{(k)}$ - -Node $i$ has already performed the {ref}`vope-prediction` on the previous trial, so it has already computed the predicted precision, $\hat{\pi}_{i}^{(k)}$, and the volatiliy estimate, $\nu_i^{(k)}$, and out of these the expected precision, $\gamma_{i}^{(k)}$, for the current trial. Hence, in the **PE step**, it needs to perform only the following calculations: - -$$ -\begin{align} -\delta_i^{(k)} &= \mu_i^{(k)} - \hat{\mu}_i^{(k)}\\ -\Delta_i^{(k)} &= \frac{\hat{\pi}_i^{(k)}}{\pi_{i}^{(k)}} + \hat{\pi}_i^{(k)} (\delta_i^{(k)})^2 - 1. -\end{align} -$$ - -``` - -+++ - -```{admonition} Prediction -:class: dropdown -:name: vope-prediction - -Still assuming that Node $i$ is the volatility child of Node $i+1$, the prediction consists of the following simple computations: - -$$ -\begin{align} -\hat{\mu}_i^{(k+1)} &= \mu_i^{(k)}\\ -\nu_i^{(k+1)} &= \exp(\kappa_i \mu_{i+1}^{(k)} + \omega_i)\\ -\hat{\pi}_i^{(k+1)} &= \frac{1}{\frac{1}{\pi_i^{(k)}} + \nu_i^{(k+1)} }\\ -\gamma_i^{(k+1)} &= \nu_i^{(k+1)} \hat{\pi}_i^{(k+1)} -\end{align} -$$ - -Thus, the prediction for trial $k+1$ depends again only on receiving the posterior mean of Node $i+1$ on trial $k$, and knowing the Node's own posteriors. - -Note that if Node $i$ additionally has a {term}`VAPE` parent node, the prediction of the new mean, $\hat{\mu}_i^{k+1}$ would also depend on the posterior mean of that value parent (cf. {ref}`vape-prediction`). +We have placed the {term}`Prediction` step at the beginning of the update loop to account that the prediction depends on the time that has passed in between trials, which is something that can only be evaluated once the new input arrives. This is because we usually think about the beginning of a trial/time point as starting with receiving a new input and of a prediction as being present before that input is received. For implementational purposes, it is most convenient to only compute the prediction once the new input (and with it its arrival time) enters. However, it makes most sense to think of the prediction as happening continuously between the time points, but this is not something that is tracked continuously by the model. ``` +++ diff --git a/src/pyhgf/model.py b/src/pyhgf/model.py index 357039b11..26ad7443d 100644 --- a/src/pyhgf/model.py +++ b/src/pyhgf/model.py @@ -612,6 +612,8 @@ def add_value_parent( precision: Union[float, np.ndarray, ArrayLike] = 1.0, tonic_volatility: Union[float, np.ndarray, ArrayLike] = -4.0, tonic_drift: Union[float, np.ndarray, ArrayLike] = 0.0, + autoregressive_coefficient: float = 0.0, + autoregressive_intercept: float = 0.0, additional_parameters: Optional[Dict] = None, ): """Add a value parent to a given set of nodes. @@ -621,8 +623,9 @@ def add_value_parent( children_idxs : The child(s) node index(es). value_coupling : - The value_coupling between the child and parent node. This is will be - appended to the `psis` parameters in the parent and child node(s). + The value coupling between the child and parent node. This is will be + appended to the `value_coupling_children` parameters in the parent node, + and to the `value_coupling_parents` in the child node(s). mean : The mean of the Gaussian distribution. This value is passed both to the current and expected states. @@ -634,6 +637,15 @@ def add_value_parent( volatility parent(s)). tonic_drift : The drift of the random walk. Defaults to `0.0` (no drift). + autoregressive_coefficient : + The autoregressive coefficient is only used to parametrize the AR1 process + and represents the autoregressive coefficient. If + :math:`-1 \\le \\phi \\le 1`, the process is stationary and will revert to + the autoregressive intercept. + autoregressive_intercept : + The parameter `m` is only used to parametrize the AR1 process and represents + the autoregressive intercept. If :math:`-1 \\le \\phi \\le 1`, this is the + value to which the process will revert to. additional_parameters : Add more custom parameters to the node. @@ -664,6 +676,8 @@ def add_value_parent( "value_coupling_parents": None, "tonic_volatility": tonic_volatility, "tonic_drift": tonic_drift, + "autoregressive_coefficient": autoregressive_coefficient, + "autoregressive_intercept": autoregressive_intercept, } # add more parameters (optional) @@ -717,6 +731,8 @@ def add_volatility_parent( precision: Union[float, np.ndarray, ArrayLike] = 1.0, tonic_volatility: Union[float, np.ndarray, ArrayLike] = -4.0, tonic_drift: Union[float, np.ndarray, ArrayLike] = 0.0, + autoregressive_coefficient: float = 0.0, + autoregressive_intercept: float = 0.0, additional_parameters: Optional[Dict] = None, ): """Add a volatility parent to a given set of nodes. @@ -727,7 +743,8 @@ def add_volatility_parent( The child(s) node index(es). volatility_coupling : The volatility coupling between the child and parent node. This is will be - appended to the `kappas` parameters in the parent and child node(s). + appended to the `volatility_coupling_children` parameters in the parent + node, and to the `volatility_coupling_parents` in the child node(s). mean : The mean of the Gaussian distribution. This value is passed both to the current and expected states. @@ -739,6 +756,15 @@ def add_volatility_parent( volatility parent(s)). tonic_drift : The drift of the random walk. Defaults to `0.0` (no drift). + autoregressive_coefficient : + The autoregressive coefficient is only used to parametrize the AR1 process + and represents the autoregressive coefficient. If + :math:`-1 \\le \\phi \\le 1`, the process is stationary and will revert to + the autoregressive intercept. + autoregressive_intercept : + The parameter `m` is only used to parametrize the AR1 process and represents + the autoregressive intercept. If :math:`-1 \\le \\phi \\le 1`, this is the + value to which the process will revert to. additional_parameters : Add more custom parameters to the node. @@ -769,6 +795,8 @@ def add_volatility_parent( "value_coupling_parents": None, "tonic_volatility": tonic_volatility, "tonic_drift": tonic_drift, + "autoregressive_coefficient": autoregressive_coefficient, + "autoregressive_intercept": autoregressive_intercept, } # add more parameters (optional) diff --git a/src/pyhgf/updates/prediction/continuous.py b/src/pyhgf/updates/prediction/continuous.py index 6ab53c0af..7d1876131 100644 --- a/src/pyhgf/updates/prediction/continuous.py +++ b/src/pyhgf/updates/prediction/continuous.py @@ -52,8 +52,21 @@ def predict_mean( ): driftrate += psi * attributes[value_parent_idx]["mean"] - # Compute the new expected mean this node - expected_mean = attributes[node_idx]["mean"] + time_step * driftrate + # New expected mean from the previous value + expected_mean = attributes[node_idx]["mean"] + + # Take the drift into account + expected_mean += time_step * driftrate + + # Add quatities that come from the autoregressive process if not zero + expected_mean += ( + time_step + * attributes[node_idx]["autoregressive_coefficient"] + * ( + attributes[node_idx]["autoregressive_intercept"] + - attributes[node_idx]["mean"] + ) + ) return expected_mean diff --git a/tests/test_binary.py b/tests/test_binary.py index fc5281b0f..b364090db 100644 --- a/tests/test_binary.py +++ b/tests/test_binary.py @@ -63,6 +63,8 @@ def test_update_binary_input_parents(self): "value_coupling_parents": (1.0,), "volatility_coupling_parents": None, "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -75,6 +77,8 @@ def test_update_binary_input_parents(self): "value_coupling_parents": None, "volatility_coupling_parents": (1.0,), "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -87,6 +91,8 @@ def test_update_binary_input_parents(self): "value_coupling_parents": None, "volatility_coupling_parents": None, "volatility_coupling_children": (1.0,), + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, diff --git a/tests/test_continuous.py b/tests/test_continuous.py index 56ecc2c65..f27c24399 100644 --- a/tests/test_continuous.py +++ b/tests/test_continuous.py @@ -37,6 +37,8 @@ def test_continuous_node_update(self): "value_coupling_parents": None, "volatility_coupling_parents": None, "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -49,6 +51,8 @@ def test_continuous_node_update(self): "value_coupling_parents": None, "volatility_coupling_parents": None, "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -108,6 +112,8 @@ def test_continuous_input_update(self): "value_coupling_parents": None, "volatility_coupling_parents": (1.0,), "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -120,6 +126,8 @@ def test_continuous_input_update(self): "value_coupling_parents": None, "volatility_coupling_parents": None, "volatility_coupling_children": (1.0,), + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": 1.0, "tonic_drift": 0.0, @@ -190,6 +198,8 @@ def test_scan_loop(self): "value_coupling_parents": None, "volatility_coupling_parents": (1.0,), "volatility_coupling_children": None, + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": -3.0, "tonic_drift": 0.0, @@ -202,6 +212,8 @@ def test_scan_loop(self): "value_coupling_parents": None, "volatility_coupling_parents": None, "volatility_coupling_children": (1.0,), + "autoregressive_coefficient": 0.0, + "autoregressive_intercept": 0.0, "mean": 1.0, "tonic_volatility": -3.0, "tonic_drift": 0.0, diff --git a/tests/test_distribution.py b/tests/test_distribution.py index 6d30c5142..dd795bc16 100644 --- a/tests/test_distribution.py +++ b/tests/test_distribution.py @@ -149,7 +149,7 @@ def test_grad_logp(self): np.array(0.0), ) - assert jnp.isclose(tonic_volatility_1, -8.440489) + assert jnp.isclose(tonic_volatility_1, -8.440622) ############## # Binary HGF # @@ -317,7 +317,7 @@ def test_aesara_grad_logp(self): volatility_coupling_1=1.0, )[0].eval() - assert jnp.isclose(tonic_volatility_1, -8.440489) + assert jnp.isclose(tonic_volatility_1, -8.440622) ############## # Binary HGF #