想象你是一位追星族,手里有一份“明星人气榜单”,记录着你对某位爱豆的喜爱程度。每次看完演唱会(拿到新数据),你会更新这份榜单。但有趣的是——无论你更新多少次,榜单的“类型”始终不变,只是具体数字在变化。这就是共轭先验的魔法:让先验和后验保持同一个“家族”,让贝叶斯更新变得像填表格一样简单。 对于AI从业者而言,掌握共轭先验族表就像程序员掌握快捷键——在贝叶斯推断中,它让你花几秒钟就能手算出后验分布,而不是跑几小时的马尔可夫链蒙特卡洛采样。尤其在线上推荐系统、A/B测试分析、点击率预估这些需要快速更新的场景,共轭先验是你的随身计算器。

岗位关联

共轭先验是贝叶斯推断的“速算口诀”,掌握它,你就能在几分钟内完成本来需要复杂数值计算的推断任务,是AI算法工程师必备的数学工具。

目录
  1. 可视化演示
  2. 似然-先验配对
  3. 伯努利×Beta
  4. 二项×Beta
  5. 泊松×伽马
  6. 正态-方差
  7. 正态-均值
  8. 共轭的威力
  9. 求解流程
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

似然-先验配对

想象你是追星族的“数据组长”。你想预测某位爱豆下一场演唱会的上座率,于是你维护一张“人气分布表”。这张表的格式是固定的,比如 Beta 分布——你只需要不断往里填写“见过他多少次”和“见过他多少次表现平平”。关键在于,每次演唱会结束、记录了新数据后,你更新的那张表格式仍然不变,只是里面的数字变了。

在贝叶斯统计中,这个“格式不变”的特性叫做共轭性。当我们选择先验分布(prior)时,如果它与似然函数(likelihood)“配对”得当——即两者属于同一个分布族——那么后验分布(posterior)也会自动属于这个家族。你不需要重新发明新的表格式,只需要在原表格上“加数字”即可。

数学上,这个配对关系可以写成:

配对的关键在于“眼力”:看到似然是抛硬币式的伯努利/二项,就立刻想到 Beta 是它的共轭先验;看到泊松,就想到伽马。这个速查表就是你的“配对指南”,让你不用每回都从零推导,直接翻到对应页往公式里代入即可。

p(θ∣x)=p(x∣θ) p(θ)p(x)∝p(x∣θ) p(θ)\displaystyle p(\theta \mid x) = \frac{p(x \mid \theta)\, p(\theta)}{p(x)} \propto p(x \mid \theta)\, p(\theta)
这个公式就是贝叶斯定理的骨架:后验 ∝ 似然 × 先验。当似然和先验配对为共轭时,右边的乘积可以化简为一个与先验同族的分布,计算后验就变成了“翻新参数”。
  1. 先验 $p(\theta)$这是我们拿到数据之前对未知参数 $\theta$ 的信念分布。比如你认为某爱豆上座率大概是 0.7,但不确定,用 Beta(70, 30) 来表达这个信念。
    p(θ)=Beta(θ;a,b)p(\theta) = \text{Beta}(\theta; a, b)
  2. 似然 $p(x \mid \theta)$这是给定参数 $\theta$ 时,观测到数据 $x$ 的概率。比如假设上座率为 $\theta$,那么 100 人中有 80 人来的概率是二项分布。
    p(x∣θ)=(nx)θx(1−θ)n−xp(x \mid \theta) = \binom{n}{x} \theta^x (1-\theta)^{n-x}
  3. 后验 ∝ 先验 × 似然将两者相乘,如果先验和似然是共轭的,乘积会“奇迹般地”化简为同一个分布族的新参数形式。
    p(θ∣x)∝θa+x−1(1−θ)b+n−x−1=Beta(a+x,b+n−x)p(\theta \mid x) \propto \theta^{a+x-1}(1-\theta)^{b+n-x-1} = \text{Beta}(a+x, b+n-x)

伯努利×Beta

回到追星族的场景。假设你在统计某位爱豆的“口碑正负面”。每看到一条评论,它要么是好评(记 1),要么是差评(记 0)——这就是伯努利试验。你手里的“口碑分布表”用 Beta 分布记录:好评多了,分布往右移;差评多了,往左移。关键是,表永远是 Beta 格式。

伯努利分布描述一次只有两种结果的试验,参数为 $\theta$(成功概率)。Beta 分布是定义在 [0,1] 上的连续分布,正好匹配概率参数。两者相乘可以“珠联璧合”地化简。假设先验为 $p(\theta) = \text{Beta}(a,b)$,观测到 $n$ 次试验中有 $x$ 次成功,后验的推导过程就是指数相加:

