想象你刚搬进一个老小区。要快速摸清这里的门道,最有效的办法不是挨家挨户做调查,而是拿到一张“社区关系地图”:谁和谁是亲戚、谁在背后影响谁、谁和谁只要见面就针尖对麦芒。这片社区里住着很多“变量”——昨天的天气、今天的词、照片上的每个像素。概率图模型,就是给这些变量画关系地图的学问。地图上每个点是一户人家(一个随机变量),每条线是关系(概率依赖关系)。 同样是关系,有的关系是单向的:家长传话给孩子,孩子不会倒过来影响家长——这叫有向图。有的关系是双向的:隔壁老张炒菜味道太重,你家的油烟机得跟着转,你也影响他——这叫无向图。有了地图,社区里的三大名场面你都能看懂:HMM 是一条“单行传话链”,一句一句往下传,只能看上一句的脸色;CRF 是“全小区业主大会”,整条街的证据一起投票,决定每户该贴什么标签;MRF 是“邻居效应”,每户的状态都想和周围人保持一致。 慢慢地你会明白:搞懂这三张关系图,文本里的词性标注、命名实体识别,图像里的分割和去噪,其实都是同一件事——在一张关系图上,查找最合理的全局安排。

岗位关联

对 AI 从业者而言,概率图模型是结构化预测的“关系骨架”:文本序列标注、图像语义分割都依赖它,掌握 HMM/CRF/MRF 的选择与实现,能让你在 NLP 和 CV 的实战项目中快速定位最优方案。

目录
  1. 可视化演示
  2. 图模型基础
  3. 隐马尔可夫模型
  4. 条件随机场
  5. 马尔可夫随机场
  6. NLP文本应用
  7. CV图像应用
  8. 模型选择策略
  9. 工具与前沿
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

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

概率图模型在不同领域的应用:HMM用于语音识别的序列生成,CRF用于文本标注的判别式建模,MRF用于图像分割的空间平滑

图模型基础

搬进小区,第一步是拿到关系地图。概率图模型做的正是这件事:把随机变量当成住户,把变量之间的“你影响我、我依赖你”画成一条条边。有箭头表示单方向影响,叫有向图模型;没有箭头表示互相牵制,叫无向图模型。节点是住户,边是邻里关系,整张地图就是社区的关系网。

为什么要用图?因为我们通常说不清完整的联合分布,但能说出局部关系。比如你知道“今天下雨”会影响“路滑”,“路滑”影响“迟到”,把局部关系拼起来,整件事的概率就清楚了。数学上,先把图切成若干“团”——团就是图上完全连成一片的小群住户,每群内部有一个“氛围打分”函数,叫势函数;再把所有团的分数乘起来,得到一个未归一化的概率。

拿到地图后,你才知道该先去敲谁家的门。图模型的价值正在于此:不需要枚举整片社区的所有组合,只需盯着局部关系逐块建模,就能拼出全局概率。

P(x)=1Z∏c∈Cψc(xc)\displaystyle P(x) = \frac{1}{Z} \prod_{c \in C} \psi_c(x_c)
这段话说的是:把整张关系地图拆成若干小团体,每个团体自己打分,全部相乘后用配分函数 Z 做归一化,就得到了全体变量的联合概率。
  1. 联合概率 P(x)所有住户状态同时出现的概率,也就是“整张地图上每个变量都取某个值”的可能性。
    P(x)P(x)
  2. 团集合 C地图上完全相连的一小群住户。社区里三五户结成小群,团就是这种“抱团”的集合。
    c∈Cc \in C
  3. 团势函数 ψ_c(x_c)第 c 个团内部“和谐度”的打分——团里各户状态组合得好不好。
    ψc(xc)\psi_c(x_c)
  4. 连乘 ∏把每个小团体的和谐度乘在一起,整张图的“整体和谐度”就是各团和谐度的乘积。
    ∏c∈Cψc(xc)\prod_{c \in C} \psi_c(x_c)
  5. 配分函数 Z把所有可能配置的“和谐度”全部加起来,得到总人气,用它做分母把结果压成 0 到 1 的概率。
    1Z\frac{1}{Z}

