TL;DR
这是「概率视角下的机器学习」系列的第三篇。上一篇 把工具箱备齐了:分布、贝叶斯规则、蒙特卡洛、信息论。这一篇开始用它们解决第一个具体问题——如何从离散数据里学习概念 (Chen 注:这里的「概念」(concept)不是日常说的想法,而是一条「某个数是否属于某类」的规则,如「2 的幂」。它有两幅面孔:内涵(规则本身)与外延(满足规则的数字集合,如 $\{2,4,8,16,\dots\}$)。学一个概念 $C$ 等价于学它的指示函数 $f(x)=\mathbb{I}(x\in C)$,即一个二分类器。文中的「假设」$h$ 就是候选概念,真概念 $C$ 是待猜的答案。) 。
本篇对应 MLAPP 第 3 章,主题是「离散数据的生成式模型」。生成式的意思是:不直接学「给定 x x x 判类别」的映射,而是先为数据本身建一个概率模型 p ( x ∣ y = c ) p(x \mid y = c) p ( x ∣ y = c ) ,再用贝叶斯规则反推类别。跟着原书骨架,我们会走一条由简到繁的路线:
贝叶斯概念学习 :用 Tenenbaum 的「数字游戏」讲清楚一件事,似然里天然藏着奥卡姆剃刀,不用额外加正则项,模型就会偏爱「刚好解释数据的最简假设」。
贝塔-二项模型 与狄利克雷-多项模型 :把离散假设空间换成连续参数,正式兑现第二篇 反复预告的共轭先验 ,先验和后验同族,贝叶斯更新退化成「把观测计数加到先验伪计数上」。
朴素贝叶斯分类器 :把「条件独立」这个大胆假设摊开,看它为什么又糙又好用,以及贝叶斯化如何治好它的零计数病。
挑三个值得亲手推一遍 的结果做完整推导:后验均值是先验均值与最大似然估计(MLE)的凸组合 、带单纯形约束的多项最大似然(拉格朗日乘子的一次干净应用)、以及拉普拉斯接续律 如何从一个积分里自然长出来。它们都不难,但推完之后,「贝叶斯更新到底在做什么」会变得很具体。
图1:本篇内容结构——从离散假设空间的概念学习,过渡到连续参数的共轭模型,最后落到朴素贝叶斯分类器
1. 数字游戏:概念学习的最小模型
原书 §3.1 先把问题摆正。生成式分类器 (Chen 注:式 (3.1) 里的 $\propto$ 表示两边只差一个常数倍。完整的贝叶斯定理是等式:后验 $=$ 似然 $\times$ 先验 $\div$ 归一化常数 $p(\boldsymbol{x})$,其中 $p(\boldsymbol{x})=\sum_{c'} p(\boldsymbol{x}\mid y=c')\,p(y=c')$。这个分母与类别 $c$ 无关,对所有 $c$ 都是同一个数,做分类只需比较哪个 $c$ 的后验最大。要还原成真实概率,把右边对所有 $c$ 算出再归一化即可。) 的形式是
p ( y = c ∣ x , θ ) ∝ p ( x ∣ y = c , θ ) p ( y = c ∣ θ ) (3.1) p(y = c \mid \boldsymbol{x}, \boldsymbol\theta) \quad \propto \quad p(\boldsymbol{x} \mid y = c, \boldsymbol\theta)\, p(y = c \mid \boldsymbol\theta) \tag{3.1} p ( y = c ∣ x , θ ) ∝ p ( x ∣ y =
关键在 p ( x ∣ y = c ) p(\boldsymbol{x} \mid y = c) p ( x ∣ y = c ) ,也就是每个类别下,数据长什么样。这一章的全部内容,就是给离散数据挑选合适的 p ( x ∣ y = c ) p(\boldsymbol{x} \mid y = c) p ( x ∣ y = c ) ,并学出它的参数。
为了更直观的理解,§3.2 用了 Tenenbaum 博士论文 (Chen 注:Tenenbaum, J. B. (1999). A Bayesian Framework for Concept Learning. PhD thesis, MIT. 这也是数字游戏与 size principle 的原始出处;MLAPP §3.2 的整套贝叶斯概念学习即取材于此。) 里的数字游戏 :我心里想一个简单的算术概念 C C C ,比如「质数」或「2 的幂」,然后给你几个正例 D = { x 1 , … , x N } D = \{x_1, \dots, x_N\} D = { x 1 , … , x N } (都属于 ),再问你某个新数 是否也属于 。
比如我给出 D = { 16 } D = \{16\} D = { 16 } ,你觉得 x ~ = 8 \tilde{x} = 8 x ~ = 8 像不像同类?再给 D = { 16 , 8 , 2 , 64 } D = \{16, 8, 2, 64\} D = { 16 , 8 , 2 , 64 ,你几乎立刻锁定「2 的幂」,而不会猜「所有偶数」,尽管后者也和数据完全相容。
这里有两点值得注意。第一,学习概念等价于二分类 :定义指示函数 (Chen 注:指示函数(indicator function),记作 $\mathbb{I}(\cdot)$ 或 $\mathbb{1}(\cdot)$:括号内条件成立时取 1,否则取 0,把逻辑判断翻译成 0/1 数值。本文后面反复用到,如式 (3.3) 的 $\mathbb{I}(D\in h)$、以及 $N_1=\sum_i \mathbb{I}(x_i=1)$ 用求和来计数。) f ( x ) = 1 f(x) = 1 f ( x ) = 1 当 x ∈ C x \in C x ∈ C ,否则为 0,学概念就是学这个 f f f 。第二,人类只靠正例 就能学,不需要反例,这和标准判别式分类器不同,也正是生成式视角的用武之地。
✓ 数字游戏的意义不在数字本身,而在它是「从正例学离散概念」的最小可推演模型。把这里的贝叶斯三件套(似然、先验、后验)推导理解透,后面贝塔-二项、狄利克雷-多项、朴素贝叶斯都是同一固定套路换个分布。
2. 似然:奥卡姆剃刀是免费的
先说似然。§3.2.1 要回答的是:为什么看到 D = { 16 , 8 , 2 , 64 } D = \{16, 8, 2, 64\} D = { 16 , 8 , 2 , 64 } 后,我们选假设 h two = h_{\text{two}} = h two = 「2 的幂」而不是假设 h even = h_{\text{even}} = h 「偶数」?两者都相容。(下文用 记一个候选假设,下标标明它对应哪个概念)
关键假设叫强抽样假设 (strong sampling assumption):样本是从概念的外延 里均匀随机抽取的(外延就是属于该概念的数的集合,如 h even h_{\text{even}} h even 的外延是 { 2 , 4 , … , 100 } \{2, 4, \dots, 100\} { 2 , 4 , … , 100 } )。在这个假设下,独立有放回地抽 N N N 个样本,落在假设 h h h 里的概率是
p ( D ∣ h ) = [ 1 size ( h ) ] N = [ 1 ∣ h ∣ ] N (3.2) p(D \mid h) = \left[\frac{1}{\operatorname{size}(h)}\right]^N = \left[\frac{1}{|h|}\right]^N \tag{3.2} p ( D ∣ h ) = [ size ( h ) 1 ]
上式体现了 Tenenbaum 所说的尺寸原理 (size principle):模型偏好与数据相容的最小假设 (Chen 注:这里的「最小」指假设的外延小($|h|$ 小,覆盖的数字少),不是「概念描述短」。如 $h_{\text{two}}$ 的外延只有 6 个数、$h_{\text{even}}$ 有 50 个,前者更「小」。) 。这就是奥卡姆剃刀 (Chen 注:奥卡姆剃刀(Occam's razor),14 世纪哲学家 William of Ockham 提出的方法论原则:多个假设都能解释同一数据时,优先选最简单的那个,即「如无必要,勿增实体」。机器学习里对应「简单模型往往泛化更好」的直觉。) ,而且它是免费 (Chen 注:通常要让模型偏爱简单假设,得手动在目标函数里加复杂度惩罚项($\ell_1$/$\ell_2$ 正则、AIC/BIC 的参数罚项、MDL 编码长度)并调权重。而这里只写了简单的似然 $[1/|h|]^N$:强抽样假设下均匀抽样,大集合把概率摊薄到更多数字上,落在实际样本上的概率自然更低,所以分母 $|h|$ 就是内置的复杂度惩罚,指数 $N$ 再把差距放大。偏好小假设是似然的副产品,无需外加,故称「免费」。反例:若改用弱抽样假设,似然退化成 0/1 的 $\mathbb{I}(D\in h)$,剃刀就消失了。) 的,不用手动加惩罚项,似然本身就实现了。
算一下便知:取 D = { 16 } D = \{16\} D = { 16 } ,100 以内 2 的幂有 6 个,偶数有 50 个,所以 p ( D ∣ h two ) = 1 / 6 p(D \mid h_{\text{two}}) = 1/6 p ( D ∣ h two ) = 1/6 ,p ( D ∣ h even ) = 1 / 50 p(D \mid h_{\text{even}}) = 1/50 。只看一个数, 已经略占上风。再看四个数:
p ( D ∣ h two ) = ( 1 / 6 ) 4 ≈ 7.7 × 10 − 4 , p ( D ∣ h even ) = ( 1 / 50 ) 4 ≈ 1.6 × 10 − 7 p(D \mid h_{\text{two}}) = (1/6)^4 \approx 7.7 \times 10^{-4}, \quad p(D \mid h_{\text{even}}) = (1/50)^4 \approx 1.6 \times 10^{-7} p ( D ∣ h two ) = ( 1/6 ) 4
似然比接近 5000:1,压倒性地偏向「2 的幂」。指数 N N N 是关键:越多样本落在一个小集合里,用大集合来解释就越像一个可疑的巧合 。尺寸原理的力量随数据量指数级放大。
3. 先验:给「不自然」的概念打低分
似然不是全部。§3.2.2 处理的是另一类假设:概念 h ′ = h' = h ′ = 「2 的幂,但去掉 32」。给定 D = { 16 , 8 , 2 , 64 } D = \{16, 8, 2, 64\} D = { 16 , 8 , 2 , 64 } ,这个 h ′ h' h ′ 的 ,因为它不必解释「为什么样本里偏偏没有 32」。
可 h ′ h' h ′ 明显「概念上不自然」。我们用先验 来编码这种直觉:给不自然的概念分配低先验概率。先验是主观的,这正是贝叶斯推理常被诟病的地方,小孩和数学教授的先验不一样,得到的答案也会不同。但原书 §3.2.2 反过来论证:主观性其实有用 。同样是 { 1200 , 1500 , 900 , 1400 } \{1200, 1500, 900, 1400\} { 1200 , 1500 , 900 , 1400 } ,若被告知「这些是某条算术规则的例子」,你会觉得 400 可能、1183 不太可能;若被告知「这些是健康的胆固醇水平」,判断正好反过来。先验正是把背景知识注入推断的机制。
4. 后验:似然与先验的合成
§3.2.3 就是似然乘先验再归一化:
p ( h ∣ D ) = p ( h ) I ( D ∈ h ) / ∣ h ∣ N ∑ h ′ ∈ H p ( h ′ ) I ( D ∈ h ′ ) / ∣ h ′ ∣ N (3.3) p(h \mid D) = \frac{p(h)\, \mathbb{I}(D \in h)/|h|^N}{\sum_{h' \in \mathcal{H}} p(h')\, \mathbb{I}(D \in h')/|h'|^N} \tag{3.3} p ( h ∣ D ) = ∑
其中 I ( D ∈ h ) \mathbb{I}(D \in h) I ( D ∈ h ) 当且仅当所有数据都落在 h h h 的外延里时为 1。对大多数「自然」概念,先验近似均匀,后验基本正比于似然;而「2 的幂加 37」「2 的幂除 32」这类概念虽有高似然,却因低先验而后验支持很低;反过来「奇数」先验不低,却因似然极低而被压下去。后验是先验与似然拉锯的结果。
数据足够多时,后验会在单个概念上变尖,逼近 最大后验(MAP)估计 (Chen 注:MAP = maximum a posteriori(最大后验),即取后验概率最大的那个点作为估计:$\hat{h}^{\text{MAP}}=\arg\max_h p(h\mid D)$,也就是后验众数。与之相邻的两个点估计是 MLE(最大似然,只看似然、不含先验)和完整后验(不取单点、对整个分布积分)。MAP 可看作「带先验的 MLE」;本篇后面 §6 的凸组合、§7 的加一平滑都在对比 MAP 与完整后验的差别。) :
p ( h ∣ D ) → δ h ^ MAP ( h ) (3.4) p(h \mid D) \to \delta_{\hat{h}^{\text{MAP}}}(h) \tag{3.4} p ( h ∣ D ) → δ h ^ MAP ( h )
其中 h ^ MAP = arg max h p ( h ∣ D ) \hat{h}^{\text{MAP}} = \arg\max_h p(h \mid D) h ^ MAP = arg max h p ( h ∣ D ) 是后验众数,δ \delta 是狄拉克测度( 式 3.5 给出其定义)。学习者迎来一个 ,锁定真概念。这里也看出低先验的必要:否则会过拟合到「2 的幂除 32」这种病态假设上。
5. 后验预测:贝叶斯模型平均 vs 插值近似
学到后验只是内部信念,要检验它得拿去预测 。§3.2.4 给出,新数 x ~ \tilde{x} x ~ 属于概念的概率是
p ( x ~ ∈ C ∣ D ) = ∑ h p ( y = 1 ∣ x ~ , h ) p ( h ∣ D ) (3.8) p(\tilde{x} \in C \mid D) = \sum_{h} p(y = 1 \mid \tilde{x}, h)\, p(h \mid D) \tag{3.8} p ( x ~ ∈ C ∣ D ) = h ∑
这是各假设预测的加权平均 ,权重就是后验,称为贝叶斯模型平均 (Bayes model averaging, BMA)。数据少或模糊时,后验弥散,预测分布也宽;一旦「想明白了」,后验塌成一个尖峰,预测随之收窄。
与之对照的是插值近似 (plug-in approximation):直接用单个最大后验假设去预测,
p ( x ~ ∈ C ∣ D ) ≈ ∑ h p ( x ~ ∣ h ) δ h ^ ( h ) = p ( x ~ ∣ h ^ ) (3.9) p(\tilde{x} \in C \mid D) \approx \sum_{h} p(\tilde{x} \mid h)\, \delta_{\hat{h}}(h) = p(\tilde{x} \mid \hat{h}) \tag{3.9} p ( x ~ ∈ C ∣ D ) ≈ h
上式简单且被广泛使用,但低估了不确定性 :预测不如贝叶斯模型平均平滑。这里埋下一个贯穿全书的对照:完整贝叶斯(对参数积分)与点估计插值(最大似然/最大后验)的差别,在小样本下尤其显著,数据多了两者才收敛。这正是本系列第四篇要展开的贝叶斯 vs 频率派 之争的雏形。
原书 §3.2.5 还给出一个更贴近人类行为的先验:把算术规则和区间概念混成 p ( h ) = π 0 p rules ( h ) + ( 1 − π 0 ) p interval ( h ) p(h) = \pi_0\, p_{\text{rules}}(h) + (1 - \pi_0)\, p_{\text{interval}}(h) p ( h ) = π 0 p rules ( h ) + ( 1 − ( ),只要 ,模型预测就和人类实验数据惊人地吻合。细节从略,感兴趣可查原书。
6. 贝塔-二项模型:共轭先验登场
数字游戏里假设空间 H \mathcal{H} H 是有限离散 的,计算只需加、乘、除。但更多时候,未知参数是连续 的。§3.3 就是最小的连续例子:估计一枚硬币正面朝上的概率 。它看着很简单,却是整个贝叶斯参数估计的模板。
这里正式兑现第二篇 反复预告的共轭先验 。我们仍走「似然 → 先验 → 后验 → 后验预测」这条固定套路。
6.1 似然
设 X i ∼ Ber ( θ ) X_i \sim \operatorname{Ber}(\theta) X i ∼ Ber ( θ ) (随机变量 X i X_i X i 服从参数为 θ \theta θ 的伯努利分布),θ 是正面概率。在独立同分布假设下,似然为
p ( D ∣ θ ) = θ N 1 ( 1 − θ ) N 0 (3.11) p(D \mid \theta) = \theta^{N_1} (1 - \theta)^{N_0} \tag{3.11} p ( D ∣ θ ) = θ N 1 ( 1 − θ )
N 1 = ∑ i I ( x i = 1 ) N_1 = \sum_i \mathbb{I}(x_i = 1) N 1 = ∑ i I ( x i = 1 ) 是正面数, 是反面数——这两个 就是 ( 说明:无论观测到计数还是完整序列,对 的推断都一样)。
6.2 先验与共轭性
我们需要一个支撑在 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 上的先验。为了让数学好算,最好让先验和似然同形 :
p ( θ ) ∝ θ γ 1 ( 1 − θ ) γ 2 (3.13) p(\theta) \propto \theta^{\gamma_1} (1 - \theta)^{\gamma_2} \tag{3.13} p ( θ ) ∝ θ γ 1 ( 1 − θ ) γ
若如此,后验只需把指数相加:
p ( θ ) ∝ p ( D ∣ θ ) p ( θ ) = θ N 1 ( 1 − θ ) N 0 θ γ 1 ( 1 − θ ) γ 2 = θ N 1 + γ 1 ( 1 − θ ) N 0 + γ 2 (3.14) p(\theta) \propto p(D \mid \theta) p(\theta) = \theta^{N_1}(1-\theta)^{N_0} \theta^{\gamma_1}(1-\theta)^{\gamma_2} = \theta^{N_1 + \gamma_1}(1-\theta)^{N_0 + \gamma_2} \tag{3.14} p ( θ ) ∝ p ( D ∣ θ ) p ( θ ) =
✓ 当先验与后验同形时,称先验为该似然的
共轭先验 (conjugate prior)。共轭先验被广泛使用,因为它让计算变得简单,且易于解释。这就是
第二篇 里贝塔分布「留给第三篇」的那个机关:贝塔是伯努利/二项似然的共轭先验。
对伯努利而言,共轭先验正是 §2.4.5 里见过的贝塔分布:
Beta ( θ ∣ a , b ) ∝ θ a − 1 ( 1 − θ ) b − 1 (3.15) \operatorname{Beta}(\theta \mid a, b) \propto \theta^{a-1}(1-\theta)^{b-1} \tag{3.15} Beta ( θ ∣ a , b ) ∝ θ a − 1 ( 1 − θ )
参数 a , b a, b a , b 叫超参数 (Chen 注:超参数指先验分布自身的参数,是「参数的参数」:它不直接描述数据,而是刻画对未知参数 $\theta$ 的先验信念。层次是超参数 $\to$ 参数 $\to$ 数据。此处 $a, b$ 决定贝塔先验的形状,先验再决定 $\theta$ 的取值倾向。(机器学习里「超参数」也泛指训练前手动设定、不由数据直接学出的配置,如学习率、正则化系数,精神一致。)) ,用来编码先验信念。
6.3 后验:伪计数相加
似然乘贝塔先验,得到
p ( θ ∣ D ) ∝ Bin ( N 1 ∣ θ , N ) Beta ( θ ∣ a , b ) ∝ Beta ( θ ∣ N 1 + a , N 0 + b ) (3.16) p(\theta \mid D) \propto \operatorname{Bin}(N_1 \mid \theta, N) \operatorname{Beta}(\theta \mid a, b) \propto \operatorname{Beta}(\theta \mid N_1 + a,\, N_0 + b) \tag{3.16} p ( θ ∣ D ) ∝ Bin ( N 1 ∣
后验就是把先验超参数加到经验计数上 。因此超参数 a , b a, b a , b 被称为伪计数 (pseudo counts),先验强度(等效样本量 )是 a + b a + b a + b ,扮演着类似数据量 N = N 0 + N 1 N = N_0 + N_1 N = N 0 + N 的角色。用弱先验 配大样本,后验几乎等于似然(数据压倒先验);用强先验的话,则后验是先验和似然的折中。
ℹ 「更新后验就是给计数加数」,这是共轭性最实在的回报。整个贝叶斯学习在这里退化成一次算术。后面狄利克雷-多项、朴素贝叶斯的贝叶斯版,本质上都是这一句话的复用。
7. 推导一:后验均值是先验与最大似然估计的凸组合
§3.3.3.1 给了几个点估计 (Chen 注:点估计(point estimate)指用一个具体数值去代表对未知参数的估计,而非给出整个概率分布,「点」就是参数空间里的一个点。如最大似然 $\hat\theta^{\text{MLE}}$、最大后验 $\hat\theta^{\text{MAP}}$、后验均值 $\bar\theta$ 都是点估计。它的对立面是保留完整后验分布 $p(\theta\mid D)$、对参数积分的完整贝叶斯。点估计计算简单,但把不确定性塌缩成单值,小样本下易过拟合(见 §8 黑天鹅问题)。) 。最大后验估计(后验众数)为
θ ^ MAP = a + N 1 − 1 a + b + N − 2 (3.21) \hat{\theta}^{\text{MAP}} = \frac{a + N_1 - 1}{a + b + N - 2} \tag{3.21} θ ^ MAP = a + b + N − 2 a
用均匀先验(a = b = 1 a = b = 1 a = b = 1 )时它退化成最大似然估计,即经验 (Chen 注:统计里的标准修饰词,指「直接来自实际观测数据」,而不是来自理论假设或先验信念。) 正面朝上的比例 θ ^ MLE = N 1 / N \hat{\theta}^{\text{MLE}} = N_1 / N θ ^ MLE = N 1 (式 3.22)。而后验 是
θ ˉ = a + N 1 a + b + N (3.23) \bar{\theta} = \frac{a + N_1}{a + b + N} \tag{3.23} θ ˉ = a + b + N a + N 1
众数和均值的这点差别,后面会反复起作用。现在做本篇第一个值得亲手推的结果:后验均值是先验均值与最大似然估计的凸组合 。
设先验的等效样本量 α 0 = a + b \alpha_0 = a + b α 0 = a + b ,先验均值 m 1 = a / α 0 m_1 = a / \alpha_0 m 1 = a / α 。从式 3.23 出发:
θ ˉ = a + N 1 α 0 + N \bar{\theta} = \frac{a + N_1}{\alpha_0 + N} θ ˉ = α 0 + N a + N
把分子拆成先验项和数据项,各自配上分母:
θ ˉ = α 0 N + α 0 ⋅ a α 0 + N N + α 0 ⋅ N 1 N \bar{\theta} = \frac{\alpha_0}{N + \alpha_0} \cdot \frac{a}{\alpha_0} + \frac{N}{N + \alpha_0} \cdot \frac{N_1}{N} θ ˉ = N + α 0 α
注意 a / α 0 = m 1 a/\alpha_0 = m_1 a / α 0 = m 1 、N 1 / N = θ ^ MLE N_1/N = \hat{\theta}^{\text{MLE}} N 1 / N 。令 ,即得
θ ˉ = λ m 1 + ( 1 − λ ) θ ^ MLE (3.24) \bar{\theta} = \lambda\, m_1 + (1 - \lambda)\, \hat{\theta}^{\text{MLE}} \tag{3.24} θ ˉ = λ m 1 + ( 1 − λ ) θ
这就是凸组合 (Chen 注:凸组合(convex combination)指按「非负、且和为 1」的权重做加权平均,最简形式为 $\lambda A + (1-\lambda)B$,其中 $\lambda\in[0,1]$。因两个权重非负且相加为 1,结果必落在 $A$ 与 $B$ 之间,不会越出区间。这正是它与任意系数「线性组合」的区别。此处 $\bar\theta$ 被锁在先验均值 $m_1$ 与最大似然 $\hat\theta^{\text{MLE}}$ 之间,故必为两者的折中。) (λ ∈ [ 0 , 1 ] \lambda \in [0, 1] λ ∈ [ 0 , 1 ] )。它把「后验是先验与数据的折中」这句直觉变成了一行等式:先验强(α 0 \alpha_0 α 0 大)或数据少(N N N 小)时 λ → 1 \lambda \to 1 λ ,偏信先验;数据一多 ,最大似然说了算。这个「凸组合」结构会在全书反复出现,它正是 (最大似然 → 最大后验 → 完整后验)这条主线的数学骨架。
§3.3.3.2 顺带给出后验方差,在 N ≫ a , b N \gg a, b N ≫ a , b 时可简化为 var [ θ ∣ D ] ≈ θ ^ ( 1 − θ ^ ) / N \operatorname{var}[\theta \mid D] \approx \hat{\theta}(1 - \hat{\theta})/N var [ θ ∣ D ] ≈ θ ^ ( 1 − (式 3.26),于是 (后验标准差)为
σ ≈ θ ^ ( 1 − θ ^ ) N (3.27) \sigma \approx \sqrt{\frac{\hat{\theta}(1 - \hat{\theta})}{N}} \tag{3.27} σ ≈ N θ ^ ( 1 − θ ^ )
误差按 1 / N 1/\sqrt{N} 1/ N 收缩,和第二篇 蒙特卡洛误差的 σ / S \sigma/\sqrt{S} σ / S 是同一个统计规律。
8. 推导二:拉普拉斯接续律与黑天鹅悖论
§3.3.4 转向预测未来。在 Beta ( a , b ) \operatorname{Beta}(a, b) Beta ( a , b ) 后验下,预测下一次为正面的概率是
p ( x ~ = 1 ∣ D ) = ∫ 0 1 p ( x = 1 ∣ θ ) p ( θ ∣ D ) d θ = ∫ 0 1 θ Beta ( θ ∣ a , b ) d θ = E [ θ ∣ D ] = a a + b (3.29) p(\tilde{x} = 1 \mid D) = \int_0^1 p(x = 1 \mid \theta)\, p(\theta \mid D)\, d\theta = \int_0^1 \theta\, \operatorname{Beta}(\theta \mid a, b)\, d\theta = \mathbb{E}[\theta \mid D] = \frac{a}{a + b} \tag{3.29} p ( x ~ = 1 ∣ D ) =
即后验预测均值等于「代入后验均值参数」,但这是对整个后验积分得到的,不是拍脑袋插值。
为什么这点区别重要?看 §3.3.4.1 ,若改用插值最大似然:连续观测到 3 次反面,θ ^ = 0 / 3 = 0 \hat{\theta} = 0/3 = 0 θ ^ = 0/3 = 0 ,于是模型断言正面不可能 出现。这叫零计数问题 (zero count problem)或稀疏数据问题。它对应哲学上的黑天鹅悖论 :见过的天鹅都是白的,就断言黑天鹅不存在——这是归纳问题的经典困境。
现在做本篇第二个推导:Laplace 接续律 如何从积分里自然长出来。用均匀先验 a = b = 1 a = b = 1 a = b = 1 ,把它代入后验预测均值 a + N 1 a + b + N \dfrac{a + N_1}{a + b + N} a + b + N a + N 1 (即式 3.29 在后验 下的形式):
p ( x ~ = 1 ∣ D ) = N 1 + 1 N 1 + N 0 + 2 (3.30) p(\tilde{x} = 1 \mid D) = \frac{N_1 + 1}{N_1 + N_0 + 2} \tag{3.30} p ( x ~ = 1 ∣ D ) = N 1
这就是 Laplace 接续律 (Chen 注:Laplace 接续律(Laplace's rule of succession)回答「观测 $N$ 次、其中 $N_1$ 次成功后,下一次成功的概率是多少」,答案不是朴素的 $N_1/N$,而是 $\frac{N_1+1}{N_1+N_0+2}$。「接续」即预测紧接着的下一次结果,源自 Laplace 18 世纪「太阳明天还会升起吗」的问题。它不是外加的,而是取均匀先验 $a=b=1$、再取后验均值自然得到——分子分母多出的 1 和 2 正是先验伪计数的贡献。这也是工程里加一平滑的理论出处。) 。它给出了「在经验计数上加 1、再归一化」这一常见做法(加一平滑 ,add-one smoothing)的贝叶斯正当性。哪怕 N 1 = 0 N_1 = 0 N 1 = 0 ,预测也不会塌成 0,黑天鹅的概率被自动留了一条缝。注意这个平滑效果只有用后验均值 才有;插值最大后验众数(式 3.30 用众数会退化回最大似然)就没有。这也回收了第 7 节「众数和均值的差别后面会起作用」的伏笔。
§3.3.4.2 把它推广到预测 M M M 次未来试验中正面数 x x x ,对 θ \theta θ 积分后得到复合贝塔-二项分布 :
Bb ( x ∣ a , b , M ) ≜ ( M x ) B ( x + a , M − x + b ) B ( a , b ) (3.34) \operatorname{Bb}(x \mid a, b, M) \triangleq \binom{M}{x} \frac{B(x + a,\, M - x + b)}{B(a, b)} \tag{3.34} Bb ( x ∣ a , b , M ) ≜ ( x M )
推导用到「被积函数是 Beta ( a + x , M − x + b ) \operatorname{Beta}(a + x, M - x + b) Beta ( a + x , M − x + b ) 的归一化常数倒数」这个技巧,积分等于两个贝塔归一化常数之比。这跟第二篇 里「用归一化常数反推积分」的手法一脉相承。它的均值 E [ x ] = M a a + b \mathbb{E}[x] = M \frac{a}{a+b} E [ x ] = M ,当 时退回式 3.29。相比插值最大后验,贝叶斯预测的尾巴更长、质量铺得更开,因而更不容易过拟合、更抗黑天鹅。
9. 狄利克雷-多项模型:从硬币到骰子
§3.4 把上一节从二值推广到 K K K 面。它是文本、生物序列分析的基础工具。
似然 :观测 N N N 次骰子投掷 D = { x 1 , … , x N } D = \{x_1, \dots, x_N\} D = { x 1 , … , x N } ,x i ∈ { 1 , … , K } ,在独立同分布假设下
p ( D ∣ θ ) = ∏ k = 1 K θ k N k (3.36) p(D \mid \boldsymbol\theta) = \prod_{k=1}^{K} \theta_k^{N_k} \tag{3.36} p ( D ∣ θ ) = k = 1 ∏ K θ k
N k = ∑ i I ( x i = k ) N_k = \sum_i \mathbb{I}(x_i = k) N k = ∑ i I ( x i = k ) 是第 面出现次数,就是充分统计量。
先验 :参数向量 θ \boldsymbol\theta θ 活在 K K K 维概率单纯形 (Chen 注:概率单纯形(probability simplex):所有合法概率向量的集合,满足每个分量非负、加总为 1。第二篇给狄利克雷当多项参数先验时用过这个词,这里正式派上用场。) S K S_K S K 上,需要一个支撑在单纯形上、且共轭的先验。§2.5.4 里的狄利克雷分布两者都满足:
Dir ( θ ∣ α ) = 1 B ( α ) ∏ k = 1 K θ k α k − 1 I ( x ∈ S K ) (3.37) \operatorname{Dir}(\boldsymbol\theta \mid \boldsymbol\alpha) = \frac{1}{B(\boldsymbol\alpha)} \prod_{k=1}^{K} \theta_k^{\alpha_k - 1}\, \mathbb{I}(\boldsymbol{x} \in S_K) \tag{3.37} Dir ( θ ∣ α ) = B ( α ) 1
p ( θ ∣ D ) ∝ ∏ k = 1 K θ k N k θ k α k − 1 = ∏ k = 1 K θ k N k + α k − 1 = Dir ( θ ∣ α 1 + N 1 , … , α K + N K ) (3.38) p(\boldsymbol\theta \mid D) \propto \prod_{k=1}^{K} \theta_k^{N_k} \theta_k^{\alpha_k - 1} = \prod_{k=1}^{K} \theta_k^{N_k + \alpha_k - 1} = \operatorname{Dir}(\boldsymbol\theta \mid \alpha_1 + N_1, \dots, \alpha_K + N_K) \tag{3.38} p ( θ ∣ D ) ∝
又是「伪计数相加」——共轭性在多类情形原样复现。这就是贝塔-二项这条固定套路换个分布的直接结果。
10. 推导三:单纯形约束下的多项最大似然估计
§3.4.3 里推最大后验/最大似然时,有个绕不开的技术点:θ \boldsymbol\theta θ 必须满足 ∑ k θ k = 1 \sum_k \theta_k = 1 ∑ k θ k = 1 。这是本篇第三个值得亲手推的结果:带约束优化的拉格朗日乘子法 ,全书后面(EM (Chen 注:EM = expectation-maximization(期望最大化)算法,一种在含隐变量模型里做最大似然/最大后验估计的迭代方法:E 步按当前参数估计隐变量的期望,M 步在此期望下最大化目标、更新参数,两步交替直到收敛。高斯混合、隐马尔可夫模型等的训练都靠它,M 步里常出现本节这种带约束优化。) 、指数族)会反复用到。
目标是最大化「对数似然 + 对数先验 + 约束项」。写出拉格朗日函数:
ℓ ( θ , λ ) = ∑ k N k log θ k + ∑ k ( α k − 1 ) log θ k + λ ( 1 − ∑ k θ k ) (3.41) \ell(\boldsymbol\theta, \lambda) = \sum_k N_k \log \theta_k + \sum_k (\alpha_k - 1) \log \theta_k + \lambda \Big(1 - \sum_k \theta_k\Big) \tag{3.41} ℓ ( θ , λ ) = k ∑ N
为简化记号,定义 N k ′ ≜ N k + α k − 1 N_k' \triangleq N_k + \alpha_k - 1 N k ′ ≜ N k + α k 。对 求偏导,恢复出约束本身:
∂ ℓ ∂ λ = 1 − ∑ k θ k = 0 \frac{\partial \ell}{\partial \lambda} = 1 - \sum_k \theta_k = 0 ∂ λ ∂ ℓ = 1 − k ∑ θ
对 θ k \theta_k θ k 求偏导:
∂ ℓ ∂ θ k = N k ′ θ k − λ = 0 ⟹ N k ′ = λ θ k (3.43–3.44) \frac{\partial \ell}{\partial \theta_k} = \frac{N_k'}{\theta_k} - \lambda = 0 \;\Longrightarrow\; N_k' = \lambda \theta_k \tag{3.43–3.44} ∂ θ k ∂ ℓ =
对 k k k 求和,用约束 ∑ k θ k = 1 \sum_k \theta_k = 1 ∑ k θ k = 1 定出乘子:∑ k N k ′ = λ ∑ k θ k = λ \sum_k N_k' = \lambda \sum_k \theta_k = \lambda 。回代得最大后验估计
θ ^ k = N k + α k − 1 N + α 0 − K (3.47) \hat{\theta}_k = \frac{N_k + \alpha_k - 1}{N + \alpha_0 - K} \tag{3.47} θ ^ k = N + α 0
其中 α 0 = ∑ k α k \alpha_0 = \sum_k \alpha_k α 0 = ∑ k α k 。用均匀先验 α k = 1 \alpha_k = 1 α ,就退回最大似然估计
θ ^ k = N k N (3.48) \hat{\theta}_k = \frac{N_k}{N} \tag{3.48} θ ^ k = N N k
即每一面的经验频率。这个推导干净利落,也示范了一个技巧:不必显式强加 θ k ≥ 0 \theta_k \geq 0 θ k ≥ 0 ,因为目标函数的梯度形如 N k / θ k − λ N_k/\theta_k - \lambda N k / θ k − ,负值只会降低目标,优化自然把解留在非负区。
后验预测 同样避开零计数,对单次多项试验,§3.4.4 给出
p ( X = j ∣ D ) = ∫ θ j p ( θ j ∣ D ) d θ j = E [ θ j ∣ D ] = α j + N j α 0 + N (3.51) p(X = j \mid D) = \int \theta_j\, p(\theta_j \mid D)\, d\theta_j = \mathbb{E}[\theta_j \mid D] = \frac{\alpha_j + N_j}{\alpha_0 + N} \tag{3.51} p ( X = j ∣ D ) = ∫ θ j
这是拉普拉斯接续律的多类版,贝叶斯平滑在多项情形比二项情形更重要(类别一多,很多 N k N_k N k 都是 0)。§3.4.4.1 用它做了个语言模型的实例,从略。
11. 朴素贝叶斯分类器
工具齐了,最后落到实用模型。§3.5 处理离散特征向量 x ∈ { 1 , … , K } D \boldsymbol{x} \in \{1, \dots, K\}^D x ∈ { 1 , … , K } D 的分类。生成式做法要指定类条件分布 p ( x ∣ y = c ) p(\boldsymbol{x} \mid y = c) p ( x ∣ y = c ) ,而这在高维下会参数爆炸。
最简单的办法是假设特征在给定类别下条件独立 :
p ( x ∣ y = c , θ ) = ∏ j = 1 D p ( x j ∣ y = c , θ j c ) (3.54) p(\boldsymbol{x} \mid y = c, \boldsymbol\theta) = \prod_{j=1}^{D} p(x_j \mid y = c, \boldsymbol\theta_{jc}) \tag{3.54} p ( x ∣ y = c , θ ) = j = 1 ∏
这就是朴素贝叶斯分类器 (naive Bayes classifier,NBC)。「朴素」在于:我们并不真觉得特征条件独立(词与词当然相关)。但即便假设不成立,它也常常表现不错——因为模型极简,只有 O ( C D ) O(CD) O ( C D ) 个参数(C C C 类、D D D 特征),对过拟合相对免疫。这是偏差-方差权衡 的一个漂亮案例:用一个明显有偏的假设换来极低的方差。
11.1 最大似然估计:又是计数
§3.5.1.1 里,对数似然分解成一项关于类先验 π \boldsymbol\pi π 、D × C D\times C D × C 个关于特征参数 θ j c \theta_{jc} θ j c 的独立子项,可以各自独立优化。结果毫不意外,类先验的最大似然估计是
π ^ c = N c N (3.57) \hat{\pi}_c = \frac{N_c}{N} \tag{3.57} π ^ c = N N c
N c N_c N c 是类 c c c 的样本数。若特征是二值 x j ∣ y = c ∼ Ber ( θ j c ) x_j \mid y = c \sim \operatorname{Ber}(\theta_{jc}) x j ∣ y = ,则
θ ^ j c = N j c N c (3.58) \hat{\theta}_{jc} = \frac{N_{jc}}{N_c} \tag{3.58} θ ^ j c = N c
即「类 c c c 中特征 j j j 出现的比例」。整个训练就是计数,O ( N D ) O(ND) O ( N D ) 复杂度。这份简单正是它被广泛使用的原因。
11.2 贝叶斯化:解决零计数
最大似然会过拟合。§3.5.1.2 举了个例子:词「subject」在两类邮件里都出现,于是 θ ^ j c = 1 \hat{\theta}_{jc} = 1 θ ^ j c = 1 。一旦来了封不含该词的新邮件,p ( y = c ∣ x , θ ^ ) = 0 p(y = c \mid \boldsymbol{x}, \hat{\boldsymbol\theta}) = 0 p ( y = c ∣ 对两类都成立,分类器直接崩溃。这又是黑天鹅悖论。
解药还是贝叶斯:给 θ \boldsymbol\theta θ 加共轭先验(贝塔/狄利克雷),预测时代入后验均值而非最大似然。由 §3.4.4 的结论,只需把伪计数加进去,θ j c \theta_{jc} θ j c 和 π c \pi_c π c 都变成平滑后的比例(式 3.68)。零计数被拉普拉斯平滑自动补上,分类器不再崩溃。前面贝塔-二项、狄利克雷-多项的推导,到这里全都变现了。
11.3 一个实用技巧:log-sum-exp
§3.5.3 讲了一个所有生成式分类器都会遇到的数值问题。预测时按贝叶斯规则算后验,分母要归一化,但 p ( x ∣ y = c ) p(\boldsymbol{x} \mid y = c) p ( x ∣ y = c ) 在高维下是极小的数(很多小概率连乘),直接算会下溢 。
办法是取对数运算。但 log ∑ c e b c \log \sum_c e^{b_c} log ∑ c e b c 这一项没法直接在对数域相加。技巧是把最大项提出来:
log ∑ c e b c = log [ ( ∑ c e b c − B ) e B ] = [ log ∑ c e b c − B ] + B (3.74) \log \sum_c e^{b_c} = \log\Big[\big(\sum_c e^{b_c - B}\big) e^{B}\Big] = \Big[\log \sum_c e^{b_c - B}\Big] + B \tag{3.74} log c ∑ e b
其中 B = max c b c B = \max_c b_c B = max c b c 。提出 B B B 后,指数里最大是 e 0 = 1 e^0 = 1 e 0 ,不会上溢;其余项相对它表示,也不会下溢。举个例字, 。这就是 ,在整个机器学习里无处不在(softmax、交叉熵的稳定实现都靠它)。
11.4 用互信息做特征选择
高维特征又慢又易过拟合,一个常见对策是特征选择 。§3.5.4 用特征 X j X_j X j 与类标 Y Y Y 的互信息 衡量相关性:
I ( X j , Y ) = ∑ x j ∑ y p ( x j , y ) log p ( x j , y ) p ( x j ) p ( y ) (3.75) I(X_j, Y) = \sum_{x_j} \sum_{y} p(x_j, y) \log \frac{p(x_j, y)}{p(x_j)\, p(y)} \tag{3.75} I ( X j , Y ) = x
这正是第二篇 信息论三件套里的互信息,可解释为「观测到特征 j j j 后类别标签分布的熵减」。二值特征时它有闭式解(式 3.76)。原书的新闻组实验很能说明问题:最高频 的词是「subject」(每封都有,毫无区分度),而与类别标签互信息最高 的词是「windows」「microsoft」「dos」「motif」,这才是真正有判别力的。高频 ≠ 有用,互信息才抓得住区分度。
11.5 词袋模型与突发性
§3.5.5 落到文档分类。把文档表示成二值向量(词出现与否)时用伯努利乘积(式 3.77);若表示成词频计数,则用多项分布(式 3.78)。但多项模型对文档分类效果一般,原因是它抓不住突发性 (burstiness):大多数词从不出现,可一旦出现一次,就很可能反复出现(词是成簇出现的)。
原书给了个漂亮的修复:把多项类条件密度换成狄利克雷复合多项 (Dirichlet Compound Multinomial,DCM)密度,即对 θ \boldsymbol\theta θ 积分掉:
p ( x i ∣ y i = c , α ) = ∫ Mu ( x i ∣ N i , θ c ) Dir ( θ c ∣ α c ) d θ c = N i ! ∏ j x i j ! B ( x i + α c ) B ( α c ) (3.79) p(\boldsymbol{x}_i \mid y_i = c, \boldsymbol\alpha) = \int \operatorname{Mu}(\boldsymbol{x}_i \mid N_i, \boldsymbol\theta_c) \operatorname{Dir}(\boldsymbol\theta_c \mid \boldsymbol\alpha_c)\, d\boldsymbol\theta_c = \frac{N_i!}{\prod_j x_{ij}!} \frac{B(\boldsymbol{x}_i + \boldsymbol\alpha_c)}{B(\boldsymbol\alpha_c)} \tag{3.79} p ( x i
直观上理解是,见过词 j j j 一次后,θ j \boldsymbol\theta_j θ j 的后验计数被更新,使它再次出现更有可能;而固定 θ \boldsymbol\theta θ 的多项模型里各词是独立的,抓不住这种「越出现越容易再出现」的正反馈。同一个狄利克雷-多项积分,换个场景又解决了一个真实问题。
12. 收拢:一个固定套路,三个模型
回头看整篇文章,其实只教了一个固定套路,套在三个越来越复杂的场景上:
每一格的机关都一样:共轭先验让后验更新退化成给计数加数,对参数积分则自动带来平滑、避开黑天鹅。
用四条主线再对一遍:本篇把参数估计谱系 (主线一,最大似然 → 最大后验 → 完整后验)第一次讲全了,从数字游戏的最大后验顿悟,到贝塔-二项的凸组合,再到对参数积分的后验预测。互信息、log-sum-exp 回收了第二篇 的信息论。而「条件独立」这个假设,日后是通往图模型这一大板块的第一步。
13. 时代注脚:2012 → 2026
第 3 章的核心(共轭先验、贝叶斯平滑、朴素贝叶斯)都是数学事实,十四年没动,今天依然是入门贝叶斯的标准路径。真正被这些年放大的是两点。
一是朴素贝叶斯的地位变了 。朴素贝叶斯作为文本分类主力的时代过去了 (Chen 注:2012 年前后,朴素贝叶斯还是文本分类的常用基线;2018 年 BERT 之后,预训练语言模型几乎接管了所有文本分类任务。但朴素贝叶斯并未消失:它训练快、可解释、无需 GPU,在冷启动、小数据、需要可解释性的场景(如垃圾邮件初筛、日志分类)里仍是务实之选。它更常见的新身份是「强基线」:上任何深度模型前,先跑一遍朴素贝叶斯看看下限。) ,但它作为基线和教学模型的价值反而更清晰。
二是共轭先验的边界 。共轭先验是「算得动」的特例,不是常态 (Chen 注:共轭先验的适用面本就窄,只有指数族似然配对应共轭先验才有闭式后验。现实中的复杂模型(深度贝叶斯网络、层次模型)几乎都没有共轭结构,后验算不动。2012 年后,变分推断(尤其 2013 年的 VAE、2016 年之后的黑箱变分)和 MCMC(NUTS、HMC)成了通用替代品,Murphy 在 2023 年的进阶卷里用了大量篇幅重讲这套近似推断。本系列第四篇和近似推断子系列会展开。) 。本章之所以从共轭讲起,是因为它是唯一能手推到底、把「贝叶斯更新」看得一清二楚的场景。理解了这个理想情形,才好理解为什么后面要动用变分和蒙特卡洛去逼近那些没有共轭结构的后验。
一个固定套路、三个模型,看着朴素,却把贝叶斯学习最本质的动作——似然、共轭先验、后验、预测——演示得干干净净。这一路上反复冒头的那个对照——对参数积分的完整贝叶斯,与代入点估计的插值近似——到下一篇会正面展开:贝叶斯 vs 频率派 ,两种统计观的对照、各自的后验/抽样分布总结、以及频率派的那些病理。这也将是「概率基础」四篇的收尾。