深度学习笔记-7:采样方法与潜变量模型 - MuxiaoWF跳到主要内容

深度学习笔记-7:采样方法与潜变量模型

深度学习笔记-7,涵盖采样方法(蒙特卡洛、MCMC、吉布斯采样)、离散潜变量(K-means、GMM、EM算法)与连续潜变量(PCA、概率PCA)。对应《深度学习:基础与概念》第14-16章。

周一 9月 01 2025
13142 字 · 49 分钟

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

建议先看第1-3篇,第4篇(优化方法)也会有帮助。本篇讲怎么从概率分布中采样、什么是潜变量、PCA 怎么降维、EM 算法怎么处理缺失数据。

Chapter 14 采样

想象你面前有一个密封的盒子,里面装满了不同颜色的球。你想知道各种颜色的比例,但你不能打开盒子看——你只能伸手进去随机摸一个球出来,记录颜色,再放回去,重复很多次。这就是采样(Sampling)的核心思想:从一个你无法直接”看见”的概率分布中,通过抽取样本来了解它的性质。

  • 定义:从概率分布p(z)p(z)中生成符合该分布的样本(如从高斯分布生成随机数,或从深度神经网络定义的生成模型中生成图像),也称为蒙特卡洛采样(Monte Carlo Sampling,一种用随机实验来近似计算的方法)。
  • 应用:评估期望、生成合成数据、训练生成模型等。

基本采样

期望

直觉:假设你想知道一个城市居民的平均身高。你不可能量所有人,但你可以随机找1000个人量一下,算平均值——当样本足够多时,这个平均值就会逼近真实值。这就是蒙特卡洛方法的核心思想:用大量随机实验来近似计算

  • 目标:计算函数f(z)f(z)关于分布p(z)p(z)期望(Expectation,即加权平均值,权重是概率): E[f]=f(z)p(z)dz(连续变量)f(z)p(z)(离散变量)\mathbb{E}[f] = \int f(z) p(z) dz \quad (\text{连续变量}) \quad \text{或} \quad \sum f(z) p(z) \quad (\text{离散变量})
  • 蒙特卡洛近似(Monte Carlo Approximation):通过从p(z)p(z)中抽取LL个独立样本z(1),...,z(L)z^{(1)}, ..., z^{(L)},用样本均值估计期望: f=1Ll=1Lf(z(l))\overline{f} = \frac{1}{L} \sum_{l=1}^L f(z^{(l)})
蒙特卡洛近似的数学性质
  • 无偏性E[f]=E[f(z)]\mathbb{E}[\overline{f}] = \mathbb{E}[f(z)](估计值的期望等于真实值)。
  • 方差var[f]=1LE[(fE[f])2]\text{var}[\overline{f}] = \frac{1}{L} \mathbb{E}[(f - \mathbb{E}[f])^2],随LL增大线性减小,而且与数据维度无关——这是蒙特卡洛方法的一大优势。
  • 局限性:样本可能不独立,有效样本量可能远小于实际数量;若f(z)f(z)p(z)p(z)大的区域取值小,需大量样本才能准确估计。

标准分布的采样方法

直觉:如果你能摇出0到1之间的随机数,能不能把它”变形”成其他分布的随机数?答案是可以的——就像把一根均匀的橡皮泥拉伸成任意形状。

  • 变换法(Inverse Transform Sampling):利用均匀分布(Uniform Distribution,每个值出现概率相同的分布)样本生成其他分布样本。设zU(0,1)z \sim U(0,1),通过变换y=g(z)y = g(z)使yp(y)y \sim p(y),满足:

    p(y)=p(z)dzdyp(y) = p(z) \left| \frac{dz}{dy} \right|

    其中p(z)=1p(z) = 1(均匀分布),故z=yp(y^)dy^=h(y)z = \int_{-\infty}^y p(\hat{y}) d\hat{y} = h(y),即y=h1(z)y = h^{-1}(z)h(y)h(y)p(y)p(y)累积分布函数(CDF,Cumulative Distribution Function,表示”小于等于某值的概率”))。

    简单说:目标分布的CDF的反函数,就是把均匀随机数”变形”为目标分布的工具。

    • 示例:指数分布(Exponential Distribution,常用于描述等待时间)p(y)=λeλyp(y) = \lambda e^{-\lambda y},其累积分布h(y)=1eλyh(y) = 1 - e^{-\lambda y} ,故变换为y=λ1ln(1z)y = -\lambda^{-1} \ln(1 - z)变换法
    • 变换法生成非均匀分布的几何解释, h(y)h(y)是期望的目标分布p(y)p(y)的不定积分。如果用y=h1(z)y = h^{-1}(z) 变换均匀分布的随机变量z,那么得到的变量y将服从p(y)p(y)分布
  • Box-Muller方法:一种专门生成高斯分布(Gaussian Distribution,即正态分布,钟形曲线)样本的经典方法。步骤:

    1. 生成z1,z2U(1,1)z_1, z_2 \sim U(-1,1),过滤出满足z12+z221z_1^2 + z_2^2 \leq 1的样本(即单位圆内的点)。
    2. r2=z12+z22r^2 = z_1^2 + z_2^2,则: y1=z12lnr2r2,y2=z22lnr2r2y_1 = z_1 \sqrt{\frac{-2 \ln r^2}{r^2}}, \quad y_2 = z_2 \sqrt{\frac{-2 \ln r^2}{r^2}}y1,y2y_1, y_2)为独立标准正态分布样本。
  • 多元高斯采样:利用Cholesky分解(一种将对称正定矩阵分解为下三角矩阵及其转置的方法)。若=LLT\sum = LL^TLL为下三角矩阵),且zN(0,I)z \sim \mathcal{N}(0, I) ,则y=μ+LzN(μ,)y = \mu + Lz \sim \mathcal{N}(\mu, \sum)

拒绝采样

直觉:你想从一个奇形怪状的区域中随机取点,但你只会画长方形。那就画一个能包住目标区域的大长方形,在里面随机撒点——落在目标区域内的就”接受”,落在外面的就”扔掉”。这就是拒绝采样(Rejection Sampling)。

  • 适用场景:直接采样p(z)p(z)困难,但可计算其未归一化形式(Unnormalized Form,即形状正确但总面积不为1的形式)p~(z)=Zpp(z)\tilde{p}(z) = Z_p p(z)ZpZ_p未知的归一化常数)。
  • 步骤
    1. 选择易采样的提议分布(Proposal Distribution,一个我们能轻松采样的”替身”分布)q(z)q(z),并确定常数kk使得kq(z)p~(z)k q(z) \geq \tilde{p}(z)对所有zz成立(kq(z)k q(z)称为比较函数,Comparison Function)。
    2. 生成样本z0q(z)z_0 \sim q(z)u0U(0,kq(z0))u_0 \sim U(0, k q(z_0))
    3. u0p~(z0)u_0 \leq \tilde{p}(z_0),接受z0z_0;否则拒绝。
  • 原理:接受的样本在p~(z)\tilde{p}(z)下均匀分布,故符合p(z)p(z)
  • 接受概率p(accept)=1kp~(z)dz=Zpkp(\text{accept}) = \frac{1}{k} \int \tilde{p}(z) dz = \frac{Z_p}{k},需选择尽可能小的kk以提高效率。 拒绝采样
  • 拒绝灰色区域(u0>p~(z0)u_0 > \tilde{p}(z_0))的样本。
  • 局限性:高维空间中kk通常很大,接受率极低(指数级下降),实用性有限。想象一下,在100维空间中,一个”刚好包住”目标区域的长方体,绝大部分体积都在目标区域之外。