隐马尔可夫模型

老小区里有一条最著名的“单行传话链”:消息从第一家传到第二家,再传到第三家,各家只认上一家传来的版本。你站在楼道里看不见消息本身,只能通过每家阳台挂出的旗子(观测)来猜测内容。这,就是隐马尔可夫模型(HMM)的形状。

HMM 有两条链:上面一条是隐状态链(真正的消息),按时间顺序一个接一个地转移;下面一条是观测链(你看到的旗子),每个隐状态会“发射”一个观测。模型只需三组参数:初始概率(第一家住着谁)、转移概率(从一家到下一家的通畅度)和发射概率(某户挂出某面旗的习惯)。围绕这三组参数,HMM 有三大经典问题:评估概率、解码最优状态、学习参数。其中最常用的是维特比算法——它用动态规划找出一条最可能的隐状态序列。

单行传话快,但每户只认上一家,信息量有限。HMM 因此带着两个强假设:一阶马尔可夫假设(只看前一刻)和观测独立假设(每个观测只由当前状态决定)。一旦场景变复杂,单行传话就有点不够用了——下一节的全小区业主大会可以补上这个短板。

δt(j)=max⁡i[δt−1(i)×aij]×bj(ot)\displaystyle \delta_t(j) = \max_{i} \left[ \delta_{t-1}(i) \times a_{ij} \right] \times b_j(o_t)
维特比递推式:第 t 步到达状态 j 的最佳得分,等于上一步所有状态的最佳得分乘以转移概率后再取最大,再乘以当前观测的发射概率。
  1. δ_t(j)第 t 时刻到达隐状态 j 的所有路径中,概率最大的那条路径的得分。
    δt(j)\delta_t(j)
  2. 转移概率 a_ij消息从上一家的状态 i 传到这一家状态 j 的通畅程度。
    aija_{ij}
  3. 取最大 max_i在所有可能的前驱状态 i 中,挑出“上一步得分乘以转移概率”最大的那一个,这是动态规划的择优录取。
    max⁡i[δt−1(i)×aij]\max_{i} \left[ \delta_{t-1}(i) \times a_{ij} \right]
  4. 发射概率 b_j(o_t)状态 j 挂出当前旗子 o_t 的习惯——消息传到 j 后,表现出眼前这个观测的可能性。
    bj(ot)b_j(o_t)

条件随机场

单行传话往往误事:小区门口贴通知,如果只看上一家怎么传,整条消息容易走样。于是社区改成全小区业主大会:所有住户把整条街的线索摆上台面,一起投票决定每家该贴什么标签。这就是条件随机场(CRF)的思路。

CRF 是一个判别式无向图模型,它不费心去建模“消息长什么样”(观测的分布),而是直接建模“给定整句话 x,标签序列 y 的概率 P(Y|X)”。关键在于特征函数:你可以定义任意规则,比如“当前词是'苹果'且标签是名词就加 1 分”、“上一个标签是动词则当前标签偏好名词”等等。每条规则配一个权重 λ,把所有位置所有规则的得分累加,再通过指数函数变成概率。因为特征可以跨位置、跨词地任意组合,CRF 能用上全局上下文,这是 HMM 做不到的。

业主大会的信息量远大于单行传话,所以 CRF 在词性标注、命名实体识别等序列任务上长期是首选基线。它就像一位考虑全局的排班师,把整条街的线索都用上,而不是只盯着上一位邻居。