这个“加法”意义非凡。如果你原本认为爱豆好评率均值是 $a/(a+b)=0.5$,现在看到 10 条评论中 8 条好评,后验均值瞬间变为 $(a+8)/(a+8+b+2)$。数据越多,后验越被数据主导——但你始终用同一张 Beta 表记录,不需要换工具。

p(θ∣x)∝θx(1−θ)n−x×θa−1(1−θ)b−1=θa+x−1(1−θ)b+n−x−1p(\theta \mid x) \propto \theta^{x}(1-\theta)^{n-x} \times \theta^{a-1}(1-\theta)^{b-1} = \theta^{a+x-1}(1-\theta)^{b+n-x-1}
后验还是 Beta 分布,但参数变成了 $a+x$ 和 $b+n-x$。这就是共轭的魔法——更新信念只是“给参数做加法”。
  1. 乘开指数把似然的指数和先验的指数分别相加。$\theta$ 的指数是 $(a-1) + x$,$(1-\theta)$ 的指数是 $(b-1) + (n-x)$。
    θa+x−1(1−θ)b+n−x−1\theta^{a+x-1}(1-\theta)^{b+n-x-1}
  2. 归一化前面的系数 $1/B(a,b)$ 和组合数 $C(n,x)$ 都是常数,可以并入归一化常数,不影响分布形状。
    p(θ∣x)=1B(a+x,b+n−x)θa+x−1(1−θ)b+n−x−1p(\theta \mid x) = \frac{1}{B(a+x, b+n-x)}\theta^{a+x-1}(1-\theta)^{b+n-x-1}
  3. 识别家族对比 Beta 分布的密度函数形式,发现后验就是 $\text{Beta}(a+x, b+n-x)$。
    θ∣x∼Beta(a+x,b+n−x)\theta \mid x \sim \text{Beta}(a+x, b+n-x)

二项×Beta

现在你不是看一条评论,而是看一场演唱会后的 100 条评论中,有多少条好评。这就是二项分布:$n$ 次独立重复的伯努利试验中成功的次数。好消息是,Beta 同样是二项分布参数的共轭先验。

假设你在“口碑表”上记录 $n=100$ 条评论中 $k=80$ 条好评。先验仍然是 $\text{Beta}(a,b)$。贝叶斯更新的过程和伯努利情况惊人地一致,最终后验是 $\text{Beta}(a+k, b+n-k)$——只需要把成功次数相加、失败次数相加即可。

从贝叶斯视角看,“二项 × Beta”和“伯努利 × Beta”是同一件事:因为 $n$ 次伯努利试验的成功次数就是二项分布,前者只是后者的“批量版”。实战中,无论你是一次看一条评论,还是一次收集 100 条评论,更新规则都是同一个:往两个计数器里加数。

p(θ∣k)∝(nk)θk(1−θ)n−k×θa−1(1−θ)b−1∝θa+k−1(1−θ)b+n−k−1p(\theta \mid k) \propto \binom{n}{k}\theta^k(1-\theta)^{n-k} \times \theta^{a-1}(1-\theta)^{b-1} \propto \theta^{a+k-1}(1-\theta)^{b+n-k-1}
组合数 $\binom{n}{k}$ 是常数,乘进归一化系数即可。更新的本质仍然是“成功数相加,失败数相加”。
  1. 写出二项似然$k$ 次成功、$n-k$ 次失败,指数分别是 $k$ 和 $n-k$。
    p(k∣θ)=(nk)θk(1−θ)n−kp(k \mid \theta) = \binom{n}{k}\theta^k(1-\theta)^{n-k}
  2. 乘以 Beta 先验先验指数分别是 $a-1$ 和 $b-1$。
    p(θ)=θa−1(1−θ)b−1B(a,b)p(\theta) = \frac{\theta^{a-1}(1-\theta)^{b-1}}{B(a,b)}
  3. 指数同类项合并$\theta$ 的指数是 $a+k-1$,$(1-\theta)$ 的指数是 $b+n-k-1$。
    θ∣k∼Beta(a+k,b+n−k)\theta \mid k \sim \text{Beta}(a+k, b+n-k)

泊松×伽马

换个场景。你是追星族里的“活动策划”,想预测某位爱豆一个月内登上热搜的次数。这个次数是计数的、离散的,常用泊松分布描述。它的参数 $\lambda$ 表示单位时间内事件发生的平均次数。与泊松分布共轭的先验是伽马分布——因为两者的数学形式天然匹配。

