深度学习笔记-5:卷积网络与概率图模型 - MuxiaoWF跳到主要内容

深度学习笔记-5:卷积网络与概率图模型

深度学习笔记-5,涵盖卷积神经网络(卷积、池化、目标检测、图像分割、风格迁移)与概率图模型(贝叶斯网络、条件独立性、d-分离)。对应《深度学习:基础与概念》第10-11章。

周一 9月 01 2025
12469 字 · 46 分钟

系列第 5/8 篇 ← 上一篇 | 下一篇 | 术语表

建议先看第1-4篇,尤其是第3篇的神经网络基础和第4篇的反向传播。本篇讲 CNN 怎么处理图像,以及概率图模型怎么表示变量间的关系。

Chapter 10 卷积网络

计算机视觉

传统机器学习模型通常假设输入数据是“无结构”的,即输入向量 x=(x1,...,xD)\mathbf{x} = (x_1, ..., x_D) 中的各个元素彼此独立。但现实中的许多数据具有 结构化特征,例如:

  • 自然语言中,词语按顺序排列,前后词之间有依赖关系。
  • 图像中,像素以二维网格排列,相邻像素高度相关。

如果对图像像素进行随机重排,它就不再像一张自然图像;同样,独立随机生成每个像素也几乎不可能生成一张“像样”的图像。这说明图像具有很强的 局部相关性空间结构先验知识

将这种结构先验编码进模型,而不是让模型从零学习。(回顾:第3篇中的全连接网络没有利用这种结构。)

卷积神经网络(CNN)就是一种架构层面的解决方案,通过稀疏连接参数共享来显式建模图像的空间结构。

图像数据

  • 图像由像素(pixel)组成的矩形阵列。
  • 每个像素有:
  • 灰度图像:单通道(intensity)
  • 彩色图像:三通道(RGB,红、绿、蓝)
  • 像素值为非负数,通常用 8 位整数表示(范围 0–255)。
  • 视频可看作三维结构(时间 + 高度 + 宽度),医学图像(如 MRI)是三维体素。

挑战:直接使用全连接网络处理图像会导致参数爆炸。
例如:一张 1000×10001000 \times 1000 的彩色图像有 300 万维(100010003=3000000)输入。
若第一层有 1000 个神经元,则仅第一层就有 3×1093 \times 10^9 个权重,不可训练。


卷积滤波器

全连接网络处理图像参数太多,根本训不动。CNN 的思路很直接:既然图像有空间结构,那就把这个结构”写死”进网络架构里——用稀疏连接(每个神经元只看一小块区域)和参数共享(同一个滤波器扫遍整张图)来大幅减少参数。

CNN 利用了图像的四个结构特性:

  1. 层次性:从边缘 → 纹理 → 部件 → 物体,一层一层抽象上去
  2. 局部性:每个神经元只看局部区域(不需要看全图)
  3. 平移等变性:猫在左上角和右下角,特征应该被同样检测到
  4. 不变性:最终分类不应该因为猫挪了个位置就变

特征检测器

考虑灰度图像(单通道)。

  • 每个隐藏层神经元只接收图像的一个小区域(称为感受野,receptive field)作为输入。
  • 例如,一个 3×33 \times 3 的感受野对应 9 个输入。
  • 神经元的输出可以表示为: z=ReLU(wTx+w0)z = \text{ReLU}(w^T x + w_0) 其中:
    • xx:感受野内的像素向量。
    • ww:权重向量,可视为一个 3×33 \times 3 的矩阵(称为卷积核或滤波器)。
    • w0w_0:偏置项。
    • ReLU\text{ReLU}:激活函数,定义为 ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)

该神经元在检测与 w 模式相似的图像块。当输入 x 与 w 越相似(点积越大),输出响应越强。

感受野和卷积核

a为感受野,接受一个3*3的像素输入,构成隐藏单元的感受野 b为与隐藏单元相关的权重值,称为卷积核

平移等变性

同一特征(如眼睛)可能出现在图像任意位置。我们希望同一个滤波器能在所有位置检测该特征。

解决方案:在整个图像上共享权重,即使用同一个卷积核在图像上滑动。这种操作称为卷积。实际上,深度学习中的”卷积”通常是互相关(cross-correlation,将滤波器在输入上逐位置计算点积)。

直觉理解:卷积操作就像拿着一个放大镜在图片上逐行扫描。放大镜(卷积核)每次只看一个小区域(感受野),然后算出一个数值。当放大镜移到图片边缘时,它”看到”了边缘模式,输出就变大;移到平坦区域时,输出就很小。同一个放大镜从左上角扫到右下角,就能在整张图片上找到所有相似的模式——这就是参数共享的威力。

二维卷积公式(忽略激活函数) C(j,k)=lmI(j+l,k+m)K(l,m)C(j, k) = \sum_l \sum_m I(j + l, k + m) \cdot K(l, m) 其中:

  • I(j,k)I(j, k):输入图像在位置 (j,k)(j, k) 的像素值。
  • K(l,m)K(l, m):卷积核在相对位置 (l,m)(l, m) 的权重。
  • C(j,k)C(j, k):输出特征图(feature map,卷积操作的输出)在位置 (j,k)(j, k) 的值。

一维和二维卷积

左图为一维卷积(具有相同颜色的连接具有相同的权值),右图为二维卷积

填充

卷积后特征图尺寸会变小。 例如:J×K 图像与 M×M 卷积核卷积后,输出为(J−M+1)×(K−M+1)。

在图像边缘添加“填充”像素。

  • 有效卷积:无填充(P=0)
  • 等大卷积:填充使得输出尺寸与输入相同。当 M 为奇数时,P = (M-1)/2 填充值通常设为 0(但建议先对图像做均值归一化,使 0 接近平均像素值)。

填充

填充

步幅卷积

使用步幅 S>1S > 1,即滤波器每次移动 SS 个像素。

控制输出特征图尺寸为:

J+2PMS+1×K+2PMS+1\left\lfloor \frac{J + 2P - M}{S} + 1 \right\rfloor \times \left\lfloor \frac{K + 2P - M}{S} + 1 \right\rfloor
  • J×K:输入图像的尺寸(高度×宽度)
  • P:填充(padding)大小
  • M:卷积核尺寸(假设是方形的M×M)
  • S:步幅(stride)
  • \left\lfloor \cdot \right\rfloor:向下取整(floor函数)

例子:

  • 输入:7×7的图像,卷积核:3×3,步幅:2,填充:1
  • 输出尺寸: 7+2×132+1=62+1=4=4\left\lfloor \frac{7 + 2×1 - 3}{2} + 1 \right\rfloor = \left\lfloor \frac{6}{2} + 1 \right\rfloor = \left\lfloor 4 \right\rfloor = 4所以输出是4×4

多通道卷积

输入图像有多个通道(如 RGB 三通道),卷积核也必须是三维的:M×M×CM \times M \times C,其中 CC 是输入通道数。

每个通道使用一个 M×MM \times M 的滤波器,然后将结果相加。

输入图像:红 绿 蓝

卷积核:红权重 绿权重 蓝权重均为3×3 = 3×3×3 的三维卷积核

扩展:多个输出通道(即多个滤波器) 使用 M×M×C×CoutM \times M \times C \times C_{out} 的滤波器张量。 每个输出通道对应一个独立的滤波器。 总参数数:(M2C+1)Cout(M^2 \cdot C + 1) \cdot C_{out}(+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):

  1. 选择目标类别 cc:比如我们想看网络为什么认为这张图是”狗”。
  2. 前向传播:计算网络输出,得到目标类别 cc 狗的预激活值 aca_c
  3. 反向传播梯度:计算 aca_c 相对于最后一个卷积层每个神经元预激活值 aij(k)a_{ij}^{(k)} 的梯度。 acaij(k)\frac{\partial a_c}{\partial a_{ij}^{(k)}}
  4. 计算权重 αk\alpha_k:对每个通道 kk,计算其梯度的全局平均值。 αk=1Mkij[acaij(k)]\alpha_k = \frac{1}{M_k} \sum_i \sum_j \left[ \frac{\partial a_c}{\partial a_{ij}^{(k)}} \right] 其中:
  • MkM_k 是通道 kk 的神经元总数。
  • αk\alpha_k 可以理解为:通道 kk 对目标类别 cc 的”重要性”。
  1. 生成热力图:将最后一个卷积层的特征图 A(k)A^{(k)}αk\alpha_k 加权求和。 L=kαkA(k)L = \sum_k \alpha_k \cdot A^{(k)} LL 就是显著性热力图,尺寸与最后一个卷积层的输出相同(如 14×14)。
  2. 上采样并叠加:将 LL 上采样(resize)到原始图像大小,并叠加在原图上,用颜色深浅表示显著性。

显著性图

显著性图

对抗性攻击

对抗性攻击揭示了深度神经网络的一个惊人弱点:精心设计的、人眼无法察觉的微小扰动,可以导致网络做出完全错误的分类。

快速梯度符号法是一种简单而有效的生成对抗样本的方法:

原理:

  1. 计算梯度:计算损失函数 E(x,t)E(x, t) 相对于输入图像 xx 的梯度 xE(x,t)\nabla_x E(x, t)(梯度的计算依赖反向传播算法)。
  • xx:原始图像
  • tt:真实标签
  • EE:如负对数似然
  1. 生成扰动:扰动 δ\delta 的方向与梯度方向相同,目的是最大化损失δ=εsign(xE(x,t))\delta = \varepsilon \cdot \text{sign}(\nabla_x E(x, t))
  • ε\varepsilon:一个很小的标量(如 0.01),控制扰动幅度
  • sign()\text{sign}():取梯度的符号(+1 或 -1)
  1. 构造对抗样本: x=x+δ=x+εsign(xE(x,t))x' = x + \delta = x + \varepsilon \cdot \text{sign}(\nabla_x E(x, t))

ε\varepsilon 要足够小,使得 xx'xx 的差异对人眼来说是”不可察觉”的。


为什么有效?

梯度方向是损失函数增长最快的方向,即使网络有很强的泛化能力,其决策边界在高维空间中可能非常复杂和“脆弱”。微小的、方向正确的扰动就能把输入样本推到决策边界的另一侧。

这种脆弱性并非源于过拟合。一个网络生成的对抗样本,常常也能欺骗其他不同结构的网络。

两个例子

上图为熊猫识别为长臂猿,下图为停车识别为限速

合成图像

DeepDream 技术 :DeepDream 是一种生成艺术化图像的技术,通过放大网络在特定层检测到的模式来生成超现实的、梦境般的图像。

工作原理:

  1. 选择目标层:选择网络中的一些隐藏层(通常是中间层)。
  2. 前向传播:将输入图像送入网络,计算该层所有神经元的激活值 aijk(I)a_{ijk}(I)
  3. 设置反向梯度:在反向传播时,将该层的误差信号 δ\delta 设置为该层的激活值本身。 δijk=aijk(I)\delta_{ijk} = a_{ijk}(I)
  4. 反向传播梯度:将梯度反向传播回输入像素空间,得到 IF(I)\nabla_I F(I)
  5. 更新图像:将原始图像 II 沿着梯度方向移动一小步。 Inew=I+ηIF(I)I_{new} = I + \eta \cdot \nabla_I F(I)
  6. 重复:重复步骤 2-5 多次,效果会越来越强。

整个过程可以看作在最大化一个函数:

F(I)=i,j,k[aijk(I)]2F(I) = \sum_{i,j,k} [a_{ijk}(I)]^2

即最大化所选层所有神经元激活值的平方和。

DeepDream 示例

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

U-Net具有下采样层和上采样层的对称排列结构,每个下采样层的输出被拼接到相应的上采样层


风格迁移

神经风格迁移是一种艺术化图像生成技术,将一张图片的“内容”与另一张图片的“风格”结合起来。

