想象你是一家公司的产品经理,研发部希望系统稳定,销售部希望功能丰富,客服部希望流程简单。把所有人的意见精确整合成一个最终方案,就像精确计算一个复杂分布一样,几乎不可能。这时候你会怎么做?你不会试图枚举所有细节,而是先给每个部门发一张统一的《需求摘要卡》,只记录“期望是什么、波动有多大”这类关键信息;然后逐部门核对,把新意见吸收进摘要卡,再进入下一轮。几轮之后,所有摘要卡汇聚成一份各方勉强满意的方案。这个“先简化、再逐条更新、用关键统计量校准”的流程,正是期望传播 EP 的思想核心。

岗位关联

学习 EP,帮你在大规模贝叶斯模型中用可控的计算量获得高质量近似后验,尤其适合概率图模型、贝叶斯分类和各类机器学习系统中的推断环节。

目录
  1. 可视化演示
  2. EP核心思想:把全局难题拆成局部摘要
  3. 指数族分布:摘要卡的统一版式
  4. 因子图消息:部门之间的需求流动
  5. 矩匹配投影:从倾斜分布抄下关键矩
  6. 收敛性分析:评审会从不收敛到冷静
  7. EP与VI对比:两种不同的协调风格
  8. EP实践应用:把摘要卡方法应用到真实系统
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示EP通过将复杂分布投影到指数族实现高效近似推断,对比EP与VMP的KL散度方向差异。

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

EP消息传递与矩匹配 腔分布:移除目标因子的近似后验,得到剩余因子的乘积 矩匹配:将真实因子与腔分布乘积投影到指数族,对齐均值和方差 迭代更新:消息在因子图上循环传递直到近似因子收敛 q(x) = ∏ fa(x) ≈ p(x) EP用指数族近似逼近真实后验

EP核心思想:把全局难题拆成局部摘要

产品需求评审会上,研发部期望系统稳定,销售部期望功能丰富,客服部期望流程简单。若要把所有意见精确结合成一份完整方案,几乎无法枚举。产品经理的破解办法,是先给每个部门发一张统一的《需求摘要卡》,只记录期望步调、波动范围等关键统计量;之后逐部门核对,把新信息吸收进摘要卡,再继续下一轮。这就是 EP 的直观画面。

在概率模型里,复杂后验通常由多个因子相乘得到,每个因子可以看作一个部门的意见。EP 为每个因子构造一个“站点近似”,所有站点近似相乘就是全局近似 \(q(x)\)。更新时,一次只挑一个站点,用真实因子替换它,形成局部的“倾斜分布”,再把倾斜分布投影回指数族。这个“局部替换—投影”循环,就是 EP 的核心思想。

设共有 \(n\) 个因子,EP 用指数族函数近似每个因子,全局近似定义为:

产品经理并不会一次性协调所有人,而是每轮只调整一张摘要卡。EP 同理,把全局难题拆成局部更新,最终让所有站点乘积逼近真实后验。

q(x)=1Z∏i=1nf~i(x)\displaystyle q(x) = \frac{1}{Z}\prod_{i=1}^{n}\tilde{f}_i(x)
  1. 乘积近似EP 用多个简单站点相乘表示后验,而不是直接积分原分布:
    q(x)=1Z∏i=1nf~i(x)\displaystyle q(x) = \frac{1}{Z}\prod_{i=1}^{n}\tilde{f}_i(x)
  2. 归一化常数\(Z\) 保证乘积仍是一个合法的概率密度:
    Z=∫∏i=1nf~i(x) dx\displaystyle Z = \int \prod_{i=1}^{n}\tilde{f}_i(x)\,dx

指数族分布:摘要卡的统一版式

如果每个部门都用自己的格式写摘要,产品经理根本无法汇总。于是公司规定了统一版式:只有几个固定栏目,比如期望值、方差、置信度。统计学里,这种拥有统一模板的分布家族,就是指数族分布。高斯分布、贝塔分布、泊松分布等都是它的成员。

