深度学习笔记-5:卷积网络与概率图模型
深度学习笔记-5,涵盖卷积神经网络(卷积、池化、目标检测、图像分割、风格迁移)与概率图模型(贝叶斯网络、条件独立性、d-分离)。对应《深度学习:基础与概念》第10-11章。
建议先看第1-4篇,尤其是第3篇的神经网络基础和第4篇的反向传播。本篇讲 CNN 怎么处理图像,以及概率图模型怎么表示变量间的关系。
Chapter 10 卷积网络
计算机视觉
传统机器学习模型通常假设输入数据是“无结构”的,即输入向量 中的各个元素彼此独立。但现实中的许多数据具有 结构化特征,例如:
- 自然语言中,词语按顺序排列,前后词之间有依赖关系。
- 图像中,像素以二维网格排列,相邻像素高度相关。
如果对图像像素进行随机重排,它就不再像一张自然图像;同样,独立随机生成每个像素也几乎不可能生成一张“像样”的图像。这说明图像具有很强的 局部相关性和空间结构先验知识。
将这种结构先验编码进模型,而不是让模型从零学习。(回顾:第3篇中的全连接网络没有利用这种结构。)
卷积神经网络(CNN)就是一种架构层面的解决方案,通过稀疏连接和参数共享来显式建模图像的空间结构。
图像数据
- 图像由像素(pixel)组成的矩形阵列。
- 每个像素有:
- 灰度图像:单通道(intensity)
- 彩色图像:三通道(RGB,红、绿、蓝)
- 像素值为非负数,通常用 8 位整数表示(范围 0–255)。
- 视频可看作三维结构(时间 + 高度 + 宽度),医学图像(如 MRI)是三维体素。
挑战:直接使用全连接网络处理图像会导致参数爆炸。
例如:一张 的彩色图像有 300 万维(100010003=3000000)输入。
若第一层有 1000 个神经元,则仅第一层就有 个权重,不可训练。
卷积滤波器
全连接网络处理图像参数太多,根本训不动。CNN 的思路很直接:既然图像有空间结构,那就把这个结构”写死”进网络架构里——用稀疏连接(每个神经元只看一小块区域)和参数共享(同一个滤波器扫遍整张图)来大幅减少参数。
CNN 利用了图像的四个结构特性:
- 层次性:从边缘 → 纹理 → 部件 → 物体,一层一层抽象上去
- 局部性:每个神经元只看局部区域(不需要看全图)
- 平移等变性:猫在左上角和右下角,特征应该被同样检测到
- 不变性:最终分类不应该因为猫挪了个位置就变
特征检测器
考虑灰度图像(单通道)。
- 每个隐藏层神经元只接收图像的一个小区域(称为感受野,receptive field)作为输入。
- 例如,一个 的感受野对应 9 个输入。
- 神经元的输出可以表示为: 其中:
- :感受野内的像素向量。
- :权重向量,可视为一个 的矩阵(称为卷积核或滤波器)。
- :偏置项。
- :激活函数,定义为 。
该神经元在检测与 w 模式相似的图像块。当输入 x 与 w 越相似(点积越大),输出响应越强。

a为感受野,接受一个3*3的像素输入,构成隐藏单元的感受野 b为与隐藏单元相关的权重值,称为卷积核
平移等变性
同一特征(如眼睛)可能出现在图像任意位置。我们希望同一个滤波器能在所有位置检测该特征。
解决方案:在整个图像上共享权重,即使用同一个卷积核在图像上滑动。这种操作称为卷积。实际上,深度学习中的”卷积”通常是互相关(cross-correlation,将滤波器在输入上逐位置计算点积)。
直觉理解:卷积操作就像拿着一个放大镜在图片上逐行扫描。放大镜(卷积核)每次只看一个小区域(感受野),然后算出一个数值。当放大镜移到图片边缘时,它”看到”了边缘模式,输出就变大;移到平坦区域时,输出就很小。同一个放大镜从左上角扫到右下角,就能在整张图片上找到所有相似的模式——这就是参数共享的威力。
二维卷积公式(忽略激活函数) 其中:
- :输入图像在位置 的像素值。
- :卷积核在相对位置 的权重。
- :输出特征图(feature map,卷积操作的输出)在位置 的值。

左图为一维卷积(具有相同颜色的连接具有相同的权值),右图为二维卷积
填充
卷积后特征图尺寸会变小。 例如:J×K 图像与 M×M 卷积核卷积后,输出为(J−M+1)×(K−M+1)。
在图像边缘添加“填充”像素。
- 有效卷积:无填充(P=0)
- 等大卷积:填充使得输出尺寸与输入相同。当 M 为奇数时,P = (M-1)/2 填充值通常设为 0(但建议先对图像做均值归一化,使 0 接近平均像素值)。