伽马分布 $G(\alpha, \beta)$ 定义在正实数上,有两个参数:形状参数 $\alpha$ 和 速率参数 $\beta$。泊松似然是 $p(x \mid \lambda) = \lambda^x e^{-\lambda}/x!$,伽马先验是 $p(\lambda) \propto \lambda^{\alpha-1}e^{-\beta\lambda}$——两者相乘时,指数部分自然地“牵手成功”:

这个配对特别适合“事件率”推断:客服进线率、商品点击率(按时间计数)、服务器错误率。你有初始经验($\alpha, \beta$),每观测到一次事件就更新 $\alpha$,每度过一个时间段就更新 $\beta$——实时调整你对“热搜次数”的预估。

p(λ∣x)∝λ∑xi+α−1e−(n+β)λp(\lambda \mid \mathbf{x}) \propto \lambda^{\sum x_i + \alpha - 1} e^{-(n+\beta)\lambda}
后验是 $G(\alpha + \sum x_i,\ \beta + n)$——形状参数加上观测总和,速率参数加上观测次数。
  1. 泊松似然连乘$n$ 个独立观测的似然是 $e^{-n\lambda}\lambda^{\sum x_i}$。
    p(x∣λ)=e−nλλ∑xi∏xi!p(\mathbf{x} \mid \lambda) = \frac{e^{-n\lambda}\lambda^{\sum x_i}}{\prod x_i!}
  2. 乘伽马先验形状参数 $\alpha$,速率参数 $\beta$。
    p(λ)∝λα−1e−βλp(\lambda) \propto \lambda^{\alpha-1}e^{-\beta\lambda}
  3. 指数合并$\lambda$ 的指数变成 $(\sum x_i + \alpha) - 1$,$e$ 的指数变成 $-(\beta+n)\lambda$。
    λ∣x∼Gamma(α+∑xi, β+n)\lambda \mid \mathbf{x} \sim \text{Gamma}(\alpha + \textstyle\sum x_i,\ \beta + n)

正态-方差

现在你关心爱豆的身高(假设是正态分布、均值已知),但不确定粉丝样本的“分散程度”——即方差。方差的共轭先验是逆伽马分布(Inverse-Gamma)。为什么?因为正态分布的方差以倒数形式出现在指数里,而逆伽马分布的密度函数正好长成那样。

假设 $x_1, \dots, x_n \sim N(\mu, \sigma^2)$,均值 $\mu$ 已知,先验 $\sigma^2 \sim IG(\alpha, \beta)$。后验更新公式为:

合并同类项后,得到:

对应到你的“粉丝身高数据”,如果你原本认为身高方差大概是 25(标准差 5),收集 30 个样本后算出实际平方和,后验的逆伽马分布会自动调整——样本量越大,你对方差的认识越精确。

p(σ2∣x)∝1(σ2)n/2exp⁡(−∑(xi−μ)22σ2)×(σ2)−α−1e−β/σ2p(\sigma^2 \mid \mathbf{x}) \propto \frac{1}{(\sigma^2)^{n/2}} \exp\left(-\frac{\sum (x_i-\mu)^2}{2\sigma^2}\right) \times (\sigma^2)^{-\alpha-1} e^{-\beta/\sigma^2}
σ2∣x∼IG(α+n2, β+∑(xi−μ)22)\sigma^2 \mid \mathbf{x} \sim IG\left(\alpha + \frac{n}{2},\ \beta + \frac{\sum (x_i-\mu)^2}{2}\right)
逆伽马的两个参数更新规则:形状参数加观测数的一半,速率参数加“平方和”的一半。数据越分散,平方和越大,$\beta$ 增加越多。
  1. 正态似然(关于 $\sigma^2$)写出关于方差的部分,指数有 $1/\sigma^2$ 和 $1/(\sigma^2)^{n/2}$。
    p(x∣σ2)∝(σ2)−n/2exp⁡(−12σ2∑(xi−μ)2)p(\mathbf{x} \mid \sigma^2) \propto (\sigma^2)^{-n/2} \exp\left(-\frac{1}{2\sigma^2}\textstyle\sum (x_i-\mu)^2\right)
  2. 乘逆伽马先验先验密度为 $(\sigma^2)^{-\alpha-1}\exp(-\beta/\sigma^2)$。
    p(σ2)∝(σ2)−α−1e−β/σ2p(\sigma^2) \propto (\sigma^2)^{-\alpha-1} e^{-\beta/\sigma^2}
  3. 指数合并$(\sigma^2)$ 的指数是 $-(\alpha + n/2) - 1$,$1/\sigma^2$ 的系数是 $\beta + \sum(x_i-\mu)^2/2$。
    σ2∣x∼IG(α+n/2, β+∑(xi−μ)2/2)\sigma^2 \mid \mathbf{x} \sim IG(\alpha + n/2,\ \beta + \textstyle\sum(x_i-\mu)^2/2)

