深度学习笔记-7:采样方法与潜变量模型
深度学习笔记-7,涵盖采样方法(蒙特卡洛、MCMC、吉布斯采样)、离散潜变量(K-means、GMM、EM算法)与连续潜变量(PCA、概率PCA)。对应《深度学习:基础与概念》第14-16章。
建议先看第1-3篇,第4篇(优化方法)也会有帮助。本篇讲怎么从概率分布中采样、什么是潜变量、PCA 怎么降维、EM 算法怎么处理缺失数据。
Chapter 14 采样
想象你面前有一个密封的盒子,里面装满了不同颜色的球。你想知道各种颜色的比例,但你不能打开盒子看——你只能伸手进去随机摸一个球出来,记录颜色,再放回去,重复很多次。这就是采样(Sampling)的核心思想:从一个你无法直接”看见”的概率分布中,通过抽取样本来了解它的性质。
- 定义:从概率分布中生成符合该分布的样本(如从高斯分布生成随机数,或从深度神经网络定义的生成模型中生成图像),也称为蒙特卡洛采样(Monte Carlo Sampling,一种用随机实验来近似计算的方法)。
- 应用:评估期望、生成合成数据、训练生成模型等。
基本采样
期望
直觉:假设你想知道一个城市居民的平均身高。你不可能量所有人,但你可以随机找1000个人量一下,算平均值——当样本足够多时,这个平均值就会逼近真实值。这就是蒙特卡洛方法的核心思想:用大量随机实验来近似计算。
蒙特卡洛近似的数学性质
- 无偏性:(估计值的期望等于真实值)。
- 方差:,随增大线性减小,而且与数据维度无关——这是蒙特卡洛方法的一大优势。
- 局限性:样本可能不独立,有效样本量可能远小于实际数量;若在大的区域取值小,需大量样本才能准确估计。
标准分布的采样方法
直觉:如果你能摇出0到1之间的随机数,能不能把它”变形”成其他分布的随机数?答案是可以的——就像把一根均匀的橡皮泥拉伸成任意形状。
变换法(Inverse Transform Sampling):利用均匀分布(Uniform Distribution,每个值出现概率相同的分布)样本生成其他分布样本。设,通过变换使,满足:
其中(均匀分布),故,即( 为的累积分布函数(CDF,Cumulative Distribution Function,表示”小于等于某值的概率”))。
简单说:目标分布的CDF的反函数,就是把均匀随机数”变形”为目标分布的工具。
- 示例:指数分布(Exponential Distribution,常用于描述等待时间),其累积分布 ,故变换为。

- 变换法生成非均匀分布的几何解释, 是期望的目标分布的不定积分。如果用 变换均匀分布的随机变量z,那么得到的变量y将服从分布
- 示例:指数分布(Exponential Distribution,常用于描述等待时间),其累积分布 ,故变换为。
Box-Muller方法:一种专门生成高斯分布(Gaussian Distribution,即正态分布,钟形曲线)样本的经典方法。步骤:
- 生成,过滤出满足的样本(即单位圆内的点)。
- 令,则: ()为独立标准正态分布样本。
多元高斯采样:利用Cholesky分解(一种将对称正定矩阵分解为下三角矩阵及其转置的方法)。若(为下三角矩阵),且 ,则。
拒绝采样
直觉:你想从一个奇形怪状的区域中随机取点,但你只会画长方形。那就画一个能包住目标区域的大长方形,在里面随机撒点——落在目标区域内的就”接受”,落在外面的就”扔掉”。这就是拒绝采样(Rejection Sampling)。
- 适用场景:直接采样困难,但可计算其未归一化形式(Unnormalized Form,即形状正确但总面积不为1的形式)(未知的归一化常数)。
- 步骤:
- 选择易采样的提议分布(Proposal Distribution,一个我们能轻松采样的”替身”分布),并确定常数使得对所有成立(称为比较函数,Comparison Function)。
- 生成样本和。
- 若,接受;否则拒绝。
- 原理:接受的样本在下均匀分布,故符合。
- 接受概率:,需选择尽可能小的以提高效率。

- 拒绝灰色区域()的样本。
- 局限性:高维空间中通常很大,接受率极低(指数级下降),实用性有限。想象一下,在100维空间中,一个”刚好包住”目标区域的长方体,绝大部分体积都在目标区域之外。
自适应拒绝采样
直觉:拒绝采样的问题是”长方形包得太大,浪费太多点”。自适应拒绝采样的想法是:一开始用一个粗糙的包络,每次有样本被拒绝,就把那个位置的信息加入,让包络越包越紧——就像不断修剪一棵树的枝叶,让它越来越贴合目标形状。
- 改进点:对对数凹分布(Log-Concave Distribution,即的形状像一个倒扣的碗),动态构建包络函数(Envelope Function,即上方的”盖子”):
- 在初始网格点计算及其梯度,用切线构建分段指数包络函数。
- 从包络函数采样,若拒绝则将样本加入网格点,更新包络函数。
- 优势:无需手动选择,随迭代优化包络,降低拒绝率。