填充
步幅卷积
使用步幅 ,即滤波器每次移动 个像素。
控制输出特征图尺寸为:
- J×K:输入图像的尺寸(高度×宽度)
- P:填充(padding)大小
- M:卷积核尺寸(假设是方形的M×M)
- S:步幅(stride)
- :向下取整(floor函数)
例子:
- 输入:7×7的图像,卷积核:3×3,步幅:2,填充:1
- 输出尺寸: 所以输出是4×4
多通道卷积
输入图像有多个通道(如 RGB 三通道),卷积核也必须是三维的:,其中 是输入通道数。
每个通道使用一个 的滤波器,然后将结果相加。
输入图像:红 绿 蓝
卷积核:红权重 绿权重 蓝权重均为3×3 = 3×3×3 的三维卷积核
扩展:多个输出通道(即多个滤波器) 使用 的滤波器张量。 每个输出通道对应一个独立的滤波器。 总参数数:(+1 是偏置,每个输出通道1个偏置)

从RGB三个通道接收输入,核有27个权重(+1个未显示的偏置参数)
1×1 卷积:滤波器大小为1×1×C。
作用: 改变通道数(升维或降维) 引入非线性(配合激活函数) 计算量小,常用于网络瓶颈层
减少通道数以降低计算负担,或融合跨通道信息。
池化
池化(Pooling)是卷积神经网络中的一种降采样(down-sampling,降低数据分辨率)操作。
直觉理解:池化就像把一张大照片缩小成缩略图。缩略图虽然丢失了一些细节,但主要特征(比如”这里有一只猫”)依然能看出来。最大池化相当于”只保留最显眼的特征”,平均池化相当于”取区域的平均印象”。缩小后的图片占用更少空间,处理速度也更快。
目的:引入平移不变性(translation invariance,小位移不影响分类)。进一步降采样,减小特征图尺寸。减少参数,防止过拟合(overfitting,模型过度记忆训练数据)。
可分为最大池化(max pooling,取感受野内最大值)和平均池化(average pooling,取平均值)。
- 池化无参数,是固定函数。
- 通常使用 2×2 窗口,步幅为 2。
- 每个通道独立池化。

最大池化
多层卷积
CNN 通常由多个“卷积 + 激活 + 池化”层堆叠而成。
结构流程:
Input Image→ Conv Layer (卷积层:使用多个滤波器对输入进行卷积操作,提取特征)→ Activation (激活函数:通常使用 ReLU 激活函数对卷积结果进行非线性变换)→ Pooling (池化层:通过最大池化或平均池化进行降采样,减少数据维度)→ Conv Layer (重复结构:多个卷积层、激活函数和池化层交替堆叠)→ Activation→ Pooling→ ...→ Fully Connected Layers(全连接层,fully connected layer:在网络末端使用全连接层整合特征)→ Output- 每一层提取更抽象的特征(边缘 → 纹理 → 部件 → 物体)
- 参数共享和稀疏连接大幅减少参数数量
- 层次化结构使模型能学习复杂模式
优势:
- 参数少,易于训练
- 具备平移等变性和局部不变性
- 可处理任意大小输入(理论上)
通过多层卷积、激活和池化的组合,CNN构建了一个层次化的特征提取系统。这种设计不仅大幅减少了参数数量,还使网络能够逐步从低级特征提取到高级语义特征。
可视化训练好的CNN
理解CNN“学到了什么”是一个重要问题。我们可以通过可视化技术来探索不同层的特征表示。
滤波器
一种直观方法:在验证集中寻找使某个神经元激活值最大的图像块。
- 第1层:通常响应边缘、角点、颜色斑点(类似Gabor滤波器)。对应于哺乳动物视觉皮层中活跃神经元检测到的特征
- 第2层:响应纹理、简单几何形状。
- 第3层:开始出现物体部件(如车轮、眼睛、鸟喙)。
- 第4层:复杂部件组合或局部物体特征
- 第5层(高层):响应完整物体(如人脸、狗、汽车)。

训练好的滤波器
更强大的方法是直接优化输入图像,使其最大化某个神经元的激活。
- 优化目标:最大化某个隐藏单元或输出单元的预激活值。
- 为什么用预激活?避免softmax归一化带来的跨类干扰。 - 与对抗训练有关(后续章节)
例如,最大化“狗”类输出的预激活值,可以生成一个“最像狗”的图像。

最大化类概率生成图像
显著性图
显著性图是一种可视化技术,用于识别输入图像中对网络最终分类决策影响最大的区域:
- 通过计算损失函数相对于输入像素的梯度来判断每个像素的重要性。
- 梯度绝对值大的像素,说明微小的改变会对分类结果产生大影响,因此是“显著”的。
梯度类激活图(Grad-CAM):
- 选择目标类别 :比如我们想看网络为什么认为这张图是”狗”。
- 前向传播:计算网络输出,得到目标类别 狗的预激活值 。
- 反向传播梯度:计算 相对于最后一个卷积层每个神经元预激活值 的梯度。
- 计算权重 :对每个通道 ,计算其梯度的全局平均值。 其中:
- 是通道 的神经元总数。
- 可以理解为:通道 对目标类别 的”重要性”。
- 生成热力图:将最后一个卷积层的特征图 按 加权求和。 就是显著性热力图,尺寸与最后一个卷积层的输出相同(如 14×14)。
- 上采样并叠加:将 上采样(resize)到原始图像大小,并叠加在原图上,用颜色深浅表示显著性。