自适应拒绝采样

直觉:拒绝采样的问题是”长方形包得太大,浪费太多点”。自适应拒绝采样的想法是:一开始用一个粗糙的包络,每次有样本被拒绝,就把那个位置的信息加入,让包络越包越紧——就像不断修剪一棵树的枝叶,让它越来越贴合目标形状。

  • 改进点:对对数凹分布(Log-Concave Distribution,即lnp(z)\ln p(z)的形状像一个倒扣的碗),动态构建包络函数(Envelope Function,即上方的”盖子”):
    1. 在初始网格点计算lnp(z)\ln p(z)及其梯度,用切线构建分段指数包络函数。
    2. 从包络函数采样,若拒绝则将样本加入网格点,更新包络函数。
  • 优势:无需手动选择q(z)q(z),随迭代优化包络,降低拒绝率。

切线的包络函数

重要性采样

直觉:你没法从目标分布p(z)p(z)中采样,但你能从另一个”差不多”的分布q(z)q(z)中采样。怎么办?你从q(z)q(z)里采样,然后给每个样本”打分”——如果这个样本在p(z)p(z)中概率高但在q(z)q(z)中概率低,就给它更高的权重;反之则降低权重。这就是重要性采样(Importance Sampling):用权重修正分布差异。

  • 目标:估计E[f]=f(z)p(z)dz\mathbb{E}[f] = \int f(z) p(z) dz,但无法直接从p(z)p(z)采样。
  • 方法:从提议分布q(z)q(z)采样,用重要性权重(Importance Weight)修正偏差: E[f]=f(z)p(z)q(z)q(z)dz1Ll=1Lp(z(l))q(z(l))f(z(l))\mathbb{E}[f] = \int f(z) \frac{p(z)}{q(z)} q(z) dz \simeq \frac{1}{L} \sum_{l=1}^L \frac{p(z^{(l)})}{q(z^{(l)})} f(z^{(l)}) 其中rl=p(z(l))q(z(l))r_l = \frac{p(z^{(l)})}{q(z^{(l)})}称为重要性权重。
  • 未归一化分布:若p(z)=p~(z)/Zpp(z) = \tilde{p}(z)/Z_pq(z)=q~(z)/Zqq(z) = \tilde{q}(z)/Z_q,则: E[f]l=1Lwlf(z(l)),wl=p~(z(l)/q(z(l))mp~(z(m)/q(z(m))\mathbb{E}[f] \simeq \sum_{l=1}^L w_l f(z^{(l)}), \quad w_l = \frac{\tilde{p}(z^{(l)}/q(z^{(l)})}{\sum_m \tilde{p}(z^{(m)}/q(z^{(m)})}
  • 局限性:若q(z)q(z)p(z)p(z)差异大,权重可能集中在少数样本上,有效样本量低,且无法诊断误差。

采样-重要性-重采样(SIR)

直觉:先用重要性采样给样本打分,然后根据分数重新抽一次——分数高的样本更容易被抽中,分数低的自然被淘汰。就像选秀节目:先海选打分,再根据分数决定谁能晋级。

  • 步骤
    1. q(z)q(z)采样LL个样本,计算权重wlw_l
    2. 从这些样本中重采样(Resampling)LL个,每个样本被选中的概率正比于wlw_l
  • 优势:无需确定拒绝采样中的kk,重采样后样本近似符合p(z)p(z)LL \to \infty时精确)。

马尔可夫链蒙特卡洛采样 {#mcmc}

直觉:想象一个醉汉在城里走路。他每一步的方向都是随机的,但有一个奇特的性质——他在人多的地方走得慢(停留更久),在人少的地方走得快。走足够长时间后,他在各个地方出现的频率就会和人密度成正比。这就是马尔可夫链蒙特卡洛(Markov Chain Monte Carlo,简称MCMC)的核心思想:构建一条随机游走的”链”,让它最终的”停留分布”恰好等于我们想要采样的目标分布。

  • 核心思想:构建马尔可夫链(Markov Chain,一种”下一步只取决于当前位置”的随机过程),使其平稳分布(Stationary Distribution,即链运行很长时间后达到的稳定分布)为目标分布p(z)p(z),通过链的迭代生成样本。

马尔可夫链基础

下一步去哪里只取决于现在的位置,与之前走过的路无关——这就是马尔可夫性(Markov Property,也叫”无记忆性”)。

  • 定义随机变量序列(Random Variable Sequence)z(1),z(2),...z^{(1)}, z^{(2)}, ...满足p(z(m+1)z(1),...,z(m))=p(m+1)z(m))p(z^{(m+1)} | z^{(1)}, ..., z^{(m)}) = p^{(m+1)} | z^{(m)})转移概率(Transition Probability)为T(z,z)=p(zz)T(z', z) = p(z | z')——表示”从zz'跳到zz的概率”。
  • 平稳分布(Stationary Distribution):经过很长时间后,系统达到平衡状态,各状态的比例不再变化。数学上:若p(z)=T(z,z)p(z)dzp^*(z) = \int T(z', z) p^*(z') dz',则p(z)p^*(z)为平稳分布。
  • 细致平衡条件(Detailed Balance):从状态A到状态B的”流量”等于从状态B到状态A的”流量”。若p(z)T(z,z)=p(z)T(z,z)p^*(z) T(z, z') = p^*(z') T(z', z),则p(z)p^*(z)是平稳分布(可逆链)。
  • 遍历性(Ergodicity):链收敛到唯一平稳分布,与初始分布无关,保证样本最终符合p(z)p(z)

Metropolis算法

直觉:醉汉走路的规则很简单——当前位置出发,随机选一个附近的位置作为候选点。如果候选点”更好”(目标概率更高),就走过去;如果”更差”,就抛硬币决定,概率正比于新旧位置的概率比值。这样保证醉汉在概率高的地方停留更久。

  • 步骤
    1. 初始状态z(0)z^{(0)},迭代生成候选样本(Candidate Sample)zq(zz(τ))z^* \sim q(z | z^{(\tau)})对称提议分布,Symmetric Proposal,即q(zAzB)=q(zBzA)q(z_A | z_B) = q(z_B | z_A))。
    2. 接受概率(Acceptance Probability):A(z,z(τ))=min(1,p~(z)p~(z(τ)))A(z^*, z^{(\tau)}) = \min(1, \frac{\tilde{p}(z^*)}{\tilde{p}(z^{(\tau)})})
    3. uU(0,1)<Au \sim U(0,1) < A,则z(τ+1)=zz^{(\tau+1)} = z^*(接受,走到新位置);否则z(τ+1)=z(τ)z^{(\tau+1)} = z^{(\tau)}(拒绝,留在原地)。
  • 性质:对称提议分布下满足细致平衡,平稳分布为p(z)p(z)
  • 局限性:样本可能高度相关(相邻样本可能相同),需间隔采样(Thinning,如保留每MM个样本)以近似独立。

Metropolis-Hastings算法

直觉:Metropolis算法要求提议分布是对称的(往左和往右的概率一样),但现实中我们可能需要不对称的提议。Metropolis-Hastings算法通过在接受概率中加入一个”修正因子”来补偿这种不对称性——就像给天平加一个配重,让它恢复平衡。

  • 改进点:放松提议分布对称性要求,接受概率调整为: A(z,z(τ))=min(1,p~(z)q(z(τ)z)p~(z(τ))q(zz(τ)))A(z^*, z^{(\tau)}) = \min\left(1, \frac{\tilde{p}(z^*) q(z^{(\tau)} | z^*)}{\tilde{p}(z^{(\tau)}) q(z^* | z^{(\tau)})}\right) 多出来的q(z(τ)z)q(zz(τ))\frac{q(z^{(\tau)} | z^*)}{q(z^* | z^{(\tau)})}就是修正因子,补偿提议分布的不对称性。
  • 优势:适用更广泛的提议分布,仍满足细致平衡。
  • 挑战:提议分布选择影响效率——方差太小则随机游走缓慢(醉汉原地踏步),太大则拒绝率高(醉汉总被弹回来)。

吉布斯采样

直觉:想象你要调整一个有很多旋钮的音响。吉布斯采样(Gibbs Sampling)的策略是:每次只转一个旋钮,其他旋钮保持不动,根据条件概率决定这个旋钮该转到什么位置。轮流调整每个旋钮,最终音响就会达到最佳状态。每次只动一个维度,大大简化了采样难度。

  • 适用场景:高维分布p(z1,...,zM)p(z_1, ..., z_M),可以方便地采样条件分布(Conditional Distribution)p(ziz\i)p(z_i | z_{\backslash i})z\iz_{\backslash i} 为除ziz_i外的所有变量)。
  • 步骤
    1. 初始化z(0)=(z1(0),...,zM(0))z^{(0)} = (z_1^{(0)}, ..., z_M^{(0)})
    2. 迭代更新每个变量:zi(τ+1)p(ziz1(τ+1),...,zi1(τ+1),zi+1(τ),...,zM(τ))z_i^{(\tau+1)} \sim p(z_i | z_1^{(\tau+1)}, ..., z_{i-1}^{(\tau+1)}, z_{i+1}^{(\tau)}, ..., z_M^{(\tau)})
  • 原理:每次更新满足细致平衡,平稳分布为p(z)p(z),且接受率为1(属于Metropolis-Hastings的特例——所有候选点都被接受)。
  • 改进块吉布斯采样(Block Gibbs Sampling,同时更新一组变量)减少相关性;过松弛(Over-relaxation)加速收敛。

祖先采样

身高 ← 父母平均身高 + 随机因素——这种”由因到果”的采样方式就是祖先采样(Ancestral Sampling)。

  • 适用场景有向图模型(Directed Graphical Model,即用箭头表示因果关系的概率图模型,无观测变量),联合分布p(z)=p(zipa(i))p(z) = \prod p(z_i | \text{pa}(i))pa(i)\text{pa}(i)父节点,Parent Node)。
  • 步骤:按拓扑序(Topological Order,即从”祖先”到”后代”的顺序)采样,每个变量从其条件分布p(zipa(i))p(z_i | \text{pa}(i))采样(父节点已确定)。
  • 扩展似然加权采样(Likelihood Weighted Sampling,处理观测变量),为观测变量赋予权重p(zipa(i))\prod p(z_i | \text{pa}(i))