指数族的核心优势在于:同一套代数规则可以复用。EP 把每个站点都限制在指数族里,这样更新步骤就有闭式解。指数族的通用写法用自然参数 \(\theta\) 和充分统计量 \(T(x)\) 描述分布:

有了统一版式,PM 才能快速对比不同部门的摘要。指数族为 EP 提供了同样的便利:所有站点共享同一套数学模板,局部投影只需匹配几个关键统计量。

p(x∣θ)=h(x)exp⁡(θ⊤T(x)−A(θ))\displaystyle p(x \mid \theta) = h(x)\exp\left(\theta^{\top}T(x) - A(\theta)\right)
  1. 基函数\(h(x)\) 是与参数无关的底层测度,相当于版式中的固定水印:
    p(x∣θ)=h(x)exp⁡(θ⊤T(x)−A(θ))\displaystyle p(x \mid \theta) = h(x)\exp\left(\theta^{\top}T(x) - A(\theta)\right)
  2. 核心指数\(\theta^{\top}T(x)\) 是自然参数与充分统计量的内积,决定分布形状:
    θ⊤T(x)=∑k=1KθkTk(x)\displaystyle \theta^{\top}T(x) = \sum_{k=1}^{K}\theta_k T_k(x)
  3. 归一化项\(A(\theta)\) 是对数归一化常数,保证密度积分等于 1:
    A(θ)=log⁡∫h(x)exp⁡(θ⊤T(x)) dx\displaystyle A(\theta) = \log\int h(x)\exp\left(\theta^{\top}T(x)\right)\,dx

因子图消息:部门之间的需求流动

组织架构图展示了每个部门的上下游关系。因子图就是概率模型的“组织架构图”:圆圈代表变量,方块代表因子,连线代表依赖。EP 更新时,信息沿着这些连线流动,每个方块内部维护一张站点摘要卡。

当我们要更新第 \(i\) 个部门时,不能只看它自己的摘要,还要看其他部门已经形成的共识。EP 先把当前全局近似中剔除第 \(i\) 个站点,得到“空腔分布” \(q_{-i}\),它表示“除第 \(i\) 个部门外,其他部门目前的共同意见”。

空腔分布是“去掉了某部门意见后,其他部门暂时达成的共识”。EP 接着就把真实的新需求乘进来,形成下一轮校准对象。

q−i(x)∝q(x)f~i(x)\displaystyle q_{-i}(x) \propto \frac{q(x)}{\tilde{f}_i(x)}
  1. 全局近似所有站点乘积构成当前全局意见:
    q(x)∝∏j=1nf~j(x)\displaystyle q(x) \propto \prod_{j=1}^{n}\tilde{f}_j(x)
  2. 剔除目标站点用全局近似除以第 \(i\) 个站点,得到不含该部门的空腔分布:
    q−i(x)∝q(x)f~i(x)\displaystyle q_{-i}(x) \propto \frac{q(x)}{\tilde{f}_i(x)}

矩匹配投影:从倾斜分布抄下关键矩

产品经理拿着其他部门的共识,找到第 \(i\) 个部门,把真实诉求“乘”进共识里,得到一个临时的新方案,称为倾斜分布 \(\hat{p}_i\)。这个新方案往往超出了标准摘要卡能表达的复杂度,于是 PM 要做一次“投影”:从统一版式中找一个最接近新方案的填写方式。

EP 的投影不追求逐点吻合,而是让新摘要卡的关键统计量与倾斜分布对齐。在指数族中,这等价于最小化 KL 散度,并得到漂亮的矩匹配条件:

这就像 PM 不复制原话,而是只抄下“平均满意度是多少、波动有多大”。EP 的站点更新因此保留了对后验最重要的统计信息,同时扔掉无法纳入模板的冗余细节。