基本思想:

  • 内容图像(C):提供场景和物体(如一张照片)。
  • 风格图像(S):提供艺术风格(如梵高的画作)。
  • 生成图像(G):合成图像,内容像C,风格像S。

总损失函数(一项与原始内容相似,一项与原始风格相似):

E(G)=Econtent(G,C)+Estyle(G,S)E(G) = E_{content}(G, C) + E_{style}(G, S)

将生成图像 GG 视为可学习参数,从内容图像 CC 或随机噪声初始化,通过梯度下降法最小化总损失 E(G)E(G),使生成的图像 GG 在高层语义上像 CC,而在纹理、笔触、颜色分布上像 SS

选择一个中间卷积层(通常选择能捕捉物体轮廓的层),计算 GGCC 在该层的特征激活的平方误差(内容损失):

Econtent(G,C)=i,j,k[aijk(G)aijk(C)]2E_{content}(G, C) = \sum_{i,j,k} [a_{ijk}(G) - a_{ijk}(C)]^2

其中 aijk(I)a_{ijk}(I) 是输入图像 II 在位置 (i,j)(i,j)、通道 kk 的预激活值。

  • 内容图像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)² + …

为了确保生成图像 GG 在风格上与风格图像 SS 相似,需要保证不同特征通道之间的相关性,使用风格矩阵:

对于选定的卷积层,计算其风格矩阵 FF

Fkk(G)=i,jaijk(G)aijk(G)F_{kk'}(G) = \sum_{i,j} a_{ijk}(G) \cdot a_{ijk'}(G)