朗之万采样

能量模型

直觉:想象一个地形图——山谷(低能量区)对应高概率区域,山峰(高能量区)对应低概率区域。能量模型(Energy-Based Model)就是用一个”能量函数”来定义概率分布:能量越低的地方,概率越高。

  • 定义:通过能量函数(Energy Function)E(x,w)E(x, w)定义分布: p(xw)=1Z(w)eE(x,w),Z(w)=eE(x,w)dxp(x | w) = \frac{1}{Z(w)} e^{-E(x, w)}, \quad Z(w) = \int e^{-E(x, w)} dx 其中Z(w)Z(w)配分函数(Partition Function,即归一化常数,通常难以计算——它要对整个空间积分)。
  • 训练挑战:似然函数依赖Z(w)Z(w),需近似梯度。

似然最大化

直觉:训练能量模型就像调整地形——在真实数据出现的地方”挖低”(降低能量,提高概率),在模型错误生成的地方”堆高”(升高能量,降低概率)。

  • 梯度公式wExpD[lnp(xw)]=ExpD[wE(x,w)]+ExpM[wE(x,w)]\nabla_w \mathbb{E}_{x \sim p_D}[\ln p(x | w)] = -\mathbb{E}_{x \sim p_D}[\nabla_w E(x, w)] + \mathbb{E}_{x \sim p_M}[\nabla_w E(x, w)] 其中pDp_D数据分布(Data Distribution,真实数据的概率分布),pMp_M模型分布(Model Distribution,模型定义的概率分布)。 似然最大化

能量函数E(x, w)(绿色)及相关的模型分布pM(x)和真实数据分布pD(x)。利用上式增加期望的对数似然,会在与模型样本(用蓝点表示)对应的点处推高能量函数,并在与数据集样本(用红点表示)对应的点处拉低能量函数

朗之万动力学(采样过程)

直觉:想象一个小球在能量地形上滚动。它会沿着”下坡”方向(梯度方向)滑动,同时受到随机扰动(就像布朗运动中的分子碰撞)。这样小球最终会集中在山谷中(高概率区域),而不会卡在某个局部最低点。这就是朗之万动力学(Langevin Dynamics)——利用梯度信息引导采样,同时加入随机噪声避免陷入局部最优。

  • 原理:利用梯度信息引导采样,更新公式: x(τ+1)=x(τ)+ηxlnp(x(τ),w)+2ηϵ(τ)x^{(\tau+1)} = x^{(\tau)} + \eta \nabla_x \ln p(x^{(\tau)}, w) + \sqrt{2\eta} \epsilon^{(\tau)} 其中ϵ(τ)N(0,I)\epsilon^{(\tau)} \sim \mathcal{N}(0, I)η\eta步长(Step Size),xlnp(x,w)=xE(x,w)\nabla_x \ln p(x, w) = -\nabla_x E(x, w)得分函数,Score Function,即对数概率的梯度)。
  • 性质η0\eta \to 0且迭代足够多时,样本收敛到p(xw)p(x | w)
  • 对比散度(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\mu_k表示第k个簇的中心),我们用数据点到其所属簇中心的距离平方和来衡量聚类的好坏,这个值越小越好。

为了表示”数据点属于哪个簇”,引入指示器变量(Indicator Variable,一种0/1标记)rnkr_{nk}

  • 如果第n个数据点属于第k个簇,rnk=1r_{nk}=1
  • 否则,rnk=0r_{nk}=0(每个数据点只属于一个簇,所以对每个n,只有一个rnk=1r_{nk}=1)。

于是,“距离平方和”可以写成公式:

J=n=1Nk=1Krnkxnμk2J = \sum_{n=1}^N \sum_{k=1}^K r_{nk} \|x_n - \mu_k\|^2

我们的目标就是找到最优的rnkr_{nk}μk\mu_k,让J最小。