q∗(x)=arg⁡min⁡q∈FKL(p^i(x)∥q(x))\displaystyle q^{*}(x) = \arg\min_{q \in \mathcal{F}} \mathrm{KL}\left(\hat{p}_i(x) \| q(x)\right)
  1. 倾斜分布空腔分布乘上真实因子,代表局部校正后的目标:
    p^i(x)∝q−i(x)fi(x)\displaystyle \hat{p}_i(x) \propto q_{-i}(x) f_i(x)
  2. KL 投影在指数族 \(\mathcal{F}\) 中寻找与倾斜分布最接近的分布:
    q∗(x)=arg⁡min⁡q∈FKL(p^i(x)∥q(x))\displaystyle q^{*}(x) = \arg\min_{q \in \mathcal{F}} \mathrm{KL}\left(\hat{p}_i(x) \| q(x)\right)
  3. 矩匹配条件最优解让 \(q^{*}\) 与 \(\hat{p}_i\) 的充分统计量期望一致:
    Eq∗[T(x)]=Ep^i[T(x)]\displaystyle \mathbb{E}_{q^{*}}\left[T(x)\right] = \mathbb{E}_{\hat{p}_i}\left[T(x)\right]

收敛性分析:评审会从不收敛到冷静

需求评审会如果每轮都大幅推翻上一版方案,会议会越开越乱。EP 的迭代更新也可能出现类似的振荡。原因在于,站点更新是一个非线性映射,更新后的站点又会影响下一轮空腔分布。尤其在多峰后验下,EP 会像跷跷板一样在两峰之间反复横跳。

工程上的常用解法是“阻尼更新”。每次不直接跳到新参数,而是在旧参数与新参数之间取一个加权平均。阻尼因子 \(\epsilon\) 越小,更新越保守,但也越稳定:

好的评审会主持人不会让任何一方意见瞬间推翻全场。阻尼更新就是 EP 的主持人,它让每个站点逐步吸收新信息,减少不收敛风险。

θ(t+1)=(1−ϵ)θ(t)+ϵθnew\displaystyle \theta^{(t+1)} = (1-\epsilon)\theta^{(t)} + \epsilon\theta^{\mathrm{new}}
  1. 参数更新新参数是旧参数与 EP 候选参数的凸组合:
    θ(t+1)=(1−ϵ)θ(t)+ϵθnew\displaystyle \theta^{(t+1)} = (1-\epsilon)\theta^{(t)} + \epsilon\theta^{\mathrm{new}}
  2. 阻尼因子\(\epsilon\) 控制更新步长,常用 0.5 或更小以抑制振荡:
    0<ϵ≤1\displaystyle 0 < \epsilon \le 1

EP与VI对比:两种不同的协调风格

变分推断 VI 像一位强势的产品经理,从全局出发找一个简单分布,使其尽量靠近真实分布;它通常只锁定高概率区域的一个峰,属于“模式寻找”。EP 则像一位尊重各部门细节的协调者,在局部反复用矩匹配校准每一个站点,因此对真实分布的期望矩刻画更细致。

两种方法的目标函数不同:VI 最小化全局正方向 KL,EP 最小化局部倾斜分布到近似分布的 KL。这导致 VI 更保守但保证下降,而 EP 更灵活但可能振荡:

如果部门诉求集中,VI 的强势协调很高效;如果各部门意见分散、互相影响,EP 的逐项精修往往更准。两者没有绝对优劣,只有适不适合当前问题。

min⁡qKL(q∥p)vs.min⁡q∈FKL(p^i∥q)\displaystyle \min_{q} \mathrm{KL}\left(q \| p\right) \quad \text{vs.} \quad \min_{q \in \mathcal{F}} \mathrm{KL}\left(\hat{p}_i \| q\right)
  1. VI 目标VI 从近似分布向真实分布看齐,容易忽略低概率区域:
    min⁡qKL(q∥p)\displaystyle \min_{q}\mathrm{KL}(q \| p)
  2. EP 目标EP 在局部让近似分布匹配倾斜分布的矩,信息保留更完整:
    min⁡q∈FKL(p^i∥q)\displaystyle \min_{q \in \mathcal{F}}\mathrm{KL}(\hat{p}_i \| q)

EP实践应用:把摘要卡方法应用到真实系统

当后验分布无法精确计算时,EP 可以把贝叶斯公式中的每个因子都变成一张指数族摘要卡。以贝叶斯分类为例,后验正比于先验乘以所有样本的似然。每个样本的似然就是一个因子,EP 在每一轮更新一个样本对应的站点,最终得到权重的近似后验。