P(y∣x)=1Z(x)exp⁡(∑kλkfk(yt−1,yt,x,t))\displaystyle P(\mathbf{y}|\mathbf{x}) = \frac{1}{Z(\mathbf{x})} \exp\left( \sum_{k} \lambda_k f_k(y_{t-1}, y_t, \mathbf{x}, t) \right)
这条式子是说:标签序列好不好,取决于所有特征规则打分的加权和;得分越高、概率越大,最后用配分函数归一化。
  1. 条件概率 P(y|x)给定观测序列 x 后,标签序列 y 的概率——“听完整条街的证词后,每家该贴什么标签”。
    P(y∣x)P(\mathbf{y}|\mathbf{x})
  2. 特征函数 f_k第 k 条小区规则,输入相邻标签、整句话和位置,输出一个实数值,比如“苹果 + 名词 = 1 分”。
    fk(yt−1,yt,x,t)f_k(y_{t-1}, y_t, \mathbf{x}, t)
  3. 权重 λ_k每条规则的重要程度——“这条证词在投票时占多大分量”。
    λk\lambda_k
  4. 累加求和把每条街、每个位置的规则得分全部加起来,得到这张标签序列的总分。
    ∑kλkfk(⋅)\sum_{k} \lambda_k f_k(\cdot)
  5. 指数函数 exp把总分映射成正数,总分越高概率越大,符合“人气越高越可能当选”。
    exp⁡(⋅)\exp(\cdot)
  6. 配分函数 Z(x)对所有可能的标签序列打分求和,保证所有候选方案的概率加起来恰好是 1。
    Z(x)Z(\mathbf{x})

马尔可夫随机场

小区里还有一种“从众效应”:老张家把院墙刷成蓝色,隔壁老李家、对门老王家很快也跟着刷成蓝色——没人下命令,但大家就是想和邻居保持一致。马尔可夫随机场(MRF) 把这种邻居间的双向牵制画成了无向图,是图像处理中最常用的概率图模型。

在 MRF 里,每个像素是一户人家,像素间的相邻关系是边,“大家尽量和邻居保持一致”的偏好被编码成势函数和能量函数。能量越低,配置越“舒服”。把能量通过指数函数变成概率,就得到吉布斯分布:低能量的配置出现的概率指数级更高。温度 T 控制随机性——温度高时各家乱来,温度低时大家整齐划一。

正是这种“看邻居脸色”的机制,让 MRF 成为图像分割、去噪的天然工具:每个像素单看可能模棱两可,但加上“邻居大多属于同一区域”的平滑先验,整体结果立刻干净许多。

P(x)=1Zexp⁡(−E(x)T)\displaystyle P(x) = \frac{1}{Z} \exp\left( -\frac{E(x)}{T} \right)
MRF 的吉布斯分布:一个像素配置的概率,取决于它的能量有多低;能量越低、越“和谐”,概率越大。
  1. 概率 P(x)某个像素配置(整张图所有像素的取值)出现的概率。
    P(x)P(x)
  2. 能量 E(x)配置的“别扭程度”——墙面配色越乱、邻居间差异越大,能量越高。
    E(x)E(x)
  3. 温度 T控制随机性——温度高时配置更随机,温度低时能量主导、配置趋于整齐。
    TT
  4. 指数函数 exp(-E/T)能量越低,指数值越大,对应概率越高——“舒服”的配置更容易出现。
    exp⁡(−E(x)T)\exp\left( -\frac{E(x)}{T} \right)
  5. 配分函数 Z所有可能配置的“人气”总和,用来归一化。
    ZZ

NLP文本应用

把社区关系图搬进文本,你会发现句子就是一条按顺序排开的“居民楼”,每个词都是楼里的一户。词性标注,就是给每个词排岗位:谁是名词、谁是动词、谁是形容词。HMM 和 CRF 是两位最熟悉这条生产线的排班师。

HMM 做词性标注时,把词性序列当隐状态、把具体词语当观测,用“噪声信道”思路求解:先估计词性序列本身的先验概率(语法上“名词后面跟动词”顺不顺),再估计每个词在对应词性下的发射概率(“苹果”更可能是名词),最后用维特比算法找出乘积最大的词性序列。命名实体识别(NER) 也类似:给“张三”“北京”“下午三点”贴上人名、地名、时间标签。历史上有名的语音识别系统同样用 HMM 对声学特征建模;中文分词则用 B/M/E/S 四类标签标记字的开头、中间、结尾和单字。