K-means通过两步反复迭代来优化J,直到结果不再变化:

  1. E步(分配步骤):固定簇中心μk\mu_k,给每个数据点找最近的簇
    对每个数据点xnx_n,计算它到所有簇中心的距离,哪个最近就把它分到哪个簇,即:

    rnk={1如果 k 是距离 xn 最近的簇中心0其他情况r_{nk} = \begin{cases}1 & \text{如果 } k \text{ 是距离 } x_n \text{ 最近的簇中心} \\ 0 & \text{其他情况}\end{cases}

    比如,假设数据点x1x_1μ1\mu_1的距离是2,到μ2\mu_2的距离是5,那r11=1r_{11}=1r12=0r_{12}=0

  2. M步(更新步骤):固定分配rnkr_{nk},重新计算簇中心
    每个簇的新中心,就是该簇所有数据点的“平均”(均值):

    μk=n=1Nrnkxnn=1Nrnk\mu_k = \frac{\sum_{n=1}^N r_{nk} x_n}{\sum_{n=1}^N r_{nk}}

    比如,第1个簇有3个数据点x2,x5,x7x_2, x_5, x_7,那μ1=(x2+x5+x7)/3\mu_1 = (x_2 + x_5 + x_7)/3

例子

使用黄石公园Old Faithful间歇泉的数据(每个数据点有两个特征:喷发持续时间和下次喷发等待时间)。当K=2时——就像把间歇泉分成”喷得久等得久”和”喷得短等得短”两类:

  • 初始时随便选两个点作为μ1\mu_1μ2\mu_2
  • E步:每个数据点被分到离自己近的中心所属的簇(相当于画一条垂直平分线,线两边分属两个簇);
  • M步:根据分配结果,计算两个簇的新中心(比如左边簇的所有点的平均);
  • 重复以上步骤,直到簇中心不再变化(收敛)。

黄石公园

黄石公园k-means算法

  • K-means一定会在有限步内收敛(因为分配方式有限,且J每次迭代只会减小或不变),但可能收敛到“局部最优”(不是最好的聚类结果),所以通常会多试几次不同的初始中心。
  • 需要提前指定K(比如通过经验或其他方法判断)。

高斯混合分布

直觉:K-means是”硬聚类”——每个点只属于一个簇,非黑即白。但现实中有些点可能”模糊”,比如一个在两个簇中间的点,你很难说它完全属于哪个。高斯混合模型(Gaussian Mixture Model,简称GMM)用”软聚类”(Soft Clustering,每个点以一定概率属于不同簇)来解决这个问题——就像说”这个水果70%像苹果,30%像梨”。

GMM假设观测数据是从K个高斯分布(即正态分布,第二篇笔记中有详细介绍)中”混合”生成的:

  • 先从K个高斯分布中选一个(选第k个的概率是πk\pi_kπk\pi_k混合系数(Mixing Coefficient,即每个高斯分量的”权重”),满足πk=1\sum \pi_k=1);
  • 再从选中的高斯分布中生成一个数据点。

所以,数据x的概率分布是:

p(x)=k=1KπkN(xμk,Σk)p(x) = \sum_{k=1}^K \pi_k \mathcal{N}(x | \mu_k, \Sigma_k)

其中N(xμk,Σk)\mathcal{N}(x | \mu_k, \Sigma_k)是第k个高斯分布(均值μk\mu_k,协方差Σk\Sigma_k,详见第二篇笔记中的高斯分布介绍)。


引入离散潜变量z(1-of-K编码):

  • 潜变量的概率:p(zk=1)=πkp(z_k=1) = \pi_k(选第k个高斯的概率);
  • 给定z=k时,x的概率:p(xzk=1)=N(xμk,Σk)p(x | z_k=1) = \mathcal{N}(x | \mu_k, \Sigma_k)

于是,x和z的联合分布是p(x,z)=p(z)p(xz)p(x,z) = p(z)p(x|z),而GMM的分布就是对z求和的边际分布:p(x)=zp(x,z)p(x) = \sum_z p(x,z)


对于一个数据点x,它来自第k个高斯的后验概率(Posterior Probability,即知道结果x后,反推原因的概率)叫**”责任”**(Responsibility),记为γ(zk)\gamma(z_k)——可以理解为”第k个高斯对这个数据点的贡献度”:

γ(zk)=p(zk=1x)=πkN(xμk,Σk)j=1KπjN(xμj,Σj)\gamma(z_k) = p(z_k=1 | x) = \frac{\pi_k \mathcal{N}(x | \mu_k, \Sigma_k)}{\sum_{j=1}^K \pi_j \mathcal{N}(x | \mu_j, \Sigma_j)}

比如,x有70%的概率来自第1个高斯,30%来自第2个,那γ(z1)=0.7\gamma(z_1)=0.7γ(z2)=0.3\gamma(z_2)=0.3,这就是“软分配”。

GMM的参数有πk\pi_kμk\mu_kΣk\Sigma_k,需要通过数据估计。由于概率公式里有求和再取对数(lnπkN(...)\ln \sum \pi_k \mathcal{N}(...) ),直接求最大值很麻烦,这时候需要用EM算法

EM算法 {#em-algorithm}

直觉:想象你在一个黑暗的房间里找最深的坑。你看不见坑在哪里(潜变量未知),但你可以:

  1. ——根据当前脚下地面的倾斜度,猜测坑大概在哪个方向(E步);
  2. 走一步——朝那个方向走一步(M步);
  3. 重复——到了新位置再猜、再走,直到走不动了(收敛)。

这就是EM算法(Expectation-Maximization Algorithm,期望最大化算法)的核心——“猜测-验证-改进”的循环。

EM算法是处理含潜变量模型的通用方法,核心思想是:通过”猜”潜变量的值(E步),再用猜的值估计参数(M步),反复迭代直到参数稳定。

假设我们有观测数据X和潜变量Z,模型参数为θ\theta,目标是最大化似然(Likelihood,即模型参数下观测数据出现的概率)p(Xθ)p(X | \theta)

  1. E步(期望步,Expectation Step):计算”完整数据对数似然的期望” 完整数据是(X,Z),但Z未知,所以用当前参数θold\theta^{old}计算Z的后验分布p(ZX,θold)p(Z | X, \theta^{old}) ,再求完整数据对数似然的期望(叫Q函数):

    Q(θ,θold)=Zp(ZX,θold)lnp(X,Zθ)\mathcal{Q}(\theta, \theta^{old}) = \sum_Z p(Z | X, \theta^{old}) \ln p(X,Z | \theta)

    其中 Z\sum_Z 是对潜变量 ZZ 的所有可能取值求和,p(ZX,θold)p(Z | X, \theta^{old}) 是用旧参数算出的潜变量后验(“E步的猜测”),lnp(X,Zθ)\ln p(X,Z | \theta) 是完整数据的对数似然。简单说:Q函数就是”在旧参数的猜测下,新参数 θ\theta 有多好”的打分。

  2. M步(最大化步,Maximization Step):最大化Q函数得到新参数 找θnew\theta^{new}使得Q(θ,θold)\mathcal{Q}(\theta, \theta^{old})最大:

    θnew=argmaxθQ(θ,θold)\theta^{new} = \arg\max_\theta \mathcal{Q}(\theta, \theta^{old})

重复以上两步,直到参数不再变化。

EM在GMM中的应用

对于GMM,参数是θ={πk,μk,Σk}\theta = \{\pi_k, \mu_k, \Sigma_k\},EM步骤如下:

  • E步:计算每个数据点xnx_n对每个簇k的责任γ(znk)\gamma(z_{nk})(用上面的责任公式);
  • M步:用责任更新参数:
    • 有效点数:Nk=n=1Nγ(znk)N_k = \sum_{n=1}^N \gamma(z_{nk})(每个点的责任加起来,类似“加权计数”);
    • 均值:μk=1Nkn=1Nγ(znk)xn\mu_k = \frac{1}{N_k} \sum_{n=1}^N \gamma(z_{nk}) x_n(加权平均);
    • 协方差:Σk=1Nkn=1Nγ(znk)(xnμk)(xnμk)T\Sigma_k = \frac{1}{N_k} \sum_{n=1}^N \gamma(z_{nk}) (x_n - \mu_k)(x_n - \mu_k)^T(加权方差);
    • 混合系数:πk=NkN\pi_k = \frac{N_k}{N}(有效点数占总点数的比例)。

EM算法能保证每次迭代后,似然p(Xθ)p(X | \theta)不会减小(只会增大或不变),所以最终会收敛到局部最优。

黄石公园EM算法

黄石公园EM算法

证据下界

证据下界ELBO(Evidence Lower Bound)是一个数学工具,能帮助我们理解为什么EM算法有效,还能扩展到更多复杂模型(比如变分自编码器)。它的核心思想是:直接优化似然很难(因为有潜变量的求和/积分),但我们可以优化似然的一个”下界”——一个更容易计算的替代目标。

似然的分解

对于任意分布q(Z)q(Z)(可以是我们随便选的关于潜变量Z的分布),观测数据的对数似然可以分解为:

lnp(Xθ)=L(q,θ)+KL(qp)\ln p(X | \theta) = \mathcal{L}(q, \theta) + KL(q \| p)

其中:

  • L(q,θ)\mathcal{L}(q, \theta) 就是ELBO,公式为:L(q,θ)=Zq(Z)ln(p(X,Zθ)q(Z))\mathcal{L}(q, \theta) = \sum_Z q(Z) \ln \left( \frac{p(X,Z | \theta)}{q(Z)} \right)
  • KL(qp)KL(q \| p)Kullback-Leibler散度(KL Divergence,衡量两个分布差异的指标,可以理解为”用分布q去编码分布p时浪费的额外信息量”),且KL(qp)0KL(q \| p) \ge 0(当且仅当q(Z)=p(ZX,θ)q(Z) = p(Z | X, \theta)时等于0)。

因为KL(qp)0KL(q \| p) \ge 0,所以L(q,θ)lnp(Xθ)\mathcal{L}(q, \theta) \le \ln p(X | \theta),即ELBO是对数似然的“下界”。

EM算法其实就是在优化这个下界:

  • E步:选q(Z)=p(ZX,θold)q(Z) = p(Z | X, \theta^{old}),此时KL=0KL=0,ELBO等于当前似然;
  • M步:固定q,最大化ELBO得到θnew\theta^{new},此时似然也会增大(因为下界提高了)。

EM算法-证据下界

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,即平均值)x\overline{x},将数据中心化(Centering,即减去均值使数据以原点为中心):

    x=1Nn=1Nxn\overline{x} = \frac{1}{N}\sum_{n=1}^N x_n

    其中xnx_n是D维数据点,NN是样本数。

  • 投影方差:对于1维主成分(M=1M=1),用单位向量u1u_1表示投影方向,数据点xnx_n的投影值为u1Txnu_1^T x_n,投影后的方差为:

    1Nn=1N(u1Txnu1Tx)2=u1TSu1\frac{1}{N}\sum_{n=1}^N (u_1^T x_n - u_1^T \overline{x})^2 = u_1^T S u_1

    其中SS是数据协方差矩阵(Covariance Matrix,描述数据各维度之间相关性的方阵,对角线是各维度的方差):

    S=1Nn=1N(xnx)(xnx)TS = \frac{1}{N}\sum_{n=1}^N (x_n - \overline{x})(x_n - \overline{x})^T
  • 优化投影方向:在u1Tu1=1u_1^T u_1 = 1(单位向量约束)下最大化方差,通过拉格朗日乘数法可得:

    Su1=λ1u1S u_1 = \lambda_1 u_1

    u1u_1SS特征向量(Eigenvector,即矩阵作用下方向不变的向量),λ1\lambda_1是对应的特征值(Eigenvalue,即特征向量被拉伸的倍数)。最大方差对应最大特征值的特征向量(第一主成分,First Principal Component)。

  • 高维主成分:对于MM维主成分空间,最优投影方向是协方差矩阵SS的前MM个最大特征值对应的特征向量u1,u2,...,uMu_1, u_2, ..., u_M

最小误差形式化

PCA的另一个等价定义是:找到低维子空间,使数据点到其投影的平均平方距离(投影误差,Projection Error)最小。“最大方差”和”最小误差”是同一件事的两面——投影方差越大,丢失的信息就越少,误差就越小。

  • 投影误差:用MM个正交基向量u1,...,uMu_1, ..., u_M张成主成分空间,数据点xnx_n的投影为x~n\tilde{x}_n,误差为:

    J=1Nn=1Nxnx~n2J = \frac{1}{N}\sum_{n=1}^N \|x_n - \tilde{x}_n\|^2
  • 最优投影:通过推导可知,最小误差对应选择协方差矩阵SS的前MM个最大特征值的特征向量作为基向量,此时误差为:

    J=i=M+1DλiJ = \sum_{i=M+1}^D \lambda_i

    即误差等于被丢弃的特征值之和。

PCA

主子空间用洋红色线条表示,PCA使数据点(红色点)在主子空间中的正交投影能够最大化投影点(绿色点)的方差。误差用蓝色线条表示

数据压缩

PCA可用于数据压缩:将D维数据xnx_n投影到MM维主成分空间,用投影系数表示数据。

  • 重构数据:压缩后的数据可通过投影系数重构: x~n=x+i=1M(xnTuixTui)ui\tilde{x}_n = \overline{x} + \sum_{i=1}^M (x_n^T u_i - \overline{x}^T u_i) u_i 其中(xnTuixTui)(x_n^T u_i - \overline{x}^T u_i)MM维投影系数。

PCA数据压缩

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

数据压缩

一个手写数字及其通过保留M个主成分而获得的PCA重构结果。随着M值的增加,重构变得更准确

数据白化

白化(Whitening)是一种数据预处理,将数据转换为零均值、单位协方差且各维度不相关的形式——就像把一团任意形状的云”揉”成一个标准的球形。白化后的数据更容易被机器学习算法处理。

  • 白化步骤
    1. 中心化数据(减去均值);
    2. 计算协方差矩阵SS的特征值λi\lambda_i和特征向量uiu_i
    3. 变换数据: yn=L1/2UT(xnx)y_n = L^{-1/2} U^T (x_n - \overline{x}) 其中UU是特征向量矩阵,LL是特征值对角矩阵。变换后的数据协方差为单位矩阵。

白化对数据的影响

白化后的数据,均值为0,协方差为单位矩阵

高维数据处理

当数据维度DD远大于样本数NN时,直接计算协方差矩阵SSD×DD×D)代价高。此时可通过低维矩阵运算简化:

  • 定义中心化数据矩阵XXN×DN×D,每行是xnxx_n - \overline{x}),则S=N1XTXS = N^{-1} X^T X
  • 计算XXTX X^TN×NN×N)的特征值和特征向量,间接得到SS的特征值和特征向量,计算代价从O(D3)O(D^3)降为O(N3)O(N^3)

