当前位置: 首页 > news >正文

【课堂笔记】EM算法

文章目录

  • 背景
    • 极大似然估计
    • 隐变量
    • 高斯混合模型
  • EM算法
      • 合理性分析
  • 相关好文章

背景

  EM算法(期望最大化算法,Expectation-Maximization Algorithm)是一种迭代优化算法,用于在含有隐变量的概率模型中估计最大似然参数。
  这是概括性的定义,下面我会解释其中的名词并用具体例子来引入EM算法。

极大似然估计

  先复习一下极大似然函数估计,我们假设数据满足某个分布(例如正态分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2)),但我们不知道其中的参数( μ , σ \mu, \sigma μ,σ),于是我们需要从已知的数据中去拟合或估计出这些参数。
  进行极大似然估计的一般过程为(以正态分布为例):
(1)确定概率模型
p ( x i ; μ , σ 2 ) = 1 2 π σ 2 exp ⁡ ( − ( x i − μ ) 2 2 σ 2 ) p(x_i;\mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp \left( -\frac{(x_i - \mu)^2}{2\sigma^2} \right) p(xi;μ,σ2)=2πσ2 1exp(2σ2(xiμ)2)
(2)确定似然函数,并取负对数得到负对数似然
L ( μ , σ 2 ) = ∏ i = 1 n p ( x i ; μ , σ 2 ) = ∏ i = 1 n 1 2 π σ 2 exp ⁡ ( − ( x i − μ ) 2 2 σ 2 ) l ( μ , σ 2 ) = − ln ⁡ L ( μ , σ 2 ) = n 2 ln ⁡ ( 2 π σ 2 ) + 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 L(\mu, \sigma^2) = \prod_{i=1}^np(x_i;\mu,\sigma^2)=\prod_{i=1}^n \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x_i - \mu)^2}{2\sigma^2}\right) \\ l(\mu, \sigma^2) = -\ln L(\mu, \sigma^2) = \frac{n}{2} \ln(2\pi\sigma^2) + \frac{1}{2\sigma^2} \sum_{i=1}^n (x_i - \mu)^2 L(μ,σ2)=i=1np(xi;μ,σ2)=i=1n2πσ2 1exp(2σ2(xiμ)2)l(μ,σ2)=lnL(μ,σ2)=2nln(2πσ2)+2σ21i=1n(xiμ)2
(3)计算极值点, θ ^ = ( μ , σ 2 ) \hat{\theta}=(\mu, \sigma^2) θ^=(μ,σ2)是待估计的参数
θ ^ = arg ⁡ min ⁡ μ , σ 2 l ( μ , σ 2 ) \hat{\theta} = \arg\min_{\mu, \sigma^2} l(\mu, \sigma^2) θ^=argμ,σ2minl(μ,σ2)
  如果方程简单,可以解析求解,即导数为0,得到似然方程。
  如果方程复杂,可能需要数值方法(如梯度下降、牛顿法)。

隐变量

  什么是隐变量?考虑以下情景:
  现在有一个蛋糕集,里面有巧克力蛋糕和草莓蛋糕,用 k i = 0 , 1 k_i = 0, 1 ki=0,1来表示。假设它们分别满足分布 N ( μ 1 , σ 1 2 ) N(\mu_1, \sigma_1^2) N(μ1,σ12) N ( μ 2 , σ 2 2 ) N(\mu_2, \sigma_2^2) N(μ2,σ22),然而,我们并不知道某个蛋糕具体是巧克力做的还是草莓做的。换句话说,我们需要估计出所有的 k i k_i ki以及参数 μ 1 , σ 1 , μ 2 , σ 2 \mu_1, \sigma_1, \mu_2, \sigma_2 μ1,σ1,μ2,σ2。这里 k i k_i ki就是隐变量,即无法直接观测的变量。
  这里就产生了一个“鸡生蛋,蛋生鸡”问题:
(1)要想估计模型参数 μ 1 , σ 1 , μ 2 , σ 2 \mu_1, \sigma_1, \mu_2, \sigma_2 μ1,σ1,μ2,σ2,需要知道每个样本的类别 k i k_i ki
(2)要想确认样本的类别 k i k_i ki需要事先知道模型的参数。