文本生产线上的这些任务,本质都是给序列中的每个位置分配一个离散标签,也就是所谓的结构化预测。HMM 是经典方案,CRF 是更强的进阶方案,而现代系统常把深度学习特征输送给 CRF 层,让排班师手里有更多情报。

T∗=arg⁡max⁡T  P(T)∏t=1nP(wt∣Tt)\displaystyle T^* = \arg\max_{T} \; P(T) \prod_{t=1}^{n} P(w_t \mid T_t)
HMM 解码目标:在所有候选词性序列中,选择“先验概率 × 发射概率连乘”最大的那个序列作为最终输出。
  1. 最优序列 T\*得分最高的词性序列,也就是“最佳排班表”。
    T∗T^*
  2. 先验 P(T)词性序列本身有多“顺”——由初始概率和转移概率连乘得到,体现语法习惯。
    P(T)P(T)
  3. 发射连乘每个词在对应词性下出现的概率相乘——“苹果”出现在“名词”下的合理性。
    ∏t=1nP(wt∣Tt)\prod_{t=1}^{n} P(w_t \mid T_t)
  4. arg max在所有候选序列中挑出乘积最大者——“在所有排班方案里选最顺眼的那份”。
    arg⁡max⁡T\arg\max_{T}

CV图像应用

现在把地图从文字搬到照片。一张照片就是一个超大小区,每个像素都是住户。图像分割的任务,是给每家每户刷上同一种颜色的门牌——比如把“猫”的像素都标成粉色,把“背景”都标成灰色。单看一个像素往往分不清,但加上邻居关系就容易多了:如果周围全是猫的像素,这一格大概率也是猫。

MRF 在 CV 中的标准做法,是定义一个由两部分组成的能量函数:数据项用来衡量“某个像素单独看像不像某个标签”,通常直接取深度网络(如 U-Net)输出的概率;平滑项用来惩罚“相邻像素标签不一致”。然后通过图割(Graph Cut) 或 ICM 等算法最小化总能量,得到既符合单像素证据、又整体平滑的分割结果。同样的框架稍作变换,就能用于图像去噪(把噪声像素拉回邻居的“主流”)、立体视差估计(左右图匹配的偏移量也天然平滑)。

居委会给门牌涂色时,既看每户自己的意愿(数据项),又极力避免隔壁两户颜色冲突(平滑项)。这个朴素的道理,构成了传统 CV 中一大批像素级任务的数学内核。

E(f)=∑pDp(fp)+∑(p,q)∈NV(fp,fq)\displaystyle E(f) = \sum_{p} D_p(f_p) + \sum_{(p,q) \in \mathcal{N}} V(f_p, f_q)
图像分割能量函数:总能量 = 每个像素的数据项之和 + 所有相邻像素对之间的平滑项之和。能量最小的时候,分割结果最合理。
  1. 标签图 f给每个像素分配一个标签后的完整分割结果,也就是“给每户刷好的门牌颜色方案”。
    ff
  2. 数据项 D_p(f_p)像素 p 单独看,属于标签 f_p 的把握——通常来自分类器或深度网络的输出概率。
    Dp(fp)D_p(f_p)
  3. 平滑项 V(f_p, f_q)相邻像素 p 和 q 标签不一致时的惩罚——“两家门牌颜色不一样,扣分”。
    V(fp,fq)V(f_p, f_q)
  4. 邻域集合 N图上所有相邻像素对的集合——“谁和谁是邻居,由网格结构决定”。
    N\mathcal{N}

模型选择策略

同样是“查违规装修”,小区里有两类师傅。生成式师傅擅长先摸清每户的正常作息,再判断谁家不对劲;判别式师傅不研究作息,只看现场证据直接下判断。对应到模型上,生成式模型(HMM、MRF)建模联合分布 P(X, Y),判别式模型(CRF)直接建模条件分布 P(Y|X)。连接两者的桥梁是贝叶斯定理。

