{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"using Pkg; Pkg.activate(\"../.\"); Pkg.instantiate();\n",
"using IJulia; try IJulia.clear_output(); catch _ end\n",
"using Distributions, StatsPlots, SpecialFunctions, Plots, LaTeXStrings, Plots.PlotMeasures\n",
"Plots.default(\n",
" #linecolor=:red,\n",
" linewidth=3,\n",
" plot_titlefontsize=16,\n",
" guidefontsize=14,\n",
" tickfontsize=12,\n",
" size = (1000, 800)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Bayesian Machine Learning"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Preliminaries\n",
"\n",
"- Goals\n",
" - Introduction to Bayesian (i.e., probabilistic) modeling\n",
"- Materials\n",
" - Mandatory\n",
" - These lecture notes\n",
" - Optional\n",
" - Bishop pp. 68-74 (on the coin toss example)\n",
" - [Ariel Caticha - 2012 - Entropic Inference and the Foundations of Physics](https://github.com/bertdv/BMLIP/blob/master/lessons/notebooks/files/Caticha-2012-Entropic-Inference-and-the-Foundations-of-Physics.pdf), pp.35-44 (section 2.9, on deriving Bayes rule for updating probabilities)\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Challenge: Predicting a Coin Toss\n",
"\n",
"- **Problem**: We observe the following sequence of heads (outcome $=1$) and tails (outcome $=0$) when tossing the same coin repeatedly $$D=\\{1011001\\}\\,.$$\n",
"\n",
"- What is the probability that heads comes up next?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- **Solution**: later in this lecture. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### The Bayesian Machine Learning Framework\n",
"\n",
"- Suppose that your application is to predict a future observation $x$, based on $N$ past observations $D=\\{x_1,\\dotsc,x_N\\}$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- The Bayesian design approach to solving this task involves four stages: \n",
"\n",
"
\n",
" REPEAT\n",
" 1- Model specification\n",
" 2- Parameter estimation\n",
" 3- Model evaluation\n",
" UNTIL model performance is satisfactory\n",
" 4- Apply model\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- In principle, based on the model evaluation results, you may want to re-specify your model and _repeat_ the design process (a few times), until model performance is acceptable. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
" \n",
"- Next, we discuss these four stages in a bit more detail."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### (1) Model specification\n",
"\n",
"- Your first task is to propose a probabilistic model for generating the observations $x$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- A probabilistic model $m$ consists of a joint distribution $p(x,\\theta|m)$ that relates observations $x$ to model parameters $\\theta$. Usually, the model is proposed in the form of a data generating distribution $p(x|\\theta,m)$ and a prior $p(\\theta|m)$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- _You_ are responsible to choose the data generating distribution $p(x|\\theta)$ based on your physical understanding of the data generating process. (For brevity, if we are working on one given model $m$ with no alternative models, we usually drop the given dependency on $m$ from the notation)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- _You_ must also choose the prior $p(\\theta)$ to reflect what you know about the parameter values before you see the data $D$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### (2) Parameter estimation\n",
"\n",
"- Note that, for a given data set $D=\\{x_1,x_2,\\dots,x_N\\}$ with _independent_ observations $x_n$, the likelihood factorizes as \n",
"$$ p(D|\\theta) = \\prod_{n=1}^N p(x_n|\\theta)\\,,$$\n",
"so usually you select a model for generating one observation $x_n$ and then use (in-)dependence assumptions to combine these models into a likelihood function for the model parameters."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- The likelihood and prior both contain information about the model parameters. Next, you use Bayes rule to fuse these two information sources into a posterior distribution for the parameters:\n",
"$$\\begin{align*}\n",
"\\underbrace{p(\\theta|D) }_{\\text{posterior}} &= \\frac{p(D|\\theta) p(\\theta)}{p(D)} \\\\\n",
"&= \\frac{p(D|\\theta) p(\\theta)}{\\int p(D|\\theta) p(\\theta) \\mathrm{d}\\theta}\n",
"\\end{align*}$$ "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Note that there's **no need for you to design some clever parameter estimation algorithm**. Bayes rule _is_ the parameter estimation algorithm, which can be entirely expressed in terms of the likelihood and prior. The only complexity lies in the computational issues! "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- This parameter estimation \"recipe\" works if the right-hand side (RHS) factors can be evaluated; the computational details can be quite challenging and this is what machine learning is about. \n",
" \n",
"- $\\Rightarrow$ **Machine learning is EASY, apart from computational details :)**\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### (3) Model Evaluation \n",
"\n",
"- In the framework above, parameter estimation was executed by \"perfect\" Bayesian reasoning. So is everything settled now? "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- No, there appears to be one remaining problem: how good really were our model assumptions $p(x|\\theta)$ and $p(\\theta)$? We want to \"score\" the model performance."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Note that this question is only interesting in practice if we have alternative models to choose from. After all, if you don't have an alternative model, any value for the model evidence would still not lead you to switch to another model. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Let's assume that we have more candidate models, say $\\mathcal{M} = \\{m_1,\\ldots,m_K\\}$ where each model relates to specific prior $p(\\theta|m_k)$ and likelihood $p(D|\\theta,m_k)$? Can we evaluate the relative performance of a model against another model from the set?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Start again with **model specification**. _You_ must now specify a prior $p(m_k)$ (next to the likelihood $p(D|\\theta,m_k)$ and prior $p(\\theta|m_k)$) for each of the models and then solve the desired inference problem: \n",
"$$\\begin{align*} \n",
"\\underbrace{p(m_k|D)}_{\\substack{\\text{model}\\\\\\text{posterior}}} &= \\frac{p(D|m_k) p(m_k)}{p(D)} \\\\\n",
" &\\propto p(m_k) \\cdot p(D|m_k) \\\\\n",
" &= p(m_k)\\cdot \\int_\\theta p(D,\\theta|m_k) \\,\\mathrm{d}\\theta\\\\\n",
" &= \\underbrace{p(m_k)}_{\\substack{\\text{model}\\\\\\text{prior}}}\\cdot \\underbrace{\\int_\\theta \\underbrace{p(D|\\theta,m_k)}_{\\text{likelihood}} \\,\\underbrace{p(\\theta|m_k)}_{\\text{prior}}\\, \\mathrm{d}\\theta }_{\\substack{\\text{evidence }p(D|m_k)\\\\\\text{= model likelihood}}}\\\\\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- You _can_ evaluate the RHS of this equation since you selected the model priors $p(m_k)$, the parameter priors $p(\\theta|m_k)$ and the likelihoods $p(D|\\theta,m_k)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- You can now compare posterior distributions $p(m_k|D)$ for a set of models $\\{m_k\\}$ and decide on the merits of each model relative to alternative models. This procedure is called **Bayesian model comparison**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"- Note that, to evaluate the model posterior, you must calculate the \"model evidence\" $p(D|m_k)$, which can be interpreted as a likelihood function for model $m_k$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- $\\Rightarrow$ In a Bayesian framework, **model estimation** follows the same recipe as parameter estimation; it just works at one higher hierarchical level. Compare the required calulations:\n",
"\n",
"$$\\begin{align*}\n",
"p(\\theta|D) &\\propto p(D|\\theta) p(\\theta) \\; &&\\text{(parameter estimation)} \\\\\n",
"p(m_k|D) &\\propto p(D|m_k) p(m_k) \\; &&\\text{(model comparison)}\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Again, **no need to invent a special algorithm for estimating the performance of your model**. Straightforward application of probability theory takes care of all that. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- In principle, you could proceed with asking how good your choice for the candidate model set $\\mathcal{M}$ was. You would have to provide a set of alternative model sets $\\{\\mathcal{M}_1,\\mathcal{M}_2,\\ldots,\\mathcal{M}_M\\}$ with priors $p(\\mathcal{M}_m)$ for each set and compute posteriors $p(\\mathcal{M}_m|D)$. And so forth ... "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- With the (relative) performance evaluation scores of your model in hand, you could now re-specify your model (hopefully an improved model) and _repeat_ the design process until the model performance score is acceptable. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Bayes Factors"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- As an aside, in the (statistics and machine learning) literature, performance comparison between two models is often reported by the [Bayes Factor](https://en.wikipedia.org/wiki/Bayes_factor), which is defined as the ratio of model evidences: \n",
"$$\\begin{align*}\n",
"\\underbrace{\\frac{p(D|m_1)}{p(D|m_2)}}_{\\text{Bayes Factor}} &= \\frac{\\frac{p(D,m_1)}{p(m_1)}}{\\frac{p(D,m_2)}{p(m_2)}} \\\\\n",
"&= \\frac{p(D,m_1)}{p(m_1)} \\cdot \\frac{p(m_2)}{p(D,m_2)} \\\\\n",
"&= \\frac{p(m_1|D) p(D)}{p(m_1)} \\cdot \\frac{p(m_2)}{p(m_2|D) p(D)} \\\\\n",
"&= \\underbrace{\\frac{p(m_1|D)}{p(m_2|D)}}_{\\substack{\\text{posterior} \\\\ \\text{ratio}}} \\cdot \\underbrace{\\frac{p(m_2)}{p(m_1)}}_{\\substack{\\text{prior} \\\\ \\text{ratio}}}\n",
"\\end{align*}$$\n",
" - Hence, for equal model priors ($p(m_1)=p(m_2)=0.5$), the Bayes Factor reports the posterior probability ratio for the two models. \n",
"\n",
"- In principle, any hard decision on which is the better model has to accept some _ad hoc_ arguments, but [Jeffreys (1961)](https://www.amazon.com/Theory-Probability-Classic-Physical-Sciences/dp/0198503687/ref=sr_1_1?qid=1663516628&refinements=p_27%3Athe+late+Harold+Jeffreys&s=books&sr=1-1&text=the+late+Harold+Jeffreys) advises the following interpretation of the log-Bayes factor \n",
"\n",
"$$\\log_{10} B_{12} =\\log_{10}\\frac{p(D|m_1)}{p(D|m_2)}$$\n",
"\n",
"
\n",
"
$\\log_{10} B_{12}$
Evidence for $m_1$
\n",
"
0 to 0.5
not worth mentioning
\n",
"
0.5 to 1
substantial
\n",
"
1 to 2
strong
\n",
"
>2
decisive
\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### (4) Prediction\n",
"\n",
"- Once we are satisfied with the evidence for a (trained) model, we can apply the model to our prediction/classification/etc task."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Given the data $D$, our knowledge about the yet unobserved datum $x$ is captured by (everything is conditioned on the selected model)\n",
"$$\\begin{align*}\n",
"p(x|D) &\\stackrel{s}{=} \\int p(x,\\theta|D) \\,\\mathrm{d}\\theta\\\\\n",
" &\\stackrel{p}{=} \\int p(x|\\theta,D) p(\\theta|D) \\,\\mathrm{d}\\theta\\\\\n",
" &\\stackrel{m}{=} \\int \\underbrace{p(x|\\theta)}_{\\text{data generation dist.}} \\cdot \\underbrace{p(\\theta|D)}_{\\text{posterior}} \\,\\mathrm{d}\\theta\\\\\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- In the last equation, the simplification $p(x|\\theta,D) = p(x|\\theta)$ follows from our model specification. We assumed a _parametric_ data generating distribution $p(x|\\theta)$ with no explicit dependency on the data set $D$. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Again, **no need to invent a special prediction algorithm**. Probability theory takes care of all that. The complexity of prediction is just computational: how to carry out the marginalization over $\\theta$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Note that the application of the learned posterior $p(\\theta|D)$ not necessarily has to be a prediction task. We use it here as an example, but other applications (e.g., classification, regression etc.) are of course also possible. \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"##### Prediction with multiple models\n",
"\n",
"- When you have a posterior $p(m_k|D)$ for the models, you don't *need* to choose one model for the prediction task. You can do prediction by **Bayesian model averaging**, which combines the predictive power from all models:\n",
"$$\\begin{align*}\n",
"p(x|D) &= \\sum_k \\int p(x,\\theta,m_k|D)\\,\\mathrm{d}\\theta \\\\\n",
" &= \\sum_k \\int p(x|\\theta,m_k) \\,p(\\theta|m_k,D)\\, p(m_k|D) \\,\\mathrm{d}\\theta \\\\\n",
" &= \\sum_k \\underbrace{p(m_k|D)}_{\\substack{\\text{model}\\\\\\text{posterior}}} \\cdot \\int \\underbrace{p(\\theta|m_k,D)}_{\\substack{\\text{parameter}\\\\\\text{posterior}}} \\, \\underbrace{p(x|\\theta,m_k)}_{\\substack{\\text{data generating}\\\\\\text{distribution}}} \\,\\mathrm{d}\\theta\n",
"\\end{align*}$$ "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Alternatively, if you do need to work with one model (e.g. due to computational resource constraints), you can for instance select the model with largest posterior $p(m_k|D)$ and use that model for prediction. This is called **Bayesian model selection**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"- Bayesian model averaging is the principal way to apply PT to machine learning. You don't throw away information by discarding lesser performant models, but rather use PT (marginalization of models) to compute $$p(\\text{what-I-am-interested-in} \\,|\\, \\text{all available information})$$ exactly. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### We're Done!\n",
"\n",
"- In principle, you now have the recipe in your hands now to solve all your prediction/classification/regression etc problems by the same method:\n",
"\n",
" 1. specify a model\n",
" 2. train the model (by PT)\n",
" 3. evaluate the model (by PT); if not satisfied, goto 1\n",
" 4. apply the model (by PT)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Crucially, there is no need to invent clever machine learning algorithms, and there is no need to invent a clever prediction algorithm nor a need to invent a model performance criterion. Instead, you propose a model and, from there on, you let PT reason about everything that you care about. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Your problems are only of computational nature. Perhaps the integral to compute the evidence may not be analytically tractable, etc."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Bayesian Evidence as a Model Performance Criterion\n",
"\n",
"- I'd like to convince you that Bayesian model evidence is an excellent criterion for assessing your model's performance. To do so, let us consider a decomposition that relates model evidence to other highly-valued criteria such as **accuracy** and **model complexity**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Consider a model $p(x,\\theta|m)$ and a data set $D = \\{x_1,x_2, \\ldots,x_N\\}$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Given the data set $D$, the log-evidence for model $m$ decomposes as follows (please check the derivation):\n",
"\n",
"$$\\begin{align*}\n",
"\\underbrace{\\log p(D|m)}_{\\text{log-evidence}} &= \\log p(D|m) \\cdot \\underbrace{\\int p(\\theta|D,m)\\mathrm{d}\\theta}_{\\text{evaluates to }1} \\\\\n",
" &= \\int p(\\theta|D,m) \\log p(D|m) \\mathrm{d}\\theta \\qquad \\text{(move $\\log p(D|m)$ into the integral)} \\\\\n",
" &= \\int p(\\theta|D,m) \\log \\underbrace{\\frac{p(D|\\theta,m) p(\\theta|m)}{p(\\theta|D,m)}}_{\\text{by Bayes rule}} \\mathrm{d}\\theta \\\\\n",
" &= \\underbrace{\\int p(\\theta|D,m) \\log p(D|\\theta,m) \\mathrm{d}\\theta}_{\\text{accuracy (a.k.a. data fit)}} - \\underbrace{\\int p(\\theta|D,m) \\log \\frac{p(\\theta|D,m)}{p(\\theta|m)} \\mathrm{d}\\theta}_{\\text{complexity}}\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- The \"accuracy\" term (also known as data fit) measures how well the model predicts the data set $D$. We want this term to be high because good models should predict the data $D$ well. Indeed, higher accuracy leads to higher model evidence. To achieve high accuracy, applying Bayes' rule will shift the posterior $p(\\theta|D)$ away from the prior towards the likelihood function $p(D|\\theta)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- The second term (complexity) is technically a [Kullback-Leibler divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence) (KLD) between the posterior and prior distributions, see [OPTIONAL SLIDE](#KLD). The KLD is an information-theoretic quantity that can be interpreted as a \"distance\" measure between two distributions. In other words, the complexity term measures how much the beliefs about $\\theta$ changed, due to learning from the data $D$. Generally, we like the complexity term to be low, because moving away means forgetting previously acquired information represented by the prior. Indeed, lower complexity leads to higher model evidence."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Models with high evidence $p(D|m)$ prefer both high accuracy and low complexity. Therefore, models with high evidence tend to predict the training data $D$ well (high accuracy), yet also try to preserve the information encoded by the prior (low complexity). These types of models are said to *generalize* well, since they can be applied to different data sets without specific adaptations for each data set. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Focussing only on accuracy maximization could lead to *overfitting*. Focussing only on complexity minimization could lead to *underfitting* of the model. Bayesian ML attends to both terms and avoids both underfitting and overfitting. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- $\\Rightarrow$ Bayesian learning automatically leads to models that generalize well. There is **no need for early stopping or validation data sets**. There is also **no need for tuning parameters** in the learning process. Just learn on the full data set and all behaves well. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- This latter point accentuates that the common practice in machine learning to divide a data set into a training, test and validation set is just an ad hoc mechanism that compensates for failing to frame the learning task as a Bayesian inference task. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Bayesian Machine Learning and the Scientific Method Revisited\n",
"\n",
"- The Bayesian design process provides a unified framework for the Scientific Inquiry method. We can now add equations to the design loop. (Trial design to be discussed in [Intelligent Agent lesson](https://nbviewer.jupyter.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/Intelligent-Agents-and-Active-Inference.ipynb).) \n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Revisiting the Challenge: Predicting a Coin Toss\n",
"\n",
"At the beginning of this lesson, we posed the following challenge:\n",
"\n",
"- We observe a the following sequence of heads (outcome = $1$) and tails (outcome = $0$) when tossing the same coin repeatedly $$D=\\{1011001\\}\\,.$$\n",
"\n",
"- What is the probability that heads comes up next? We solve this in the next slides ..."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Coin toss example (1): Model Specification\n",
"\n",
"- We observe a sequence of $N$ coin tosses $D=\\{x_1,\\ldots,x_N\\}$ with $n$ heads. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Let us denote outcomes by \n",
"$$x_k = \\begin{cases} 1 & \\text{if heads comes up} \\\\\n",
" 0 & \\text{otherwise (tails)} \\end{cases}\n",
" $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"##### Likelihood\n",
"\n",
"- Assume a [**Bernoulli** distributed](https://en.wikipedia.org/wiki/Bernoulli_distribution) variable $p(x_k=1|\\mu)=\\mu$ for a single coin toss, leading to \n",
"$$p(x_k|\\mu)=\\mu^{x_k} (1-\\mu)^{1-x_k} \\,.$$\n",
"\n",
"- Assume $n$ times heads were thrown out of a total of $N$ throws. The likelihood function then follows a [**binomial** distribution](https://en.wikipedia.org/wiki/Binomial_distribution) :\n",
"$$ \n",
"p(D|\\mu) = \\prod_{k=1}^N p(x_k|\\mu) = \\mu^n (1-\\mu)^{N-n}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"##### Prior\n",
"\n",
"- Assume the prior beliefs for $\\mu$ are governed by a [**beta distribution**](https://en.wikipedia.org/wiki/Beta_distribution)\n",
"\n",
"$$\n",
"p(\\mu) = \\mathrm{Beta}(\\mu|\\alpha,\\beta) = \\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} \\mu^{\\alpha-1}(1-\\mu)^{\\beta-1}\n",
"$$\n",
"where the [Gamma function](https://en.wikipedia.org/wiki/Gamma_function) is sort-of a generalized factorial function. In particular, if $\\alpha,\\beta$ are integers, then $$\\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} = \\frac{(\\alpha+\\beta-1)!}{(\\alpha-1)!\\,(\\beta-1)!}$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- A _what_ distribution? Yes, the **beta distribution** is a [**conjugate prior**](https://en.wikipedia.org/wiki/Conjugate_prior) for the binomial distribution, which means that \n",
"$$\n",
"\\underbrace{\\text{beta}}_{\\text{posterior}} \\propto \\underbrace{\\text{binomial}}_{\\text{likelihood}} \\times \\underbrace{\\text{beta}}_{\\text{prior}}\n",
"$$\n",
"so we get a closed-form posterior."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- $\\alpha$ and $\\beta$ are called **hyperparameters**, since they parameterize the distribution for another parameter ($\\mu$). E.g., $\\alpha=\\beta=1$ leads to a uniform prior for $\\mu$. Some other choices for $\\alpha, \\beta$ and the resulting prior for $\\mu$ are shown in the following graph:\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"\n",
"\n"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"params = [\n",
" (α=0.1, β=0.1),\n",
" (α=1.0, β=1.0),\n",
" (α=2.0, β=3.0),\n",
" (α=8.0, β=4.0)\n",
"]\n",
"\n",
"x = 0:0.01:1\n",
"\n",
"plots = []\n",
"for (i, (α, β)) in enumerate(params)\n",
" beta_dist = Beta(α, β)\n",
" y = pdf.(beta_dist, x)\n",
" \n",
" xlabel = i in [3, 4] ? \"μ\" : \"\"\n",
" ylabel = i in [1, 3] ? \"Density\" : \"\"\n",
" \n",
" push!(plots, plot(x, y, label=\"α=$α, β=$β\", xlabel=xlabel, ylabel=ylabel))\n",
"end\n",
"\n",
"plot(plots..., layout=(2, 2), suptitle=\"PDFs of Beta Distributions\", legend=:topleft, link=:both, padding=10)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\n",
"\n",
"- (Bishop Fig.2.2). Plots of the beta distribution $\\mathrm{Beta}(\\mu|a, b)$ as a function of $\\mu$ for various values of the hyperparameters $a$ and $b$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Before observing any data, you can express your state-of-knowledge about the coin by choosing values for $\\alpha$ and $\\beta$ that reflect your beliefs. Stronger yet, you _must_ choose values for $\\alpha$ and $\\beta$, because the Bayesian framework does not allow you to walk away from your responsibility to explicitly state your beliefs before the experiment. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Coin toss example (2): Parameter estimation\n",
"\n",
"- Infer posterior PDF over $\\mu$ (and evidence) through Bayes rule\n",
"\n",
"$$\\begin{align*}\n",
"p(\\mu&|D) \\cdot p(D) = p(D|\\mu)\\cdot p(\\mu) \\\\\n",
" &= \\underbrace{\\biggl( \\mu^n (1-\\mu)^{N-n}\\biggr)}_{\\text{likelihood}} \\cdot \\underbrace{\\biggl( \\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} \\mu^{\\alpha-1}(1-\\mu)^{\\beta-1} \\biggr)}_{\\text{prior}} \\\\\n",
" &= \\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} \\mu^{n+\\alpha-1} (1-\\mu)^{N-n+\\beta-1} \\\\\n",
" &= \\underbrace{\\biggl(\\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} \\frac{\\Gamma(n+\\alpha) \\Gamma(N-n+\\beta)}{\\Gamma(N+\\alpha+\\beta)}\\biggr)}_{\\text{evidence }p(D)} \\cdot \\underbrace{\\biggl( \\frac{\\Gamma(N+\\alpha+\\beta)}{\\Gamma(n+\\alpha)\\Gamma(N-n+\\beta)} \\mu^{n+\\alpha-1} (1-\\mu)^{N-n+\\beta-1}\\biggr)}_{\\text{posterior }p(\\mu|D)=\\mathrm{Beta}(\\mu|n+\\alpha, N-n+\\beta)}\n",
"\\end{align*}$$\n",
"\n",
"\n",
"hence the posterior is also beta-distributed as\n",
"\n",
"$$\n",
"p(\\mu|D) = \\mathrm{Beta}(\\mu|\\,n+\\alpha, N-n+\\beta)\n",
"$$\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Coin toss example (3): Model Evaluation\n",
"\n",
"- It follow from the above calculation that the evidence for model $m$ can be analytically expressed as\n",
"\n",
"$$\n",
"p(D|m) = \\frac{\\Gamma(\\alpha+\\beta)}{\\Gamma(\\alpha)\\Gamma(\\beta)} \\frac{\\Gamma(n+\\alpha) \\Gamma(N-n+\\beta)}{\\Gamma(N+\\alpha+\\beta)}\n",
"$$\n",
"\n",
"- The model evidence is a scalar. The absolute value is not important. However, you may want to compare the model evidence of this model to the evidence for another model on the same data set. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Coin Toss Example (4): Prediction\n",
"\n",
"- Once we have accepted a model, let's apply it to the application, in this case, predicting future observations. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Marginalize over the parameter posterior to get the predictive PDF for a new coin toss $x_\\bullet$, given the data $D$,\n",
"\n",
"$$\\begin{align*}\n",
"p(x_\\bullet=1|D) &= \\int_0^1 p(x_\\bullet=1|\\mu)\\,p(\\mu|D) \\,\\mathrm{d}\\mu \\\\\n",
" &= \\int_0^1 \\mu \\times \\mathrm{Beta}(\\mu|\\,n+\\alpha, N-n+\\beta) \\,\\mathrm{d}\\mu \\\\\n",
" &= \\frac{n+\\alpha}{N+\\alpha+\\beta}\n",
"\\end{align*}$$\n",
"\n",
"- This result is known as [**Laplace's rule of succession**](https://en.wikipedia.org/wiki/Rule_of_succession)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- The above integral computes the mean of a beta distribution, which is given by $\\mathbb{E}[x] = \\frac{a}{a+b}$ for $x \\sim \\mathrm{Beta}(a,b)$, see [wikipedia](https://en.wikipedia.org/wiki/Beta_distribution)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Finally, we're ready to solve our challenge: for $D=\\{1011001\\}$ and uniform prior ($\\alpha=\\beta=1$), we get\n",
"\n",
"$$ p(x_\\bullet=1|D)=\\frac{n+1}{N+2} = \\frac{4+1}{7+2} = \\frac{5}{9}$$\n",
"\n",
"- In other words, given the model assumptions (the Bernoulli data-generating distribution and Beta prior as specified above), and the observations $D=\\{1011001\\}$, the probability for observing heads (outcome=$1$) on the next toss is $\\frac{5}{9}$.\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Be aware that there is no such thing as an \"objective\" or \"correct\" prediction. Every prediction is conditional on the selected model and the used data set. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Coin Toss Example: What did we learn from the data?\n",
"\n",
"- What did we learn from the data? Before seeing any data, we think that the probability for throwing heads is $$\\left. p(x_\\bullet=1|D) \\right|_{n=N=0} = \\left.\\frac{n+\\alpha}{N+\\alpha+\\beta}\\right|_{n=N=0} = \\frac{\\alpha}{\\alpha + \\beta}\\,.$$ "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Hence, $\\alpha$ and $\\beta$ (to be precise: $\\alpha-1$ and $\\beta-1$) can be interpreted as prior pseudo-counts for heads and tails, respectively. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- If we were to assume zero pseudo-counts, i.e. $\\alpha=\\beta=1$, then our prediction for throwing heads after $N$ coin tosses is completely based on the data, given by\n",
"$$\\left. p(x_\\bullet=1|D) \\right|_{\\alpha=\\beta=1} = \\left.\\frac{n+\\alpha}{N+\\alpha+\\beta}\\right|_{\\alpha=\\beta=1} = \\frac{n}{N}\\,.$$ "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Note the following decomposition\n",
"\n",
"$$\\begin{align*}\n",
" p(x_\\bullet=1|\\,D) &= \\frac{n+\\alpha}{N+\\alpha+\\beta} \\\\\n",
" &= \\frac{\\alpha}{N+\\alpha+\\beta} + \\frac{n}{N+\\alpha+\\beta} \\\\\n",
" &= \\frac{\\alpha}{N+\\alpha+\\beta}\\cdot \\frac{\\alpha+\\beta}{\\alpha+\\beta} + \\frac{n}{N+\\alpha+\\beta}\\cdot \\frac{N}{N} \\\\\n",
" &= \\frac{\\alpha}{\\alpha+\\beta}\\cdot \\frac{\\alpha+\\beta}{N+\\alpha+\\beta} + \\frac{N}{N+\\alpha+\\beta}\\cdot \\frac{n}{N} \\\\\n",
" &= \\frac{\\alpha}{\\alpha+\\beta}\\cdot \\biggl(1-\\frac{N}{N+\\alpha+\\beta} \\biggr) + \\frac{N}{N+\\alpha+\\beta}\\cdot \\frac{n}{N} \\\\\n",
" &= \\underbrace{\\frac{\\alpha}{\\alpha+\\beta}}_{\\substack{\\text{prior}\\\\\\text{prediction}}} + \\underbrace{\\underbrace{\\frac{N}{N+\\alpha+\\beta}}_{\\text{gain}}\\cdot \\underbrace{\\biggl( \\underbrace{\\frac{n}{N}}_{\\substack{\\text{data-based}\\\\\\text{prediction}}} - \\underbrace{\\frac{\\alpha}{\\alpha+\\beta}}_{\\substack{\\text{prior}\\\\\\text{prediction}}} \\biggr)}_{\\text{prediction error}}}_{\\text{correction}}\n",
"\\end{align*}$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"- Let's interpret this decomposition of the posterior prediction. Before the data $D$ was observed, our model generated a _prior prediction_ $ p(x_\\bullet=1) = \\frac{\\alpha}{\\alpha+\\beta}$. Next, the degree to which the actually observed data matches this prediction is represented by the _prediction error_ $ \\frac{n}{N} - \\frac{\\alpha}{\\alpha-\\beta}$. The prior prediction is then updated to a _posterior prediction_ $p(x_\\bullet=1|D)$ by adding a fraction of the prediction error to the prior prediction. Hence, the data plays the role of \"correcting\" the prior prediction. \n",
"\n",
"- Note that, since $0\\leq \\underbrace{\\frac{N}{N+\\alpha+\\beta}}_{\\text{gain}} \\lt 1$, the Bayesian prediction lies between (fuses) the prior and data-based predictions."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- For large $N$, the gain goes to $1$ and $\\left. p(x_\\bullet=1|D)\\right|_{N\\rightarrow \\infty} \\rightarrow \\frac{n}{N}$ goes to the data-based prediction (the observed relative frequency)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Code Example: Bayesian evolution for the coin toss"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"- Next, we code an example for a sequence of coin tosses, where we assume that the true coin generates data $x_n \\in \\{0,1\\}$ by a Bernoulli distribution:\n",
"$$\n",
"p(x_n|\\mu=0.4)=0.4^{x_n} \\cdot 0.6^{1-x_n}\n",
"$$\n",
"\n",
"- So, this coin is biased!\n",
"\n",
"- In order predict the outcomes of future coin tosses, we'll compare two models.\n",
"\n",
"- All models have the same data generating distribution (also Bernoulli)\n",
"$$\n",
"p(x_n|\\mu,m_k) = \\mu^{x_n} (1-\\mu)^{1-x_n} \\quad \\text{for }k=1,2\n",
"$$\n",
"but they have different priors:\n",
"$$\\begin{aligned}\n",
"p(\\mu|m_1) &= \\mathrm{Beta}(\\mu|\\alpha=100,\\beta=500) \\\\\n",
"p(\\mu|m_2) &= \\mathrm{Beta}(\\mu|\\alpha=8,\\beta=13) \\\\\n",
"\\end{aligned}$$\n",
"\n",
"- You can verify that model $m_2$ has the best prior, since\n",
"\n",
"$$\\begin{align*}\n",
"p(x_n=1|m_1) &= \\left.\\frac{\\alpha}{\\alpha+\\beta}\\right|_{m_1} = 100/600 \\approx 0.17 \\\\\n",
"p(x_n=1|m_2) &= \\left.\\frac{\\alpha}{\\alpha+\\beta}\\right|_{m_2} = 8/21 \\approx 0.38 \\,,\n",
"\\end{align*}$$\n",
"( but you are not supposed to know that the real coin has probability for heads $p(x_n=1|\\mu) = 0.4$ ). \n",
"\n",
"- Let's run $500$ tosses:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# computes log10 of Gamma function\n",
"function log10gamma(num)\n",
" num = convert(BigInt, num)\n",
" return log10(gamma(num))\n",
"end\n",
"\n",
"\n",
"μ = 0.4; # specify model parameter\n",
"n_tosses = 500 # specify number of coin tosses\n",
"samples = rand(n_tosses) .<= μ # Flip 200 coins\n",
"\n",
"function handle_coin_toss(prior :: Beta, observation :: Bool)\n",
" posterior = Beta(prior.α + observation, prior.β + (1 - observation))\n",
" return posterior\n",
"end\n",
"\n",
"function log_evidence_prior(prior :: Beta, N :: Int64, n :: Int64)\n",
" log_evidence = log10gamma(prior.α + prior.β) - log10gamma(prior.α) - log10gamma(prior.β) + log10gamma(n+prior.α) + log10gamma((N-n)+prior.β) - log10gamma(N+prior.α+prior.β)\n",
" return log_evidence\n",
"end\n",
"\n",
"priors = [Beta(100., 500.), Beta(8., 13.)] # specify prior distributions \n",
"n_models = length(priors)\n",
"\n",
"posterior_distributions = [[d] for d in priors] # save a sequence of posterior distributions for every prior, starting with the prior itself\n",
"log_evidences = [[] for _ in priors] # maintain a vector of log evidences to plot later\n",
"\n",
"for (N, sample) in enumerate(samples) #for every sample we want to update our posterior\n",
" for (i, prior) in enumerate(priors) #at every sample we want to update all distributions\n",
" posterior = handle_coin_toss(prior, sample) #do bayesian updating\n",
" push!(posterior_distributions[i], posterior) #add posterior to vector of posterior distributions\n",
" log_evidence = log_evidence_prior(posterior_distributions[i][N], N, sum(samples[1:N])) #compute log evidence and add to vector\n",
" push!(log_evidences[i], log_evidence)\n",
" priors[i] = posterior #the prior for the next sample is the posterior from the current sample\n",
" end\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- For each model, as a function of the number of coin tosses, we plot the evolution of the parameter posteriors \n",
"$$p(\\mu|D_n,m_\\bullet)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to /Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_bay_ct.gif\n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"Plots.AnimatedGif(\"/Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_bay_ct.gif\")"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#animate posterior distributions over time in a gif\n",
"\n",
"anim = @animate for i in 1:5:n_tosses\n",
" p = plot(title=string(\"n = \", i))\n",
" for j in 1:n_models\n",
" plot!(posterior_distributions[j][i+1], xlims = (0, 1), fill=(0, .2,), label=string(\"Posterior m\", j), linewidth=2, ylims=(0,28), xlabel=\"μ\")\n",
" end\n",
"end\n",
"\n",
"gif(anim, \"anim_bay_ct.gif\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(This is an animation. If you are viewing these notes in PDF format you can see the animation at https://nbviewer.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/Bayesian-Machine-Learning.ipynb .)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Note that both posteriors move toward the \"correct\" value ($\\mu=0.4$). However, the posterior for $m_1$ (blue) moves much slower because we assumed far more pseudo-observations for $m_1$ than for $m_2$. \n",
"- As we get more observations, the influence of the prior diminishes. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- We have an intuition that $m_2$ is superior over $m_1$. Let's check this by plotting over time the relative Bayesian evidences for each model:\n",
"$$\\frac{p(D_n|m_i)}{\\sum_{i=1}^2 p(D_n|m_i)}$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to /Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_bay_ct_log_evidence.gif\n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"Plots.AnimatedGif(\"/Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_bay_ct_log_evidence.gif\")"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"evidences = map(model -> exp.(model), log_evidences)\n",
"\n",
"anim = @animate for i in 1:n_tosses\n",
" p = plot(title=string(L\"\\frac{p_i(\\mathbf{x}_{1:n})}{\\sum_i p_i(\\mathbf{x}_{1:n})}\",\" n = \", i), ylims=(0, 1))\n",
" total = sum([evidences[j][i] for j in 1:n_models])\n",
" bar!([(evidences[j][i] / total) for j in 1:n_models], group=[\"Model $i\" for i in 1:n_models])\n",
"end\n",
"\n",
"gif(anim, \"anim_bay_ct_log_evidence.gif\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Over time, the relative evidence of model $m_1$ converges to 0. Can you explain this behavior?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### From Posterior to Point-Estimate\n",
"\n",
"- In the example above, Bayesian parameter estimation and prediction were tractable in closed-form. This is often not the case. We will need to approximate some of the computations. \n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- Recall Bayesian prediction\n",
"\n",
"$$\n",
"p(x|D) = \\int p(x|\\theta)p(\\theta|D)\\,\\mathrm{d}{\\theta}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- If we approximate posterior $p(\\theta|D)$ by a delta function for one 'best' value $\\hat\\theta$, then the predictive distribution collapses to\n",
"\n",
"$$\n",
"p(x|D)= \\int p(x|\\theta)\\,\\delta(\\theta-\\hat\\theta)\\,\\mathrm{d}{\\theta} = p(x|\\hat\\theta)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- This is just the data generating distribution $p(x|\\theta)$ evaluated at $\\theta=\\hat\\theta$, which is easy to evaluate.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- The next question is how to get the parameter estimate $\\hat{\\theta}$? (See next slide)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Some Well-known Point-Estimates\n",
"\n",
"- **Bayes estimate** (the mean of the posterior)\n",
"\n",
"$$\n",
"\\hat \\theta_{bayes} = \\int \\theta \\, p\\left( \\theta |D \\right)\n",
"\\,\\mathrm{d}{\\theta}\n",
"$$\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- **Maximum A Posteriori** (MAP) estimate \n",
"$$\n",
"\\hat \\theta_{\\text{map}}= \\arg\\max _{\\theta} p\\left( \\theta |D \\right) =\n",
"\\arg \\max_{\\theta} p\\left(D |\\theta \\right) \\, p\\left(\\theta \\right)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- **Maximum Likelihood** (ML) estimate\n",
"$$\n",
"\\hat \\theta_{ml} = \\arg \\max_{\\theta} p\\left(D |\\theta\\right)\n",
"$$\n",
" - Note that Maximum Likelihood is MAP with uniform prior\n",
" - ML is the most common approximation to the full Bayesian posterior."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Bayesian vs Maximum Likelihood Learning\n",
"\n",
"Consider the task: predict a datum $x$ from an observed data set $D$.\n",
"\n",
"
\n",
"
Bayesian
Maximum Likelihood
\n",
"
1. Model Specification
Choose a model $m$ with data generating distribution $p(x|\\theta,m)$ and parameter prior $p(\\theta|m)$
Choose a model $m$ with same data generating distribution $p(x|\\theta,m)$. No need for priors.
\n",
"
2. Learning
use Bayes rule to find the parameter posterior,\n",
"$$\n",
"p(\\theta|D) \\propto p(D|\\theta) p(\\theta)\n",
"$$
By Maximum Likelihood (ML) optimization,\n",
"$$ \n",
" \\hat \\theta = \\arg \\max_{\\theta} p(D |\\theta)\n",
"$$
"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Report Card on Maximum Likelihood Estimation\n",
"\n",
"- Maximum Likelihood (ML) is MAP with uniform prior. MAP is sometimes called a 'penalized' ML procedure:\n",
"\n",
"$$\n",
"\\hat \\theta_{map} = \\arg \\max _\\theta \\{ \\underbrace{\\log\n",
"p\\left( D|\\theta \\right)}_{\\text{log-likelihood}} + \\underbrace{\\log\n",
"p\\left( \\theta \\right)}_{\\text{penalty}} \\}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- (good!). ML works rather well if we have a lot of data because the influence of the prior diminishes with more data."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- (good!). Computationally often do-able. Useful fact that makes the optimization easier (since $\\log$ is monotonously increasing):\n",
"\n",
"$$\\arg\\max_\\theta \\log p(D|\\theta) = \\arg\\max_\\theta p(D|\\theta)$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"- (bad). Cannot be used for model comparison! When doing ML estimation, the Bayesian model evidence always evaluates to zero because the prior probability mass under the likelihood function goes to zero. Therefore, when doing ML estimation, Bayesian model evidence cannot be used to evaluate model performance: \n",
"$$\\begin{align*}\n",
"\\underbrace{p(D|m)}_{\\substack{\\text{Bayesian}\\\\ \\text{evidence}}} &= \\int p(D|\\theta) \\cdot p(\\theta|m)\\,\\mathrm{d}\\theta \\\\\n",
" &= \\lim_{(b-a)\\rightarrow \\infty} \\int p(D|\\theta)\\cdot \\text{Uniform}(\\theta|a,b)\\,\\mathrm{d}\\theta \\\\\n",
" &= \\lim_{(b-a)\\rightarrow \\infty} \\frac{1}{b-a}\\underbrace{\\int_a^b p(D|\\theta)\\,\\mathrm{d}\\theta}_{<\\infty} \\\\\n",
" &= 0\n",
"\\end{align*}$$\n",
" - In fact, this is a serious problem because Bayesian evidence is fundamentally the correct performance assessment criterion that follows from straighforward PT. In practice, when estimating parameters by maximum likelihood, we often evaluate model performance by an _ad hoc_ performance measure such as mean-squared-error on a testing data set."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"$\\Rightarrow$ **Maximum Likelihood estimation is at best an approximation to Bayesian learning**, but for good reason a very popular learning method when faced with lots of available data."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##
OPTIONAL SLIDES
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The Kullback-Leibler Divergence\n",
"\n",
"- The Kullback-Leibler Divergence (a.k.a. relative entropy) between two distributions $q$ and $p$ is defined as\n",
"$$\n",
"D_{\\text{KL}}[q,p] \\equiv \\sum_z q(z) \\log \\frac{q(z)}{p(z)}\n",
"$$\n",
"\n",
"- The following [Gibbs Inequality](https://en.wikipedia.org/wiki/Gibbs%27_inequality) holds (see [wikipedia](https://en.wikipedia.org/wiki/Gibbs%27_inequality) for proof): \n",
" $$D_{\\text{KL}}[q,p] \\geq 0 \\quad \\text{with equality only if } p=q $$\n",
"\n",
"- The KL divergence can be interpreted as a distance between two probability distributions.\n",
"\n",
"- As an aside, note that $D_{\\text{KL}}[q,p] \\neq D_{\\text{KL}}[p,q]$. Both divergences are relevant. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Here is an animation that shows the KL divergence between two Gaussian distributions:\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to /Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_lat_kl.gif\n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
"Plots.AnimatedGif(\"/Users/pol/git/bertdv/BMLIP/lessons/notebooks/anim_lat_kl.gif\")"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function kullback_leibler(q :: Normal, p :: Normal) #Calculates the KL Divergence between two gaussians (see https://stats.stackexchange.com/questions/7440/kl-divergence-between-two-univariate-gaussians for calculations)\n",
" return log((p.σ / q.σ)) + ((q.σ)^2 + (p.μ - q.μ)^2) / (2*p.σ^2) - (1. / 2.)\n",
"end\n",
"\n",
"μ_p = 0 #statistics of distributions we'll keep constant (we'll vary the mean of q). Feel free to change these and see what happens\n",
"σ_p = 1\n",
"σ_q = 1\n",
"\n",
"p = Normal(μ_p, σ_p)\n",
"\n",
"anim = @animate for i in 1:100\n",
" μ_seq = [(j / 10.) - 5. + μ_p for j in 1:i] #compute the sequence of means tested so far (to compute sequence of KL divergences)\n",
" kl = [kullback_leibler(Normal(μ, σ_q), p) for μ in μ_seq] #compute KL divergence data\n",
" viz = plot(right_margin=8mm, title=string(L\"D_{KL}(Q || P) = \", round(100 * kl[i]) / 100.), legend=:topleft) #build plot and format title and margins\n",
" μ_q = μ_seq[i] #extract mean of current frame from mean sequence\n",
" q = Normal(μ_q, σ_q)\n",
" plot!(p, xlims = (μ_p - 8, μ_p + 8), fill=(0, .2,), label=string(\"P\"), linewidth=2, ylims=(0,0.5)) #plot p\n",
" plot!(q, fill=(0, .2,), label=string(\"Q\"), linewidth=2, ylims=(0,0.5)) #plot q\n",
" plot!(twinx(), μ_seq, kl, xticks=:none, ylims=(0, maximum(kl) + 3), linewidth = 3, #plot KL divergence data with different y-axis scale and different legend\n",
" legend=:topright,xlims = (μ_p - 8, μ_p + 8), color=\"green\", label=L\"D_{KL}(Q || P)\")\n",
"end\n",
"gif(anim, \"anim_lat_kl.gif\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Note that this is an animation. If you are viewing these notes in PDF format you can see the animation at https://nbviewer.org/github/bertdv/BMLIP/blob/master/lessons/notebooks/Bayesian-Machine-Learning.ipynb"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"open(\"../../styles/aipstyle.html\") do f display(\"text/html\", read(f, String)) end"
]
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"anaconda-cloud": {},
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Julia 1.10.2",
"language": "julia",
"name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.10.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}