高斯混合模型

  事实上,我们可以用高斯混合模型来同时表示两个正态分布模型:
p ( x i ∣ μ 1 , σ 1 2 , μ 2 , σ 2 2 , π 0 , π 1 ) = π 0 ⋅ 1 2 π σ 1 2 exp ⁡ ( − ( x i − μ 1 ) 2 2 σ 1 2 ) + π 1 ⋅ 1 2 π σ 2 2 exp ⁡ ( − ( x i − μ 2 ) 2 2 σ 2 2 ) p(x_i | \mu_1, \sigma_1^2, \mu_2, \sigma_2^2, \pi_0, \pi_1) = \pi_0 \cdot \frac{1}{\sqrt{2\pi\sigma_1^2}} \exp\left(-\frac{(x_i - \mu_1)^2}{2\sigma_1^2}\right) + \pi_1 \cdot \frac{1}{\sqrt{2\pi\sigma_2^2}} \exp\left(-\frac{(x_i - \mu_2)^2}{2\sigma_2^2}\right) p(xiμ1,σ12,μ2,σ22,π0,π1)=π02πσ12 1exp(2σ12(xiμ1)2)+π12πσ22 1exp(2σ22(xiμ2)2)
  这里引入了两个新的参数 π 0 , π 1 \pi_0, \pi_1 π0,π1满足 π 0 + π 1 = 1 \pi_0 + \pi_1 = 1 π0+π1=1,分别表示巧克力蛋糕和草莓蛋糕的占比。注意由于我们不知道样本的类别,这两个参数也是需要估计的。
  看起来这样干很美好,只要把刚才最大似然估计的步骤来一遍就好了。然而在计算负对数似然的时候你就会卡住了。先前取对数的时候可以很容易把 log ⁡ ∏ p ( x i ) \log\prod p(x_i) logp(xi) 变成 ∑ log ⁡ p ( x i ) \sum\log p(x_i) logp(xi),然后 log ⁡ \log log p ( x i ) p(x_i) p(xi)中的 exp ⁡ \exp exp消掉了。但这里不行。然后后面不管是求导还是梯度下降都完蛋了。

EM算法

  EM算法通过另一个思路解决了这个问题,那就是互相猜!
  这里先讲一下要算点啥,后面再讲来路。