那到底该请哪位师傅?几条经验法则:数据量小、想补全缺失数据时,生成式模型更稳,因为它掌握了“数据是怎么产生的”;特征复杂、上下文信息丰富时,判别式模型效果更好,因为 CRF 可以随意堆全局特征;任务是序列标注、语义分割这类结构化预测,CRF 往往更顺手;任务是去噪、生成、恢复,MRF 这类生成式框架更自然。另外还要算计算代价——MRF/CRF 的配分函数往往难以精确计算,训练和推理都可能需要近似算法(如迭代条件模式、置信传播)。

选师傅没有绝对标准,关键看手里有什么牌:数据少、要理解生成过程,选生成式;特征多、边界复杂,选判别式。两者并非对立,贝叶斯公式永远在中间牵线。

P(y∣x)=P(x∣y) P(y)P(x)\displaystyle P(y|x) = \frac{P(x|y) \, P(y)}{P(x)}
贝叶斯公式把生成式和判别式连在一起:由“证据像什么”和“标签本身多常见”可以反推出“看到证据后标签的概率”。
  1. 后验 P(y|x)看到证据 x 后,对标签/状态 y 的把握——“看到现场后判断谁家违规”。
    P(y∣x)P(y|x)
  2. 似然 P(x|y)假设 y 成立时,证据 x 有多容易发生——“如果真在违规装修,现场这个样子的可能性”。
    P(x∣y)P(x|y)
  3. 先验 P(y)没看证据前,y 原本有多常见——“整个小区平时有多少户在违规”。
    P(y)P(y)
  4. 证据 P(x)x 本身出现的概率,在这里只起归一化作用。
    P(x)P(x)

工具与前沿

老地图也能配上新装备。今天实现 HMM、CRF、MRF,很少再手推全套公式,社区里已经有现成的工具箱。PyTorch 生态中的 torchcrf 可以一行接入 CRF 层,OpenCV、SimpleITK 等库处理图像时也内置了马尔可夫随机场相关的优化工具(如图割)。

最经典的现代组合是 BiLSTM-CRF:双向 LSTM 负责从原始文本中抽取丰富的上下文特征,CRF 层负责给每个词打标签时考虑标签间的全局依赖,这套架构多年来是命名实体识别的强力基线。深度学习与概率图模型的结合也催生了深度能量模型:用神经网络参量化能量函数,再套用 MRF 的吉布斯分布做推断。评测序列标注、图像分割这类任务,业界常用 F1 分数 同时衡量精确率和召回率。

概率图模型并未过时,而是以新的形态回归:当深度网络负责“看懂局部”,图模型负责“理顺全局”,两者形成的组合拳正在 NLP 和 CV 的诸多任务上继续刷新成绩单。未来的社区地图,会越来越智能。

F1=2PRP+R\displaystyle F_1 = \frac{2PR}{P+R}
F1 是精确率 P 与召回率 R 的调和平均:两个指标任何一个太低,F1 都会被明显拉低。
  1. 精确率 P预测为正的样本中,真正正确的比例——“保安拦住的人里,真有问题的有多少”。
    PP
  2. 召回率 R真正的正样本中被找出的比例——“所有真正有问题的人里,被拦下了多少”。
    RR
  3. 调和平均把 P 和 R 融合成一个分,只有两者都高时 F1 才高——“既要拦得准,又要拦得全”。
    2PRP+R\frac{2PR}{P+R}

AI 应用场景

智能客服的命名实体识别

阶段:结构化预测 / 序列标注

解决的问题:传统规则抽取依赖人工编写正则模板,遇到“明天下午三点在望京 SOHO 开会”这种无固定模板的表达就频频漏抽;AI 用 CRF(或 BiLSTM-CRF)把抽取建模成“给每个词打标签”,自动捕获上下文,把时间、地点、业务实体一次性抽干净。

