一文理解贝叶斯推断

贝叶斯推断是基于贝叶斯定理的一种推断方法,与之相关的最大似然估计、最大后验估计等统计推断方法是机器学习中的核心概念。本文尝试从一个简单的例子入手,帮助读者深入理解这些复杂的概念。

从一道经典面试题说起

有一枚硬币,抛掷 10 次,出现了 7 次正面,3 次反面。试问这枚硬币是公平的吗?

这是一道经典面试题,没有标准答案,关键看思考的角度、过程以及深度。

常识说

基于常识的人会认为,硬币就是公平的,正面朝上的概率是 0.5,完全有可能抛出“7正3反”的结果,而且概率还不低:

C1030.57  0.53 = 0.1172C_{10}^3 \cdot 0.5^7 \cdot 0.5^3 = 0.1172

可见,随便做 10 轮实验,大概就能观察到一次“7正3反”。

假设检验

只问硬币公不公平,没问硬币正面朝上的概率是多少,可以看作一个假设检验问题。

首先定义原假设 H0: 硬币是公平的。由上文可知,出现“7正3反”的概率是 0.1172,超过了 5%,不属于小概率事件。所以原价设成立,即这枚硬币是公平的。

这种解释与常识说类似,但理论支撑更强。

频率说

这题简单,抛 10 次硬币,7正3反,用频率逼近概率,可以得到正面朝上的概率为 0.7,所以硬币不公平。只不过这里抛掷的次数太少,导致逼近不够严格,如果再多抛几百次就好了😅。

可见,该方法依赖观测的数据量,在数据较少时偏差较大。

最大似然估计(Maximum Likelihood Estimate, MLE)

假设硬币正面朝上的概率为 θ\theta,我们观测到“7正3反”10 组抽样结果,计为 x\bold{x}。令:

θ=arg maxθP(x=73θ)\theta^*=\argmax_{\theta}P(\bold{x}=7正3反\,|\,\theta)

θ\theta^* 是一个很有潜力的候选项。也就是说,我们要找到“当 θ\theta 为多少时,观察到“7正3反”的可能性最大”。

这种推断方式称为最大似然估计(MLE),而“似然(likelihood)”一词就是“可能性”的意思。

最大似然估计是“已知样本,计算概率(或称参数)”的问题,这里我们不是把样本 x\bold{x} 看作变量,而是把 θ\theta 看作变量。因此,定义关于 θ\theta 的函数:

L(θ)=P(x=73θ) = C103  θ7  (1θ)3\begin{aligned} L(\theta) &= P(\bold{x}=7正3反\,|\,\theta) \\ &= C_{10}^3 \cdot \theta^7 \cdot (1-\theta)^3 \end{aligned}

这种形式被称为 θ\theta 的似然函数(Likelihood Function)。而要计算的 θ\theta^* 即为使得 L(θ)L(\theta) 取最大值的点。

观察表达式为连乘形式,这里有一个通用的简化技巧,就是对表达式两边各加一层对数函数。由于对数函数是单调递增的,不影响原表达式的单调性,因此最大值点不变。简化后的表达式如下:

l(θ)=lnL(θ) = 7lnθ + 3ln(1θ) + C\begin{aligned} \mathcal{l}(\theta) &= \ln{L(\theta)} \\ &= 7\ln{\theta} + 3\ln{(1-\theta)} + C \end{aligned}

其中 CC 为常数。

为了找到 l(θ)l(\theta) 的最大值点,只需对其求导,找到导数为 0 的点即可。即:

7θ  31θ=0\frac{7}{\theta} - \frac{3}{1-\theta}=0

得到 θ=0.7\theta=0.7

θ=0.7\theta=0.7 时,观测到“7正3反”的概率最大。从这个角度可以认为,硬币是不公平的,其正面朝上的概率为 0.7。

这个结论刚好与频率说一致,但只是巧合,两者之间并无逻辑关联。对于其他问题,两者得到的结论未必相同。

最大后验估计(Maximum A Posteriori Estimation, MAP)

持贝叶斯派观点者看了上面的所有推理会摇头,因为:

  • 常识说只凭先验知识,完全不考虑数据带来的后验信息,一点都不“数据驱动”。
  • 频率说和最大似然估计说只考虑后验数据,完全不顾“硬币通常都是公平的”这一先验知识,得到硬币证明朝上概率为 0.7 的结论,有点不合常理。