FkkF_{kk'} 衡量通道 kkkk' 的特征在空间上的共现程度(相关性)。

风格损失是 GGSS 的风格矩阵之间的平方误差:

Estyle(G,S)=k,k[Fkk(G)Fkk(S)]2E_{style}(G, S) = \sum_{k,k'} [F_{kk'}(G) - F_{kk'}(S)]^2

通常使用多个层的风格损失加权和,以捕捉不同尺度的风格特征:

Estyle(G,S)=lλlEstyle(l)(G,S)E_{style}(G, S) = \sum_l \lambda_l \cdot E_{style}^{(l)}(G, S)
习题1

一张 32×3232 \times 32 的彩色图,用 5×55 \times 5 卷积核(步幅=1,不填充)卷一下,输出多大?步幅改成 2 呢?

记住公式:输出 = (输入 - 卷积核) / 步幅 + 1

步幅=1:(325)/1+1=28(32 - 5)/1 + 1 = 28,输出 28×2828 \times 28。每卷一次图像就”缩”一圈。

步幅=2:(325)/2+1=14.5(32 - 5)/2 + 1 = 14.5,向下取整 14×1414 \times 14。步幅大了,缩得更狠。

如果换成 3×33 \times 3 卷积核、步幅=1、填充=1(周围补一圈零),输出多大?填充有啥用?

(323+2)/1+1=32(32 - 3 + 2)/1 + 1 = 32,和输入一样大。填充就是”不让你缩小”——深层网络堆很多层的时候,要是每层都缩,很快就没了。填充让特征图保持尺寸,方便堆叠。

习题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)的核心思想很直观:用连线图表示变量间的因果和依赖关系。就像工程中的电路图用方框和连线表示元件之间的连接一样,概率图模型用节点(方框)表示随机变量,用箭头(连线)表示”谁影响谁”。看一眼图,你就能知道哪些变量之间有依赖,哪些是独立的——不需要任何数学推导。

所有概率操作本质上都建立在两个基本规则之上:

  • 加法规则p(X)=p(X,Y)dYp(X) = \int p(X, Y) dY (求边缘分布)
  • 乘法规则p(X,Y)=p(YX)p(X)p(X, Y) = p(Y|X)p(X) (求联合分布)

尽管我们可以仅用代数来处理复杂的概率模型,但使用图解表示具有巨大优势:

  1. 可视化结构:直观地展示概率模型的依赖关系,有助于设计和理解新模型。
  2. 揭示性质:通过观察图的结构,可以推断出变量间的条件独立性
  3. 简化计算:复杂的推理和学习算法(如消息传递)可以用图上的操作来表示,使底层数学更清晰。

注意:在这之后神经网络图用蓝色表示,而概率图模型用红色表示,以避免混淆。


有向图

有向图模型(也称为贝叶斯网络贝叶斯网,Bayesian network)是概率图模型的一种,其中边(链接)带有箭头,表示变量间的依赖或因果关系。其基本元素有:

  • 节点(Nodes/Vertices):代表随机变量(如 aa, bb, cc)。
  • 有向边(Directed Edges/Links):箭头从一个变量指向另一个变量,表示前者是后者的“原因”或“父节点”。
  • 父节点与子节点:如果存在从 aacc 的箭头,则 aacc父节点ccaa子节点

需要注意的是,虽然贝叶斯网络中的边带有方向,但这并不总是意味着因果关系。边的方向更多地表示了变量间的依赖关系和因子分解的顺序。

分解

考虑三个变量 aa, bb, cc 的联合分布 p(a,b,c)p(a, b, c)

根据乘法规则,可以进行分解:

p(a,b,c)=p(ca,b)p(a,b)=p(ca,b)p(ba)p(a)p(a, b, c) = p(c | a, b) * p(a, b) = p(c | a, b) * p(b | a) * p(a)

图形表示

我们可以将上面的分解式画成一个有向图:

  • 为每个变量 aa, bb, cc 创建一个节点。
  • 为每个条件概率因子添加有向边:
    • p(ca,b)p(c | a, b):从 aabb 分别画箭头指向 cc
    • p(ba)p(b | a):从 aa 画箭头指向 bb
    • p(a)p(a):没有条件,所以没有指向 aa 的边。

分解图

分解图


完全连接图:对于 K 个变量,最一般的分解是: p(x1,...,xK)=p(xKx1,...,xK1)...p(x2x1)p(x1)p(x_1, ..., x_K) = p(x_K | x_1, ..., x_{K-1}) \cdot ... \cdot p(x_2 | x_1) \cdot p(x_1) 对应的图是一个完全连接图:每个节点都从所有编号更小的节点接收边。

  • 这种分解适用于任何联合分布。
  • 但这样的图没有提供任何“有趣”的信息,因为它假设所有变量都可能相互依赖。

真正有价值的信息来自于缺失的边。 因为一条边的存在表示一个直接的依赖关系(在给定父节点的情况下)。而因此一条边的缺失表示一个条件独立性。


对于一个包含 K 个节点的有向图,其联合概率分布的通用分解规则是:

p(x1,x2,...,xK)=k=1Kp(xkpa(k))p(x_1, x_2, ..., x_K) = \prod_{k=1}^{K} p(x_k | pa(k))

其中:

  • pa(k)pa(k) 表示节点 xkx_k 的父节点集合(parents of k)。
  • 这个乘积对图中所有节点进行。
  • 只要每个条件概率 p(xkpa(k))p(x_k | pa(k)) 是归一化的(即对 xkx_k 积分为1),那么整个乘积也自动是归一化的。

离散变量

当图模型中的节点代表离散变量时,每个变量有 KK 个可能的状态(例如,KK 个类别)。

一个 KK 状态离散变量 xx 的分布由参数向量 μ=(μ1,...,μK)T\mu = (\mu_1, ..., \mu_K)^T 定义,满足 k=1Kμk=1\sum_{k=1}^K \mu_k = 1。其概率质量函数为:

p(xμ)=k=1Kμkxkp(x|\mu) = \prod_{k=1}^{K} \mu_k^{x_k}

其中 xk{0,1}x_k \in \{0,1\}xx 的 one-hot 编码,即只有一个 xk=1x_k=1,其余为 0。由于归一化约束,只需指定 K1K-1 个参数。


考虑两个离散变量 x1x_1x2x_2,每个都有 KK 个状态。

  • 完全联合分布p(x1,x2)p(x_1, x_2)K2K^2 个值 μkl=p(x1=k,x2=l)\mu_{kl} = p(x_1=k, x_2=l) 定义。由于 k,lμkl=1\sum_{k,l} \mu_{kl} = 1 ,独立参数数量为 K21K^2 - 1
  • 链式结构:使用乘法规则,p(x1,x2)=p(x2x1)p(x1)p(x_1, x_2) = p(x_2|x_1)p(x_1)
    • p(x1)p(x_1) 需要 K1K-1 个参数。
    • p(x2x1)p(x_2|x_1) 需要 K(K1)K(K-1) 个参数(因为对 x1x_1 的每个 KK 个取值,p(x2x1)p(x_2|x_1) 是一个 KK 状态分布,需 K1K-1 个参数)。
    • 总参数数:(K1)+K(K1)=K21(K-1) + K(K-1) = K^2 - 1,与完全联合分布相同。

一个完全连接的有向图(如从 x1x_1 指向 x2x_2)可以表示任何联合分布,因为它没有施加任何限制。

参数数量与图结构的关系

  • 完全连接图(所有可能的边都存在):能表示最一般的联合分布,但参数数量为 KM1K^M - 1,随变量数 MM 指数增长。
  • 无连接图(独立变量):联合分布为 p(x1,...,xM)=i=1Mp(xi)p(x_1,...,x_M) = \prod_{i=1}^M p(x_i)。每个 p(xi)p(x_i)K1K-1 个参数,总参数数为 M(K1)M(K-1),随 MM 线性增长。
  • 部分连接图:在完全一般和完全独立之间取得平衡。例如,链式结构p(x1,...,xM)=p(x1)i=2Mp(xixi1)p(x_1,...,x_M) = p(x_1)\prod_{i=2}^M p(x_i|x_{i-1})
    • p(x1)p(x_1)K1K-1 个参数。
    • 每个 p(xixi1)p(x_i|x_{i-1})K(K1)K(K-1) 个参数。
    • 总参数数:K1+(M1)K(K1)K-1 + (M-1)K(K-1),随链长 MM 线性增长(而非指数增长),但能表示比独立模型更复杂的依赖关系。

部分链接图(链式结构)减少参数

部分链接图(链式结构)减少参数


进一步减少参数的方法是参数共享

在链式结构中,我们可以假设所有条件分布 p(xixi1)p(x_i|x_{i-1})i=2,...,Mi=2,...,M)都由同一组 K(K1)K(K-1) 个参数控制。

  • 效果:总参数数变为 K1+K(K1)K-1 + K(K-1),与 MM 无关。
  • 限制:这意味着所有转移(从 xi1x_{i-1}xix_i)都遵循相同的“规则”。
  • 应用:这在隐马尔可夫模型(HMM)和循环神经网络(RNN)中很常见。

与上图类似,但是最上面的参数μ\mu可以给多个节点共享的图模型。


高斯变量

条件分布:

考虑一个包含 DD 个变量的任意有向无环图,其中节点 ii 代表一个具有高斯分布的单个连续随机变量 xix_i。该分布的均值取为父节点 pa(i)\text{pa}(i) 状态的线性组合:

p(xipa(i))=N(xi|jpa(i)wijxj+bi,vi)p(x_i | \text{pa}(i)) = \mathcal{N} \left( x_i \,\middle|\, \sum_{j \in \text{pa}(i)} w_{ij} x_j + b_i, \, v_i \right)

其中:

  • wijw_{ij}bib_i 是控制均值的参数,
  • viv_i 是条件分布 xix_i 的方差。

联合分布:

联合分布的对数是所有节点条件分布对数的乘积:

lnp(x)=i=1Dlnp(xipa(i))\ln p(\mathbf{x}) = \sum_{i=1}^D \ln p(x_i | \text{pa}(i))

代入上式后可得:

lnp(x)=i=1D12vi(xijpa(i)wijxjbi)2+const\ln p(\mathbf{x}) = -\sum_{i=1}^D \frac{1}{2v_i} \left( x_i - \sum_{j \in \text{pa}(i)} w_{ij} x_j - b_i \right)^2 + \text{const}