(1)设置初始参数 θ = ( μ 1 , σ 1 2 , μ 2 , σ 2 2 , π 0 , π 1 ) \theta = (\mu_1, \sigma_1^2, \mu_2, \sigma_2^2, \pi_0, \pi_1) θ=(μ1,σ12,μ2,σ22,π0,π1)
(2)E-Step:根据目前的参数 μ 1 , σ 1 2 , μ 2 , σ 2 2 \mu_1, \sigma_1^2, \mu_2, \sigma_2^2 μ1,σ12,μ2,σ22,分别计算每个样本属于草莓蛋糕的概率和属于巧克力蛋糕的概率。
似然:
p ( x i ∣ k i = 0 ) = 1 2 π σ 1 2 exp ⁡ ( − ( x i − μ 1 ) 2 2 σ 1 2 ) p ( x i ∣ k i = 1 ) = 1 2 π σ 2 2 exp ⁡ ( − ( x i − μ 2 ) 2 2 σ 2 2 ) p(x_i | k_i = 0) = \frac{1}{\sqrt{2\pi\sigma_1^2}} \exp \left( -\frac{(x_i - \mu_1)^2}{2\sigma_1^2} \right) \\ p(x_i | k_i = 1) = \frac{1}{\sqrt{2\pi\sigma_2^2}} \exp \left( -\frac{(x_i - \mu_2)^2}{2\sigma_2^2} \right) p(xiki=0)=2πσ12 1exp(2σ12(xiμ1)2)p(xiki=1)=2πσ22 1exp(2σ22(xiμ2)2)
先验概率:
P ( k i = 0 ) = π 0 , P ( k i = 1 ) = π 1 P(k_i = 0) = \pi_0, P(k_i = 1) = \pi_1 P(ki=0)=π0,P(ki=1)=π1
边缘概率:
p ( x i ) = p ( x i ∣ k i = 0 ) P ( k i = 0 ) + p ( x i ∣ k i = 1 ) P ( k i = 1 ) = π 0 ⋅ 1 2 π σ 1 2 exp ⁡ ( − ( x i − μ 1 ) 2 2 σ 1 2 ) + π 1 ⋅ 1 2 π σ 2 2 exp ⁡ ( − ( x i − μ 2 ) 2 2 σ 2 2 ) \begin{aligned} p(x_i) &= p(x_i | k_i = 0)P(k_i = 0) + p(x_i | k_i = 1)P(k_i = 1) \\ &= \pi_0 \cdot \frac{1}{\sqrt{2\pi\sigma_1^2}} \exp \left( -\frac{(x_i - \mu_1)^2}{2\sigma_1^2} \right) + \pi_1 \cdot \frac{1}{\sqrt{2\pi\sigma_2^2}} \exp \left( -\frac{(x_i - \mu_2)^2}{2\sigma_2^2} \right) \end{aligned} p(xi)=p(xiki=0)P(ki=0)+p(xiki=1)P(ki=1)=π02πσ12 1exp(2σ12(xiμ1)2)+π12πσ22 1exp(2σ22(xiμ2)2)
然后通过贝叶斯定理计算后验概率:
P ( k i = k ∣ x i ) = p ( x i ∣ k i = k ) P ( k i = k ) p ( x i ) P(k_i = k | x_i) = \frac{p(x_i | k_i = k) P(k_i = k)}{p(x_i)} P(ki=kxi)=p(xi)p(xiki=k)P(ki=k)
(3)M-Step:这一步最大化期望对数似然,并更新参数。E 步计算隐变量期望后得到的优化目标为:
Q ( θ , θ ( t ) ) = ∑ i = 1 n ∑ k = 0 1 P ( k i = k ∣ x i , θ ( t ) ) ln ⁡ [ p ( x i , k i = k ∣ θ ) ] Q(\theta, \theta^{(t)}) = \sum_{i=1}^n \sum_{k=0}^1 P(k_i = k | x_i, \theta^{(t)}) \ln [p(x_i, k_i = k | \theta)] Q(θ,θ(t))=i=1nk=01P(ki=kxi,θ(t))ln[p(xi,ki=kθ)]
  其中 θ \theta θ是待更新参数, θ ( t ) \theta^{(t)} θ(t)是当前迭代(第 t t t轮)的参数,来自上一次估计。 P ( k i = k ∣ x i , θ ( t ) ) P(k_i = k | x_i, \theta^{(t)}) P(ki=kxi,θ(t))是E-Step得到的后验概率。 p ( x i , k i = k ∣ θ ) p(x_i, k_i = k | \theta) p(xi,ki=kθ)是联合概率。
  这个式子的来源和含义一会儿再讲。
  然后通过求偏导的方式更新参数:
π k = 1 n ∑ i = 1 n P ( k i = k ∣ x i , θ ( t ) ) μ k = ∑ i = 1 n P ( k i = k ∣ x i , θ ( t ) ) x i ∑ i = 1 n P ( k i = k ∣ x i , θ ( t ) ) σ k 2 = ∑ i = 1 n P ( k i = k ∣ x i , θ ( t ) ) ( x i − μ k ) 2 ∑ i = 1 n P ( k i = k ∣ x i , θ ( t ) ) \pi_k = \frac{1}{n} \sum_{i=1}^n P(k_i = k | x_i, \theta^{(t)}) \\ \mu_k = \frac{\sum_{i=1}^n P(k_i = k | x_i, \theta^{(t)}) x_i}{\sum_{i=1}^n P(k_i = k | x_i, \theta^{(t)})} \\ \sigma_k^2 = \frac{\sum_{i=1}^n P(k_i = k | x_i, \theta^{(t)}) (x_i - \mu_k)^2}{\sum_{i=1}^n P(k_i = k | x_i, \theta^{(t)})} πk=n1i=1nP(ki=kxi,θ(t))μk=i=1nP(ki=kxi,θ(t))i=1nP(ki=kxi,θ(t))xiσk2=i=1nP(ki=kxi,θ(t))i=1nP(ki=kxi,θ(t))(xiμk)2
(4)返回步骤(2),重复E-Step,M-Step循环直到稳定。