正态-均值

现在假设方差已知,你想估计爱豆的真实人气值 $\mu$(比如某平台影响力评分),每个粉丝的打分服从正态分布。好消息:正态分布是它自己的共轭先验——先验用正态,后验还是正态,只是均值和方差被“加权平均”更新了。

设有 $n$ 个观测 $x_1,\dots,x_n$,观测方差为 $\sigma^2$,先验 $\mu \sim N(\mu_0, \sigma_0^2)$。后验仍然正态,其均值是“先验均值与样本均值的精度加权平均”:

这就是“粉丝评分”的直觉。你原本认为爱豆影响力是 70 分(不太确定,$\sigma_0^2$ 很大),现在 100 个粉丝平均打了 85 分,你的后验估计会“向 85 大幅靠拢”;但如果只有 2 个粉丝打分 85,后验均值只会略微上移——因为先验精度还没被压倒。

μ∣x∼N(1σ02μ0+nσ2xˉ1σ02+nσ2, 11σ02+nσ2)\mu \mid \mathbf{x} \sim N\left(\frac{\frac{1}{\sigma_0^2}\mu_0 + \frac{n}{\sigma^2}\bar{x}}{\frac{1}{\sigma_0^2} + \frac{n}{\sigma^2}},\ \frac{1}{\frac{1}{\sigma_0^2} + \frac{n}{\sigma^2}}\right)
后验均值 = (先验精度×先验均值 + 数据精度×样本均值) / 总精度。先验越不确定($\sigma_0^2$ 大),数据越主导;数据越多,$n/\sigma^2$ 越大,后验越接近样本均值。
  1. 定义精度精度是方差的倒数 $\tau = 1/\sigma^2$。先验精度 $\tau_0 = 1/\sigma_0^2$,数据精度为 $n/\sigma^2$。
    τ0=1σ02,τdata=nσ2\tau_0 = \frac{1}{\sigma_0^2},\quad \tau_{\text{data}} = \frac{n}{\sigma^2}
  2. 加权平均后验均值是 $\mu_0$ 和 $\bar{x}$ 以精度为权重的加权平均。
    μpost=τ0μ0+τdataxˉτ0+τdata\mu_{\text{post}} = \frac{\tau_0 \mu_0 + \tau_{\text{data}} \bar{x}}{\tau_0 + \tau_{\text{data}}}
  3. 后验方差后验方差等于总精度的倒数。
    σpost2=1τ0+τdata\sigma_{\text{post}}^2 = \frac{1}{\tau_0 + \tau_{\text{data}}}

共轭的威力

想象你是追星族数据组的负责人。在没有共轭先验之前,每次演唱会结束,你要重新计算“人气分布”——可能需要用复杂的数值采样(MCMC)跑上几个小时才能得到新分布。但有了共轭家族表,你只需要掏出计算器,几秒钟内完成参数更新。这就是共轭的威力:免采样的解析更新。

所有共轭对的后验都有解析表达式,不需要马尔可夫链蒙特卡洛(MCMC)采样。在大数据和流式场景中,这意味着你可以在线地、实时地更新参数——每来一个小批量数据,立刻得到新后验。这在 A/B 测试、推荐系统、在线学习等场景是致命的优势。

| 场景 | MCMC | 共轭更新 |

|------|------|----------|

| 单次更新耗时 | 分钟~小时 | 毫秒 |

| 分布表达式 | 数值样本 | 解析公式 |

| 流式数据 | 需重跑全部数据 | 参数增量更新 |

| 代码复杂度 | 高(调试采样器) | 低(加减乘除) |

共轭先验就像你的“乘法口诀表”——虽然你可以每次都手推乘法的定义,但背过口诀表后,看到 7×8 就能直接报 56。共轭族表就是贝叶斯推断的口诀表,让你从“每次推导定义”变成“直接套用公式”。

求解流程

现在你已经掌握了“共轭先验族表”的核心配对。当你在实际工作中遇到一个贝叶斯推断问题,标准求解流程分三步走——类比追星族拿到新演唱会数据时怎么办。

第一步:识别似然分布。 看一眼你的数据长什么样。数据是 0/1 的成败结果?用伯努利/二项。数据是计数(如每分钟访问量)?用泊松。数据是连续值、围绕均值对称波动?用正态。识别似然是确定“配对表”的关键起点。