显著性图
对抗性攻击
对抗性攻击揭示了深度神经网络的一个惊人弱点:精心设计的、人眼无法察觉的微小扰动,可以导致网络做出完全错误的分类。
快速梯度符号法是一种简单而有效的生成对抗样本的方法:
原理:
- 计算梯度:计算损失函数 相对于输入图像 的梯度 (梯度的计算依赖反向传播算法)。
- :原始图像
- :真实标签
- :如负对数似然
- 生成扰动:扰动 的方向与梯度方向相同,目的是最大化损失。
- :一个很小的标量(如 0.01),控制扰动幅度
- :取梯度的符号(+1 或 -1)
- 构造对抗样本:
要足够小,使得 和 的差异对人眼来说是”不可察觉”的。
为什么有效?
梯度方向是损失函数增长最快的方向,即使网络有很强的泛化能力,其决策边界在高维空间中可能非常复杂和“脆弱”。微小的、方向正确的扰动就能把输入样本推到决策边界的另一侧。
这种脆弱性并非源于过拟合。一个网络生成的对抗样本,常常也能欺骗其他不同结构的网络。

上图为熊猫识别为长臂猿,下图为停车识别为限速
合成图像
DeepDream 技术 :DeepDream 是一种生成艺术化图像的技术,通过放大网络在特定层检测到的模式来生成超现实的、梦境般的图像。
工作原理:
- 选择目标层:选择网络中的一些隐藏层(通常是中间层)。
- 前向传播:将输入图像送入网络,计算该层所有神经元的激活值 。
- 设置反向梯度:在反向传播时,将该层的误差信号 设置为该层的激活值本身。
- 反向传播梯度:将梯度反向传播回输入像素空间,得到 。
- 更新图像:将原始图像 沿着梯度方向移动一小步。
- 重复:重复步骤 2-5 多次,效果会越来越强。
整个过程可以看作在最大化一个函数:
即最大化所选层所有神经元激活值的平方和。

DeepDream 示例
目标检测
目标检测任务不仅要分类图像中的物体,还要定位它们(通常用边界框)。
边界框
- 表示方法:使用一个矩形框来定位物体,通常由四个参数定义:中心坐标
(bx, by)和宽高(bW, bH)。这些值通常归一化到 [0, 1] 区间。 - 网络输出:在标准分类网络的基础上,增加 4 个输出节点,用于回归边界框的四个坐标。
- 损失函数:
- 分类损失:通常使用交叉熵。
- 定位损失:使用平方和误差来衡量预测框与真
交并比(IoU)
IoU 是评估目标检测模型定位精度的核心指标。
- 定义:预测边界框与真实边界框的交集面积除以并集面积。
- 取值范围:[0, 1]。值越大,表示两个框重叠程度越高,定位越准确。
- 判断标准:通常认为 IoU ≥ 0.5 的预测为“正确检测”。

左边绿色比右边绿色
滑动窗口
朴素的滑动窗口方法效率极低,因为对每个窗口位置都要独立进行一次完整的网络前向传播,而相邻窗口的输入高度重叠,导致卷积层的计算大量重复。
全卷积思想: 将整个大图像一次性输入一个全卷积网络(FCN)。
- 原理:卷积操作本质上是滑动窗口的共享权重版本。当输入图像变大时,卷积层会自然地在所有可能的位置上应用滤波器,输出一个特征图,其中每个位置对应原图中一个感受野的响应。
- 结果:通过一次前向传播,即可得到所有窗口位置的分类结果,效率大幅提升。

上下对比,多出额外计算部分仅仅为蓝色部分
图像分割
图像分割是比目标检测更精细的任务:为图像中的每个像素分配一个类别标签。
卷积分割
朴素方法
- 以每个像素为中心,取一个局部窗口作为输入。
- 送入CNN分类该像素。
- 为所有像素重复此操作。
大量重复计算,效率极低。
改进方法:全卷积网络(FCN)
- 将传统CNN的全连接层替换为卷积层。
- 整个网络由卷积、池化、激活组成。
- 输入任意大小图像 → 输出相同空间大小的分割图。
一次前向传播即可得到所有像素的预测,效率高。
上采样
池化操作会降低特征图分辨率,丢失空间信息。
使用上采样(up-sampling)或转置卷积将低分辨率特征图恢复到原始图像大小。

左图对应平均池化,右图对应最大池化(还可以记录最大值位置并复原)
转置卷积
可以将小特征图“放大”为大特征图,可以看作卷积的“逆向”过程。