这种“逐因子来料加工”的机制,让 EP 非常适合大规模数据。因为不需要一次性处理完整数据,只需顺序或随机访问因子,内存和计算量都大大降低。贝叶斯后验的通用形式是:

在实际工程里,EP 的摘要卡方法既保留了对数据不确定性的刻画,又避免了昂贵的全局积分。配合阻尼更新和合理的站点初始化,它能在贝叶斯分类、概率图模型和大规模推荐系统里高效运行。

p(θ∣D)∝p(θ)∏n=1Np(yn∣xn,θ)\displaystyle p(\theta \mid D) \propto p(\theta)\prod_{n=1}^{N}p(y_n \mid x_n, \theta)
  1. 后验分解后验正比于先验与所有观测似然的乘积:
    p(θ∣D)∝p(θ)∏n=1Np(yn∣xn,θ)\displaystyle p(\theta \mid D) \propto p(\theta)\prod_{n=1}^{N}p(y_n \mid x_n, \theta)
  2. 观测因子每个样本对应一个因子,EP 可逐个近似这些因子:
    fn(θ)=p(yn∣xn,θ)\displaystyle f_n(\theta) = p(y_n \mid x_n, \theta)
  3. 难以计算的边际分母边际似然通常是高维积分,EP 尝试避开精确计算:
    p(D)=∫p(θ)∏n=1Nfn(θ) dθ\displaystyle p(D) = \int p(\theta)\prod_{n=1}^{N}f_n(\theta)\,d\theta

AI 应用场景

贝叶斯分类中的权重后验推断

阶段:模型训练与推断

解决的问题:传统精确贝叶斯需要对权重后验做高维积分,特征维度高时完全不可行。EP 把每个样本看作一个因子,用高斯近似权重后验,既给出预测点估计,也给出置信区间,避免“过于自信”的预测。

具体案例:在垃圾邮件分类中,逻辑回归的权重后验用 EP 近似。每轮更新一个邮件的似然因子,最终得到每个特征的权重均值与方差,线上预测时不仅输出垃圾邮件概率,还能给出这一预测的不确定性。

大规模概率图模型中的消息推断

阶段:概率图模型推理

解决的问题:精确信念传播在环状图或连续分布上不可行;传统采样方法在大图上又太慢。EP 将每个因子投影到指数族,用站点消息在因子图上传播,保持全局推断的高效性。

具体案例:在推荐系统的矩阵分解模型中,用户和物品的隐变量构成概率图。EP 将每个评分数据视作一个因子,在千万级评分上迭代更新站点消息,最终得到用户兴趣向量和物品向量的近似后验,实时生成推荐列表。

Python 演示