具体案例:某银行智能客服上线 BiLSTM-CRF 实体识别模型,从用户语音转写文本中抽取“转账金额”“收款账户”“办理网点”等实体,自动填充工单字段,实体抽取准确率从正则方案的 78% 提升到 93%,人工复核量下降一半。

医疗影像的病灶区域分割

阶段:图像分割 / 像素级分类

解决的问题:医生在 CT 或 MRI 上手动勾画病灶边界耗时且主观;简单阈值分割又对噪声和灰度不均非常敏感。AI 用 U-Net 等深度网络输出每个像素的初始概率,再叠加 MRF 的平滑项(邻居像素倾向一致)做后处理,消除锯齿和孤立噪点,得到边界连续、医学上更可信的分割结果。

具体案例:某医学影像团队在肝脏肿瘤分割任务中,将 U-Net 输出接入 MRF 能量最小化后处理,Dice 系数从 0.86 提升到 0.91,且小病灶的漏检率明显下降。

语音助手的唤醒词检测

阶段:时序建模 / 解码

解决的问题:语音信号是典型的时序数据,唤醒词“你好,小X”在时间轴上持续出现,传统方法难以处理其长短变化和噪声干扰;HMM 天然用隐状态链刻画语音的时序变化,配合高斯混合模型(GMM)描述声学特征,是经典而稳健的唤醒检测方案。

具体案例:某智能音箱早期原型使用 HMM-GMM 做唤醒词检测,在 5 米远场、60dB 噪声环境下仍能保持 95% 以上的唤醒率,为后续深度学习方案提供了可靠的训练数据对齐工具。

Python 演示

python48 行
class HMM:    def __init__(self, states, start, trans, emit):        self.states = states        self.start = start        self.trans = trans        self.emit = emit     def viterbi(self, obs):        # obs 是观测索引列表, 例如 [0,1,2] 表示序列"散步,购物,打扫"        n = len(self.states)        T = len(obs)        dp = [[0.0] * n for _ in range(T)]        back = [[0] * n for _ in range(T)]         for s in range(n):            dp[0][s] = self.start[s] * self.emit[s][obs[0]]         for t in range(1, T):            for s in range(n):                best_score = -1.0                best_prev = 0                for prev in range(n):                    score = dp[t-1][prev] * self.trans[prev][s] * self.emit[s][obs[t]]                    if score > best_score:                        best_score = score                        best_prev = prev                dp[t][s] = best_score                back[t][s] = best_prev         best_last = max(range(n), key=lambda s: dp[T-1][s])        path = [best_last]        for t in range(T-1, 0, -1):            path.append(back[t][path[-1]])        path.reverse()        return [self.states[i] for i in path]  if __name__ == '__main__':    # 天气例子: 隐藏状态=天气, 观测=心情    # 观测映射: 0=散步, 1=购物, 2=打扫    states = ['Sunny', 'Rainy']    start = [0.6, 0.4]    trans = [[0.7, 0.3], [0.4, 0.6]]    emit = [[0.5, 0.4, 0.1], [0.1, 0.3, 0.6]]     hmm = HMM(states, start, trans, emit)    obs = [0, 1, 2, 0, 1]    print(hmm.viterbi(obs))
目的:实现 HMM 的维特比解码算法,输入观测序列,输出最可能的隐状态序列。把 states 换成词性、观测换成词语索引,这套代码就能直接用于词性标注。
  1. dp = [[0.0] * n for _ in range(T)]创建动态规划表,每个格子存“到当前时刻、停在某个状态的最大概率”。
  2. dp[0][s] = self.start[s] * self.emit[s][obs[0]]初始化第一步:初始概率乘发射概率,相当于“消息第一棒”。
  3. score = dp[t-1][prev] * self.trans[prev][s] * self.emit[s][obs[t]]核心递推:上一步得分 × 转移概率 × 当前发射概率。
  4. if score > best_score:对每个当前状态只保留得分最高的前驱,这就是动态规划的“择优录取”。
  5. back[t][s] = best_prev记录最优前驱,方便最后回溯整条路径。
  6. best_last = max(range(n), key=lambda s: dp[T-1][s])在最后一步挑得分最高的状态作为终点。
  7. path.reverse()回溯路径是倒序的,反转后得到正序的最优隐状态序列。

