EM 算法理解

EM 算法是一种迭代算法,1977 年由 Dempster 等人总结提出,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM 算法的每次迭代由两步组成:E 步,求期望(expectation);M 步,求极大(maximization)。所以这一算法称为期望极大算法(expectation maximization algorithm),简称 EM 算法。

EM 算法的引入

概率模型有时既含有观测变量(observable variable),又含有隐变量或潜在变量(latent variable),例如隐马尔可夫模型、潜在狄利克雷分布(LDA)等等。一般地,用 X 表示观测变量的数据,Z 表示隐变量的数据,X 和 Z 连在一起称为完全数据,观测数据 X 又称为不完全数据。

【疑问】:什么是观测变量?什么是隐变量?

【回答】:观测变量是指可以直接观测或度量的变量,而隐变量是指不可以直接观测,但能通过观测到的其他变量进行推断的变量。

对于概率模型,我们可以通过判断变量的类型(观测变量还是隐变量)来决定采用的学习策略。

  • 如果概率模型的变量都是观测变量,在给定数据的情况下,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。
  • 如果概率模型的变量中存在隐变量,则使用 EM 算法。

【疑问】:为什么概率模型中存在隐变量就不能直接使用极大似然估计法和贝叶斯估计法?

【回答】:我们用一个简单的小例子来说明这个问题。

假设现在有 2 个装有不确定数量黑球、黑球的盒子,随机从盒子中抽取一个白球的概率分布为 p1 和 p2。为了估计这两个概率,每轮选择一个盒子,有放回地连续随机抽取 5 个球,记录如下:

盒子编号 1 2 3 4 5 统计
1 3白-2黑
2 2白-3黑
1 1白-4黑
2 3白-2黑
1 2白-3黑

令观测到的球的颜色为 X,球所属的盒子为 Z,实际上 p1 = P(X=白|Z=1),p2 = P(X=白|Z=2)。此时,我们可以使用极大似然估计法来求得概率 p1 和 p2。
L ( p ) = ∑ i = 1 n l n P ( x i ∣ z i ) P ( X = 白 ∣ Z = 1 ) = p 1 P ( X = 黑 ∣ Z = 1 ) = 1 − p 1 P ( X = 白 ∣ Z = 2 ) = p 2 P ( X = 黑 ∣ Z = 2 ) = 1 − p 2 L(p) = \sum_{i=1}^n ln P(x_i|z_i) \\ P(X=\text{白}|Z=1) = p_1 \quad P(X=\text{黑}|Z=1) = 1 - p_1 \\ P(X=\text{白}|Z=2) = p_2 \quad P(X=\text{黑}|Z=2) = 1 - p_2 L(p)=i=1nlnP(xizi)P(X=Z=1)=p1P(X=Z=1)=1p1P(X=Z=2)=p2P(X=Z=2)=1p2

盒子 1 中抽出 6 个白球和 9 个黑球,盒子 2 中抽取 5 个白球和 5 个黑球。
L ( p 1 ) = l n ( p 1 6 ( 1 − p 1 ) 9 ) = 6 l n   p 1 + 9 l n   ( 1 − p 1 ) L ( p 2 ) = l n ( p 2 5 ( 1 − p 2 ) 5 ) = 5 l n   p 2 + 5 l n   ( 1 − p 2 ) ∂ L ( p 1 ) ∂ p 1 = 6 p 1 − 9 1 − p 1 = 0 → p 1 = 0.4 ∂ L ( p 2 ) ∂ p 2 = 5 p 2 − 5 1 − p 2 = 0 → p 2 = 0.5 L(p_1) = ln(p_1^6(1-p_1)^9) = 6ln \ p_1 + 9ln \ (1-p_1) \\ L(p_2) = ln(p_2^5(1-p_2)^5) = 5ln \ p_2 + 5ln \ (1-p_2) \\ \frac{\partial L(p_1)}{\partial p_1} = \frac{6}{p_1} - \frac{9}{1-p_1} = 0 \rightarrow p_1 = 0.4 \\ \frac{\partial L(p_2)}{\partial p_2} = \frac{5}{p_2} - \frac{5}{1-p_2} = 0 \rightarrow p_2 = 0.5 L(p1)=ln(p16(1p1)9)=6ln p1+9ln (1p1)L(p2)=ln(p25(1p2)5)=5ln p2+5ln (1p2)p1L(p1)=p161p19=0p1=0.4p2L(p2)=p251p25=0p2=0.5