合理性分析

  问题来了,为什么这么做可以拟合出最优状态,并且能保证算法的收敛性呢?
  回忆一开始最大似然估计解决不了的式子:
p ( x i ∣ θ ) = π 0 ⋅ 1 2 π σ 1 2 exp ⁡ ( − ( x i − μ 1 ) 2 2 σ 1 2 ) + π 1 ⋅ 1 2 π σ 2 2 exp ⁡ ( − ( x i − μ 2 ) 2 2 σ 2 2 ) l ( θ ) = − ln ⁡ ∏ i = 1 n p ( x i ∣ θ ) p(x_i |\theta) = \pi_0 \cdot \frac{1}{\sqrt{2\pi\sigma_1^2}} \exp\left(-\frac{(x_i - \mu_1)^2}{2\sigma_1^2}\right) + \pi_1 \cdot \frac{1}{\sqrt{2\pi\sigma_2^2}} \exp\left(-\frac{(x_i - \mu_2)^2}{2\sigma_2^2}\right) \\ l(\theta) = -\ln \prod_{i=1}^np(x_i|\theta) p(xiθ)=π02πσ12 1exp(2σ12(xiμ1)2)+π12πσ22 1exp(2σ22(xiμ2)2)l(θ)=lni=1np(xiθ)
  这个似然的问题在于无法直接优化,是因为求导时涉及 log(sum) 的形式,梯度不好算。于是我们引入一个任意 k \mathbf{k} k的概率分布,并使用琴生不等式变化一下:
ln ⁡ p ( x ∣ θ ) = ln ⁡ ∑ k q ( k ) ⋅ p ( x , k ∣ θ ) q ( k ) ≥ ∑ k q ( k ) ln ⁡ p ( x , k ∣ θ ) q ( k ) : = L ( q , θ ) \ln p(\mathbf{x} \mid \theta) = \ln \sum_{\mathbf{k}} q(\mathbf{k}) \cdot \frac{p(\mathbf{x}, \mathbf{k} \mid \theta)}{q(\mathbf{k})} \ge \sum_{\mathbf{k}} q(\mathbf{k}) \ln \frac{p(\mathbf{x}, \mathbf{k} \mid \theta)}{q(\mathbf{k})} :=\mathcal{L}(q, \theta) lnp(xθ)=lnkq(k)q(k)p(x,kθ)kq(k)lnq(k)p(x,kθ):=L(q,θ)
  于是我们得到了一个下界 L \mathcal{L} L,这个下界被称为 Evidence Lower Bound(ELBO)
  现在我们来研究一下这个下界,将它分解一下:
L ( q , θ ) = ∑ k q ( k ) ln ⁡ p ( x , k ∣ θ ) q ( k ) = ∑ k q ( k ) ln ⁡ p ( k ∣ x , θ ) p ( x ∣ θ ) q ( k ) = ∑ k q ( k ) ln ⁡ p ( k ∣ x , θ ) q ( k ) + ln ⁡ p ( x ∣ θ ) ⋅ ∑ k q ( k ) \begin{aligned} \mathcal{L}(q, \theta) &= \sum_{\mathbf{k}} q(\mathbf{k}) \ln \frac{p(\mathbf{x}, \mathbf{k} \mid \theta)}{q(\mathbf{k})} = \sum_{\mathbf{k}} q(\mathbf{k}) \ln \frac{p(\mathbf{k} \mid \mathbf{x},\theta)p(\mathbf{x}\mid \theta)}{q(\mathbf{k})} \\ &=\sum_k q(\mathbf{k}) \ln \frac{p(\mathbf{k}\mid\mathbf{x}, \theta)}{q(\mathbf{k})} + \ln p(\mathbf{x}\mid\theta) \cdot \sum_k q(\mathbf{k}) \end{aligned} L(q,θ)=kq(k)lnq(k)p(x,kθ)=kq(k)lnq(k)p(kx,θ)p(xθ)=kq(k)lnq(k)p(kx,θ)+lnp(xθ)kq(k)
  注意到最后一项求和是 1 1 1(概率分布的性质),于是:
L ( q , θ ) = ∑ k q ( k ) ln ⁡ p ( k ∣ x , θ ) q ( k ) + ln ⁡ p ( x ∣ θ ) = − KL ( q ( k ) ∥ p ( k ∣ x , θ ) ) + ln ⁡ p ( x ∣ θ ) \begin{aligned} \mathcal{L}(q, \theta) &= \sum_k q(\mathbf{k}) \ln \frac{p(\mathbf{k}\mid\mathbf{x}, \theta)}{q(\mathbf{k})} + \ln p(\mathbf{x}\mid\theta) \\ &= -\text{KL}(q(\mathbf{k})\|p(\mathbf{k} \mid \mathbf{x}, \theta)) + \ln p(\mathbf{x}\mid\theta) \end{aligned} L(q,θ)=kq(k)lnq(k)p(kx,θ)+lnp(xθ)=KL(q(k)p(kx,θ))+lnp(xθ)
  这里 KL \text{KL} KL被称为KL散度,衡量你选的隐变量分布 q ( k ) q(\mathbf{k}) q(k)离真实后验 p ( k ∣ x , θ ) p(\mathbf{k}∣\mathbf{x},θ) p(kx,θ) 有多远。没学过也不要紧,看上面的式子就可以了。
  在EM算法中,实际上干了以下两件事:
(1)设当前参数为 θ ( t ) \theta^{(t)} θ(t),E步取 q ( k ) = p ( k ∣ x , θ ( t ) ) q(\mathbf{k}) = p(\mathbf{k}|\mathbf{x}, \theta^{(t)}) q(k)=p(kx,θ(t)),此时 L ( q , θ ) \mathcal{L}(q, \theta) L(q,θ) q q q来说取到最大值,即KL散度为0。
(2)M步最大化 θ \theta θ L ( q , θ ) \mathcal{L}(q, \theta) L(q,θ)的值
θ ( t + 1 ) = arg ⁡ max ⁡ θ L ( q , θ ) \theta^{(t+1)} = \arg\max_{\theta}\mathcal{L}(q, \theta) θ(t+1)=argθmaxL(q,θ)
  再看一下此时的 L ( q , θ ) \mathcal{L}(q, \theta) L(q,θ)
L ( q , θ ) = ∑ k p ( k ∣ x , θ ( t ) ) ln ⁡ p ( x , k ∣ θ ) p ( k ∣ x , θ ( t ) ) = ∑ k p ( k ∣ x , θ ( t ) ) ln ⁡ ( p ( x , k ∣ θ ) ) − ∑ k p ( k ∣ x , θ ( t ) ) ln ⁡ ( p ( k ∣ x , θ ( t ) ) ) = E k ∼ p ( k ∣ x , θ ( t ) ) [ ln ⁡ p ( x , k ∣ θ ) ] − E k ∼ p ( k ∣ x , θ ( t ) ) [ ln ⁡ p ( k ∣ x , θ ( t ) ) ] \begin{align*} \mathcal{L}(q, \theta) &= \sum_k p(k|\mathbf{x}, \theta^{(t)}) \ln \frac{p(\mathbf{x}, k|\theta)}{p(k|\mathbf{x}, \theta^{(t)})} \\ &= \sum_k p(k|\mathbf{x}, \theta^{(t)}) \ln(p(\mathbf{x}, k|\theta)) - \sum_k p(k|\mathbf{x}, \theta^{(t)}) \ln (p(k|\mathbf{x}, \theta^{(t)}))\\ &= \mathbb{E}_{k \sim p(k|\mathbf{x}, \theta^{(t)})} [\ln p(\mathbf{x}, k|\theta)] - \mathbb{E}_{k \sim p(k|\mathbf{x}, \theta^{(t)})} [\ln p(k|\mathbf{x}, \theta^{(t)})] \end{align*} L(q,θ)=kp(kx,θ(t))lnp(kx,θ(t))p(x,kθ)=kp(kx,θ(t))ln(p(x,kθ))kp(kx,θ(t))ln(p(kx,θ(t)))=Ekp(kx,θ(t))[lnp(x,kθ)]Ekp(kx,θ(t))[lnp(kx,θ(t))]
  我们现在要优化 L ( q , θ ) \mathcal{L}(q, \theta) L(q,θ) θ \theta θ上的值,而后面那一项与 θ \theta θ无关,于是我们只需要优化第一项,也就是前文直接给出的优化目标 Q ( θ , θ ( t ) ) Q(\theta, \theta^{(t)}) Q(θ,θ(t))