python49 行
import math def run_ep():    # 真实的高斯因子列表, 每个元素 (precision, mean)    factors = [(1.0, 0.0), (2.0, 3.0), (0.5, -1.0)]    n = len(factors)    # 站点近似初始化为无信息: precision = 0, mean = 0    sites = [(0.0, 0.0) for _ in range(n)]     for _ in range(100):        for i, (prec, mean) in enumerate(factors):            # 计算空腔分布: 从当前总近似中剔除站点 i            lam_cav = sum(sites[j][0] for j in range(n) if j != i)            theta_cav = sum(sites[j][0] * sites[j][1] for j in range(n) if j != i)            # 倾斜分布: 空腔分布乘以真实因子 i            lam_tilt = lam_cav + prec            theta_tilt = theta_cav + prec * mean            # 把倾斜分布矩匹配到高斯            mu_tilt = theta_tilt / lam_tilt            var_tilt = 1.0 / lam_tilt            # 得到新总近似 q 的精度参数            lam_q = 1.0 / var_tilt            theta_q = lam_q * mu_tilt            # 站点 i 的更新 = q / 空腔分布            lam_site = lam_q - lam_cav            theta_site = theta_q - theta_cav            if lam_site <= 0:                lam_site = 1e-12                theta_site = 0.0            sites[i] = (lam_site, theta_site / lam_site)     # 合并所有站点得到最终后验    lam_total = sum(s[0] for s in sites)    theta_total = sum(s[0] * s[1] for s in sites)    mu_ep = theta_total / lam_total    var_ep = 1.0 / lam_total     # 解析解: 把所有真实因子直接相乘    lam_true = sum(p for p, _ in factors)    theta_true = sum(p * m for p, m in factors)    mu_true = theta_true / lam_true    var_true = 1.0 / lam_true     print("EP 近似后验: mu = %.4f, var = %.4f" % (mu_ep, var_ep))    print("解析后验:   mu = %.4f, var = %.4f" % (mu_true, var_true))  if __name__ == "__main__":    run_ep()
目的:用高斯因子构造一个可精确求解的贝叶斯后验,再让 EP 通过空腔分布与矩匹配迭代逼近,并和解析解对比验证。
  1. factors = [(1.0, 0.0), (2.0, 3.0), (0.5, -1.0)]定义三个高斯因子,模拟复杂分布中的局部约束。
  2. sites = [(0.0, 0.0) for _ in range(n)]每个站点初始化为无信息常数分布,对应空白摘要卡。
  3. lam_cav = sum(sites[j][0] for j in range(n) if j != i)计算空腔精度,相当于去掉当前部门的摘要。
  4. lam_tilt = lam_cav + prec把真实因子乘回空腔,得到待投影的倾斜分布。
  5. mu_tilt = theta_tilt / lam_tilt计算倾斜分布的均值,这是矩匹配的第一矩。
  6. lam_site = lam_q - lam_cav反推出站点参数,保证总近似除以空腔后仍合法。
  7. lam_total = sum(s[0] for s in sites)汇聚所有站点,得到最终近似后验精度。
  8. lam_true = sum(p for p, _ in factors)解析解直接加总真实因子精度,用于对照。

常见误区

误区我听说 EP 比变分推断精确,所以以后凡是做近似推断,无脑用 EP 就好。

正解EP 的局部矩匹配在很多问题中确实更准,但它没有统一的全局下界保证,可能不收敛或陷入局部最优。变分推断有 ELBO 保证下降,在多峰问题上更稳定。选择哪种方法取决于任务,而不是默认 EP 完胜。

为何常见:论文常展示 EP 在特定数据集上精度更高,读者容易把有限结论推广成“永远更优”。

误区EP 的投影不就是算一算均值和方差吗?和高斯近似没什么区别。

正解对高斯指数族,矩匹配确实退化为匹配均值方差。但指数族可以包含更多充分统计量,例如矩阵高斯、泊松等。EP 的实质是让近似分布在所选统计量上与倾斜分布对齐,而不是简单丢弃信息。

为何常见:因为最常用的 EP 实现是高斯近似,初学者把特例当成了本质。

误区名字里带“期望”,EP 应该像蒙特卡洛一样从分布里采样来估计期望。

正解EP 是确定性近似方法,核心迭代靠解析的矩匹配,不依赖随机采样。虽然某些实现会用采样估计难处理的矩,但那只是辅助手段,不是 EP 的定义。

为何常见:“期望”这个词容易让人联想到蒙特卡洛期望估计,忽略了 EP 的代数投影本质。

误区只要多跑几轮迭代,EP 自然就收敛到正确答案了。

正解EP 的更新映射不是天然收缩映射,在多峰因子或强耦合因子的场景下可能振荡甚至发散。实践中需要阻尼更新、精心初始化站点,甚至调整因子更新顺序。收敛后也只保证不动点,不保证全局最优。

为何常见:大多数教程展示的是简单单峰例子,迭代漂亮地收敛,掩盖了真实场景中的不稳定因素。

面试题

Q1. EP 主要把复杂分布投影到哪个分布族?

单选题 · easy

  • A.指数族分布← 正确答案
  • B.多项式分布
  • C.均匀分布
  • D.狄利克雷分布

答案:A。EP 的核心是让每个站点近似都属于指数族,这样局部 KL 投影能得到矩匹配闭式解。多项式、均匀、狄利克雷虽然也是分布,但 EP 的默认“模板”是指数族,因此选 A。