其中 x=(x1,,xD)T\mathbf{x} = (x_1, \dots, x_D)^T,‘const’ 表示与 x\mathbf{x} 无关的项。

该表达式是 x\mathbf{x} 分量的二次函数,因此联合分布 p(x)p(\mathbf{x}) 是一个多变量高斯分布。

  • 每个变量的均值满足以下递推关系:

    E[xi]=jpa(i)wijE[xj]+bi\mathbb{E}[x_i] = \sum_{j \in \text{pa}(i)} w_{ij} \mathbb{E}[x_j] + b_i

    假设节点编号满足每个节点的编号高于其父节点,可以从编号最小的节点开始,递归地计算 E[x]=(E[x1],,E[xD])T\mathbb{E}[\mathbf{x}] = (\mathbb{E}[x_1], \dots, \mathbb{E}[x_D])^T 的各个分量。

  • 联合分布的协方差矩阵元素满足递推关系:

    cov[xi,xj]=kpa(j)wjkcov[xi,xk]+Iijvj(11.13)\text{cov}[x_i, x_j] = \sum_{k \in \text{pa}(j)} w_{jk} \text{cov}[x_i, x_k] + I_{ij} v_j \quad (11.13)

    其中 IijI_{ij} 是指示函数(当 i=ji = j 时为 1,否则为 0)。协方差也可以从编号最小的节点开始递归计算。


考虑一个协方差矩阵部分受约束的联合高斯分布: x1x2x3x_1 \to x_2 \to x_3

  • 均值

    μ=(b1,b2+w21b1,b3+w32b2+w32w21b1)T\mathbf{\mu} = (b_1, \, b_2 + w_{21}b_1, \, b_3 + w_{32}b_2 + w_{32}w_{21}b_1)^T
  • 协方差矩阵

    Σ=(v1w21v1w32w21v1w21v1v2+w212v1w32(v2+w212v1)w32w21v1w32(v2+w212v1)v3+w322(v2+w212v1))\mathbf{\Sigma} = \begin{pmatrix} v_1 & w_{21}v_1 & w_{32}w_{21}v_1 \\ w_{21}v_1 & v_2 + w_{21}^2 v_1 & w_{32}(v_2 + w_{21}^2 v_1) \\ w_{32}w_{21}v_1 & w_{32}(v_2 + w_{21}^2 v_1) & v_3 + w_{32}^2(v_2 + w_{21}^2 v_1) \end{pmatrix}

同样,可以将线性-高斯图模型扩展到节点代表多元高斯变量的情况。节点 ii 的条件分布为:

p(xipa(i))=N(xi|jpa(i)Wijxj+bi,Σi)p(\mathbf{x}_i | \text{pa}(i)) = \mathcal{N} \left( \mathbf{x}_i \,\middle|\, \sum_{j \in \text{pa}(i)} \mathbf{W}_{ij} \mathbf{x}_j + \mathbf{b}_i, \, \mathbf{\Sigma}_i \right)

其中 Wij\mathbf{W}_{ij} 是一个矩阵(若 xi\mathbf{x}_ixj\mathbf{x}_j 维度不同则为非方阵)。同样容易验证,所有变量的联合分布仍是高斯分布。


模型表示

在实际应用中,我们将图模型用于机器学习问题时,通常会将一些随机变量设置为特定的观测值。例如,在线性回归模型中,随机变量 tn{t_n} 会被设置为训练集中的具体值。在图模型中,我们通过将相应节点涂上阴影来表示这些观测变量。

此外,模型参数(如权重 ww)通常被视为确定性参数,用浮动变量表示。未观测的随机变量(如潜在变量或隐藏变量)则用开放的红圈表示。

最终,我们有三类变量:

  1. 未观测的随机变量(潜在变量),用开放红圈表示。
  2. 观测的随机变量,用蓝色阴影红圈表示。
  3. 非随机参数,用浮动变量表示。

这种表示方法有助于清晰地描述模型的结构和变量之间的关系,为后续的推理和学习提供基础。

示例图

示例图

  • 红色圆圈ww: 表示模型的参数(权重),即非随机变量。在图中用“浮动变量”表示,说明它是可学习的参数,而不是随机变量。
  • 蓝色矩形框 NN:表示有NN个相同的节点
  • 红色圆圈 tnt_n: 被涂成蓝色阴影,表示这是一个观测变量(即训练数据中的真实标签)。在概率图模型中,观测变量用阴影节点表示。
  • xn,σ2,λx_n ,\sigma^2,\lambda:浮动变量,确定性参数

条件独立性

考虑三个随机变量 aabbcc。如果在给定 cc 的条件下,aa 的条件分布不依赖于 bb 的取值,即:

p(ab,c)=p(ac)p(a|b, c) = p(a|c)

那么我们说 aa 在给定 cc 的条件下与 bb 是条件独立的(conditional independence)。

这也可以通过联合分布来表达。利用概率的乘法规则:

p(a,bc)=p(ab,c)p(bc)p(a, b|c) = p(a|b, c)p(b|c)

将条件独立性代入上式,得到:

p(a,bc)=p(ac)p(bc)p(a, b|c) = p(a|c)p(b|c)

这说明,在给定 cc 的条件下,aabb 的联合分布可以分解为其各自条件分布的乘积,即 aabb 在给定 cc 时是统计独立的。

为了简洁表示,我们使用如下符号:

a ⁣ ⁣ ⁣bca \perp\!\!\!\perp b \mid c

表示 aa 在给定 cc 的条件下与 bb 条件独立。

注意:条件独立性必须对 cc 的所有可能取值都成立,而不仅仅是某些特定值。

三个示例

直接通过概率运算验证条件独立性非常耗时。图模型的优势在于,我们可以直接从图结构判断哪些变量之间存在条件独立性。这一方法称为 d-分离(d-separation,其中 “d” 代表 “directed” 有向)。