通过极大似然估计法求得 p1 = 0.4,p2 = 0.5。

如果此时,盒子那一列数据丢失,还能继续使用极大似然估计法吗?

盒子编号 1 2 3 4 5 统计
? 3白-2黑
? 2白-3黑
? 1白-4黑
? 3白-2黑
? 2白-3黑

很显然答案是不能。在盒子数据存在的前提下,相当于已知 P(X,Z) 以及 P(Z),我们可通过公式 P(X|Z)P(Z) = P(X,Z) 来求解 P(X|Z)。然而,现在变量 Z 不可观测,那么就无法使用公式 P(Z|X)P(X) = P(X,Z) 来求解 P(Z|X)。从例子中也可以明显地看出,不知道白球所取出的盒子编号,我们就无法得知公式 l n ( p 1 a ( 1 − p 1 ) b ) ln(p_1^a(1-p_1)^b) ln(p1a(1p1)b) 中 a 和 b 的值。

更一般地,令 X 表示已观测变量集,Z 表示隐变量集, θ \theta θ 表示模型参数。若对 θ \theta θ 做极大似然估计,则应最大化似然。
l ( θ ) = ∏ i = 1 n P ( X , Z ; θ ) L ( θ ) = l n   l ( θ ) = ∑ i = 1 n l n   P ( X , Z ; θ ) l(\theta) = \prod_{i=1}^n P(X,Z;\theta) \\ L(\theta) = ln \ l(\theta) = \sum_{i=1}^n ln \ P(X,Z;\theta) \\ l(θ)=i=1nP(X,Z;θ)L(θ)=ln l(θ)=i=1nln P(X,Z;θ)
由于存在隐变量 Z,无法直接求解 X 和 Z 的联合概率,那么就无法使用极大似然估计法。此时,就需要本篇博客的主角,EM 算法登场了。

EM 算法

EM 算法是从含有隐变量的数据(完全数据)中计算极大似然估计的一种方法。从先前的盒子取球案例中,我们主要遇到的问题是存在两个未知变量,即 Z 和参数 θ \theta θ,只要能够得到其中之一,我们就能够计算另外一个。例如,在知道 Z(盒子)的情况下,我们就能够通过极大似然估计法求得参数 θ \theta θ;同理,知道参数 θ \theta θ 就能够求得隐变量 Z。

参数 θ \theta θ ——> 隐变量 Z ——> 参数 θ \theta θ ——> … ——> 隐变量 Z。

禁止套娃!上述过程揭示了 EM 算法的操作过程,对于多个未知量,先固定一部分求解另一部分。以理论和实践为例,我们学习理论知识,然后基于理论去指导实践,在实践的过程中发现理论有误或者不够精确,从而修改和扩展理论。在新的理论指导下再次参与实践,从实践中得到的真理进一步扩充理论,一个螺旋递增的过程。EM 算法也如此,我们可以先固定参数 θ \theta θ,然后去求得隐变量 Z,接着根据求得的隐变量 Z 去优化参数 θ \theta θ

盒子未知的白球黑球

按照这个思路我们去尝试求解在盒子未知情况下的 p1 和 p2。

盒子编号 1 2 3 4 5 统计
? 3白-2黑
? 2白-3黑
? 1白-4黑
? 3白-2黑
? 2白-3黑

首先,初始化参数 p1 = 0.1,p2 = 0.9。

然后,计算隐变量 Z。

P ( Z = 1 , X = 1 , p ) = p 1 3 × ( 1 − p 1 ) 2 = 0.00081 P ( Z = 2 , X = 1 , p ) = p 2 3 × ( 1 − p 2 ) 2 = 0.00729 P(Z=1,X=1,p) = p_1^3 \times (1-p_1)^2 = 0.00081 \\ P(Z=2,X=1,p) = p_2^3 \times (1-p_2)^2 = 0.00729 \\ P(Z=1,X=1,p)=p13×(1p1)2=0.00081P(Z=2,X=1,p)=p23×(1p2)2=0.00729

同理,我们可以分别求出 5 轮每个盒子的概率。