概率潜变量

传统PCA是确定性的(Deterministic,即给定数据,结果唯一),概率PCA(Probabilistic PCA)将其推广为概率模型(Probabilistic Model,即用概率分布来描述不确定性),更灵活且便于处理缺失数据、进行贝叶斯推断(Bayesian Inference,即用概率来表达不确定性并根据新数据更新信念)等。

生成模型

概率PCA假设数据由“潜变量→观测变量”的生成过程产生:

  • 潜变量MM维潜变量zN(z0,I)z \sim \mathcal{N}(z | 0, I)(零均值、单位协方差高斯);
  • 观测变量:给定zzDD维观测变量xN(xWz+μ,σ2I)x \sim \mathcal{N}(x | W z + \mu, \sigma^2 I),其中WWD×MD×M映射矩阵,μ\mu 是均值,σ2\sigma^2是噪声方差。

生成过程可写为:x=Wz+μ+ϵx = W z + \mu + \epsilon,其中ϵN(0,σ2I)\epsilon \sim \mathcal{N}(0, \sigma^2 I)是噪声(图16.7展示了该生成过程的直观示意图)。

似然函数

边际分布p(x)p(x)(对zz积分)仍是高斯分布: p(x)=N(xμ,C)p(x) = \mathcal{N}(x | \mu, C) 其中协方差矩阵C=WWT+σ2IC = W W^T + \sigma^2 I

  • 对数似然:给定数据集X={xn}X = \{x_n\},对数似然为:

    lnp(Xμ,W,σ2)=ND2ln(2π)N2lnC12n=1N(xnμ)TC1(xnμ)\ln p(X | \mu, W, \sigma^2) = -\frac{ND}{2}\ln(2\pi) - \frac{N}{2}\ln|C| - \frac{1}{2}\sum_{n=1}^N (x_n - \mu)^T C^{-1} (x_n - \mu)
  • 后验分布:给定xx,潜变量zz的后验分布也是高斯:

    p(zx)=N(zM1WT(xμ),σ2M1)p(z | x) = \mathcal{N}(z | M^{-1} W^T (x - \mu), \sigma^2 M^{-1})

    其中M=WTW+σ2IM = W^T W + \sigma^2 I(图16.8展示了概率PCA的图模型结构)。

