1. 引言

在本教程中,我们将探讨 期望最大化(Expectation-Maximization, EM) 算法 —— 一种用于估计概率模型参数的非常流行的技术,也是 隐马尔可夫模型(HMM)、高斯混合模型(GMM)、卡尔曼滤波器等 背后的重要算法。

EM 特别适用于以下场景:

✅ 数据不完整
✅ 存在缺失值
✅ 存在未观测到的潜在变量(latent variables)

因此,EM 是每位数据科学家都应掌握的重要工具之一。

2. 似然函数

当我们估计一个模型的参数时,通常希望找到一组参数,使得这些参数“最贴合”我们的数据。换句话说,如果我们用这些参数训练模型并从中采样,采样结果应尽可能接近我们实际拥有的数据。

我们通过一个函数来描述这种“贴合度”——这就是 似然函数(Likelihood Function)。它以参数组合 \boldsymbol{\theta} 为输入,输出我们观察到数据 \mathbf{X} 的概率:

$$ L(\boldsymbol{\theta} ; \mathbf{X}) = p(\mathbf{X} \mid \boldsymbol{\theta}) $$

我们通常希望最大化这个似然函数,以找到最佳参数组合,这被称为 最大似然估计(Maximum Likelihood Estimation, MLE)

但如果我们的数据中存在一个无法观测的潜在变量 \mathbf{Z},事情就变得复杂了。此时似然函数变为:

$$ L(\boldsymbol{\theta} ; \mathbf{X}) = p(\mathbf{X} \mid \boldsymbol{\theta}) = \int p(\mathbf{X}, \mathbf{Z} \mid \boldsymbol{\theta}) d\mathbf{Z} $$

这个积分形式使得我们无法直接解析求解最优参数。这时,EM 算法就能派上用场了。

3. 直观的抛硬币示例

假设我们有两个硬币 A 和 B,它们正面朝上的概率分别是未知的 \boldsymbol{\theta_A}\boldsymbol{\theta_B}。我们想通过实验估计这两个参数。

在实验中,我们每次随机选择一个硬币抛 10 次,并重复 5 次:

抛掷序列 使用的硬币 正面次数 反面次数
HTTTHHTHTH B 0 5
HHHHTHHHHH A 9 0
HTHHHHHHTHH A 8 0
HTHTTTHHTT B 0 4
THHHTHHHTH A 7 0

如果我们知道每次使用的是哪个硬币,那么估计参数就很简单:

$$ \boldsymbol{\theta_A} = \frac{24}{30} = 0.8 \quad \text{(共 24 次正面,30 次抛掷)} $$ $$ \boldsymbol{\theta_B} = \frac{9}{20} = 0.45 \quad \text{(共 9 次正面,20 次抛掷)} $$

但如果我们丢失了硬币标识信息,只保留了抛掷结果,那么我们就无法直接知道哪次是哪个硬币抛的。这时问题就变成了一个典型的含有潜在变量的问题,EM 算法就能帮助我们解决这个问题。

4. 使用 EM 算法求解

EM 算法分为两个步骤,交替进行:

  1. E 步(期望步):估计潜在变量的期望值(即每组抛掷数据最可能来自哪个硬币)。
  2. M 步(最大化步):根据 E 步估计的期望值,重新估计参数 \boldsymbol{\theta_A}\boldsymbol{\theta_B}

我们以一个初始猜测开始,比如: $$ \boldsymbol{\theta_A} = 0.6, \quad \boldsymbol{\theta_B} = 0.5 $$

然后:

E 步:估计硬币归属概率

对于每组抛掷结果(如 HHHHHTTTTT),我们计算它由 A 或 B 生成的概率:

$$ P(E \mid Z_A) = \binom{n}{x} \theta_A^x (1 - \theta_A)^{n - x} $$ $$ P(E \mid Z_B) = \binom{n}{x} \theta_B^x (1 - \theta_B)^{n - x} $$

再通过贝叶斯定理计算每组数据属于 A 或 B 的概率:

$$ P(Z_A \mid E) = \frac{P(E \mid Z_A) P(Z_A)}{P(E \mid Z_A) P(Z_A) + P(E \mid Z_B) P(Z_B)} $$

$$ P(Z_B \mid E) = \frac{P(E \mid Z_B) P(Z_B)}{P(E \mid Z_A) P(Z_A) + P(E \mid Z_B) P(Z_B)} $$

我们用这些概率对每组数据中的正面和反面进行加权分配。

M 步:更新参数估计

使用 E 步中得到的期望值重新估计 \boldsymbol{\theta_A}\boldsymbol{\theta_B}

$$ \theta_A^1 = \frac{\text{A 的期望正面数总和}}{\text{A 的期望正反面总数}} = \frac{21.3}{21.3 + 8.6} = 0.71 $$ $$ \theta_B^1 = \frac{11.7}{11.7 + 8.4} = 0.58 $$

这些值比初始猜测更接近真实值。我们重复 E 步和 M 步,直到参数收敛。

5. 算法推导原理

EM 算法的核心在于最大化 不完整数据下的似然函数

$$ \sum_{i=1}^{N} \log \left( \int p(\mathbf{X}, \mathbf{Z} \mid \boldsymbol{\theta}) d\mathbf{Z} \right) $$

由于积分在 log 内部,难以直接优化。我们引入一个辅助函数:

$$ \sum_{i=1}^{N} \log \left( \int f(Z) \cdot \frac{p(\mathbf{X}, \mathbf{Z} \mid \boldsymbol{\theta})}{f(Z)} d\mathbf{Z} \right) $$

利用 Jensen 不等式,我们可以将这个式子转化为一个下界:

$$ \sum_{i=1}^{N} \int f(Z) \log \left( \frac{p(\mathbf{X}, \mathbf{Z} \mid \boldsymbol{\theta})}{f(Z)} \right) d\mathbf{Z} $$

最优的 是后验概率 ,即:

$$ f(Z) = P(Z \mid \mathbf{X}, \boldsymbol{\theta}) $$

这导致我们只能通过迭代来估计:先用当前参数估计后验概率(E 步),再用该后验估计参数(M 步)。

6. 算法流程图

我们可以通过一个流程图来总结整个 EM 算法的流程:

EM 算法流程图

7. 总结

在本文中,我们:

  • 回顾了最大似然估计(MLE)的基本概念
  • 通过一个抛硬币的直观例子介绍了 EM 算法
  • 推导了 EM 的数学基础,理解了其收敛保证
  • 通过流程图总结了整个算法流程

EM 算法通过交替估计潜在变量和模型参数,逐步逼近最优解。虽然不能保证全局最优,但其稳定性和适用性使其成为处理不完全数据的强大工具。


原始标题:Intuitive Explanation of the Expectation-Maximization (EM) Technique

» 下一篇: 多进程与多线程