Q ( θ , θ ( t ) ) = E k ∼ p ( k ∣ x , θ ( t ) ) [ ln ⁡ p ( x , k ∣ θ ) ] = ∑ k p ( k ∣ x , θ ( t ) ) ln ⁡ ( p ( x , k ∣ θ ) ) \begin{align*} Q(\theta, \theta^{(t)}) &= \mathbb{E}_{k \sim p(k|\mathbf{x}, \theta^{(t)})} [\ln p(\mathbf{x}, k|\theta)] \\ &= \sum_k p(k|\mathbf{x}, \theta^{(t)}) \ln(p(\mathbf{x}, k|\theta)) \end{align*} Q(θ,θ(t))=Ekp(kx,θ(t))[lnp(x,kθ)]=kp(kx,θ(t))ln(p(x,kθ))
  再使用样本 x i x_i xi和隐变量 k i k_i ki的独立性,有:
p ( x , k ∣ θ ) = ∏ n i = 1 p ( x i , k i ∣ θ ) p ( k ∣ x , θ ( t ) ) = ∏ n i = 1 p ( k i ∣ x i , θ ( t ) ) p(\mathbf{x}, \mathbf{k}\mid\theta) = \underset{i=1}{\overset{n}{\prod}}p(x_i, k_i\mid\theta) \\ p(\mathbf{k}\mid \mathbf{x}, \theta^{(t)}) = \underset{i=1}{\overset{n}{\prod}}p(k_i\mid x_i, \theta^{(t)}) p(x,kθ)=i=1np(xi,kiθ)p(kx,θ(t))=i=1np(kixi,θ(t))
  于是:
Q ( θ , θ ( t ) ) = ∑ i = 1 n ∑ k = 0 1 p ( k i = k ∣ x i , θ ( t ) ) ln ⁡ [ p ( x i , k i = k ∣ θ ) ] Q(\theta, \theta^{(t)}) = \sum_{i=1}^n \sum_{k=0}^1 p(k_i = k | x_i, \theta^{(t)}) \ln [p(x_i, k_i = k | \theta)] Q(θ,θ(t))=i=1nk=01p(ki=kxi,θ(t))ln[p(xi,ki=kθ)]
  这就是最终M步需要优化的目标。

相关好文章

【机器学习】EM算法详细推导和讲解
如何通俗理解EM算法

相关文章:

  • 华为OD机试真题——AI面板识别(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Windows MongoDB C++驱动安装
  • JavaScript性能优化实战技术文章大纲
  • 【计算机网络】第2章:应用层—Web and HTTP
  • MySQL、PostgreSQL、Oracle 区别详解
  • 重新测试deepseek Jakarta EE 10编程能力
  • 2025LitCTF 复现
  • Java 对接 Office 365 邮箱全攻略:OAuth2 认证 + JDK8 兼容 + Spring Boot 集成(2025 版)
  • DEEPSEEK帮写的STM32消息流函数,直接可用.已经测试
  • PaddleOCR本地部署 (Python+Flask)
  • 【Linux 基础知识系列】第二篇-Linux 发行版概述
  • 代码随想录算法训练营 Day59 图论Ⅸ dijkstra优化版 bellman_ford
  • ADB识别手机系统弹授权框包含某段文字-并自动点击确定按钮
  • HTTP/HTTPS与SOCKS5三大代理IP协议,如何选择最佳协议?
  • Nginx详解(三):ngx_http_rewrite_module模块核心指令详解
  • python同步mysql数据
  • 报错SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json
  • macOS 安装 Grafana + Prometheus + Node Exporter
  • 命令模式,观察者模式,状态模式,享元模式
  • 支持selenium的chrome driver更新到137.0.7151.55
  • 做书籍封皮的网站/磁力猫torrent kitty
  • 做那种事免费网站/免费个人网站建站申请
  • 武汉外贸网站制作/兰州网站seo诊断
  • 做网站的原型文件下载/佛山网络推广哪里好
  • 一个网站要怎么做的吗/百度搜索推广怎么做
  • 聊城网站建设项目/腾讯营销平台