通过三个简单的三节点图例来理解:

  1. 图结构:a → c ← b 对应的联合分布为: p(a,b,c)=p(ac)p(bc)p(c)p(a, b, c) = p(a|c)p(b|c)p(c)
  • 没有变量被观测 时,对 cc 边缘化: p(a,b)=cp(ac)p(bc)p(c)p(a, b) = \sum_c p(a|c)p(b|c)p(c) 该式一般不能分解为 p(a)p(b)p(a)p(b),因此 aabb 不独立,记为 a⊥̸ ⁣ ⁣ ⁣ba \not\perp\!\!\!\perp b \mid \emptyset
  • 观测到 cc 时(即条件在 cc 上),联合分布变为: p(a,bc)=p(a,b,c)p(c)=p(ac)p(bc)p(a, b|c) = \frac{p(a, b, c)}{p(c)} = p(a|c)p(b|c) 此时 aabb 在给定 cc 的条件下独立,即 a ⁣ ⁣ ⁣bca \perp\!\!\!\perp b \mid c
  • 节点 cc 在路径 acba \to c \leftarrow b 中是tail-to-tail(箭头尾部相连)。当 cc 未被观测时,路径是“通”的(信息可以在这条路径上传递,变量之间存在依赖关系),aabb 依赖;当 cc 被观测(条件化)时,路径被“阻塞”,aabb 变为条件独立。

    未观测c时:路径是”通的”,a和b通过共同的”结果”c产生关联

    • 举例:a=下雨,b=洒水车,c=地面湿: 虽然下雨和洒水车无关,但它们都可能导致地面湿,所以通过”地面湿”这个共同结果,a和b变得相关

    观测c后:路径被”阻塞”,知道了c的状态,a和b就独立了

    • 举例:如果已经知道地面是湿的,那么下雨和洒水车就独立了
  1. 图结构:a → c → b 对应的联合分布: p(a,b,c)=p(a)p(ca)p(bc)p(a, b, c) = p(a)p(c|a)p(b|c)
  • 未观测任何变量时,aabb 不独立(存在从 aabb 的路径)。
  • 观测到 cc 时,利用贝叶斯定理可得: p(a,bc)=p(a)p(ca)p(bc)p(c)=p(ac)p(bc)p(a, b|c) = \frac{p(a)p(c|a)p(b|c)}{p(c)} = p(a|c)p(b|c) 因此 a ⁣ ⁣ ⁣bca \perp\!\!\!\perp b \mid c
  • 节点 cc 在路径 acba \to c \to b 中是 head-to-tail(一个箭头头,一个箭头尾)。未观测时路径“通”,观测后路径被“阻塞”。
  1. 图结构:a → c ← b 对应的联合分布: p(a,b,c)=p(a)p(b)p(ca,b)p(a, b, c) = p(a)p(b)p(c|a, b)
  • 未观测任何变量时,对 cc 边缘化: p(a,b)=p(a)p(b)p(a, b) = p(a)p(b) 所以 aabb 独立,即 a ⁣ ⁣ ⁣ba \perp\!\!\!\perp b \mid \emptyset
  • 观测到 cc 时: p(a,bc)=p(a)p(b)p(ca,b)p(c)p(a, b|c) = \frac{p(a)p(b)p(c|a, b)}{p(c)} 这个表达式一般不能分解为 p(ac)p(bc)p(a|c)p(b|c),因此 a⊥̸ ⁣ ⁣ ⁣bca \not\perp\!\!\!\perp b \mid c
  • 节点 cc 在路径 acba \to c \leftarrow b 中是 head-to-head(箭头头部相连),也称为 碰撞节点 。未观测时,路径被“阻塞”,aabb 独立;一旦观测 cc,路径被“打通”,aabb 变得依赖。

不仅是 cc 本身,如果观测到 cc 的任意一个后代节点,路径也会被“打通”。


以医学诊断为例,考虑变量:症状(Symptom)、疾病(Disease)和检测结果(Test)。

  • 对于结构S→D←T:在不知道疾病的情况下,症状和检测结果是相关的;但一旦知道疾病诊断结果,症状和检测结果就变得独立。
  • 对于结构S→D→T:在不知道疾病时,症状和检测结果相关;知道疾病后两者独立。
  • 对于结构S→D←T:在不知道任何信息时,症状和检测结果独立;但知道疾病后两者变得相关。

d-分离

通过检查路径是否”通”来判断变量是否条件独立。

给定一个有向无环图 (DAG),判断集合 AA 是否在给定集合 CC 的条件下与集合 BB d-分离:

  1. 考虑从 AA 中任意节点到 BB 中任意节点的所有路径。
  2. 一条路径被“阻塞”当且仅当路径中存在一个节点满足以下任一条件:
  • 该节点是 tail-to-tailhead-to-tail,且该节点在集合 CC 中(即被观测)。
  • 该节点是 head-to-head,且该节点及其所有后代节点都不在集合 CC 中。
  1. 如果所有路径都被阻塞,则称 AACC d-分离于 BB,即 A ⁣ ⁣ ⁣BCA \perp\!\!\!\perp B \mid C 成立。

d-分离

d-分离

  • (a) 从a 到 b 的路径既没有被 f 阻塞(尾对尾且未观测),也没有被 e 阻塞(头对头但只有一个已观测后代节点),所以 a ⁣ ⁣ ⁣bca \perp\!\!\!\perp b \mid c无法得出。
  • (b) 从a 到 b 的路径被被 f 阻塞(尾对尾且被观测)所以 a ⁣ ⁣ ⁣bfa \perp\!\!\!\perp b \mid f,同时也被 e 阻塞(头对头且和后代没有被观测)

相消解释

head-to-head 结构导致了一种有趣的现象,称为“解释消除”。

例子:考虑一个汽车燃油系统,包含三个二值变量:

  • BB:电池状态(1=有电,0=没电)
  • FF:油箱状态(1=满,0=空)
  • GG:油表读数(1=满,0=空)

例子

油箱例子