Q2. EP 的投影操作本质上是匹配目标的什么?

单选题 · easy

  • A.统计量的概率值
  • B.分布的充分统计量矩← 正确答案
  • C.函数曲线的曲率
  • D.图的最大团规模

答案:B。EP 在指数族上最小化 KL 后,最优解满足近似分布的充分统计量期望等于倾斜分布的矩。这就像 PM 只抄下“平均满意度”等关键统计量,而不是逐点复制需求曲线。

Q3. EP 更新某个站点时,需要先计算什么分布?

单选题 · mid

  • A.全局后验分布
  • B.剔除该站点的分布← 正确答案
  • C.所有先验的乘积
  • D.观测噪声的分布

答案:B。EP 先计算空腔分布,也就是从当前总近似中剔除目标站点的结果。空腔分布代表“其他部门目前的共识”,再乘上真实因子形成倾斜分布,才能校准当前站点。

Q4. 高斯分布属于哪个分布族?

单选题 · easy

  • A.泊松分布族
  • B.指数族分布← 正确答案
  • C.几何分布族
  • D.贝塔分布族

答案:B。高斯分布可以写成 \(h(x)\exp(\theta T(x)-A(\theta))\) 的形式,因此属于指数族。EP 使用高斯作为站点时,矩匹配就是匹配均值和方差。

Q5. EP 更新过程中出现数值振荡,常用补救措施是?

单选题 · mid

  • A.增大学习率
  • B.使用阻尼更新← 正确答案
  • C.改用随机采样
  • D.删除困难因子

答案:B。阻尼更新让新参数与旧参数做加权平均,避免每轮更新幅度过大,有效抑制振荡。增大学习率会加剧振荡,随机采样或删除因子都不是解决 EP 收敛性的常规手段。

Q6. 关于 EP 的矩匹配投影,以下说法正确的是?

单选题 · hard

  • A.充分统计量矩对齐← 正确答案
  • B.函数值逐点对齐
  • C.模式数量对齐
  • D.支持集大小对齐

答案:A。EP 的 KL 投影在指数族上产生“矩匹配”条件:近似分布的充分统计量期望等于倾斜分布的期望。它不是逐点拟合,也不保证模式数量或支持集一致,因此选 A。

Q7. 下列哪些是 EP 的典型应用场景?

多选题 · mid

  • A.贝叶斯分类← 正确答案
  • B.图模型推断← 正确答案
  • C.精确积分
  • D.大规模近似← 正确答案

答案:ABD。EP 常用于贝叶斯分类、概率图模型推断以及大规模数据下的近似推理。精确积分恰恰是 EP 想避免的高代价操作,所以 C 不是应用场景。

Q8. 关于 EP 的收敛性,正确的说法有哪些?

多选题 · hard

  • A.阻尼更新可提高稳定性← 正确答案
  • B.必然收敛到全局最优
  • C.多峰目标可能振荡← 正确答案
  • D.不动点可对应局部最优← 正确答案

答案:ACD。阻尼更新能抑制振荡;多峰目标下 EP 可能振荡;收敛到的通常是不动点,不保证全局最优。B 的“必然全局最优”过于绝对,因此错误。

Q9. 指数族分布的标准形式中,A(θ) 的作用是?

单选题 · mid

  • A.平移概率密度
  • B.归一化常数← 正确答案
  • C.控制均值偏移
  • D.记录样本个数

答案:B。\(A(\theta)\) 是对数归一化常数,保证分布积分等于 1。它不控制均值偏移,也不记录样本数量;均值和方差由自然参数和充分统计量决定。

Q10. 关于 EP 的站点近似,正确的有哪些?

多选题 · easy

  • A.属于指数族← 正确答案
  • B.真实因子不变← 正确答案
  • C.每次更新一个← 正确答案
  • D.依赖随机采样

答案:ABC。EP 的站点近似必须属于指数族,真实因子在更新中保持不变,且每次循环只更新一个站点。EP 是确定性近似,不依赖随机采样,所以 D 错误。