转置卷积(重合部分可求和或取均值)
全卷积网络FCN
- FCN的网络架构没有使用池化,即FCN将全连接层替换为1×1卷积,上下采样全由卷积完成。
- 优点:
- 可处理任意大小输入
- 输出为相同大小的分割图
- 参数共享,高效
1×1卷积的作用:在不改变空间尺寸的情况下,改变通道数(常用于将通道数降为类别数C)。
U-Net架构
U-Net是语义分割的经典架构。
- 编码器(下采样路径):一系列卷积+池化,提取高层语义特征,但分辨率降低。
- 解码器(上采样路径):一系列上采样+卷积,逐步恢复空间分辨率。
- 跳跃连接:将编码器某一层的特征图直接“跳过”并拼接到解码器对应层的输入。
将低层的高分辨率细节信息“传递”给高层,弥补池化造成的空间信息丢失。

U-Net具有下采样层和上采样层的对称排列结构,每个下采样层的输出被拼接到相应的上采样层
风格迁移
神经风格迁移是一种艺术化图像生成技术,将一张图片的“内容”与另一张图片的“风格”结合起来。
基本思想:
- 内容图像(C):提供场景和物体(如一张照片)。
- 风格图像(S):提供艺术风格(如梵高的画作)。
- 生成图像(G):合成图像,内容像C,风格像S。
总损失函数(一项与原始内容相似,一项与原始风格相似):
将生成图像 视为可学习参数,从内容图像 或随机噪声初始化,通过梯度下降法最小化总损失 ,使生成的图像 在高层语义上像 ,而在纹理、笔触、颜色分布上像 。
选择一个中间卷积层(通常选择能捕捉物体轮廓的层),计算 和 在该层的特征激活的平方误差(内容损失):
其中 是输入图像 在位置 、通道 的预激活值。
- 内容图像C在第10层的激活值:[0.8, 0.2, 0.9, …]
- 生成图像G在第10层的激活值:[0.7, 0.3, 0.8, …]
- 内容损失 = (0.8-0.7)² + (0.2-0.3)² + (0.9-0.8)² + …
为了确保生成图像 在风格上与风格图像 相似,需要保证不同特征通道之间的相关性,使用风格矩阵:
对于选定的卷积层,计算其风格矩阵 :
衡量通道 和 的特征在空间上的共现程度(相关性)。
风格损失是 和 的风格矩阵之间的平方误差:
通常使用多个层的风格损失加权和,以捕捉不同尺度的风格特征:
习题1
一张 的彩色图,用 卷积核(步幅=1,不填充)卷一下,输出多大?步幅改成 2 呢?
记住公式:输出 = (输入 - 卷积核) / 步幅 + 1
步幅=1:,输出 。每卷一次图像就”缩”一圈。
步幅=2:,向下取整 。步幅大了,缩得更狠。
如果换成 卷积核、步幅=1、填充=1(周围补一圈零),输出多大?填充有啥用?
,和输入一样大。填充就是”不让你缩小”——深层网络堆很多层的时候,要是每层都缩,很快就没了。填充让特征图保持尺寸,方便堆叠。
习题2
对抗攻击(FGSM)往图像上加了一丁点噪声,人眼看不出来,CNN 却被骗了。这说明啥?
说明 CNN 和人眼”看”的方式完全不同。人眼看的是语义(形状、纹理、物体部件),CNN 看的是像素级的统计特征(梯度、频率)。那些人眼忽略的微小扰动,恰好能让 CNN 的特征表示翻车——沿着梯度方向挪一点点,就跨过了决策边界。
说白了,CNN 学到的”特征”和人类理解的”语义”并不是一回事。
第10章小结
一句话版本:CNN通过卷积核扫描图像(稀疏连接+参数共享)来提取从边缘到物体的层次化特征,配合池化降维,再用全连接层分类;它还能被可视化、被欺骗(对抗攻击),也能做检测、分割和风格迁移。
知识地图:
- 为什么需要CNN:图像有空间结构,全连接网络参数爆炸
- 核心操作:卷积(特征提取)-> 激活(ReLU)-> 池化(降维)-> 多层堆叠
- 关键概念:感受野、卷积核/滤波器(filter)、填充(padding)、步幅(stride)、参数共享、平移等变性
- CNN能做什么:分类、目标检测(边界框+IoU)、图像分割(FCN+U-Net)、风格迁移
- 理解CNN:滤波器可视化、显著性图、Grad-CAM
- CNN的弱点:对抗性攻击(微小扰动导致误分类)
想了解CNN中的梯度是怎么算的?请回顾第4篇的反向传播。想看CNN在现代架构中如何被Transformer取代?请继续阅读第6篇。
Chapter 11 结构化分布
概率图模型
概率图模型(Probabilistic Graphical Model, PGM)的核心思想很直观:用连线图表示变量间的因果和依赖关系。就像工程中的电路图用方框和连线表示元件之间的连接一样,概率图模型用节点(方框)表示随机变量,用箭头(连线)表示”谁影响谁”。看一眼图,你就能知道哪些变量之间有依赖,哪些是独立的——不需要任何数学推导。
所有概率操作本质上都建立在两个基本规则之上:
- 加法规则: (求边缘分布)
- 乘法规则: (求联合分布)
尽管我们可以仅用代数来处理复杂的概率模型,但使用图解表示具有巨大优势:
- 可视化结构:直观地展示概率模型的依赖关系,有助于设计和理解新模型。
- 揭示性质:通过观察图的结构,可以推断出变量间的条件独立性。
- 简化计算:复杂的推理和学习算法(如消息传递)可以用图上的操作来表示,使底层数学更清晰。
注意:在这之后神经网络图用蓝色表示,而概率图模型用红色表示,以避免混淆。
有向图
有向图模型(也称为贝叶斯网络或贝叶斯网,Bayesian network)是概率图模型的一种,其中边(链接)带有箭头,表示变量间的依赖或因果关系。其基本元素有:
- 节点(Nodes/Vertices):代表随机变量(如 , , )。
- 有向边(Directed Edges/Links):箭头从一个变量指向另一个变量,表示前者是后者的“原因”或“父节点”。
- 父节点与子节点:如果存在从 到 的箭头,则 是 的父节点, 是 的子节点。
需要注意的是,虽然贝叶斯网络中的边带有方向,但这并不总是意味着因果关系。边的方向更多地表示了变量间的依赖关系和因子分解的顺序。
分解
考虑三个变量 , , 的联合分布 。
根据乘法规则,可以进行分解:
图形表示
我们可以将上面的分解式画成一个有向图:
- 为每个变量 , , 创建一个节点。
- 为每个条件概率因子添加有向边:
- :从 和 分别画箭头指向 。
- :从 画箭头指向 。
- :没有条件,所以没有指向 的边。