常见误区

误区很多初学者以为 CRF 是 HMM 的“深度学习升级版”,都是序列标注模型,效果差别不大。

正解两者本质不同。HMM 是生成式模型,建模 P(X, Y),假设观测独立、状态只依赖前一刻,像“单行传话”;CRF 是判别式模型,直接建模 P(Y|X),可以自由定义任意跨位置的全局特征,像“业主大会综合投票”。哪怕不用深度学习,CRF 的特征灵活性也远超 HMM。二者不是版本升级,而是建模哲学的分叉。

为何常见:因为最常见的 BiLSTM-CRF 里同时出现了深度学习和 CRF,容易让人误以为 CRF 是深度学习的产物,忽略了它本身是独立的概率图模型。

误区有人觉得 MRF 在图像上做的不过是先模糊、再二值化,和平滑滤波差不多。

正解滤波是确定性的局部像素运算,而 MRF 是一个概率模型:它定义数据项和平滑项组成的能量函数,通过能量最小化寻找全局最优标签分配。滤波只是改变了像素值,MRF 解决的却是“给每个像素贴标签”的推断问题,两者的数学目标和输出类型都不同。

为何常见:MRF 的平滑项确实会让结果看起来像“被平滑过”,于是容易与滤波混淆,但它背后的概率推断机制是本质区别。

误区看到如今 NLP、CV 全是深度网络,便认为 HMM、CRF、MRF 是老古董,不需要再学。

正解概率图模型从未退场,而是深度网络的“结构搭档”。BiLSTM-CRF 至今是命名实体识别基线,U-Net + MRF 后处理仍是医学影像分割的常见配方,深度能量模型更是把神经网络写进了能量函数里。深度学习擅长提取特征,图模型擅长建模结构与约束,二者互补。

为何常见:因为大家看到的方案名字里都是神经网络,图模型藏在网络后面作为“最后一层”或“后处理”,容易被忽视。

误区以为维特比算法把从起点到终点的所有状态序列都枚举一遍,再挑概率最大的。

正解穷举是指数级复杂度,而维特比是动态规划:每个时刻、每个状态只保留一条“到该状态为止的最优前缀路径”,同时记录前驱信息。它利用最优子结构性质,把指数级搜索压缩成多项式时间,最后通过回溯还原完整路径。

为何常见:维特比确实在“找最优路径”,听起来和“枚举后比较”很像,但它是通过剪枝式的择优递推完成的,复杂度完全不同。

面试题

Q1. 概率图模型中的“图”主要用来表示什么?

单选题 · easy

  • A.变量之间的数值大小
  • B.变量之间的概率依赖关系← 正确答案
  • C.训练数据的出现顺序
  • D.特征值的数据分布

答案:B。概率图模型用节点表示随机变量,用边表示变量之间的概率依赖关系,就像社区地图描述住户之间的邻里关系。选项 A、C、D 分别描述数值、顺序、分布,都不是图的核心语义。

Q2. HMM 属于哪一类概率图模型?

单选题 · easy

  • A.无向图模型
  • B.有向图模型← 正确答案
  • C.自回归模型
  • D.潜变量模型

答案:B。HMM 是典型的有向图模型(贝叶斯网络),隐状态链和观测链都用有向箭头连接,表示“状态生成状态”“状态生成观测”的因果关系。它不属于无向图模型,'潜变量模型'也不是标准分类。

Q3. 维特比算法主要解决 HMM 的哪个问题?