最大似然估计

通过最大化对数似然求解参数:

  • 均值μ\mu:最优解为数据均值μ=x\mu = \overline{x}
  • 映射矩阵WW:最大似然解为WML=UM(LMσ2I)1/2RW_{ML} = U_M (L_M - \sigma^2 I)^{1/2} R,其中UMU_MSS的前MM个特征向量,LML_M 是对应特征值,RR是正交矩阵(潜空间旋转);
  • 噪声方差σ2\sigma^2:最优解为被丢弃特征值的平均: σML2=1DMi=M+1Dλi\sigma_{ML}^2 = \frac{1}{D - M}\sum_{i=M+1}^D \lambda_i

因子分析

因子分析(Factor Analysis)与概率PCA类似,但观测变量的条件协方差是对角矩阵(Diagonal Matrix,即只有对角线上有值,各维度噪声独立但可以不同),而非各向同性(所有方向噪声相同):

  • 条件分布:p(xz)=N(xWz+μ,Ψ)p(x | z) = \mathcal{N}(x | W z + \mu, \Psi),其中Ψ\Psi是对角矩阵(各维度独立噪声);
  • 边际协方差:C=WWT+ΨC = W W^T + \Psi,更灵活地建模不同维度的噪声。

独立成分分析ICA

独立成分分析(Independent Component Analysis,简称ICA)假设潜变量是统计独立的(Statistically Independent,即一个变量的信息不能帮助推断另一个)非高斯变量,用于盲源分离(Blind Source Separation,如从混合声音中分离出各个说话人)等问题:

  • 潜变量分布:p(z)=j=1Mp(zj)p(z) = \prod_{j=1}^M p(z_j)(因子化,非高斯);
  • 观测变量:x=Wz+μx = W z + \mu(无噪声,或低噪声)。通过最大化似然,可从混合信号中分离出独立源(如分离混合的语音信号)。

卡尔曼滤波器

卡尔曼滤波器(Kalman Filter)用于序列数据(Sequential Data,如时间序列),潜变量形成马尔可夫链(即每个时刻的潜变量只依赖前一时刻):

  • 潜变量:znp(znzn1)z_n \sim p(z_n | z_{n-1})(高斯,均值是zn1z_{n-1}的线性函数);
  • 观测变量:xnN(xnWzn+μ,σ2I)x_n \sim \mathcal{N}(x_n | W z_n + \mu, \sigma^2 I)。适用于实时跟踪(如雷达跟踪飞机)。

证据下界ELBO

与离散潜变量类似,连续潜变量模型的对数似然可分解为ELBO和KL散度之和(这个分解在第15章已经介绍过):

lnp(xw)=L(q,w)+KL(q(z)p(zx,w))\ln p(x | w) = \mathcal{L}(q, w) + KL(q(z) \| p(z | x, w))
  • ELBO

    L(q,w)=q(z)ln(p(x,zw)q(z))dz\mathcal{L}(q, w) = \int q(z) \ln\left( \frac{p(x, z | w)}{q(z)} \right) dz KL(q,w)=q(z)ln(p(zx,w)q(z))dz\mathcal{KL}(q, w) = - \int q(z) \ln\left( \frac{p(z| x , w)}{q(z)} \right) dz

    是对数似然的下界(因KL0KL \geq 0)。

  • 意义:ELBO是变分推断(Variational Inference,一种用优化方法近似推断的技术)的核心,通过优化q(z)q(z)和模型参数ww,可间接最大化对数似然。

概率 PCA 的 EM 算法

概率PCA也可以用EM算法来学习参数。直觉上:E步猜测每个数据点的”隐藏坐标”(潜变量z),M步根据这些猜测更新映射矩阵W。下面是完整的公式推导——如果你只关心直觉,可以跳过公式部分。