重要性采样
直觉:你没法从目标分布中采样,但你能从另一个”差不多”的分布中采样。怎么办?你从里采样,然后给每个样本”打分”——如果这个样本在中概率高但在中概率低,就给它更高的权重;反之则降低权重。这就是重要性采样(Importance Sampling):用权重修正分布差异。
- 目标:估计,但无法直接从采样。
- 方法:从提议分布采样,用重要性权重(Importance Weight)修正偏差: 其中称为重要性权重。
- 未归一化分布:若,,则:
- 局限性:若与差异大,权重可能集中在少数样本上,有效样本量低,且无法诊断误差。
采样-重要性-重采样(SIR)
直觉:先用重要性采样给样本打分,然后根据分数重新抽一次——分数高的样本更容易被抽中,分数低的自然被淘汰。就像选秀节目:先海选打分,再根据分数决定谁能晋级。
- 步骤:
- 从采样个样本,计算权重。
- 从这些样本中重采样(Resampling)个,每个样本被选中的概率正比于。
- 优势:无需确定拒绝采样中的,重采样后样本近似符合(时精确)。
马尔可夫链蒙特卡洛采样 {#mcmc}
直觉:想象一个醉汉在城里走路。他每一步的方向都是随机的,但有一个奇特的性质——他在人多的地方走得慢(停留更久),在人少的地方走得快。走足够长时间后,他在各个地方出现的频率就会和人密度成正比。这就是马尔可夫链蒙特卡洛(Markov Chain Monte Carlo,简称MCMC)的核心思想:构建一条随机游走的”链”,让它最终的”停留分布”恰好等于我们想要采样的目标分布。
- 核心思想:构建马尔可夫链(Markov Chain,一种”下一步只取决于当前位置”的随机过程),使其平稳分布(Stationary Distribution,即链运行很长时间后达到的稳定分布)为目标分布,通过链的迭代生成样本。
马尔可夫链基础
下一步去哪里只取决于现在的位置,与之前走过的路无关——这就是马尔可夫性(Markov Property,也叫”无记忆性”)。
- 定义:随机变量序列(Random Variable Sequence)满足 ,转移概率(Transition Probability)为——表示”从跳到的概率”。
- 平稳分布(Stationary Distribution):经过很长时间后,系统达到平衡状态,各状态的比例不再变化。数学上:若,则为平稳分布。
- 细致平衡条件(Detailed Balance):从状态A到状态B的”流量”等于从状态B到状态A的”流量”。若,则是平稳分布(可逆链)。
- 遍历性(Ergodicity):链收敛到唯一平稳分布,与初始分布无关,保证样本最终符合。
Metropolis算法
直觉:醉汉走路的规则很简单——当前位置出发,随机选一个附近的位置作为候选点。如果候选点”更好”(目标概率更高),就走过去;如果”更差”,就抛硬币决定,概率正比于新旧位置的概率比值。这样保证醉汉在概率高的地方停留更久。
- 步骤:
- 初始状态,迭代生成候选样本(Candidate Sample)(对称提议分布,Symmetric Proposal,即)。
- 接受概率(Acceptance Probability):。
- 若,则(接受,走到新位置);否则(拒绝,留在原地)。
- 性质:对称提议分布下满足细致平衡,平稳分布为。
- 局限性:样本可能高度相关(相邻样本可能相同),需间隔采样(Thinning,如保留每个样本)以近似独立。
Metropolis-Hastings算法
直觉:Metropolis算法要求提议分布是对称的(往左和往右的概率一样),但现实中我们可能需要不对称的提议。Metropolis-Hastings算法通过在接受概率中加入一个”修正因子”来补偿这种不对称性——就像给天平加一个配重,让它恢复平衡。
- 改进点:放松提议分布对称性要求,接受概率调整为: 多出来的就是修正因子,补偿提议分布的不对称性。
- 优势:适用更广泛的提议分布,仍满足细致平衡。
- 挑战:提议分布选择影响效率——方差太小则随机游走缓慢(醉汉原地踏步),太大则拒绝率高(醉汉总被弹回来)。
吉布斯采样
直觉:想象你要调整一个有很多旋钮的音响。吉布斯采样(Gibbs Sampling)的策略是:每次只转一个旋钮,其他旋钮保持不动,根据条件概率决定这个旋钮该转到什么位置。轮流调整每个旋钮,最终音响就会达到最佳状态。每次只动一个维度,大大简化了采样难度。
- 适用场景:高维分布,可以方便地采样条件分布(Conditional Distribution)( 为除外的所有变量)。
- 步骤:
- 初始化。
- 迭代更新每个变量:。
- 原理:每次更新满足细致平衡,平稳分布为,且接受率为1(属于Metropolis-Hastings的特例——所有候选点都被接受)。
- 改进:块吉布斯采样(Block Gibbs Sampling,同时更新一组变量)减少相关性;过松弛(Over-relaxation)加速收敛。
祖先采样
身高 ← 父母平均身高 + 随机因素——这种”由因到果”的采样方式就是祖先采样(Ancestral Sampling)。
- 适用场景:有向图模型(Directed Graphical Model,即用箭头表示因果关系的概率图模型,无观测变量),联合分布(为父节点,Parent Node)。
- 步骤:按拓扑序(Topological Order,即从”祖先”到”后代”的顺序)采样,每个变量从其条件分布采样(父节点已确定)。
- 扩展:似然加权采样(Likelihood Weighted Sampling,处理观测变量),为观测变量赋予权重。
朗之万采样
能量模型
直觉:想象一个地形图——山谷(低能量区)对应高概率区域,山峰(高能量区)对应低概率区域。能量模型(Energy-Based Model)就是用一个”能量函数”来定义概率分布:能量越低的地方,概率越高。
- 定义:通过能量函数(Energy Function)定义分布: 其中为配分函数(Partition Function,即归一化常数,通常难以计算——它要对整个空间积分)。
- 训练挑战:似然函数依赖,需近似梯度。
似然最大化
直觉:训练能量模型就像调整地形——在真实数据出现的地方”挖低”(降低能量,提高概率),在模型错误生成的地方”堆高”(升高能量,降低概率)。
- 梯度公式: 其中为数据分布(Data Distribution,真实数据的概率分布),为模型分布(Model Distribution,模型定义的概率分布)。

能量函数E(x, w)(绿色)及相关的模型分布pM(x)和真实数据分布pD(x)。利用上式增加期望的对数似然,会在与模型样本(用蓝点表示)对应的点处推高能量函数,并在与数据集样本(用红点表示)对应的点处拉低能量函数
朗之万动力学(采样过程)
直觉:想象一个小球在能量地形上滚动。它会沿着”下坡”方向(梯度方向)滑动,同时受到随机扰动(就像布朗运动中的分子碰撞)。这样小球最终会集中在山谷中(高概率区域),而不会卡在某个局部最低点。这就是朗之万动力学(Langevin Dynamics)——利用梯度信息引导采样,同时加入随机噪声避免陷入局部最优。
- 原理:利用梯度信息引导采样,更新公式: 其中,为步长(Step Size),(得分函数,Score Function,即对数概率的梯度)。
- 性质:且迭代足够多时,样本收敛到。
- 对比散度(Contrastive Divergence):用短链采样(只跑几步如1步)近似模型分布,降低计算成本,适用于数据邻域的能量调整。就像你不需要让小球滚到山谷底部,只需要让它往下滑一小段就能大致知道方向。
习题1
你想从一个复杂的分布里采样,但直接采不了。拒绝采样和重要性采样都能帮忙,它俩有啥区别?
拒绝采样:找个好采样的分布”罩住”目标分布,然后在里面撒点,落在目标区域内的保留,不要的扔掉。简单粗暴,但效率低——如果”罩子”和目标差太多,大部分点都白撒了。
重要性采样:不扔点,给每个样本加个权重修正偏差。不浪费样本,但权重可能很不稳定(有的样本权重特别大,有的特别小)。
简单说:拒绝采样追求”精确”,重要性采样追求”不浪费”。
MCMC 为什么能从复杂分布里采样?“马尔可夫链”在这儿是什么意思?
MCMC 构造一个”随机游走”过程,走着走着,样本的分布就自然趋近目标分布了。每一步只需要看当前状态,不需要知道归一化常数——这就是马尔可夫性质的好处。
就像在一个山谷里扔一个球,加点随机扰动,球最终会滚到概率最高的地方。走够多步之后,你记录下来的轨迹就约等于从目标分布里采的样。
第14章小结
一句话版本:采样就是从概率分布中”抽签”——简单分布直接抽,复杂分布用各种技巧(变换、拒绝、加权、随机游走)来抽。
知识地图:
采样方法├── 基本采样│ ├── 变换法:用CDF的反函数,把均匀随机数变形│ ├── Box-Muller:专门生成高斯样本│ ├── 拒绝采样:在大盒子里撒点,保留目标区域内的│ ├── 重要性采样:从替身分布采样,用权重修正偏差│ └── SIR:重要性采样 + 重采样├── MCMC方法│ ├── Metropolis:醉汉走路,对称提议│ ├── Metropolis-Hastings:醉汉走路,非对称提议│ └── 吉布斯采样:每次只调一个旋钮└── 朗之万采样 ├── 能量模型:用能量函数定义概率 └── 朗之万动力学:小球沿梯度滚下 + 随机扰动Chapter 15 离散潜变量 {#discrete-latent}
直觉:你看到一个人的行为(观测变量),但你看不到他内心的情绪(潜变量)。情绪虽然看不见,却深刻影响着行为。引入”潜变量”就是让模型学会”猜测”这些隐藏因素。
在概率模型中,我们通常会遇到两种变量:观测变量(Observed Variable,比如数据集中的图像、数值等,是我们能直接看到的)和潜变量 (Latent Variable,也叫隐藏变量,Hidden Variable,是我们看不到但对建模很重要的变量)。关于概率分布的基础知识,可以参考第一篇笔记。
离散潜变量(Discrete Latent Variable)就是取值为离散值的潜变量(比如”是/否””类别1/类别2/类别3”)。引入它们的原因主要有两个:
- 有些潜变量对应真实存在但未观测到的量(比如一张动物图像中,动物的”朝向”是潜变量,我们没直接观测到,但会影响图像的像素分布);
- 即使没有真实对应的量,引入潜变量也能让模型更灵活——通过构建”观测变量+潜变量”的联合分布(Joint Distribution,即所有变量一起的概率),来简化复杂的观测变量边际分布(Marginal Distribution,即对潜变量所有可能值求和后得到的观测变量分布)。
K-means聚类
直觉:俗话说”物以类聚,人以群分”。给你一堆混在一起的水果,你自然会把苹果放一堆、橘子放一堆——这就是聚类(Clustering)。K-means是最简单的聚类方法:先随机选K个”中心点”,然后把每个数据点分给最近的中心,再更新中心位置,反复迭代直到稳定。
K-means(K均值算法)是一种聚类算法,目的是把N个D维数据点(比如二维坐标点、三维RGB像素)分成K个”簇”(Cluster)。同一个簇里的点应该离得近,不同簇的点离得远。
假设每个簇有一个“中心”(用表示第k个簇的中心),我们用数据点到其所属簇中心的距离平方和来衡量聚类的好坏,这个值越小越好。
为了表示”数据点属于哪个簇”,引入指示器变量(Indicator Variable,一种0/1标记):
- 如果第n个数据点属于第k个簇,;
- 否则,(每个数据点只属于一个簇,所以对每个n,只有一个)。
于是,“距离平方和”可以写成公式:
我们的目标就是找到最优的和,让J最小。
K-means通过两步反复迭代来优化J,直到结果不再变化:
E步(分配步骤):固定簇中心,给每个数据点找最近的簇
对每个数据点,计算它到所有簇中心的距离,哪个最近就把它分到哪个簇,即:比如,假设数据点到的距离是2,到的距离是5,那,。
M步(更新步骤):固定分配,重新计算簇中心
每个簇的新中心,就是该簇所有数据点的“平均”(均值):比如,第1个簇有3个数据点,那。
例子
使用黄石公园Old Faithful间歇泉的数据(每个数据点有两个特征:喷发持续时间和下次喷发等待时间)。当K=2时——就像把间歇泉分成”喷得久等得久”和”喷得短等得短”两类:
- 初始时随便选两个点作为和;
- E步:每个数据点被分到离自己近的中心所属的簇(相当于画一条垂直平分线,线两边分属两个簇);
- M步:根据分配结果,计算两个簇的新中心(比如左边簇的所有点的平均);
- 重复以上步骤,直到簇中心不再变化(收敛)。

黄石公园k-means算法
- K-means一定会在有限步内收敛(因为分配方式有限,且J每次迭代只会减小或不变),但可能收敛到“局部最优”(不是最好的聚类结果),所以通常会多试几次不同的初始中心。
- 需要提前指定K(比如通过经验或其他方法判断)。
高斯混合分布
直觉:K-means是”硬聚类”——每个点只属于一个簇,非黑即白。但现实中有些点可能”模糊”,比如一个在两个簇中间的点,你很难说它完全属于哪个。高斯混合模型(Gaussian Mixture Model,简称GMM)用”软聚类”(Soft Clustering,每个点以一定概率属于不同簇)来解决这个问题——就像说”这个水果70%像苹果,30%像梨”。
GMM假设观测数据是从K个高斯分布(即正态分布,第二篇笔记中有详细介绍)中”混合”生成的:
- 先从K个高斯分布中选一个(选第k个的概率是,叫混合系数(Mixing Coefficient,即每个高斯分量的”权重”),满足);
- 再从选中的高斯分布中生成一个数据点。
所以,数据x的概率分布是:
其中是第k个高斯分布(均值,协方差,详见第二篇笔记中的高斯分布介绍)。
引入离散潜变量z(1-of-K编码):
- 潜变量的概率:(选第k个高斯的概率);
- 给定z=k时,x的概率:。
于是,x和z的联合分布是,而GMM的分布就是对z求和的边际分布:。
对于一个数据点x,它来自第k个高斯的后验概率(Posterior Probability,即知道结果x后,反推原因的概率)叫**”责任”**(Responsibility),记为——可以理解为”第k个高斯对这个数据点的贡献度”:
比如,x有70%的概率来自第1个高斯,30%来自第2个,那,,这就是“软分配”。
GMM的参数有、、,需要通过数据估计。由于概率公式里有求和再取对数( ),直接求最大值很麻烦,这时候需要用EM算法。
EM算法 {#em-algorithm}
直觉:想象你在一个黑暗的房间里找最深的坑。你看不见坑在哪里(潜变量未知),但你可以:
- 猜——根据当前脚下地面的倾斜度,猜测坑大概在哪个方向(E步);
- 走一步——朝那个方向走一步(M步);
- 重复——到了新位置再猜、再走,直到走不动了(收敛)。
这就是EM算法(Expectation-Maximization Algorithm,期望最大化算法)的核心——“猜测-验证-改进”的循环。
EM算法是处理含潜变量模型的通用方法,核心思想是:通过”猜”潜变量的值(E步),再用猜的值估计参数(M步),反复迭代直到参数稳定。
假设我们有观测数据X和潜变量Z,模型参数为,目标是最大化似然(Likelihood,即模型参数下观测数据出现的概率)。
E步(期望步,Expectation Step):计算”完整数据对数似然的期望” 完整数据是(X,Z),但Z未知,所以用当前参数计算Z的后验分布 ,再求完整数据对数似然的期望(叫Q函数):
其中 是对潜变量 的所有可能取值求和, 是用旧参数算出的潜变量后验(“E步的猜测”), 是完整数据的对数似然。简单说:Q函数就是”在旧参数的猜测下,新参数 有多好”的打分。
M步(最大化步,Maximization Step):最大化Q函数得到新参数 找使得最大:
重复以上两步,直到参数不再变化。
EM在GMM中的应用
对于GMM,参数是,EM步骤如下:
- E步:计算每个数据点对每个簇k的责任(用上面的责任公式);
- M步:用责任更新参数:
- 有效点数:(每个点的责任加起来,类似“加权计数”);
- 均值:(加权平均);
- 协方差:(加权方差);
- 混合系数:(有效点数占总点数的比例)。
EM算法能保证每次迭代后,似然不会减小(只会增大或不变),所以最终会收敛到局部最优。

黄石公园EM算法
证据下界
证据下界ELBO(Evidence Lower Bound)是一个数学工具,能帮助我们理解为什么EM算法有效,还能扩展到更多复杂模型(比如变分自编码器)。它的核心思想是:直接优化似然很难(因为有潜变量的求和/积分),但我们可以优化似然的一个”下界”——一个更容易计算的替代目标。
似然的分解
对于任意分布(可以是我们随便选的关于潜变量Z的分布),观测数据的对数似然可以分解为:
其中:
- 就是ELBO,公式为:;
- 是Kullback-Leibler散度(KL Divergence,衡量两个分布差异的指标,可以理解为”用分布q去编码分布p时浪费的额外信息量”),且(当且仅当时等于0)。
因为,所以,即ELBO是对数似然的“下界”。
EM算法其实就是在优化这个下界:
- E步:选,此时,ELBO等于当前似然;
- M步:固定q,最大化ELBO得到,此时似然也会增大(因为下界提高了)。

EM算法计算当前参数值的对数似然下界,然后最大化这个下界以得到新的参数值
习题2
EM 算法的 E 步和 M 步分别在干嘛?用人话说。
E 步:根据当前参数,猜每个数据点”属于哪个分量”——算出每个点对各分量的”责任”(概率)。
M 步:根据这些”责任”,重新算每个分量的参数(均值、方差等)。
就像分班考试:先按现有成绩分班(E 步),再根据分班结果调整教学方案(M 步),然后重新分班……反复几轮就差不多了。
EM 一定能找到最好的结果吗?
不一定。EM 只能保证每次迭代似然不下降,但可能卡在局部最优——就像下山只看脚下,可能走到一个小坑里就出不来了。
常见的对策:多跑几次,每次随机初始化,挑最好的那次。或者先用 K-means 粗分一下,再用 EM 精调。
第15章小结
一句话版本:离散潜变量模型就是”猜测隐藏原因”——K-means用硬分类猜,GMM用软概率猜,EM算法提供了一套通用的”猜测-改进”迭代框架。
知识地图:
离散潜变量├── K-means聚类(硬聚类)│ ├── E步:给每个点分配最近的簇│ └── M步:更新簇中心为均值├── 高斯混合模型GMM(软聚类)│ ├── 每个点以概率属于不同簇(责任)│ └── 用EM算法学习参数├── EM算法(通用框架)│ ├── E步:计算Q函数(潜变量后验的期望)│ └── M步:最大化Q函数更新参数└── 证据下界ELBO ├── 对数似然 = ELBO + KL散度 └── EM算法就是在优化ELBO这些方法在聚类、分类和密度估计等任务中广泛应用。关于分类任务的基础知识,可以参考第三篇笔记。
Chapter 16 连续潜变量 {#continuous-latent}
许多数据集的特点是,数据点虽然位于高维空间中,但实际分布在一个低维流形(Manifold,即弯曲的低维表面,见第六章-数据流形 )上。控制数据变化的潜在自由度就是连续潜变量(Continuous Latent Variable)。
直觉:想象一个3D物体被灯光照射,它在墙上的影子是2D的。虽然影子丢失了一些信息,但它保留了物体最重要的形状特征。连续潜变量模型做的事情类似——找到数据最重要的”影子”(低维表示),丢掉不重要的细节。
连续潜变量模型通过先在潜变量空间(低维)中选择点,再添加噪声生成观测数据,能有效建模这类数据。本章从经典的主成分分析(PCA,Principal Component Analysis)入手,逐步介绍概率PCA、因子分析等连续潜变量模型。
主成分分析PCA
直觉:PCA就像”影子投射”——你有一个3D物体(高维数据),想找到一面墙(低维子空间),让物体的影子(投影)尽可能保留物体的形状信息。关键问题是:墙应该朝哪个方向?PCA的答案是:朝数据变化最大的方向。想象你站在一堆散开的点前面拍照——如果正面拍(数据变化最大的方向),能最好地区分各个点;如果从侧面拍(数据变化小的方向),很多点会重叠在一起。
PCA(Principal Component Analysis,主成分分析)是一种常用的线性降维(Linear Dimensionality Reduction,即用线性变换把高维数据映射到低维)方法,核心是将高维数据投影到低维线性子空间(主成分空间,Principal Component Space),同时保留数据的主要信息。
最大方差形式化
PCA的一个定义是:找到低维子空间,使数据投影到该子空间后的方差(Variance,衡量数据分散程度的指标,越大说明数据越”散开”)最大(即保留最多信息)。
数据预处理:先计算数据均值(Mean,即平均值),将数据中心化(Centering,即减去均值使数据以原点为中心):
其中是D维数据点,是样本数。
投影方差:对于1维主成分(),用单位向量表示投影方向,数据点的投影值为,投影后的方差为:
其中是数据协方差矩阵(Covariance Matrix,描述数据各维度之间相关性的方阵,对角线是各维度的方差):
优化投影方向:在(单位向量约束)下最大化方差,通过拉格朗日乘数法可得:
即是的特征向量(Eigenvector,即矩阵作用下方向不变的向量),是对应的特征值(Eigenvalue,即特征向量被拉伸的倍数)。最大方差对应最大特征值的特征向量(第一主成分,First Principal Component)。
高维主成分:对于维主成分空间,最优投影方向是协方差矩阵的前个最大特征值对应的特征向量。
最小误差形式化
PCA的另一个等价定义是:找到低维子空间,使数据点到其投影的平均平方距离(投影误差,Projection Error)最小。“最大方差”和”最小误差”是同一件事的两面——投影方差越大,丢失的信息就越少,误差就越小。
投影误差:用个正交基向量张成主成分空间,数据点的投影为,误差为:
最优投影:通过推导可知,最小误差对应选择协方差矩阵的前个最大特征值的特征向量作为基向量,此时误差为:
即误差等于被丢弃的特征值之和。

主子空间用洋红色线条表示,PCA使数据点(红色点)在主子空间中的正交投影能够最大化投影点(绿色点)的方差。误差用蓝色线条表示
数据压缩
PCA可用于数据压缩:将D维数据投影到维主成分空间,用投影系数表示数据。
- 重构数据:压缩后的数据可通过投影系数重构: 其中是维投影系数。

平均向量和前4个PCA特征向量及对应的特征值

一个手写数字及其通过保留M个主成分而获得的PCA重构结果。随着M值的增加,重构变得更准确
数据白化
白化(Whitening)是一种数据预处理,将数据转换为零均值、单位协方差且各维度不相关的形式——就像把一团任意形状的云”揉”成一个标准的球形。白化后的数据更容易被机器学习算法处理。
- 白化步骤:
- 中心化数据(减去均值);
- 计算协方差矩阵的特征值和特征向量;
- 变换数据: 其中是特征向量矩阵,是特征值对角矩阵。变换后的数据协方差为单位矩阵。

白化后的数据,均值为0,协方差为单位矩阵
高维数据处理
当数据维度远大于样本数时,直接计算协方差矩阵()代价高。此时可通过低维矩阵运算简化:
- 定义中心化数据矩阵(,每行是),则;
- 计算()的特征值和特征向量,间接得到的特征值和特征向量,计算代价从降为。
概率潜变量
传统PCA是确定性的(Deterministic,即给定数据,结果唯一),概率PCA(Probabilistic PCA)将其推广为概率模型(Probabilistic Model,即用概率分布来描述不确定性),更灵活且便于处理缺失数据、进行贝叶斯推断(Bayesian Inference,即用概率来表达不确定性并根据新数据更新信念)等。
生成模型
概率PCA假设数据由“潜变量→观测变量”的生成过程产生:
- 潜变量:维潜变量(零均值、单位协方差高斯);
- 观测变量:给定,维观测变量,其中是映射矩阵, 是均值,是噪声方差。
生成过程可写为:,其中是噪声(图16.7展示了该生成过程的直观示意图)。
似然函数
边际分布(对积分)仍是高斯分布: 其中协方差矩阵。
对数似然:给定数据集,对数似然为:
后验分布:给定,潜变量的后验分布也是高斯:
其中(图16.8展示了概率PCA的图模型结构)。
最大似然估计
通过最大化对数似然求解参数:
- 均值:最优解为数据均值;
- 映射矩阵:最大似然解为,其中是的前个特征向量, 是对应特征值,是正交矩阵(潜空间旋转);
- 噪声方差:最优解为被丢弃特征值的平均:
因子分析
因子分析(Factor Analysis)与概率PCA类似,但观测变量的条件协方差是对角矩阵(Diagonal Matrix,即只有对角线上有值,各维度噪声独立但可以不同),而非各向同性(所有方向噪声相同):
- 条件分布:,其中是对角矩阵(各维度独立噪声);
- 边际协方差:,更灵活地建模不同维度的噪声。
独立成分分析ICA
独立成分分析(Independent Component Analysis,简称ICA)假设潜变量是统计独立的(Statistically Independent,即一个变量的信息不能帮助推断另一个)非高斯变量,用于盲源分离(Blind Source Separation,如从混合声音中分离出各个说话人)等问题:
- 潜变量分布:(因子化,非高斯);
- 观测变量:(无噪声,或低噪声)。通过最大化似然,可从混合信号中分离出独立源(如分离混合的语音信号)。
卡尔曼滤波器
卡尔曼滤波器(Kalman Filter)用于序列数据(Sequential Data,如时间序列),潜变量形成马尔可夫链(即每个时刻的潜变量只依赖前一时刻):
- 潜变量:(高斯,均值是的线性函数);
- 观测变量:。适用于实时跟踪(如雷达跟踪飞机)。
证据下界ELBO
与离散潜变量类似,连续潜变量模型的对数似然可分解为ELBO和KL散度之和(这个分解在第15章已经介绍过):
ELBO:
是对数似然的下界(因)。
意义:ELBO是变分推断(Variational Inference,一种用优化方法近似推断的技术)的核心,通过优化和模型参数,可间接最大化对数似然。
概率 PCA 的 EM 算法
概率PCA也可以用EM算法来学习参数。直觉上:E步猜测每个数据点的”隐藏坐标”(潜变量z),M步根据这些猜测更新映射矩阵W。下面是完整的公式推导——如果你只关心直觉,可以跳过公式部分。
概率PCA的EM算法完整公式
初始化:选择潜在空间维度 ,并初始化模型参数 (权重矩阵)和 (噪声方差)。初始化方法可以是随机初始化,或使用传统 PCA 的前 个主成分作为 的初始值。
E 步(计算后验分布的期望): 在给定当前参数 和 以及观测数据 的条件下,计算潜在变量 的后验分布 的期望。 根据公式下面两个,需要计算两个关键的充分统计量(Sufficient Statistic,即包含所有参数估计所需信息的统计量):
其中 。 是后验均值, 是后验二阶矩。
M 步(更新模型参数): 利用 E 步计算出的期望,更新参数 和 。
- 更新 :
- 更新 : 这里的 表示矩阵的迹(Trace,即对角线元素之和)。
- 迭代:重复 E 步和 M 步,直到参数收敛或达到最大迭代次数。
EM 算法的优势
相比于传统的基于特征值分解(Eigendecomposition,即把矩阵分解为特征向量和特征值)的 PCA,EM 算法在处理大规模数据时具有显著的计算优势。
传统PCA的计算复杂度: 首先计算数据协方差矩阵 ,复杂度为 。
- 然后对 的协方差矩阵进行特征值分解,复杂度为 。
- 如果只计算前 个主成分,可以使用更高效的算法(如幂迭代),复杂度约为 ,但计算协方差矩阵的 仍然是瓶颈。
EM 算法的计算复杂度:
- E 步和 M 步中最耗时的操作是遍历所有数据点并计算和式,例如 。
- 每个数据点的计算复杂度主要涉及 的矩阵运算。
- 因此,每轮迭代的总复杂度为 。
结论:当数据维度 很大,且我们感兴趣的主成分数量 远小于 (即 )时,EM 算法的 复杂度远优于传统 PCA 的 或 复杂度。尽管 EM 是迭代的,但其每轮迭代的计算成本更低,总体效率更高。

(a)一组绿色的数据点以及真实的主成分(显示为按特征值平方根缩放的特征向量)。 (b)由W定义的主子空间的初始配置(显示为红色),以及潜在点Z在数据空间中的投影(由ZWT给出,显示为青色)。 (c)经过第一个M步骤后,W已经在Z保持固定的情况下得到更新。 (d)在随后的E步骤中,Z的值已更新并给出了正交投影,并且W保持不变。 (e)经过第二个M步骤之后的结果。(f)收敛后的解
在线 EM 算法
EM 算法的一个重要优点是它可以很容易地实现为在线(Online,即逐个处理数据点)或小批量(Mini-batch,即每次处理一小批数据点)形式。
- 原理:在 E 步中, 和 的计算是针对每个数据点 单独进行的。在 M 步中,参数更新依赖于对所有数据点的期望值的累加和()。
- 实现:我们可以逐个读取数据点 ,立即计算其 和 ,然后将这些值增量地累加到总和中。处理完一个数据点后,就可以将其从内存中丢弃。
- 优势:这种方法的内存消耗是 (存储累加和),而不是 (存储整个数据集)。当数据量 非常大,无法一次性加载到内存时,这种在线形式至关重要。
处理缺失数据
概率 PCA 的一个强大特性是它能够自然地处理缺失数据。
- 假设数据是“随机缺失”(missing at random, MAR)的,即某个值缺失的概率不依赖于该值本身(但可以依赖于其他已观测到的值)。
- 方法:对于包含缺失值的数据点 ,在 E 步和 M 步中,我们只对已观测到的变量进行计算。具体来说:
- 在计算后验分布 时,只使用 中已观测到的部分。
- 在更新参数时,求和只针对已观测到的变量进行。
- 结果:通过 EM 算法,我们可以同时估计模型参数和对缺失值进行插补,即根据模型和已观测数据预测缺失值。
非线性潜变量模型
PCA及其概率版本假设数据位于一个线性子空间(Linear Subspace,即直线、平面或高维超平面)中。这意味着数据点大致分布在一条直线、一个平面或一个高维超平面上。
然而,许多真实世界的数据具有复杂的、非线性的结构。例如,一个“S”形的曲线数据集无法被一条直线很好地近似。线性模型在这种情况下会丢失重要的结构信息。
非线性流形
直觉:想象一张皱巴巴的纸——它本质上是2D的,但嵌在3D空间中,无法用一个平面来近似。非线性流形模型就是要学会”展平”这种皱巴巴的数据。
为了捕捉数据中的非线性结构,我们需要将线性映射 推广为一个非线性映射(Nonlinear Mapping)。这就是深度神经网络的用武之地——用网络来学习这个复杂的非线性函数。
- 生成过程:
- 从一个先验分布(通常是标准正态分布)中采样潜在变量 :
- 通过一个非线性函数 将 映射到数据空间。这个函数通常由一个深度神经网络(Deep Neural Network, DNN,即有多层隐藏层的神经网络,详见第三篇笔记)实现,其参数为 。
- 加上噪声 (通常假设为高斯噪声 )得到观测数据 :
- 模型表达:观测数据的条件分布为:
似然函数
在概率模型中,我们的目标是最大化边缘似然(Marginal Likelihood)或证据(Evidence):
这个积分对所有可能的潜在变量 进行了边缘化。
- 问题:在非线性模型中,由于 是一个复杂的非线性函数,这个积分通常是无法解析计算的。
- 近似方法:一种直观的方法是使用蒙特卡洛积分(Monte Carlo Integration,即用随机采样来近似积分,本章开头已介绍)来近似: 这将边缘似然近似为一个由 个样本构成的混合高斯模型(即多个高斯分布的加权和,本章前面已介绍)。
为什么蒙特卡洛近似在实践中不可行?
- 场景:考虑一个训练好的模型,我们想评估一个真实数据点 (如下图)的似然。
- 模型生成:我们从先验 中采样 ,通过 生成一个图像 。
- 问题:即使模型整体上能生成很好的数字,但生成的图像 与真实图像 在像素空间上精确匹配的概率极低。例如:
- 图 (b) 是一个很差的“2”,与 (a) 的平方距离为 0.0387。
- 图 (c) 是一个很好的“2”,只是向下向右移动了半像素,但与 (a) 的平方距离高达 0.2693。
- 似然计算:由于 是高斯分布,其值与 成正比。
- 困境:
- 如果我们设置 很小,以确保只有非常接近的图像才有高似然,那么即使是像 (c) 这样语义上完美的图像,也会因为像素级的微小偏移而具有极低的似然。
- 如果我们设置 很大,那么所有图像(包括像 (b) 这样的坏图像)都会有较高的似然,失去了区分好坏的能力。
- 结论:为了得到一个准确的似然估计,我们需要巨大的 值,使得在采样中能偶然生成一个与 几乎完全相同的 。这在计算上是不切实际的。

手写数字,为什么从潜空间采样以计算似然函数要大样本
由于直接最大化边缘似然不可行,我们需要更高级的技术来训练非线性潜在变量模型。这引出后续章节介绍的四种主要方法。
离散数据
当观测数据是离散的(如二值变量或分类变量)时,我们需要使用不同的条件分布。
独立二值变量: 如果数据集由 个独立的二值变量(Binary Variable,即只取0或1的变量)组成,我们可以使用伯努利分布(Bernoulli Distribution,第二篇笔记中有介绍)的乘积:
其中 是第 个输出单元的激活值, 是逻辑斯蒂sigmoid函数(Logistic Sigmoid Function,即,将任意实数映射到0到1之间,详见第三篇笔记), 是预激活值(Pre-activation,即网络最后一层的线性输出)。这对应于一个神经网络,其输出层使用 sigmoid 激活函数。
独热编码分类变量: 对于分类变量,我们使用多项分布:
其中 由softmax函数(Softmax Function,将一组实数转换为概率分布,所有输出之和为1,详见第三篇笔记)给出:
这对应于一个神经网络,其输出层使用 softmax 激活函数。
混合变量: 对于包含离散和连续变量的混合数据,可以通过将相应的条件分布相乘来建模。
量化与去量化
在实践中,即使是连续变量(如图像的像素强度),在计算机中也是用离散值(如 8 位整数 0-255)表示的。这在使用基于深度神经网络的生成模型时会带来问题。
- 问题:高度灵活的模型可能会发现一种“病态”的解决方案:将概率密度完全坍缩到一个或几个离散值上。例如,模型可能总是预测像素值为 128,导致生成的图像非常糟糕。
- 解决方案:去量化(Dequantization):
- 思想:将离散的观测值”去量化”为一个连续的随机变量。
- 方法:在训练时,将每个观测到的离散值 替换为一个从连续分布中随机采样的值。最常用的是均匀去量化(Uniform Dequantization):如果 是一个 8 位整数,则用 来代替它。
- 效果:这相当于在数据上添加了均匀噪声。它使得模型更难将密度精确地坍缩到整数点上,从而鼓励模型学习更平滑、更真实的分布。

(a):一个离散分布的示意图 (b):对应的去量化连续分布,在区间上的均匀分布,其总概率质量与 (a) 相同。将离散值”涂抹”成一个连续区间
习题3
线性自编码器和 PCA 是一回事吗?
是的。线性自编码器(没有激活函数)最小化重建误差的解,恰好就是 PCA 的解。编码器学到的权重就是主成分方向。
但如果加上激活函数变成非线性自编码器,就比 PCA 强了——它能学到弯曲的投影,而不只是直线投影。
概率 PCA 比普通 PCA 多了什么?
普通 PCA 就是一个确定性的投影,给你一个”影子”。概率 PCA 把这个过程变成了概率模型——“影子”不再是一个点,而是一个分布。
好处:能处理缺失数据(用 EM 算法),能告诉新数据”你在这个影子位置的概率是多少”,还能自然地扩展成贝叶斯版本。
第16章小结
一句话版本:连续潜变量模型就是”找影子”——PCA找最佳投影方向(线性),概率PCA给投影加上概率解释,非线性模型用神经网络学习弯曲的投影。
知识地图:
连续潜变量├── PCA(线性降维)│ ├── 最大方差:投影方向 = 最大方差方向│ ├── 最小误差:投影方向 = 最小重建误差方向│ ├── 数据压缩:用M维投影系数表示D维数据│ └── 白化:让数据变成标准球形├── 概率PCA(概率版本)│ ├── 生成模型:z -> Wz + 噪声 -> x│ ├── 最大似然:W的解与PCA一致│ └── EM算法:E步猜z,M步更新W├── 其他模型│ ├── 因子分析:各维度噪声不同│ ├── ICA:潜变量独立非高斯│ └── 卡尔曼滤波:时序潜变量├── ELBO:对数似然的下界└── 非线性流形:用神经网络学习弯曲投影这些方法在数据压缩、特征提取和可视化中具有重要作用。