站在贝叶斯派的视角,万物都是随机变量,只有已知数据不会骗人。模型/参数从来都不是固定的,而要根据后验数据的积累不断纠正。因此,硬币正面朝上的概率 θ\theta 是一个随机变量,而不是一个冥冥之中已经注定的某个固定值。所以,θ\theta 的先验值不是简单的 0.5,而是一个概率分布 p(θ)p(\theta),只不过它取值为 0.5 的可能性非常大。例如你可以假设 θ\theta 服从均值为 0.5,方差为 0.1 的正态分布(或者从世界知识中总结出来),即:

p(θ) ~ N(0.5,0.12)p(\theta) ~ \mathcal{N}(0.5, 0.1^2)

如果此时问,θ=arg maxθp(θ)\theta^*=\argmax_{\theta}p(\theta) 是多少?

毫无疑问,θ=0.5\theta^*=0.5

但当加入了一批观测数据(7正3反)之后,就不能再以静态的眼光看待 p(θ)p(\theta) 了,此时 θ\theta 的分布应当有所调整,其峰值至少应该向 1 的方向偏一点(尽管很微弱)。这即是后验概率分布:

p(θx=73)p(\theta\,|\,\bold{x}=7正3反)

最初的问题也就变成了:

θ=arg maxθp(θx=73)\theta^*=\argmax_{\theta}p(\theta\,|\,\bold{x}=7正3反)

注意这个表达式与最大似然公式的区别:

最大似然公式写作 P()P(\cdot) (大写),表示一个具体的概率值。最大后验公式写作 p()p(\cdot) (小写),表示一个概率分布函数。

上述表达式的含义是,在观察到“7正3反”的现象后,硬币正面朝上的概率最可能等于几?

为了求解上述表达式,回顾一下贝叶斯公式:

P(AB)=P(BA)P(A)P(B)P(A|B)=\frac{P(B|A)P(A)}{P(B)}

将贝叶斯公式套入表达式,可得:

θ =arg maxθp(θx=73) =arg maxθP(x=73θ)p(θ)P(x=73) =arg maxθP(x=73θ)p(θ)\begin{aligned} \theta^* &= \argmax_{\theta}p(\theta\,|\,\bold{x}=7正3反) \\ &= \argmax_{\theta} \frac{P(\bold{x}=7正3反\,|\,\theta)\cdot p(\theta)}{P(\bold{x}=7正3反)} \\ &= \argmax_{\theta} P(\bold{x}=7正3反\,|\,\theta)\cdot p(\theta) \end{aligned}

最后一步将分母中的 P(x)P(\bold{x}) 略去了,是因为 P(x)P(\bold{x}) 是某个与 θ\theta 无关的常量,不影响对 θ\theta 极值点的计算。如果你好奇的话,可以通过全概公式计算 P(x)P(\bold{x})

P(x=73)=01P(x=73θ)p(θ)dθ=01C103θ7(1θ)310.12πe(θ0.5)220.12dθP(\bold{x}=7正3反)=\int_0^1P(\bold{x}=7正3反\,|\,\theta)\cdot p(\theta) \,\mathrm{d}\theta = \int_0^1C_{10}^3\cdot \theta^7\cdot (1-\theta)^3\cdot \frac{1}{0.1\sqrt{2\pi}}e^{-\frac{(\theta-0.5)^2}{2\cdot 0.1^2}}\,\mathrm{d}\theta

这是一个关于 θ\theta 的定积分,结果是一个常量。

回归正题,继续推导 θ\theta^*

θ =arg maxθ P(x=73θ)p(θ) =arg maxθlnP(x=73θ)+lnp(θ) =arg maxθln(C103θ7θ3)+ln[10.12πe(θ0.5)20.02] =arg maxθ7lnθ+3ln(1θ)  (θ0.5)20.02 \begin{aligned} \theta^* &= \argmax_{\theta} \, P(\bold{x}=7正3反\,|\,\theta)\cdot p(\theta) \\ &= \argmax_{\theta} \, \ln{P(\bold{x}=7正3反\,|\,\theta)} + \ln{p(\theta)} \\ &= \argmax_{\theta} \, \ln{(C_{10}^3\cdot\theta^7\cdot\theta^3)} + \ln{[\frac{1}{0.1\sqrt{2\pi}}e^{-\frac{(\theta-0.5)^2}{0.02}}]} \\ &= \argmax_{\theta} \, 7\ln{\theta} + 3\ln{(1-\theta)} - \frac{(\theta-0.5)^2}{0.02} \\ \end{aligned}