轮数 盒子1 盒子2
1 0.00081 0.00729
2 0.00729 0.00081
3 0.06561 0.00009
4 0.00081 0.00729
5 0.00729 0.00081

从上表中我们可以发现,在 p1 = 0.1,p2 = 0.9 时,通过极大似然估计法计算,轮数 1 和 4 最有可能从盒子 2 中取出,而轮数 2、3 和 5 最有可能从盒子 1 中取出。

假设参数 p1 = 0.7, p2 = 0.3,此时可得

轮数 盒子1 盒子2
1 0.03087 0.01323
2 0.01323 0.03087
3 0.07203 0.00567
4 0.03087 0.01323
5 0.01323 0.03087

此时,轮数 1 和 4 最有可能从盒子 1 中取出,而轮数 2、3 和 5 最有可能从盒子 2 中取出。

在这个过程中,P(X,Z)与初始化的参数 p 关联较深。对于轮数 1,盒子 1 和盒子 2 的概率仅取决于初始化的概率。我们希望考虑所有轮数的结果,然后对每一轮计算P(Z|X)条件概率,这样得到的综合结果会比单独根据每一轮的结果可能会更好。

以 p1 = 0.1,p2 = 0.9 为例执行该步骤,第一轮中盒子 1 的联合概率 P(Z=1,X=1,p) = 0.00081,盒子 2 的联合概率 P(Z=2,X=1,p) = 0.00729:
P ( Z = 1 ∣ X = 1 , p ) = P ( Z = 1 ∣ X = 1 , p ) ∑ i = 1 P ( Z = i ∣ X = 1 , p ) = 0.00081 0.00810 = 0.1 P ( Z = 2 ∣ X = 1 , p ) = P ( Z = 2 ∣ X = 1 , p ) ∑ i = 1 P ( Z = i ∣ X = 1 , p ) = 0.00729 0.00810 = 0.9 P(Z=1|X=1,p) = \frac{P(Z=1|X=1,p)}{\sum_{i=1}P(Z=i|X=1,p)} = \frac{0.00081}{0.00810} = 0.1 \\ P(Z=2|X=1,p) = \frac{P(Z=2|X=1,p)}{\sum_{i=1}P(Z=i|X=1,p)} = \frac{0.00729}{0.00810} = 0.9 P(Z=1X=1,p)=i=1P(Z=iX=1,p)P(Z=1X=1,p)=0.008100.00081=0.1P(Z=2X=1,p)=i=1P(Z=iX=1,p)P(Z=2X=1,p)=0.008100.00729=0.9

轮数 盒子 1 盒子 2
1 0.1 0.9
2 0.9 0.1
3 0.999 0.001
4 0.1 0.9
5 0.9 0.1

实际上这个步骤相当于求条件概率的期望,这正对应了 EM 算法中的 E 步——求期望(expectation)。

接着归一化后的概率来计算每个盒子中取出的白球数和黑球数。

  • 盒子 1 中取出的白球数:

3 × 0.1 + 2 × 0.9 + 1 × 0.999 + 3 × 0.1 + 2 × 0.9 = 5.199 3 \times 0.1 + 2 \times 0.9 + 1 \times 0.999 + 3 \times 0.1 + 2 \times 0.9 = 5.199 3×0.1+2×0.9+1×0.999+3×0.1+2×0.9=5.199

  • 盒子 1 中取出的黑球数:

2 × 0.9 + 3 × 0.1 + 4 × 0.001 + 2 × 0.9 + 3 × 0.1 = 4.204 2 \times 0.9 + 3 \times 0.1 + 4 \times 0.001 + 2 \times 0.9 + 3 \times 0.1 = 4.204 2×0.9+3×0.1+4×0.001+2×0.9+3×0.1=4.204

  • 盒子 2 中取出的白球数:

3 × 0.9 + 2 × 0.1 + 1 × 0.001 + 3 × 0.9 + 2 × 0.1 = 5.801 3 \times 0.9 + 2 \times 0.1 + 1 \times 0.001 + 3 \times 0.9 + 2 \times 0.1 = 5.801 3×0.9+2×0.1+1×0.001+3×0.9+2×0.1=5.801

  • 盒子 2 中取出的黑球数:

2 × 0.1 + 3 × 0.9 + 4 × 0.999 + 2 × 0.1 + 3 × 0.9 = 9.796 2 \times 0.1 + 3 \times 0.9 + 4 \times 0.999 + 2 \times 0.1 + 3 \times 0.9 = 9.796 2×0.1+3×0.9+4×0.999+2×0.1+3×0.9=9.796

再知道盒子 1 和 2 分别取出的白球和黑球数之后,我们就可以直接使用极大似然估计法去优化参数 p。

盒子 1 中抽出 5.199 个白球和 4.204 个黑球,盒子 2 中抽取 5.801 个白球和 9.796 个黑球。
L ( p 1 ) = l n ( p 1 5.199 ( 1 − p 1 ) 4.204 ) = 5.199 l n   p 1 + 4.204 l n   ( 1 − p 1 ) L ( p 2 ) = l n ( p 2 5.801 ( 1 − p 2 ) 9.796 ) = 5.801 l n   p 2 + 9.796 l n   ( 1 − p 2 ) ∂ L ( p 1 ) ∂ p 1 = 5.199 p 1 − 4.204 1 − p 1 = 0 → p 1 ≈ 0.553 ∂ L ( p 2 ) ∂ p 2 = 5.801 p 2 − 9.796 1 − p 2 = 0 → p 2 ≈ 0.372 L(p_1) = ln(p_1^{5.199}(1-p_1)^{4.204}) = 5.199ln \ p_1 + 4.204ln \ (1-p_1) \\ L(p_2) = ln(p_2^{5.801}(1-p_2)^{9.796}) = 5.801ln \ p_2 + 9.796ln \ (1-p_2) \\ \frac{\partial L(p_1)}{\partial p_1} = \frac{5.199}{p_1} - \frac{4.204}{1-p_1} = 0 \rightarrow p_1 \approx 0.553 \\ \frac{\partial L(p_2)}{\partial p_2} = \frac{5.801}{p_2} - \frac{9.796}{1-p_2} = 0 \rightarrow p_2 \approx 0.372 \\ L(p1)=ln(p15.199(1p1)4.204)=5.199ln p1+4.204ln (1p1)L(p2)=ln(p25.801(1p2)9.796)=5.801ln p2+9.796ln (1p2)p1L(p1)=p15.1991p14.204=0p10.553p2L(p2)=p25.8011p29.796=0p20.372

这一步骤对应 EM 算法的 M 步——求极大(maximization)。

EM 算法就是含有隐变量的概率模型参数的极大似然估计法,或极大后验概率估计法。

算法步骤

【算法】:EM 算法。

  • 输入:观测变量数据 X,隐变量数据 Z,联合分布 P ( X , Z ∣ θ ) P(X, Z|\theta) P(X,Zθ),条件分布 P ( Z ∣ X , θ ) P(Z|X, \theta) P(ZX,θ)
  • 输出:模型参数 θ \theta θ
  • 过程:
  1. 选择参数的初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
  2. E 步:记 θ ( i ) \theta^{(i)} θ(i) 为第 i 次迭代参数 θ \theta θ 的估计值,在第 i + 1 次迭代的 E 步,计算

ϱ ( θ , θ ( i ) ) = E Z [ l o g P ( X , Z ∣ θ ) ∣ X , θ ( i ) ] = ∑ Z l o g P ( X , Z ∣ θ ) P ( Z ∣ X , θ ( i ) ) \varrho(\theta, \theta^{(i)}) = E_Z[log P(X, Z|\theta)|X, \theta^{(i)}] \\ = \sum_Z log P(X, Z|\theta)P(Z|X, \theta^{(i)}) ϱ(θ,θ(i))=EZ[logP(X,Zθ)X,θ(i)]=ZlogP(X,Zθ)P(ZX,θ(i))
这里,$P(Z|X, \theta^{(i)}) 是在给定观测数据 X 和当前的参数估计 θ ( i ) \theta^{(i)} θ(i) 下隐变量 Z 的条件概率分布。对应前面案例中的:

L ( p 1 ) = l n ( p 1 5.199 ( 1 − p 1 ) 4.204 ) = 5.199 l n   p 1 + 4.204 l n   ( 1 − p 1 ) L ( p 2 ) = l n ( p 2 5.801 ( 1 − p 2 ) 9.796 ) = 5.801 l n   p 2 + 9.796 l n   ( 1 − p 2 ) L(p_1) = ln(p_1^{5.199}(1-p_1)^{4.204}) = 5.199ln \ p_1 + 4.204ln \ (1-p_1) \\ L(p_2) = ln(p_2^{5.801}(1-p_2)^{9.796}) = 5.801ln \ p_2 + 9.796ln \ (1-p_2) L(p1)=ln(p15.199(1p1)4.204)=5.199ln p1+4.204ln (1p1)L(p2)=ln(p25.801(1p2)9.796)=5.801ln p2+9.796ln (1p2)

  1. M 步:求使 ϱ ( θ , θ ( i ) ) \varrho(\theta, \theta^{(i)}) ϱ(θ,θ(i)) 极大化的 θ \theta θ,确定第 i + 1 此迭代的参数的估计值 θ ( i + 1 ) \theta^{(i + 1)} θ(i+1)
    θ ( i + 1 ) = a r g max ⁡ θ ϱ ( θ , θ ( i ) ) \theta^{(i + 1)} = arg \max_\theta \varrho(\theta, \theta^{(i)}) θ(i+1)=argθmaxϱ(θ,θ(i))
  2. 重复第 2 步和第 3 步,直到收敛。

ϱ ( θ , θ ( i ) ) \varrho(\theta, \theta^{(i)}) ϱ(θ,θ(i)) 是 EM 算法的核心,称为 Q 函数。

【定义:Q 函数】:完全数据的对数似然函数 l o g P ( Y , Z ∣ θ ) log P(Y, Z|\theta) logP(Y,Zθ) 关于在给定观测数据 Y 和当前参数 θ ( i ) \theta^{(i)} θ(i) 下对未观测数据 Z 的条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z|Y, \theta^{(i)}) P(ZY,θ(i)) 的期望称为 Q 函数,即
ϱ ( θ , θ ( i ) ) = E Z [ l o g P ( Y , Z ∣ θ ) ∣ Y , θ ( i ) ] \varrho(\theta, \theta^{(i)}) = E_Z[log P(Y, Z|\theta)|Y, \theta^{(i)}] ϱ(θ,θ(i))=EZ[logP(Y,Zθ)Y,θ(i)]

【关于 EM 算法的几点说明】:

  • 步骤(1):参数的初值可以任意选择,但需注意 EM 算法对初值是敏感的。
  • 步骤(2):E 步求 ϱ ( θ , θ ( i ) ) \varrho(\theta, \theta^{(i)}) ϱ(θ,θ(i))。Q 函数式中 Z 是未观测数据,Y 是观测额数据。注意, ϱ ( θ , θ ( i ) ) \varrho(\theta, \theta^{(i)}) ϱ(θ,θ(i)) 的第 1 个变元表示要极大化的参数,第 2 个变元表示参数的当前估计值。每次迭代实际在求 Q 函数及其极大。
  • 步骤(3):M 步求 ϱ ( θ , θ ( i ) ) \varrho(\theta, \theta^{(i)}) ϱ(θ,θ(i)) 的极大化,得到 θ ( i + 1 ) \theta^{(i+1)} θ(i+1),完成一次迭代 θ ( i ) → θ ( i + 1 ) \theta^{(i)} \rightarrow \theta^{(i+1)} θ(i)θ(i+1)
  • 步骤(4):给出停止迭代的条件,一般是对较小的整数 ε 1 ε 2 \varepsilon_1 \varepsilon_2 ε1ε2,若满足下面式子,则停止迭代。
    ∣ ∣ θ ( i + 1 ) − θ ( i ) ∣ ∣ < ε 1 o r ∣ ∣ ϱ ( θ , θ ( i + 1 ) ) − ϱ ( θ , θ ( i ) ) ∣ ∣ < ε 2 ||\theta^{(i+1)} - \theta^{(i)}|| < \varepsilon_1 \qquad or \qquad ||\varrho(\theta, \theta^{(i + 1)}) - \varrho(\theta, \theta^{(i)})|| < \varepsilon_2 θ(i+1)θ(i)<ε1orϱ(θ,θ(i+1))ϱ(θ,θ(i))<ε2

你可能感兴趣的:(机器学习,算法)