假设 BBFF 独立,GG 依赖于 BBFF(油表可能因电池没电或油箱空而显示为空)。

  • 先验:p(F=0)=0.1p(F=0) = 0.1
  • 观测到 G=0G=0(油表为空)后,计算后验:
p(F=0G=0)=p(G=0F=0)p(F=0)p(G=0)0.257p(F=0|G=0) = \frac{p(G=0|F=0)p(F=0)}{p(G=0)} \approx 0.257

油箱为空的概率上升了(从 0.1 到 0.257)。

  • 再观测到 B=0B=0(电池没电)后:
p(F=0G=0,B=0)0.111p(F=0|G=0, B=0) \approx 0.111

油箱为空的概率下降了。

解释:观察到电池没电(B=0B=0)为油表为空(G=0G=0)提供了一个“解释”,从而“消除”了油箱空(F=0F=0 )作为解释的必要性。这说明,原本独立的 BBFF,在观测到它们的共同“结果” GG 后,变得依赖了。这就是 head-to-head 结构的典型行为。

朴素贝叶斯

朴素贝叶斯是一种基于条件独立假设的分类模型。

假设输入向量 x=(x(1),...,x(L))\mathbf{x} = (x^{(1)}, ..., x^{(L)}),类别为 CkC_k。其核心假设是:在给定类别 CkC_k 的条件下,各个特征 x(l)x^{(l)} 相互独立,即:

p(xCk)=l=1Lp(x(l)Ck)p(\mathbf{x}|C_k) = \prod_{l=1}^L p(x^{(l)}|C_k)

类别节点 CkC_k 指向所有特征节点 x(1),...,x(L)x^{(1)}, ..., x^{(L)}。由于 CkC_k 是 tail-to-tail 节点,一旦条件在 CkC_k 上,所有 x(i)x^{(i)}x(j)x^{(j)} 之间的路径都被阻塞,因此它们是条件独立的。

分类时,使用贝叶斯定理:

p(Ckx)=p(xCk)p(Ck)p(x)p(C_k|\mathbf{x}) = \frac{p(\mathbf{x}|C_k)p(C_k)}{p(\mathbf{x})}

其中 p(x)=kp(xCk)p(Ck)p(\mathbf{x}) = \sum_k p(\mathbf{x}|C_k)p(C_k)

注意:虽然条件独立假设很强(现实中特征往往相关),但朴素贝叶斯在文本分类等任务中表现良好,因为决策边界对类条件密度的细节不敏感。

生成式模型

生成模型试图学习数据的生成过程。一个图像生成的例子:

  • 类别、位置、尺度从先验分布独立采样。
  • 图像从依赖于类别、位置、尺度的条件分布中生成。
  • 未观测图像时,类别、位置、尺度相互独立(路径 head-to-head 且图像未观测,路径被阻塞)。
  • 观测到图像后,这些变量变得依赖(路径被打通)。例如,知道物体类别有助于推断其位置。

生成模型可以生成新样本,而判别模型(如直接训练分类器)通常不能。

马尔可夫毯

对于图中的一个节点 xix_i,其马尔可夫毯是使得 xix_i 与其图中其余所有节点条件独立的最小节点集合。

具体来说,xix_i 的马尔可夫毯包含:

  • 父节点
  • 子节点
  • 子节点的其他父节点

在 head-to-head 结构中,观测到子节点会打通其父节点之间的路径(解释消除)。因此,为了“隔离” xix_i,必须同时观测其子节点和子节点的其他父节点。

马尔可夫毯给出了计算 p(xix\i)p(x_i | \mathbf{x}_{\backslash i}) 时真正依赖的变量集合,极大简化了推理。

马尔可夫毯

马尔可夫毯

图作为过滤器

图模型可以从两个等价的视角理解:

  1. 分解视角:图定义了联合分布必须分解为特定形式的条件概率乘积。
  2. 独立性视角:图通过 d-分离定义了一组必须满足的条件独立性。

d-分离定理 保证了这两个视角是等价的:一个分布能通过“分解过滤器”当且仅当它能通过“独立性过滤器”。

等价视角 我们可以把图模型(此处为有向图模型)看作一种过滤器,其中的概率分布p(x) 只有在满足有向分解特性时才能通过过滤器。将通过过滤器的所有可能概率分布p(x)的集合记为DF 。我们也可以根据是否满足图的d分离特性所隐含的所有条件独立性,使用图(作为第二种过滤器)来过滤分布。d分离定理表明,同样的一组分布DF将被允许通过第二种过滤器

序列模型

在许多机器学习应用中,数据是以序列形式出现的。例如:

  • 文本是由词语组成的序列
  • 蛋白质是由氨基酸组成的序列
  • 音频信号是时间上的采样序列
  • 每日降雨量是按天排列的测量值

尽管有些序列并非严格的时间序列,但通常会借用“时间”、“过去”、“未来”等术语来描述顺序关系。

我们用 x1,,xNx_1, \dots, x_N 表示一个长度为 NN 的序列,其中每个 xnx_n 是一个向量(可以是标量,也可以是多维向量)。

有时我们会从同一分布中独立抽取多个这样的序列。此时,所有序列的联合分布可以分解为各个序列分布的乘积。本节我们主要关注建模单个序列。

一般自回归模型

自回归模型(autoregressive model)的核心思想是:用变量自身的过去值来预测当前值。根据概率的乘法规则,任意 NN 个变量的联合分布可以写成一系列条件分布的乘积。如果我们按照序列的自然顺序排列变量,则有:

p(x1,,xN)=n=1Np(xnx1,,xn1)p(x_1, \dots, x_N) = \prod_{n=1}^N p(x_n | x_1, \dots, x_{n-1})

一般自回归模型

一般自回归模型,每个节点都从序列中前一个节点接受一个连接

这个表示形式具有完全的通用性,因此在建模上没有带来任何优势,因为它没有引入任何假设或简化。


为了简化模型,我们可以引入条件独立性假设,通过移除图中的边,或者等价地,从公式 (11.42) 右边的条件变量中删除某些变量。