分解图
完全连接图:对于 K 个变量,最一般的分解是: 对应的图是一个完全连接图:每个节点都从所有编号更小的节点接收边。
- 这种分解适用于任何联合分布。
- 但这样的图没有提供任何“有趣”的信息,因为它假设所有变量都可能相互依赖。
真正有价值的信息来自于缺失的边。 因为一条边的存在表示一个直接的依赖关系(在给定父节点的情况下)。而因此一条边的缺失表示一个条件独立性。
对于一个包含 K 个节点的有向图,其联合概率分布的通用分解规则是:
其中:
- 表示节点 的父节点集合(parents of k)。
- 这个乘积对图中所有节点进行。
- 只要每个条件概率 是归一化的(即对 积分为1),那么整个乘积也自动是归一化的。
离散变量
当图模型中的节点代表离散变量时,每个变量有 个可能的状态(例如, 个类别)。
一个 状态离散变量 的分布由参数向量 定义,满足 。其概率质量函数为:
其中 是 的 one-hot 编码,即只有一个 ,其余为 0。由于归一化约束,只需指定 个参数。
考虑两个离散变量 和 ,每个都有 个状态。
- 完全联合分布: 由 个值 定义。由于 ,独立参数数量为 。
- 链式结构:使用乘法规则,。
- 需要 个参数。
- 需要 个参数(因为对 的每个 个取值, 是一个 状态分布,需 个参数)。
- 总参数数:,与完全联合分布相同。
一个完全连接的有向图(如从 指向 )可以表示任何联合分布,因为它没有施加任何限制。
参数数量与图结构的关系
- 完全连接图(所有可能的边都存在):能表示最一般的联合分布,但参数数量为 ,随变量数 指数增长。
- 无连接图(独立变量):联合分布为 。每个 需 个参数,总参数数为 ,随 线性增长。
- 部分连接图:在完全一般和完全独立之间取得平衡。例如,链式结构:
- : 个参数。
- 每个 : 个参数。
- 总参数数:,随链长 线性增长(而非指数增长),但能表示比独立模型更复杂的依赖关系。