第二步:查找配对表。 从共轭家族表中找到对应的先验分布:伯努利/二项 → Beta;泊松 → 伽马;正态(方差未知)→ 逆伽马;正态(均值未知)→ 正态。这一步是纯查表操作,是“速查手册”的价值所在。

第三步:代入更新公式。 读取先验参数和数据统计量(成功次数、总和、平方和、样本均值),代入对应的后验参数更新公式。Beta 更新是“成功加成功”,伽马更新是“总和加总和”,正态均值更新是“精度加权平均”,正态方差更新是“平方和除以 2”。算完后验的参数后,你就能立刻回答任何关于参数的问题——均值、方差、置信区间。

这三步流程是贝叶斯推断中最常用的“肌肉记忆”。熟练之后,看到数据分布就能反应出共轭对,看到先验参数就能写出后验更新——就像看到爱豆的路透图就能条件反射般更新你的“人气评分表”。

后验参数=更新函数(先验参数, 数据统计量)\text{后验参数} = \text{更新函数}(\text{先验参数},\ \text{数据统计量})
整个流程从“识别数据形状”到“得到后验分布”,不涉及任何复杂积分。这就是共轭族表存在的意义:让贝叶斯推断从“高等数学”降维成“查表学习”。
  1. 识别似然观察数据结构,选择对应的似然函数形式。
    xi∼Bernoulli(θ)或xi∼Poisson(λ)或xi∼N(μ,σ2)x_i \sim \text{Bernoulli}(\theta) \quad \text{或} \quad x_i \sim \text{Poisson}(\lambda) \quad \text{或} \quad x_i \sim N(\mu,\sigma^2)
  2. 查表选先验根据似然家族的共轭伙伴,确定先验分布。
    Bernoulli→Beta;Poisson→Gamma;N(μ,σ2)→N/IG\text{Bernoulli} \to \text{Beta};\quad \text{Poisson} \to \text{Gamma};\quad N(\mu,\sigma^2) \to N / IG
  3. 代入更新公式把先验参数和数据统计量代入公式,得到后验。
    Beta(a+k,b+n−k);Gamma(α+∑xi,β+n)\text{Beta}(a+k, b+n-k);\quad \text{Gamma}(\alpha+\textstyle\sum x_i, \beta+n)

AI 应用场景

在线A/B测试的心跳更新

阶段:实验评估与决策

解决的问题:传统A/B测试需要等样本量足够大后做假设检验,耗时且无法实时调整。而共轭先验让你每来一条数据就更新一次后验,随时判断“新版本是否显著优于旧版本”。

具体案例:某推荐系统上线了新排序算法,工程团队用 Beta(1,1) 作为先验,每次用户点击(成功)或跳过(失败)都实时更新 Beta 参数。每当后验的 95% 置信区间与原算法的区间不重叠,系统自动触发流量调整。整个过程无需等待固定样本量,决策做到了“秒级响应”。

客服机器人故障率监控

阶段:在线监控与告警

解决的问题:客服机器人的意图识别模块偶尔出现“答非所问”的情况,但直接统计错误率会因样本不足而震荡。用泊松×伽马共轭对建模单位时间内的错误次数,可以平滑地追踪故障率变化,实现自动告警。

具体案例:某AI客服系统用 Gamma(2, 100) 作为先验,记录每小时的错误请求次数。每过一个小时,用新观测到的错误数更新形状参数,用时间长度更新速率参数。当后验均值的异常概率超过阈值时,自动推送告警给值班工程师。相比固定阈值告警,这种方法在流量波动时能自动调节灵敏度。

推荐系统点击率实时校准

阶段:模型在线学习

解决的问题:推荐系统的点击率预估模型在新物品(冷启动)上没有足够数据,预估不准确。用共轭先验为每个新物品初始化一个“经验值”,随着展示量和点击量的增加,后验不断被真实数据校准。

具体案例:某短视频平台的冷启动策略:每个新视频用 Beta(2, 98) 作为点击率先验(相当于“人为预设 2% 点击率”),每展示一次就更新 Beta 参数。展示 100 次后,后验完全由真实点击率主导;展示 1000 次后,这个视频的点击率估计已经非常精准,可以进入正常推荐池参与排名。

Python 演示