单选题 · mid

  • A.评估观测序列的概率
  • B.学习参数矩阵的取值
  • C.求最可能的隐状态序列← 正确答案
  • D.估计先验分布的数值

答案:C。HMM 三大问题中,评估用前向算法,学习用 EM 算法(鲍姆-韦尔奇),而解码——即给定观测序列求最可能的隐状态序列——用维特比算法。它就是那个“找最顺传话链”的动态规划高手。

Q4. HMM 的三大基本问题包括哪些?

多选题 · mid

  • A.评估问题← 正确答案
  • B.解码问题← 正确答案
  • C.学习问题← 正确答案
  • D.聚类问题

答案:ABC。HMM 三大基本问题是:评估(观测序列的概率)、解码(最优隐状态序列)、学习(从数据估计参数)。聚类是机器学习中另一类无监督任务,不属于 HMM 的基本问题。

Q5. CRF 相比 HMM 的主要优势是?

单选题 · mid

  • A.模型训练速度更快
  • B.能用全局特征和上下文← 正确答案
  • C.完全不需要标注数据
  • D.只能处理连续观测数据

答案:B。CRF 是判别式模型,直接建模 P(Y|X),允许任意跨位置的全局特征函数。HMM 受一阶马尔可夫和观测独立假设限制,只能利用局部上下文。CRF 同样需要标注数据训练,也不是只能处理连续数据。

Q6. 无向图模型的吉布斯分布中,配分函数 Z 的作用是什么?

单选题 · easy

  • A.让概率归一化← 正确答案
  • B.加速模型训练
  • C.增加特征维度
  • D.增强数据多样性

答案:A。配分函数 Z 等于所有可能配置的“未归一化分数”之和,把分子除以 Z 后,所有配置的概率加起来恰好是 1。它就像小区总人气统计,用来把各户的“和谐度”折算成 0 到 1 的概率。

Q7. 图像分割中 MRF 能量函数主要由哪两部分组成?

单选题 · mid

  • A.数据项与平滑项← 正确答案
  • B.均值与方差的组合
  • C.编码器与解码器
  • D.卷积与池化操作

答案:A。MRF 能量函数 = 数据项 D(衡量像素自身像某标签的程度)+ 平滑项 V(惩罚相邻像素标签不一致)。这种“自己意愿 + 邻居协调”的结构正是图像分割中兼顾局部证据与整体平滑的关键。

Q8. 与 HMM 相比,CRF 在序列标注中的特点包括?

多选题 · hard

  • A.直接建模条件概率 P(Y|X)← 正确答案
  • B.能利用任意跨时刻特征← 正确答案
  • C.必须假设观测相互独立
  • D.用配分函数作归一化← 正确答案

答案:ABD。CRF 直接建模条件概率,可以设计任意跨越多个位置的全局特征,并用配分函数对指数得分归一化。而观测独立假设是 HMM 的限制,CRF 恰恰摆脱了它,因此更擅长复杂序列标注。

Q9. HMM 的三项关键参数是什么?

单选题 · easy

  • A.初态/转移/发射概率← 正确答案
  • B.均值/方差/协方差
  • C.权重/偏置/激活函数
  • D.学习率/批大小/轮数

答案:A。HMM 的核心参数是初始概率(第一家的状态)、转移概率(状态间的跳转通畅度)和发射概率(状态生成观测的习惯)。其余选项分别是统计量、神经网络超参和训练配置,都不属于 HMM 参数。

Q10. 下列关于生成式与判别式模型的说法正确的是?

多选题 · hard

  • A.HMM 是生成式模型← 正确答案
  • B.CRF 是判别式模型← 正确答案
  • C.生成式建模联合分布← 正确答案
  • D.判别式利于结构化预测← 正确答案

答案:ABCD。HMM 建模 P(X, Y),属于生成式;CRF 直接建模 P(Y|X),属于判别式。生成式掌握“数据如何产生”,数据不足时更稳健;判别式专注决策边界,便于堆叠全局特征做结构化预测,四句话都正确。