概率PCA的EM算法完整公式
  1. 初始化:选择潜在空间维度 MM,并初始化模型参数 W\mathbf{W}(权重矩阵)和 σ2\sigma^2(噪声方差)。初始化方法可以是随机初始化,或使用传统 PCA 的前 MM 个主成分作为 W\mathbf{W} 的初始值。

  2. E 步(计算后验分布的期望): 在给定当前参数 W\mathbf{W}σ2\sigma^2 以及观测数据 xn\mathbf{x}_n 的条件下,计算潜在变量 zn\mathbf{z}_n 的后验分布 p(znxn,W,σ2)p(\mathbf{z}_n | \mathbf{x}_n, \mathbf{W}, \sigma^2) 的期望。 根据公式下面两个,需要计算两个关键的充分统计量(Sufficient Statistic,即包含所有参数估计所需信息的统计量):

    E[zn]=M1WT(xnμ)\mathbb{E}[\mathbf{z}_n] = \mathbf{M}^{-1}\mathbf{W}^T(\mathbf{x}_n - \mathbf{\mu}) E[znznT]=σ2M1+E[zn]E[zn]T\mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T] = \sigma^2\mathbf{M}^{-1} + \mathbb{E}[\mathbf{z}_n]\mathbb{E}[\mathbf{z}_n]^T

    其中 M=WTW+σ2I\mathbf{M} = \mathbf{W}^T\mathbf{W} + \sigma^2\mathbf{I}E[zn]\mathbb{E}[\mathbf{z}_n] 是后验均值,E[znznT]\mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T] 是后验二阶矩。

  3. M 步(更新模型参数): 利用 E 步计算出的期望,更新参数 W\mathbf{W}σ2\sigma^2

  • 更新 W\mathbf{W}Wnew=(n=1N(xnμ)E[zn]T)(n=1NE[znznT])1\mathbf{W}_{\text{new}} = \left( \sum_{n=1}^N (\mathbf{x}_n - \mathbf{\mu}) \mathbb{E}[\mathbf{z}_n]^T \right) \left( \sum_{n=1}^N \mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T] \right)^{-1}
  • 更新 σ2\sigma^2σnew2=1ND{n=1Nxnμ2Tr((n=1N(xnμ)E[zn]T)WnewT)+Tr((n=1NE[znznT])WnewTWnew)}\sigma^2_{\text{new}} = \frac{1}{ND} \left\{ \sum_{n=1}^N \| \mathbf{x}_n - \mathbf{\mu} \|^2 - \text{Tr} \left( \left( \sum_{n=1}^N (\mathbf{x}_n - \mathbf{\mu}) \mathbb{E}[\mathbf{z}_n]^T \right) \mathbf{W}_{\text{new}}^T \right) + \text{Tr} \left( \left( \sum_{n=1}^N \mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T] \right) \mathbf{W}_{\text{new}}^T\mathbf{W}_{\text{new}} \right) \right\} 这里的 Tr()\text{Tr}(\cdot) 表示矩阵的迹(Trace,即对角线元素之和)。
  1. 迭代:重复 E 步和 M 步,直到参数收敛或达到最大迭代次数。

EM 算法的优势

相比于传统的基于特征值分解(Eigendecomposition,即把矩阵分解为特征向量和特征值)的 PCA,EM 算法在处理大规模数据时具有显著的计算优势。

  • 传统PCA的计算复杂度: 首先计算数据协方差矩阵 S=1Nn=1N(xnxˉ)(xnxˉ)T\mathbf{S} = \frac{1}{N}\sum_{n=1}^N (\mathbf{x}_n - \bar{\mathbf{x}})(\mathbf{x}_n - \bar{\mathbf{x}})^T ,复杂度为 O(ND2)O(ND^2)

    • 然后对 D×DD \times D 的协方差矩阵进行特征值分解,复杂度为 O(D3)O(D^3)
    • 如果只计算前 MM 个主成分,可以使用更高效的算法(如幂迭代),复杂度约为 O(MD2)O(MD^2),但计算协方差矩阵的 O(ND2)O(ND^2) 仍然是瓶颈。
  • EM 算法的计算复杂度

    • E 步和 M 步中最耗时的操作是遍历所有数据点并计算和式,例如 n=1N(xnμ)E[zn]T\sum_{n=1}^N (\mathbf{x}_n - \mathbf{\mu}) \mathbb{E}[\mathbf{z}_n]^T
    • 每个数据点的计算复杂度主要涉及 D×MD \times M 的矩阵运算。
    • 因此,每轮迭代的总复杂度为 O(NDM)O(NDM)

结论:当数据维度 DD 很大,且我们感兴趣的主成分数量 MM 远小于 DD(即 MDM \ll D)时,EM 算法的 O(NDM)O(NDM) 复杂度远优于传统 PCA 的 O(ND2)O(ND^2)O(D3)O(D^3) 复杂度。尽管 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 步中,E[zn]\mathbb{E}[\mathbf{z}_n]E[znznT]\mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T] 的计算是针对每个数据点 xn\mathbf{x}_n 单独进行的。在 M 步中,参数更新依赖于对所有数据点的期望值的累加和n=1N\sum_{n=1}^N \cdots)。
  • 实现:我们可以逐个读取数据点 xn\mathbf{x}_n,立即计算其 E[zn]\mathbb{E}[\mathbf{z}_n]E[znznT]\mathbb{E}[\mathbf{z}_n\mathbf{z}_n^T],然后将这些值增量地累加到总和中。处理完一个数据点后,就可以将其从内存中丢弃。
  • 优势:这种方法的内存消耗是 O(DM)O(DM)(存储累加和),而不是 O(ND)O(ND)(存储整个数据集)。当数据量 NN 非常大,无法一次性加载到内存时,这种在线形式至关重要。

处理缺失数据

概率 PCA 的一个强大特性是它能够自然地处理缺失数据

  • 假设数据是“随机缺失”(missing at random, MAR)的,即某个值缺失的概率不依赖于该值本身(但可以依赖于其他已观测到的值)。
  • 方法:对于包含缺失值的数据点 xn\mathbf{x}_n,在 E 步和 M 步中,我们只对已观测到的变量进行计算。具体来说:
    • 在计算后验分布 p(znxn,W,σ2)p(\mathbf{z}_n | \mathbf{x}_n, \mathbf{W}, \sigma^2) 时,只使用 xn\mathbf{x}_n 中已观测到的部分。
    • 在更新参数时,求和只针对已观测到的变量进行。
  • 结果:通过 EM 算法,我们可以同时估计模型参数和对缺失值进行插补,即根据模型和已观测数据预测缺失值。

非线性潜变量模型

PCA及其概率版本假设数据位于一个线性子空间(Linear Subspace,即直线、平面或高维超平面)中。这意味着数据点大致分布在一条直线、一个平面或一个高维超平面上。

然而,许多真实世界的数据具有复杂的、非线性的结构。例如,一个“S”形的曲线数据集无法被一条直线很好地近似。线性模型在这种情况下会丢失重要的结构信息。

非线性流形

直觉:想象一张皱巴巴的纸——它本质上是2D的,但嵌在3D空间中,无法用一个平面来近似。非线性流形模型就是要学会”展平”这种皱巴巴的数据。

为了捕捉数据中的非线性结构,我们需要将线性映射 x=Wz+μ+ϵ\mathbf{x} = \mathbf{W}\mathbf{z} + \mathbf{\mu} + \mathbf{\epsilon} 推广为一个非线性映射(Nonlinear Mapping)。这就是深度神经网络的用武之地——用网络来学习这个复杂的非线性函数。

  • 生成过程
    1. 从一个先验分布(通常是标准正态分布)中采样潜在变量 z\mathbf{z}p(z)=N(z0,I)p(\mathbf{z}) = \mathcal{N}(\mathbf{z} | \mathbf{0}, \mathbf{I})
    2. 通过一个非线性函数 f(z;w)f(\mathbf{z}; \mathbf{w})z\mathbf{z} 映射到数据空间。这个函数通常由一个深度神经网络(Deep Neural Network, DNN,即有多层隐藏层的神经网络,详见第三篇笔记)实现,其参数为 w\mathbf{w}
    3. 加上噪声 ϵ\mathbf{\epsilon} (通常假设为高斯噪声 N(ϵ0,σ2I)\mathcal{N}(\mathbf{\epsilon} | \mathbf{0}, \sigma^2\mathbf{I}))得到观测数据 x\mathbf{x}x=f(z;w)+ϵ\mathbf{x} = f(\mathbf{z}; \mathbf{w}) + \mathbf{\epsilon}
  • 模型表达:观测数据的条件分布为: p(xz,w)=N(xf(z;w),σ2I)p(\mathbf{x} | \mathbf{z}, \mathbf{w}) = \mathcal{N}(\mathbf{x} | f(\mathbf{z}; \mathbf{w}), \sigma^2\mathbf{I})