对上述表达式求导,并计算导数为 0 的点,得到 θ=0.5577\theta^*=0.5577

可以看到,后验概率确实从 0.5 向 1 的方向偏移了一些,偏移程度取决于两个因素:

  1. 对先验概率 p(θ)p(\theta) 的假设。这里假设了 p(θ) ~ N(0.5,0.12)p(\theta) ~ \mathcal{N}(0.5, 0.1^2),方差越大,偏移越多。若方差从 0.1 增大为 1,会得到 θ=0.6959\theta^*=0.6959

    其实对于抛硬币问题(二项分布),更常见的做法是将先验分布假设为 β\beta 分布(参考),因为 β\beta 分布拥有一个良好的性质:如果先验分布为 β\beta 分布,那么后验分布也服从 β\beta 分布。这样计算起来很方便。这种先验和后验分布具有相同形式的现象称为共轭分布。

  2. 观察样本的个数。这里观测数据是“7正3负”,如果是“700正300负”的话,那么偏移程度会更大,得到 θ=0.6959\theta^*=0.6959,非常逼近 0.7。

贝叶斯推断

根据最大后验估计,已经求得 θ=0.5577\theta^*=0.5577。那么,如果继续追问:再抛一次硬币,正面朝上的概率是多少?

你可能会想,这不是显而易见吗?就是 0.5577 呀。

这就在不知不觉中又违背贝叶斯派的思想精髓了。

如前所述,在贝叶斯派眼中,θ\theta 是一个随机变量,而不是一个冥冥之中已经注定了的固定值。θ=0.5577\theta^*=0.5577 的含义是,在观察到“7正3反”之后,θ\theta 取 0.5577 的可能性是最大的。但 θ\theta 取 0.5 有没有可能?θ\theta 取 0.7 有没有可能?都是有可能的,只是可能性不如 0.5577 那么大。

此时,θ\theta 取各种值的可能性可通过其后验分布 p(θx=73)p(\theta\,|\,\bold{x}=7正3反) 来描述,它的函数图像类似下图:

17440097463651744009366162.png

可见,p(θx=73)p(\theta\,|\,\bold{x}=7正3反) 函数在 0.5577 处取得最大值。

重新审视问题,会发现 θ\theta 取 0~1 之间的任意值都是有可能的,而在 θ\theta 取每个值的情况下,都可以计算下一次硬币正面朝上的概率。先用不精确的语言来描述一下思路,方便理解。如上图,我们大致能看到:

p(0.1)=0.00001p(0.2)=0.0001p(0.3)=0.0002p(0.4)=0.001p(0.5)=0.0045...p(0.9)=0.0001p(0.1)=0.00001 \\ p(0.2)=0.0001 \\ p(0.3)=0.0002 \\ p(0.4)=0.001 \\ p(0.5)=0.0045 \\ ...\\ p(0.9)=0.0001

根据概率的加法原则,把所有可能发生的情况整合起来,有:

P(下次为正)=0.1p(0.1)+0.2p(0.2)++0.9p(0.9)P(下次为正) = 0.1*p(0.1) + 0.2*p(0.2) + \cdots + 0.9*p(0.9)

可以通过积分来严格描述上述思路:

P(下次为正x=73)=01P(x^θ)p(θx)dθ=01θp(θx)dθP(下次为正\,|\,\bold{x}=7正3反) = \int_0^1 P(\hat{x}|\theta)\cdot p(\theta|\bold{x})\mathrm{d}\theta = \int_0^1 \theta\cdot p(\theta|\bold{x})\mathrm{d}\theta

其中,x^\hat{x} 代表“下次为正”这一事件,x\bold{x} 代表已观测到的“7正3反”事件。

可以看到,这与简单回答 P(下次为正)=0.5577P(下次为正)=0.5577 的核心区别在于,上述结论综合了 θ\theta 在所有可能值下“下次为正”的概率,而不只是 0.5577 一个点的情况。

上述积分难以求得解析表达式,最好通过数值方法计算结果。但这只是因为我们将先验分布 p(θ)p(\theta) 假设为了正态分布,如果将 p(θ)p(\theta) 假设为 β\beta 分布,则能够求得解析式和精确解。