部分链接图(链式结构)减少参数
进一步减少参数的方法是参数共享。
在链式结构中,我们可以假设所有条件分布 ()都由同一组 个参数控制。
- 效果:总参数数变为 ,与 无关。
- 限制:这意味着所有转移(从 到 )都遵循相同的“规则”。
- 应用:这在隐马尔可夫模型(HMM)和循环神经网络(RNN)中很常见。
与上图类似,但是最上面的参数可以给多个节点共享的图模型。
高斯变量
条件分布:
考虑一个包含 个变量的任意有向无环图,其中节点 代表一个具有高斯分布的单个连续随机变量 。该分布的均值取为父节点 状态的线性组合:
其中:
- 和 是控制均值的参数,
- 是条件分布 的方差。
联合分布:
联合分布的对数是所有节点条件分布对数的乘积:
代入上式后可得:
其中 ,‘const’ 表示与 无关的项。
该表达式是 分量的二次函数,因此联合分布 是一个多变量高斯分布。
每个变量的均值满足以下递推关系:
假设节点编号满足每个节点的编号高于其父节点,可以从编号最小的节点开始,递归地计算 的各个分量。
联合分布的协方差矩阵元素满足递推关系:
其中 是指示函数(当 时为 1,否则为 0)。协方差也可以从编号最小的节点开始递归计算。
考虑一个协方差矩阵部分受约束的联合高斯分布:
均值:
协方差矩阵:
同样,可以将线性-高斯图模型扩展到节点代表多元高斯变量的情况。节点 的条件分布为:
其中 是一个矩阵(若 和 维度不同则为非方阵)。同样容易验证,所有变量的联合分布仍是高斯分布。
模型表示
在实际应用中,我们将图模型用于机器学习问题时,通常会将一些随机变量设置为特定的观测值。例如,在线性回归模型中,随机变量 会被设置为训练集中的具体值。在图模型中,我们通过将相应节点涂上阴影来表示这些观测变量。
此外,模型参数(如权重 )通常被视为确定性参数,用浮动变量表示。未观测的随机变量(如潜在变量或隐藏变量)则用开放的红圈表示。
最终,我们有三类变量:
- 未观测的随机变量(潜在变量),用开放红圈表示。
- 观测的随机变量,用蓝色阴影红圈表示。
- 非随机参数,用浮动变量表示。
这种表示方法有助于清晰地描述模型的结构和变量之间的关系,为后续的推理和学习提供基础。

示例图
- 红色圆圈: 表示模型的参数(权重),即非随机变量。在图中用“浮动变量”表示,说明它是可学习的参数,而不是随机变量。
- 蓝色矩形框 :表示有个相同的节点
- 红色圆圈 : 被涂成蓝色阴影,表示这是一个观测变量(即训练数据中的真实标签)。在概率图模型中,观测变量用阴影节点表示。
- :浮动变量,确定性参数
条件独立性
考虑三个随机变量 、 和 。如果在给定 的条件下, 的条件分布不依赖于 的取值,即:
那么我们说 在给定 的条件下与 是条件独立的(conditional independence)。
这也可以通过联合分布来表达。利用概率的乘法规则:
将条件独立性代入上式,得到:
这说明,在给定 的条件下, 和 的联合分布可以分解为其各自条件分布的乘积,即 和 在给定 时是统计独立的。
为了简洁表示,我们使用如下符号:
表示 在给定 的条件下与 条件独立。
注意:条件独立性必须对 的所有可能取值都成立,而不仅仅是某些特定值。
三个示例
直接通过概率运算验证条件独立性非常耗时。图模型的优势在于,我们可以直接从图结构判断哪些变量之间存在条件独立性。这一方法称为 d-分离(d-separation,其中 “d” 代表 “directed” 有向)。
通过三个简单的三节点图例来理解:
- 图结构:a → c ← b 对应的联合分布为:
- 当 没有变量被观测 时,对 边缘化: 该式一般不能分解为 ,因此 和 不独立,记为 。
- 当 观测到 时(即条件在 上),联合分布变为: 此时 和 在给定 的条件下独立,即 。
- 节点 在路径 中是tail-to-tail(箭头尾部相连)。当 未被观测时,路径是“通”的(信息可以在这条路径上传递,变量之间存在依赖关系), 和 依赖;当 被观测(条件化)时,路径被“阻塞”, 和 变为条件独立。
未观测c时:路径是”通的”,a和b通过共同的”结果”c产生关联
- 举例:a=下雨,b=洒水车,c=地面湿: 虽然下雨和洒水车无关,但它们都可能导致地面湿,所以通过”地面湿”这个共同结果,a和b变得相关
观测c后:路径被”阻塞”,知道了c的状态,a和b就独立了
- 举例:如果已经知道地面是湿的,那么下雨和洒水车就独立了
- 图结构:a → c → b 对应的联合分布:
- 未观测任何变量时, 和 不独立(存在从 到 的路径)。
- 观测到 时,利用贝叶斯定理可得: 因此 。
- 节点 在路径 中是 head-to-tail(一个箭头头,一个箭头尾)。未观测时路径“通”,观测后路径被“阻塞”。
- 图结构:a → c ← b 对应的联合分布:
- 未观测任何变量时,对 边缘化: 所以 和 独立,即 。
- 观测到 时: 这个表达式一般不能分解为 ,因此 。
- 节点 在路径 中是 head-to-head(箭头头部相连),也称为 碰撞节点 。未观测时,路径被“阻塞”, 和 独立;一旦观测 ,路径被“打通”, 和 变得依赖。
不仅是 本身,如果观测到 的任意一个后代节点,路径也会被“打通”。
以医学诊断为例,考虑变量:症状(Symptom)、疾病(Disease)和检测结果(Test)。
- 对于结构S→D←T:在不知道疾病的情况下,症状和检测结果是相关的;但一旦知道疾病诊断结果,症状和检测结果就变得独立。
- 对于结构S→D→T:在不知道疾病时,症状和检测结果相关;知道疾病后两者独立。
- 对于结构S→D←T:在不知道任何信息时,症状和检测结果独立;但知道疾病后两者变得相关。
d-分离
通过检查路径是否”通”来判断变量是否条件独立。
给定一个有向无环图 (DAG),判断集合 是否在给定集合 的条件下与集合 d-分离:
- 考虑从 中任意节点到 中任意节点的所有路径。
- 一条路径被“阻塞”当且仅当路径中存在一个节点满足以下任一条件:
- 该节点是 tail-to-tail 或 head-to-tail,且该节点在集合 中(即被观测)。
- 该节点是 head-to-head,且该节点及其所有后代节点都不在集合 中。
- 如果所有路径都被阻塞,则称 被 d-分离于 ,即 成立。