python76 行
# -*- coding: utf-8 -*-"""共轭先验更新演示支持:Bernoulli/BinomialxBeta, PoissonxGamma, Normal-MeanxNormal"""from math import exp  class ConjugateUpdater:    """共轭先验后验参数更新器"""     def __init__(self, family):        self.family = family        self.count = 0     def beta_update(self, prior_a, prior_b, successes, trials):        """伯努利/二项xBeta 更新"""        return prior_a + successes, prior_b + trials - successes     def gamma_update(self, prior_alpha, prior_beta, sum_x, n):        """泊松xGamma 更新"""        return prior_alpha + sum_x, prior_beta + n     def normal_mean_update(        self,        mu0,        sigma0_sq,        sigma_sq,        samples    ):        """正态均值更新(方差已知)"""        n = len(samples)        x_bar = sum(samples) / n        tau0 = 1.0 / sigma0_sq        tau_data = n / sigma_sq        mu_post = (tau0 * mu0 + tau_data * x_bar) / (tau0 + tau_data)        var_post = 1.0 / (tau0 + tau_data)        return mu_post, var_post  def gamma_pdf(x, alpha, beta):    """计算Gamma密度(未归一化)"""    return x ** (alpha - 1) * exp(-beta * x)  def main():    updater = ConjugateUpdater("beta")    a, b = 3, 3  # 先验 Beta(3,3):认为硬币大致公平    results = []    for outcome in [1, 1, 0, 1, 0, 1, 1, 1, 0, 1]:        a, b = updater.beta_update(a, b, outcome, 1)        results.append((a, b))    print("抛10次硬币后 Beta 参数:", results[-1])    print("后验均值:", round(a / (a + b), 4))    print("后验方差:", round(a * b / ((a + b) ** 2 * (a + b + 1)), 6))     updater2 = ConjugateUpdater("gamma")    alpha, beta = 2.0, 100.0  # 先验 Gamma(2,100):预期错误率 2/100=2%    event_counts = [3, 1, 4, 2, 0, 5]  # 每小时错误数    for cnt in event_counts:        alpha, beta = updater2.gamma_update(alpha, beta, cnt, 1)    print("更新后Gamma参数: alpha=%s, beta=%s" % (alpha, beta))    print("后验均值(小时错误率):", round(alpha / beta, 4))     updater3 = ConjugateUpdater("normal_mean")    mu_post, var_post = updater3.normal_mean_update(        mu0=70.0,        sigma0_sq=100.0,        sigma_sq=25.0,        samples=[78, 82, 85, 79, 88, 84]    )    print("正态均值后验: mu=%s, var=%s" % (round(mu_post, 4), round(var_post, 4)))  if __name__ == "__main__":    main()
目的:实现三类最常用共轭先验的后验参数更新,帮你把“查表”流程变成“调函数”,直接在生产环境中快速计算后验。
  1. self.count = 0简单计数器占位,展示类结构完整性,实际逻辑中未使用但保留了扩展钩子
  2. updater.beta_update(a, b, outcome, 1)伯努利试验的共轭更新,成功数加 1 或失败数加 1
  3. tail = (a, b)每次更新后记录新的 Beta 参数,方便观测后验均值的变化轨迹
  4. updater.gamma_update(alpha, beta, cnt, 1)泊松×伽马更新,把观测到的错误次数累加到形状参数上
  5. alpha / beta伽马分布的均值等于形状除以速率,可直接作为事件率的点估计
  6. normal_mean_update(mu0, sigma0_sq, sigma_sq, samples)正态均值共轭更新,用精度加权平均先验与样本
  7. tau0 = 1.0 / sigma0_sq先验精度等于先验方差的倒数,数值越大代表越确定
  8. tau_data = n / sigma_sq数据精度等于样本量除以观测方差,样本越多精度越高
  9. mu_post = (tau0 * mu0 + tau_data * x_bar) / (tau0 + tau_data)加权平均公式:后验均值是精度加权的先验均值与样本均值

常见误区

误区我理解的共轭是先验分布函数和后验分布函数在图形上必须完全重叠,或者至少看起来非常相似。比如先验是正态的,后验也得是正态的,而且均值和方差不能变,否则就不叫共轭。

正解共轭只要求先验和后验属于同一个分布族(比如都是 Beta 分布),不要求参数相同。恰恰相反,后验的参数通常会被数据更新——先验 Beta(3,3) 看到 8 次成功后会变成 Beta(11,5),图形形状变了,但它还是 Beta 分布。共轭保证了“家族”不变,而不是“形象”不变。就像追星族换了新发型,但身份证上的“姓名”那一栏还是同一个名字。

为何常见:初学者容易把“同分布族”理解成“同分布”,其实分布族是“正态族”“Beta族”这样的宽泛分类,参数不同只是家族内不同成员。

误区既然共轭这么好用,那所有似然函数都应该有对应的共轭先验吧?我只要去查表就能找到任何分布的配对。