最极端的简化是移除所有条件变量,得到:

p(x1,,xN)=n=1Np(xn)p(x_1, \dots, x_N) = \prod_{n=1}^N p(x_n)

这表示所有变量相互独立,完全忽略了顺序信息。


一个更合理的假设是:每个变量只依赖于它前面的一个变量(一阶马尔可夫模型)。此时联合分布为:

p(x1,,xN)=p(x1)n=2Np(xnxn1)p(x_1, \dots, x_N) = p(x_1) \prod_{n=2}^N p(x_n | x_{n-1})

马尔可夫链

一阶马尔可夫链

利用 d-分离准则可以验证:

p(xnx1,,xn1)=p(xnxn1)p(x_n | x_1, \dots, x_{n-1}) = p(x_n | x_{n-1})

这意味着预测下一个观测值时,只需知道前一个观测值,而与更早的历史无关。


我们可以扩展模型,让每个变量依赖于前两个变量,得到二阶马尔可夫模型:

p(x1,,xN)=p(x1)p(x2x1)n=3Np(xnxn1,xn2)p(x_1, \dots, x_N) = p(x_1) p(x_2 | x_1) \prod_{n=3}^N p(x_n | x_{n-1}, x_{n-2})

二阶马尔可夫

二阶马尔可夫

一般地,M 阶马尔可夫链的条件分布依赖于前 M 个变量。

参数数量问题

假设观测变量是离散的,有 KK 个状态。

  • 一阶马尔可夫模型:条件分布 p(xnxn1)p(x_n | x_{n-1})K(K1)K(K - 1) 个参数。
  • M 阶马尔可夫模型:条件分布 p(xnxnM,,xn1)p(x_n | x_{n-M}, \dots, x_{n-1})KM1(K1)K^{M-1}(K - 1) 个参数。

参数数量随 MM 指数增长,因此高阶模型在 MM 较大时变得不实用。

  • 一阶模型需要 10×(10-1) = 90个参数
  • 二阶模型需要 10×10×(10-1) = 900个参数
  • 三阶模型需要 10³×(10-1) = 9000个参数

隐变量模型

为了构建不受马尔可夫阶数限制、但参数量有限的序列模型,可以引入隐变量(latent variable,无法直接观测但影响观测结果的变量)。

对于每个观测 xnx_n,引入一个对应的隐变量 znz_n(类型或维度可与 xnx_n 不同)。假设这些隐变量形成一个马尔可夫链,就得到了状态空间模型

隐变量模型

隐变量模型

  • 隐变量 znz_n 构成一个马尔可夫链,表示给定当前状态 znz_n,未来状态与过去状态无关。
  • 每个观测 xnx_n 只依赖于其对应的隐变量 znz_n,不直接依赖其他观测或隐变量。

关键的条件独立性是:

zn+1 ⁣ ⁣ ⁣zn1znz_{n+1} \perp\!\!\!\perp z_{n-1} \mid z_n

联合分布为:

p(x1,,xN,z1,,zN)=p(z1)[n=2Np(znzn1)]n=1Np(xnzn)p(x_1, \dots, x_N, z_1, \dots, z_N) = p(z_1) \left[ \prod_{n=2}^N p(z_n | z_{n-1}) \right] \prod_{n=1}^N p(x_n | z_n)

利用 d-分离可以发现,任何两个观测变量 xnx_nxmx_m 都通过隐变量路径相连,且该路径不会被阻断。因此,预测分布:

p(xn+1x1,,xn)p(x_{n+1} | x_1, \dots, x_n)

不具有任何条件独立性,即未来的预测依赖于所有过去的观测。

换句话说,观测变量本身不满足任何阶的马尔可夫性质。

习题3

一个贝叶斯网络:天气 AA → 路面状态 BB → 是否打滑 CC。如果你已经知道路面是湿的(观测到 BB),那天气 AA 和打滑 CC 还有关系吗?

没关系了——它们条件独立。这是 head-to-tail 结构,中间节点 BB 被观测后,路径就”断”了。

打个比方:你已经知道路面是湿的,那”下没下雨”对”会不会打滑”就没有额外信息了——路面湿不湿已经说明了一切。

如果把图改成 ACBA \to C \leftarrow B(两个原因指向同一个结果),观测到 CC 之后会怎样?

这是 head-to-head(碰撞节点)结构,很有意思:不观测 CC 的时候 AABB 是独立的,但一旦观测到 CC,它们反而变得不独立了。

这就是”解释消除”:已知路面打滑了,如果你发现路面湿(BB),那你就会觉得下雨(AA)的可能性变低了——因为”路面湿”已经够解释打滑了,不需要再找别的原因。


第11章小结

一句话版本:概率图模型用节点和箭头画出变量间的依赖关系图,通过d-分离规则可以从图上直接判断哪些变量条件独立,而不需要复杂的概率计算。

知识地图

  • 核心思想:用图形表示概率分布的结构(分解+独立性两个等价视角)
  • 有向图模型(贝叶斯网络):联合分布 = 各节点条件概率的乘积;边的缺失 = 条件独立性
  • 关键概念:父节点/子节点、条件独立性、d-分离(tail-to-tail / head-to-tail / head-to-head)
  • head-to-head(碰撞节点):未观测时阻塞路径,观测后打通路径(解释消除/相消解释)
  • 应用模型:朴素贝叶斯(分类)、生成式模型、序列模型
  • 序列建模:自回归 -> 马尔可夫模型(参数指数增长) -> 隐变量模型(有限参数+长期依赖)

概率图模型中的”分解”思想和第3篇中神经网络的层级结构有异曲同工之妙——都是通过结构化设计来减少参数、提高效率。而序列模型中的隐变量思想,在第6篇的Transformer中会以”注意力机制”的形式重新出现。


感谢您的阅读!如果可以,给俺点些关注吧~

深度学习笔记-5:卷积网络与概率图模型

周一 9月 01 2025
12469 · 46 分钟
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00