似然函数

在概率模型中,我们的目标是最大化边缘似然(Marginal Likelihood)或证据(Evidence):

p(xw)=p(xz,w)p(z)dzp(\mathbf{x} | \mathbf{w}) = \int p(\mathbf{x} | \mathbf{z}, \mathbf{w}) p(\mathbf{z}) d\mathbf{z}

这个积分对所有可能的潜在变量 z\mathbf{z} 进行了边缘化。

  • 问题:在非线性模型中,由于 f(z;w)f(\mathbf{z}; \mathbf{w}) 是一个复杂的非线性函数,这个积分通常是无法解析计算的。
  • 近似方法:一种直观的方法是使用蒙特卡洛积分(Monte Carlo Integration,即用随机采样来近似积分,本章开头已介绍)来近似: p(xw)1Ki=1Kp(xzi,w)其中zip(z)p(\mathbf{x} | \mathbf{w}) \approx \frac{1}{K} \sum_{i=1}^K p(\mathbf{x} | \mathbf{z}_i, \mathbf{w}) \quad \text{其中} \quad \mathbf{z}_i \sim p(\mathbf{z}) 这将边缘似然近似为一个由 KK 个样本构成的混合高斯模型(即多个高斯分布的加权和,本章前面已介绍)。

为什么蒙特卡洛近似在实践中不可行?

  • 场景:考虑一个训练好的模型,我们想评估一个真实数据点 x\mathbf{x}(如下图)的似然。
  • 模型生成:我们从先验 p(z)p(\mathbf{z}) 中采样 zi\mathbf{z}_i,通过 f(zi;w)f(\mathbf{z}_i; \mathbf{w}) 生成一个图像 x^i\hat{\mathbf{x}}_i
  • 问题:即使模型整体上能生成很好的数字,但生成的图像 x^i\hat{\mathbf{x}}_i 与真实图像 x\mathbf{x} 在像素空间上精确匹配的概率极低。例如:
    • 图 (b) 是一个很差的“2”,与 (a) 的平方距离为 0.0387。
    • 图 (c) 是一个很好的“2”,只是向下向右移动了半像素,但与 (a) 的平方距离高达 0.2693。
  • 似然计算:由于 p(xzi,w)p(\mathbf{x} | \mathbf{z}_i, \mathbf{w}) 是高斯分布,其值与 exp(xf(zi;w)2/(2σ2))\exp(-\|\mathbf{x} - f(\mathbf{z}_i; \mathbf{w})\|^2 / (2\sigma^2)) 成正比。
  • 困境
    • 如果我们设置 σ2\sigma^2 很小,以确保只有非常接近的图像才有高似然,那么即使是像 (c) 这样语义上完美的图像,也会因为像素级的微小偏移而具有极低的似然。
    • 如果我们设置 σ2\sigma^2 很大,那么所有图像(包括像 (b) 这样的坏图像)都会有较高的似然,失去了区分好坏的能力。
  • 结论:为了得到一个准确的似然估计,我们需要巨大的 KK 值,使得在采样中能偶然生成一个与 x\mathbf{x} 几乎完全相同的 x^i\hat{\mathbf{x}}_i。这在计算上是不切实际的。

不可行

手写数字,为什么从潜空间采样以计算似然函数要大样本

由于直接最大化边缘似然不可行,我们需要更高级的技术来训练非线性潜在变量模型。这引出后续章节介绍的四种主要方法。

离散数据

当观测数据是离散的(如二值变量或分类变量)时,我们需要使用不同的条件分布。

  • 独立二值变量: 如果数据集由 DD 个独立的二值变量(Binary Variable,即只取0或1的变量)组成,我们可以使用伯努利分布(Bernoulli Distribution,第二篇笔记中有介绍)的乘积:

    p(xz,w)=i=1Dgi(z,w)xi(1gi(z,w))1xip(\mathbf{x} | \mathbf{z}, \mathbf{w}) = \prod_{i=1}^D g_i(\mathbf{z}, \mathbf{w})^{x_i} (1 - g_i(\mathbf{z}, \mathbf{w}))^{1-x_i}

    其中 gi(z,w)=σ(ai(z,w))g_i(\mathbf{z}, \mathbf{w}) = \sigma(a_i(\mathbf{z}, \mathbf{w})) 是第 ii 个输出单元的激活值,σ()\sigma(\cdot)逻辑斯蒂sigmoid函数(Logistic Sigmoid Function,即σ(x)=1/(1+ex)\sigma(x) = 1/(1+e^{-x}),将任意实数映射到0到1之间,详见第三篇笔记),ai(z,w)a_i(\mathbf{z}, \mathbf{w})预激活值(Pre-activation,即网络最后一层的线性输出)。这对应于一个神经网络,其输出层使用 sigmoid 激活函数。

  • 独热编码分类变量: 对于分类变量,我们使用多项分布:

    p(xz,w)=i=1Dgi(z,w)xip(\mathbf{x} | \mathbf{z}, \mathbf{w}) = \prod_{i=1}^D g_i(\mathbf{z}, \mathbf{w})^{x_i}

    其中 gi(z,w)g_i(\mathbf{z}, \mathbf{w})softmax函数(Softmax Function,将一组实数转换为概率分布,所有输出之和为1,详见第三篇笔记)给出:

    gi(z,w)=exp(ai(z,w))jexp(aj(w))g_i(\mathbf{z}, \mathbf{w}) = \frac{\exp(a_i(\mathbf{z}, \mathbf{w}))}{\sum_j \exp(a_j(\mathbf{w}))}

    这对应于一个神经网络,其输出层使用 softmax 激活函数。

  • 混合变量: 对于包含离散和连续变量的混合数据,可以通过将相应的条件分布相乘来建模。

量化与去量化

在实践中,即使是连续变量(如图像的像素强度),在计算机中也是用离散值(如 8 位整数 0-255)表示的。这在使用基于深度神经网络的生成模型时会带来问题。

  • 问题:高度灵活的模型可能会发现一种“病态”的解决方案:将概率密度完全坍缩到一个或几个离散值上。例如,模型可能总是预测像素值为 128,导致生成的图像非常糟糕。
  • 解决方案:去量化(Dequantization):
    • 思想:将离散的观测值”去量化”为一个连续的随机变量。
    • 方法:在训练时,将每个观测到的离散值 xx 替换为一个从连续分布中随机采样的值。最常用的是均匀去量化(Uniform Dequantization):如果 xx 是一个 8 位整数,则用 x~Uniform(x,x+1)\tilde{x} \sim \text{Uniform}(x, x+1) 来代替它。
    • 效果:这相当于在数据上添加了均匀噪声。它使得模型更难将密度精确地坍缩到整数点上,从而鼓励模型学习更平滑、更真实的分布。

去量化

(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:对数似然的下界
└── 非线性流形:用神经网络学习弯曲投影

这些方法在数据压缩、特征提取和可视化中具有重要作用。


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

深度学习笔记-7:采样方法与潜变量模型

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