正解共轭先验只有在指数族分布中才天然存在。对于像 t 分布、均匀分布、混合模型这类非指数族分布,通常不存在精确的共轭先验。这时你可能需要改用 MCMC、变分推断等近似方法,或者人为构造近似共轭的分布。所以我们的速查表只覆盖常用场景,而不是万能字典。

为何常见:教材为了教学方便,总是拿伯努利、泊松、正态这些有共轭关系的例子,让人误以为共轭是普遍规律。事实上,看到似然先问“它属于指数族吗”才是正确姿势。

误区我在代码里用了共轭公式,但结果感觉不对劲——后验均值比样本均值还离谱。可能共轭公式是错的,或者我的数据有问题。

正解共轭公式本身没问题,问题大概率出在先验的参数设置不合理。比如你选了 Beta(1000, 1) 做先验(几乎认定成功率为 0.999),那么即使看到 100 次试验全失败,后验均值仍然会很高——因为你的“先验信念”太强了。共轭只是保持家族不变,不会自动修正你对参数的先验偏见。数据越多后验越能克服先验,但数据量相对先验强度不够时,结果会被先验“带偏”。

为何常见:初学者往往关注共轭的“形式”而忽略先验的“强度”。在实际应用里,先验参数(如 Beta 的 a 和 b)本身就编码了你的主观信念和“虚拟样本量”,选错参数等于把错误信念锁进了公式里。

误区有了共轭先验表,我再也不需要理解贝叶斯定理了。遇到任何问题,查表套公式就行,反正是数学证明过的。

正解共轭先验表确实能加速计算,但它要求你理解什么时候适用。比如你假设数据来自泊松分布,但实际数据的方差远大于均值(过离散),那么泊松×伽马的共轭模型就是错误假设,更新出的后验方差会被严重低估。共轭解决的是“计算开销”问题,而不是“模型正确性”问题——你必须先确认你的似然假设合理。

为何常见:工具越好用,人越容易停止思考。共轭表好查、公式好代,但如果忘了检验模型假设,就等于用漂亮的数学公式包装了一个错误的世界观。

误区只要用共轭先验,后验就一定能写成标准分布的解析形式,可以精确计算任何后验量。

正解共轭保证后验属于某个分布族,所以后验密度函数是解析的。但“解析”不等于“任意后验量都容易计算”。比如后验是 Beta 分布,均值方差都好算;但如果你想算后验的某个分位数(如 95% 分位点),虽然可以查表或数值积分,但不是“口算”的级别。此外,后验的归一化常数(证据)仍然是复杂的积分——很多实际场景中,这个积分才是真正棘手的部分。

为何常见:初学者容易把“共轭”和“免费”划等号。共轭确实省去了采样,但你还得会用 Beta/Gamma 函数的数值算法才能完成实际推断。

面试题

Q1. 先验为 Beta(3, 5),观测到 10 次伯努利试验中成功 7 次,后验分布是什么?

单选题 · easy

  • A.Beta(3, 5)
  • B.Beta(10, 15)
  • C.Beta(10, 8)← 正确答案
  • D.Beta(7, 3)

答案:C。Beta 是伯努利参数的共轭先验,后验参数为 $a+\text{成功数}$ 和 $b+\text{失败数}$。所以 $a'=3+7=10$,$b'=5+3=8$。A 忽略了数据更新,B 错误地把试验次数加给了两个参数,D 忘记加先验参数。

Q2. 泊松分布的共轭先验是下列哪个?

单选题 · easy

  • A.正态分布
  • B.伽马分布← 正确答案
  • C.Beta 分布
  • D.逆伽马分布

答案:B。泊松似然是 $\lambda^x e^{-\lambda}$,伽马先验是 $\lambda^{\alpha-1}e^{-\beta\lambda}$,两者乘起来指数可以合并,后验仍是伽马。Beta 配伯努利/二项,逆伽马配正态方差,正态是正态均值的共轭。

Q3. 已知均值 μ=0,先验 σ²~IG(2, 10),观测到 4 个样本的平方和为 20,后验参数是多少?

单选题 · mid

  • A.IG(2, 10)
  • B.IG(4, 20)
  • C.IG(4, 20/2)← 正确答案
  • D.IG(2+2, 10+10)

答案:C。方差共轭更新为 $\alpha'=\alpha+n/2=2+4/2=4$,$\beta'=\beta+\sum(x_i-\mu)^2/2=10+20/2=20$。注意形状参数加的是“观测数的一半”,速率参数加的是“平方和的一半”——B 选项缺少除以 2,D 选项把 4 错算成 2。

