从概率图模型到变分推断:因子分解、指数族与近似推断

发布时间:2026/10/28 21:38:34
从概率图模型到变分推断:因子分解、指数族与近似推断 简介这份PDF是面向机器学习、统计推断与概率建模方向研究者及研究生的经典综述聚焦概率图模型、指数族与变分推断三者的统一框架适合已具备一定概率论基础、希望系统理解大规模多元统计模型推断算法的读者。内容从指数族表示与累积量函数—熵的共轭对偶出发给出似然、边际概率与最大后验构型的变分表达并串联和积算法、聚类变分、期望传播、平均场、最大积、线性规划与锥规划松弛等方法也将其与MCMC近似作互补讨论。压缩包仅含1个PDF文件大小约2.06MB轻量便于检索与随身阅读。目前已有235人学习可作为课程研讨、论文写作或算法实现前的理论索引帮助读者建立从图结构、指数族参数化到变分近似的完整知识脉络。1. 概率图模型到底是什么一张画满圆点和连线的关系网一个班五十个学生期末成绩彼此关联想完整描述这五十个分数一起出现的概率理论上得填一张五十维的大表格大到没地方存。概率图模型简称图模型干的事就是把这张填不完的表格拆成一张关系网每个学生画成一个圆点两个点之间连一条线表示“这两人的分数直接相关”然后规定整个联合概率就是这些局部关系的乘积。圆点叫节点连线叫边图论负责描述形状概率论负责给每个形状配上数值。这么一拼就得到一个既能表达复杂依赖、又不至于算到天荒地老的建模工具。它是后面指数族、变分推断整套叙事的地基把这块搞明白剩下的部分就只是在这张网上做运算了。2. 为什么把概率画成图因子分解才是真正的省钱办法2.1 联合分布爆炸不拆就没法算先算笔账。假设有 50 个只取 0 和 1 的变量要完整描述它们的联合分布得给 2 的 50 次方种组合各配一个概率值扣掉归一化剩 2^50 − 1 个自由参数。这个数字约为 10 的 15 次方存不下更标不出来。现实里的变量还远不止二值取值一多组合数飞得更快。所以问题从来不是“模型够不够复杂”而是“参数能不能塞得进内存”。图模型的解法是引入假设变量之间不是两两都相关而是大部分互相无关。一旦承认这件事联合分布就能按图的结构拆成一串局部因子的乘积。举个最朴素的例子如果五个变量排成一条链每个只依赖前一个那么联合分布写成 p(x₁)p(x₂|x₁)p(x₃|x₂)p(x₄|x₃)p(x₅|x₄)参数从 2⁵ − 1 31 个掉到 1 4×2 9 个。50 个变量的链呢1 49×2 99 个。参数从指数级变成线性级靠的不是近似而是那条“谁跟谁直接相连”的假设。这里要留个心眼参数省下来的代价是表达能力变弱。图里没有边等价于你主动宣称“这两个变量在给定其他变量后条件独立”。这个宣称对不对是建模者的责任不是算法的责任。图模型从来不负责替你判断因果结构它只负责在你给出结构之后把计算变得可行。2.2 有向图与无向图箭头和连线分别在说什么同样是画网两种画法的语义不一样。有向图要求无环每条边带方向从父节点指向子节点联合分布写成每个节点“在给定父节点时的条件概率”之积。这种结构适合描述有生成顺序的过程先有因后有果因果关系或者时间先后比较明确比如症状由病因决定、观测由隐状态产生。无向图没有方向只有连接联合分布写成定义在“团”上的势函数之积再除以一个归一化常数。它适合描述对称的、没有明确先后顺序的相互影响比如一张图像里相邻像素的平滑约束或者两个人在同一时刻的相互影响——你说不清谁先谁后但知道它们相关。拿一段极小的代码把有向图的因子分解落到实处会更容易看清“省”在哪里。# 四个变量的有向图1、2、3 都是 4 的父节点 # 联合概率 各节点条件概率的乘积不做任何全表枚举 def joint(x1, x2, x3, x4, p1, p2, p3, p4_given_123): return ( p1[x1] * # 根节点只用边缘表 p2[x2] * # 根节点只用边缘表 p3[x3] * # 根节点只用边缘表 p4_given_123[(x1, x2, x3)][x4] # 条件表按父节点取值索引 )这段函数没有存 2⁴ 16 个联合概率而是存了 2 2 2 8 14 个局部数值。变量少的时候看不出便宜把节点数推到 30、每个节点三个父节点差距就是天壤之别。函数里每个参数表的语义很清楚p1、p2、p3是边缘分布最后一个二维字典p4_given_123的第一层键是父节点的取值组合第二层键是节点 4 自己的取值。改动父节点集合只需改这张条件表的键其余代码不动。无向图则换个写法用势函数表达“这几个变量凑在一起有多相容”最后整体归一化。势函数不必是概率只要非负即可归一化常数负责把它拉回概率。这也解释了为什么无向图里的参数不好直接解释成概率——它们描述的是相对偏好不是发生频率。2.3 从图上看条件独立d-分离与那个容易被忽略的 V 型结构图模型真正值钱的地方是让“条件独立”这件事可以肉眼读出来。无向图里判断很简单把要观测的变量从图里删掉如果两个节点之间再无路径它们在给定这些变量后条件独立。有向图要用 d-分离规则稍绕核心是三种三节点结构。链式结构 A → B → C观测 B 就切断了 A 和 C 的联系。分叉结构 A ← B → C 同理观测 B 之后 A、C 独立。最反直觉的是第三种V 型结构 A → C ← BA 和 B 本来独立可一旦观测了共同子节点 C它们反而变得相关。下雨和洒水车都指向“地面湿”地面湿这件事被看到之后你推断“下雨了”就会下调“洒水车开过”的概率——两者通过共同结果产生了竞争关系。这个现象常被叫作 explaining away是贝叶斯网络里最容易翻车的地方。很多初学者以为“图上没边就等于独立”这是把边缘独立和条件独立混成一锅。正确的读法是没边说明在给定某组变量后独立而“给定谁”恰恰由结构决定V 型结构里那组变量是子节点而不是父节点。同样的图观测集合不同独立结论可以完全相反。3. 指数族为什么一大半常见分布都是“一家人”3.1 一个模板套住伯努利、高斯和泊松指数族不是某一个分布而是一类分布的写法模板p(x|θ) h(x)·exp(⟨θ, T(x)⟩ − A(θ))。这里 θ 是自然参数T(x) 是充分统计量A(θ) 是对数配分函数h(x) 是底层测度。把它看成一句话任何能用“统计量的线性组合再取指数”描述的分布都归这一家。伯努利分布套进去T(x) xθ 是 logit 形式的对数几率A(θ) log(1 e^θ)。高斯分布固定方差套进去T(x) (x, x²)θ 是均值和方差对应的两个参数。泊松分布套进去T(x) xθ log λ。除此之外多项分布、伽马分布、贝塔分布、狄利克雷分布、指数分布全在族内。机器学习里大部分常见似然都能写成这个形状这不是巧合。统一写法带来的是统一推导。只要证明一个结论对指数族成立它就是几十个分布的共同财产不用一个个重来。共轭先验为什么长那样、广义线性模型为什么用链接函数、变分推断为什么能写成凸优化答案都藏在这个模板里。对刚接触的人来说最实用的一点是看到“指数族”三个字先别想成某个具体分布先想成“能不能塞进这个模板”。3.2 对数配分函数那个凸函数为什么这么关键A(θ) 看着像个为了归一化硬凑出来的项其实是整个族的信息中枢。对 θ 求一阶导得到充分统计量的期望求二阶导得到充分统计量的协方差。换句话说分布的矩信息全被这一个函数打包了求导就能取出来。更关键的是A(θ) 是凸函数。凸意味着求极值有全局保证意味着可以用切线、用对偶、用一系列成熟的优化工具去处理它。指数族之所以在统计和机器学习里地位特殊很大程度上就是因为这个凸性模型的对数似然是凹的参数的估计问题是个漂亮的凸问题不会陷进局部最优。打个比方A(θ) 像一台自动售货机你投进去参数 θ它吐出来归一化常数你按一下“求导”按钮它吐出来均值按两下吐出来方差。所有矩都能从这一个入口取不用重新推积分。这一层便利是后面变分推断能把“算积分”翻译成“解优化”的前提。3.3 共轭对偶把算积分翻译成解优化有了凸函数就能取共轭对偶。A(θ) 的共轭对偶 A*(μ) 定义为在所有 θ 上取 ⟨θ, μ⟩ − A(θ) 的上确界而这个对偶函数恰好就是负熵。反过来写A(θ) 等于在所有合法的均值参数 μ 上取 ⟨θ, μ⟩ − A*(μ) 的上确界。这行式子是整个变分方法的源头。它说的是一个原本要算积分才能得到的数可以改写成“在某个集合上求最大值”的问题。求最大值比算高维积分好办得多因为优化有成熟的迭代算法、有收敛判据、有对偶间隙可以监控。原文把这一层叫共轭对偶通俗地说就是给积分找了个“优化版替身”。变分推断里“变分”两个字指的就是这种把数值写成极值问题的操作。理解了这一点后面看到 ELBO、看到平均场、看到 Bethe 近似就不会觉得是一堆互不相干的技巧而是同一个套路在不同精度下的展开。4. 变分推断把算不动的积分换成一个能解的优化题4.1 精确推断什么时候会翻车树宽是那条硬线图上要算的两类基本量边缘概率含似然和最可能配置模式。树结构的图有精确算法和积算法沿着树做两遍消息传递复杂度与节点数成正比干净利落。一般的图没这么好运得先把图三角化、构造联合树再在联合树上跑同样的消息传递。麻烦在于联合树里每个团的大小由图的树宽决定计算量随树宽指数增长。树宽小比如一条链、一棵树、或者稀疏的环形结构精确推断跑得动。树宽一大比如一张几百乘几百像素的图像网格每个像素跟上下左右四个邻居相连树宽会随边长线性增长指数一上去精确算法立刻趴窝。这就是“图看起来稀疏但推断仍然算不动”的典型场景也是近似方法存在的全部理由。一条实用的判断线是先估树宽再看它能不能压到十几以内。压得住就走精确路线压不住就老老实实上近似。跳过这一步直接调近似算法很容易在本来有精确解的小图上折腾半天得到还不如精确解的答案。4.2 ELBO 与 KL 散度逼近的方向为什么不能反变分推断的标准做法是挑一个形状简单、容易处理的分布 q让它去贴近真实后验 p(z|x)。衡量贴近程度用 KL 散度但这里有个方向问题算 KL(q‖p) 需要对 q 求期望q 是自己选的采样方便算 KL(p‖q) 要对 p 求期望而 p 正是那个算不出来的东西。所以只能是前者。把 log p(x) 拆开会得到 log p(x) ELBO(q) KL(q‖p(z|x))。KL 非负于是 ELBO 是 log 证据的下界最大化 ELBO 等价于最小化 KL(q‖p)。这个下界就是变分推断的目标函数训练时盯着它涨就行。要注意 KL(q‖p) 这种方向有个著名脾气它倾向于让 q 覆盖后验的多个峰而不是死盯一个峰。放到平均场假设下变量被强行拆成独立q 往往会低估后验的方差这一点在做不确定性量化时得留神。平均场的求解用坐标上升轮流更新每个变量的近似分布固定其余变量不动。# 平均场坐标上升轮流优化每个变量的近似分布 q[j] for sweep in range(max_sweeps): elbo_old compute_elbo(q) # 记录本轮起点 for j in range(num_vars): # 固定除 j 以外的所有 q用它们的期望算 j 的局部更新 q[j] update_factor(observed, q, j) elbo_new compute_elbo(q) if elbo_new - elbo_old tol: # ELBO 单调不减可作收敛判据 break三个参数值得说明max_sweeps是外层轮数上限防止不收敛时死循环tol是收敛阈值取太小会白烧算力取太大会提前停update_factor是局部更新公式不同的模型只是换这一个函数框架不变。ELBO 单调不减这条性质很实用它是坐标上升的必然结果意味着曲线一旦不涨了就是真收敛不会出现来回震荡的假象。4.3 平均场、Bethe 近似与信念传播三种近似的脾气同样是近似几种方法的取向差别不小。平均场把后验拆成完全独立的乘积牺牲相关性换取可解性优化问题是凸的、收敛稳定代价是方差被系统性低估。Bethe 近似保留了边上的成对相关性在树上精确、在有环图上是近似和积算法信念传播的不动点方程正是它的驻点条件。麻烦在于 Bethe 目标函数一般非凸消息传递可能不收敛也可能振荡。再往上一层是凸松弛比如树重加权、对数行列式松弛把非凸的近似目标换成凸的代价是解出来的是界而不是点估计计算量也更大。原文把这几类方法放在同一套变分表示下统一处理好处是能一眼看出谁在近似什么。方法保留的相关性优化性质典型输出平均场几乎不保留凸稳定收敛下界方差偏小Bethe 近似边上成对非凸可能振荡近似值方向不保证凸松弛可控地保留凸可解上界或下界视构造而定选哪种取决于你更怕哪件事怕不收敛就选平均场怕方差估小就上 Bethe 或凸松弛怕没有误差保证就走向凸的那一侧。没有一种方法全面胜出这也是为什么资料里要把它们并排讲而不是只推一种。5. 容易搞混的几对概念把边界划清楚5.1 有向图的箭头不等于因果关系易混点在于箭头长得就像“导致”很多人看一眼就把有向图当因果图用。之所以混是因为有向图确实常常按因果顺序来建父节点写在子节点前面看着顺理成章。区分办法是看它到底编码了什么有向图编码的是条件独立关系只要联合分布能按这个顺序分解箭头方向怎么写都成立同一组独立关系可以有多个等价的有向图。要做因果结论得额外引入干预、混杂因子处理那一整套假设光有一张图不够。把有向图当因果图属于把“能分解”误读成“能干预”。5.2 指数族不等于指数分布这两个词共享两个字混淆率极高。指数分布是一个具体分布描述等待时间只有一个参数指数族是一大类分布的统称成员包括高斯、伯努利、泊松、伽马、狄利克雷等几十个。之所以混纯粹是中文译名撞车。区分办法很简单看到“族”字就想成“模板”和“集合”看到“分布”就想成“单个成员”。判断某个分布属不属于指数族套模板试一下就知道套得进去就是套不进去就不是跟它名字里有没有“指数”毫无关系。5.3 变分推断不等于 MCMC一个有偏一个无偏两者都是近似推断的手段目标都是后验但路子完全相反。MCMC 靠采样样本够多时渐近精确代价是慢而且很难判断“够多了没有”变分推断靠优化速度快、能处理大规模数据但结果有系统偏差给的是近似而非真值。之所以混是因为初学者常把“近似推断”当成一个整体以为选哪个都差不多。区分办法看需求要严格的误差保证和准确的方差走 MCMC要快、要能嵌进训练循环、要对超大规模数据做在线更新走变分。二者也不是非此即彼混合使用很常见。5.4 图模型不等于神经网络图模型是描述变量依赖结构的框架重点在“谁能影响谁”和“怎么算边缘概率”神经网络是参数化的函数逼近器重点在“怎么拟合一个映射”。之所以混是因为图神经网络这类东西把两个词拼在了一起让人以为是一回事。区分办法看输出图模型的输出是概率分布、边缘概率、最可能配置神经网络的输出是向量、分数、预测值。二者可以结合用神经网络参数化图模型里的势函数是常见做法但结合不等于等同。6. 什么时候该用这套东西三条判断线和一次踩坑落到实操问三个问题基本就能定位。第一个问题变量之间的依赖结构清不清楚、能不能画出来能画出来图模型就有用武之地画不出来、只想拟合一个从输入到输出的映射那大概率该用别的东西。第二个问题树宽压不压得住压得住走精确推断压不住才考虑近似。第三个问题你要的是点估计还是带不确定性的分布只要点估计模式计算max-product 那一支往往比求边缘更省事要分布就得在平均场、Bethe、凸松弛之间按前面说的脾气挑。场景建议路线需要警惕的地方结构稀疏、树宽小联合树精确推断三角化顺序影响树宽别随手排结构稠密、要快速出结果平均场方差被低估别拿它做区间估计有环但稀疏、要精度Bethe 近似或凸松弛消息传递可能不收敛要设迭代上限变量全是离散、只求最可能配置max-product 加线性规划松弛松弛解不一定整数要做取整校验我自己踩过的一个坑是在一张看着挺稀疏的网格图上直接上精确推断心想边数不多应该没事结果跑了一晚上内存直接爆掉。后来才老老实实先估树宽发现它随网格边长线性涨压根压不住。从那以后我每次拿到一张图第一件事都是先算树宽和最大团大小再决定走哪条路这一步花不了几分钟能省掉一整晚的无效计算。反过来也有不该用的时候。样本量极小、结构完全靠猜硬套图模型只会把错误的独立性假设固化进结果里这时候简单的正则化模型反而更稳。变量数很少、联合分布直接枚举就行也别为了用框架而用框架。这套东西真正的价值是在变量多、依赖复杂、又必须给出概率量的时候把不可算变成可算。这份资料把图模型、指数族、变分推断三条线串在同一个变分表示下讲从因子分解一路推到平均场、Bethe 近似和凸松弛还单独讨论了参数估计和模式计算适合想把这套东西一次理顺的人。需要完整内容的话按文末方式获取即可。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询