d-分离
- (a) 从a 到 b 的路径既没有被 f 阻塞(尾对尾且未观测),也没有被 e 阻塞(头对头但只有一个已观测后代节点),所以 无法得出。
- (b) 从a 到 b 的路径被被 f 阻塞(尾对尾且被观测)所以 ,同时也被 e 阻塞(头对头且和后代没有被观测)
相消解释
head-to-head 结构导致了一种有趣的现象,称为“解释消除”。
例子:考虑一个汽车燃油系统,包含三个二值变量:
- :电池状态(1=有电,0=没电)
- :油箱状态(1=满,0=空)
- :油表读数(1=满,0=空)

油箱例子
假设 和 独立, 依赖于 和 (油表可能因电池没电或油箱空而显示为空)。
- 先验:
- 观测到 (油表为空)后,计算后验:
油箱为空的概率上升了(从 0.1 到 0.257)。
- 再观测到 (电池没电)后:
油箱为空的概率下降了。
解释:观察到电池没电()为油表为空()提供了一个“解释”,从而“消除”了油箱空( )作为解释的必要性。这说明,原本独立的 和 ,在观测到它们的共同“结果” 后,变得依赖了。这就是 head-to-head 结构的典型行为。
朴素贝叶斯
朴素贝叶斯是一种基于条件独立假设的分类模型。
假设输入向量 ,类别为 。其核心假设是:在给定类别 的条件下,各个特征 相互独立,即:
类别节点 指向所有特征节点 。由于 是 tail-to-tail 节点,一旦条件在 上,所有 和 之间的路径都被阻塞,因此它们是条件独立的。
分类时,使用贝叶斯定理:
其中 。
注意:虽然条件独立假设很强(现实中特征往往相关),但朴素贝叶斯在文本分类等任务中表现良好,因为决策边界对类条件密度的细节不敏感。
生成式模型
生成模型试图学习数据的生成过程。一个图像生成的例子:
- 类别、位置、尺度从先验分布独立采样。
- 图像从依赖于类别、位置、尺度的条件分布中生成。
- 未观测图像时,类别、位置、尺度相互独立(路径 head-to-head 且图像未观测,路径被阻塞)。
- 观测到图像后,这些变量变得依赖(路径被打通)。例如,知道物体类别有助于推断其位置。
生成模型可以生成新样本,而判别模型(如直接训练分类器)通常不能。
马尔可夫毯
对于图中的一个节点 ,其马尔可夫毯是使得 与其图中其余所有节点条件独立的最小节点集合。
具体来说, 的马尔可夫毯包含:
- 父节点
- 子节点
- 子节点的其他父节点
在 head-to-head 结构中,观测到子节点会打通其父节点之间的路径(解释消除)。因此,为了“隔离” ,必须同时观测其子节点和子节点的其他父节点。
马尔可夫毯给出了计算 时真正依赖的变量集合,极大简化了推理。

马尔可夫毯
图作为过滤器
图模型可以从两个等价的视角理解:
- 分解视角:图定义了联合分布必须分解为特定形式的条件概率乘积。
- 独立性视角:图通过 d-分离定义了一组必须满足的条件独立性。
d-分离定理 保证了这两个视角是等价的:一个分布能通过“分解过滤器”当且仅当它能通过“独立性过滤器”。
我们可以把图模型(此处为有向图模型)看作一种过滤器,其中的概率分布p(x) 只有在满足有向分解特性时才能通过过滤器。将通过过滤器的所有可能概率分布p(x)的集合记为DF 。我们也可以根据是否满足图的d分离特性所隐含的所有条件独立性,使用图(作为第二种过滤器)来过滤分布。d分离定理表明,同样的一组分布DF将被允许通过第二种过滤器
序列模型
在许多机器学习应用中,数据是以序列形式出现的。例如:
- 文本是由词语组成的序列
- 蛋白质是由氨基酸组成的序列
- 音频信号是时间上的采样序列
- 每日降雨量是按天排列的测量值
尽管有些序列并非严格的时间序列,但通常会借用“时间”、“过去”、“未来”等术语来描述顺序关系。
我们用 表示一个长度为 的序列,其中每个 是一个向量(可以是标量,也可以是多维向量)。
有时我们会从同一分布中独立抽取多个这样的序列。此时,所有序列的联合分布可以分解为各个序列分布的乘积。本节我们主要关注建模单个序列。
一般自回归模型
自回归模型(autoregressive model)的核心思想是:用变量自身的过去值来预测当前值。根据概率的乘法规则,任意 个变量的联合分布可以写成一系列条件分布的乘积。如果我们按照序列的自然顺序排列变量,则有:

一般自回归模型,每个节点都从序列中前一个节点接受一个连接
这个表示形式具有完全的通用性,因此在建模上没有带来任何优势,因为它没有引入任何假设或简化。
为了简化模型,我们可以引入条件独立性假设,通过移除图中的边,或者等价地,从公式 (11.42) 右边的条件变量中删除某些变量。
最极端的简化是移除所有条件变量,得到:
这表示所有变量相互独立,完全忽略了顺序信息。
一个更合理的假设是:每个变量只依赖于它前面的一个变量(一阶马尔可夫模型)。此时联合分布为:
![]()
一阶马尔可夫链
利用 d-分离准则可以验证:
这意味着预测下一个观测值时,只需知道前一个观测值,而与更早的历史无关。
我们可以扩展模型,让每个变量依赖于前两个变量,得到二阶马尔可夫模型:

二阶马尔可夫
一般地,M 阶马尔可夫链的条件分布依赖于前 M 个变量。
参数数量问题
假设观测变量是离散的,有 个状态。
- 一阶马尔可夫模型:条件分布 有 个参数。
- M 阶马尔可夫模型:条件分布 有 个参数。
参数数量随 指数增长,因此高阶模型在 较大时变得不实用。
- 一阶模型需要 10×(10-1) = 90个参数
- 二阶模型需要 10×10×(10-1) = 900个参数
- 三阶模型需要 10³×(10-1) = 9000个参数
隐变量模型
为了构建不受马尔可夫阶数限制、但参数量有限的序列模型,可以引入隐变量(latent variable,无法直接观测但影响观测结果的变量)。
对于每个观测 ,引入一个对应的隐变量 (类型或维度可与 不同)。假设这些隐变量形成一个马尔可夫链,就得到了状态空间模型。

隐变量模型
- 隐变量 构成一个马尔可夫链,表示给定当前状态 ,未来状态与过去状态无关。
- 每个观测 只依赖于其对应的隐变量 ,不直接依赖其他观测或隐变量。
关键的条件独立性是:
联合分布为:
利用 d-分离可以发现,任何两个观测变量 和 都通过隐变量路径相连,且该路径不会被阻断。因此,预测分布:
不具有任何条件独立性,即未来的预测依赖于所有过去的观测。
换句话说,观测变量本身不满足任何阶的马尔可夫性质。
习题3
一个贝叶斯网络:天气 → 路面状态 → 是否打滑 。如果你已经知道路面是湿的(观测到 ),那天气 和打滑 还有关系吗?
没关系了——它们条件独立。这是 head-to-tail 结构,中间节点 被观测后,路径就”断”了。
打个比方:你已经知道路面是湿的,那”下没下雨”对”会不会打滑”就没有额外信息了——路面湿不湿已经说明了一切。
如果把图改成 (两个原因指向同一个结果),观测到 之后会怎样?
这是 head-to-head(碰撞节点)结构,很有意思:不观测 的时候 和 是独立的,但一旦观测到 ,它们反而变得不独立了。
这就是”解释消除”:已知路面打滑了,如果你发现路面湿(),那你就会觉得下雨()的可能性变低了——因为”路面湿”已经够解释打滑了,不需要再找别的原因。
第11章小结
一句话版本:概率图模型用节点和箭头画出变量间的依赖关系图,通过d-分离规则可以从图上直接判断哪些变量条件独立,而不需要复杂的概率计算。
知识地图:
- 核心思想:用图形表示概率分布的结构(分解+独立性两个等价视角)
- 有向图模型(贝叶斯网络):联合分布 = 各节点条件概率的乘积;边的缺失 = 条件独立性
- 关键概念:父节点/子节点、条件独立性、d-分离(tail-to-tail / head-to-tail / head-to-head)
- head-to-head(碰撞节点):未观测时阻塞路径,观测后打通路径(解释消除/相消解释)
- 应用模型:朴素贝叶斯(分类)、生成式模型、序列模型
- 序列建模:自回归 -> 马尔可夫模型(参数指数增长) -> 隐变量模型(有限参数+长期依赖)
概率图模型中的”分解”思想和第3篇中神经网络的层级结构有异曲同工之妙——都是通过结构化设计来减少参数、提高效率。而序列模型中的隐变量思想,在第6篇的Transformer中会以”注意力机制”的形式重新出现。