Q4. 关于共轭先验,以下哪些说法正确?

多选题 · mid

  • A.先验与后验属于同一分布族← 正确答案
  • B.后验参数可以通过简单加和直接更新← 正确答案
  • C.所有分布都存在共轭先验
  • D.共轭先验避免了 MCMC 数值采样← 正确答案

答案:ABD。共轭的定义就是先验与后验同族(A 对),更新通常表现为参数加和(B 对),共轭存在的意义就是解析更新、免采样(D 对)。C 错——非指数族分布通常没有严格共轭先验。

Q5. 正态分布 N(μ,σ²) 中,方差 σ² 未知时,常用共轭先验是?

单选题 · mid

  • A.伽马分布
  • B.逆伽马分布← 正确答案
  • C.Beta 分布
  • D.均匀分布

答案:B。方差以 $1/\sigma^2$ 的形式出现在正态似然里,逆伽马的密度 $x^{-\alpha-1}e^{-\beta/x}$ 正好匹配这种形式。伽马参数常用于泊松的率参数,Beta 配二项,均匀分布虽是无信息先验但非共轭。

Q6. 先验为 Gamma(3, 5),观测到 n=10 个泊松样本,总和为 30,后验为?

单选题 · easy

  • A.Gamma(3, 5)
  • B.Gamma(33, 15)← 正确答案
  • C.Gamma(30, 10)
  • D.Gamma(13, 15)

答案:B。泊松×伽马更新为 $\alpha'=\alpha+\sum x_i=3+30=33$,$\beta'=\beta+n=5+10=15$。C 选项漏了先验参数,D 选项把总和当成观测次数。记住:形状加总和、速率加次数。

Q7. 已知方差 σ²=4,先验 μ~N(50, 100),观测 25 个样本均值 x̄=55,后验均值约为?

多选题 · hard

  • A.(0.01×50 + 6.25×55) / (0.01+6.25)← 正确答案
  • B.接近 55,因为数据精度远大于先验精度← 正确答案
  • C.50 和 55 的简单算术平均 52.5
  • D.(1/100×50 + 25/4×55) / (1/100+25/4)← 正确答案

答案:ABD。先验精度 1/100=0.01,数据精度 25/4=6.25,后验均值是精度加权平均 (0.01×50+6.25×55)/(0.01+6.25),故 A、D 等价且正确。数据精度远大于先验精度,所以后验接近 55(B 对)。C 错在等权平均,忽略了精度差异。

Q8. 为什么共轭先验能够显著加速在线学习系统?

单选题 · hard

  • A.因为共轭先验是无信息先验
  • B.因为后验有解析形式,可用增量更新← 正确答案
  • C.因为共轭先验不需要似然函数
  • D.因为共轭先验提高了模型准确率

答案:B。共轭保证后验是标准分布,新数据到达时只需做参数加和(O(1) 复杂度),这就是在线更新。A 错——共轭与信息量无关;C 错——共轭仍需似然函数才能确定配对;D 错——共轭影响计算效率和可解释性,不是准确率的保证。

Q9. 一个广告投放系统用 Beta(1, 1) 作为点击率先验,展示了 1000 次广告后得到 50 次点击。后验的 95% 置信区间相比用频率方法算的区间有什么特点?

单选题 · mid

  • A.完全相同,因为数据量大
  • B.更宽,因为 Beta 分布方差大
  • C.更窄,因为 Beta(1,1) 是强先验
  • D.更窄,因为先验相当于加入了“虚拟样本”← 正确答案

答案:D。Beta(1,1) 相当于 2 次“虚拟试验”(1 成功 1 失败),等价于在数据上加了 1 次成功和 1 次失败。后验是 Beta(51, 951),其区间比纯频率方法(50/1000±1.96×√(0.05×0.95/1000))略窄。A 错在“完全相同”——先验仍会带来微小收缩效应;B 和 C 对 Beta(1,1) 强度的理解错误。

Q10. 以下哪几种似然-共轭先验配对是正确的?

多选题 · hard

  • A.伯努利似然 → Beta 先验← 正确答案
  • B.泊松似然 → 伽马先验← 正确答案
  • C.正态(均值已知,方差未知)→ 逆伽马先验← 正确答案
  • D.正态(方差已知,均值未知)→ 伽马先验

答案:ABC。A、B、C 都是标准共轭配对。D 错——正态均值的共轭先验是正态,而不是伽马。伽马是泊松率参数的共轭先验,容易与“方差倒数”混淆。记住一个口诀:Beta 配成败,伽马配计数,正态配均值,逆伽马配方差。