最大期望值(EM算法)学习

2023-11-03

20201008 -

0. 引言

提示:本篇文章并没有详细的说明EM算法数学推导,虽然前面通过GMM的例子能够明白大致的思想,但是在底层数学推导部分没有非常完整说明(后续有时间可能会继续添加),如果想知道数学原理的读者,就不要浪费时间再看这篇文章了,可以参考CS229的一个笔记;如果是想得到一个大致的了解,看完GMM的推导就可以了。

在学习HMM的训练算法中,其使用了EM算法,而不理解EM算法的话,实际上连很多参数都不明白,就更不用提理解了,因此必须首先学习一下EM算法。我最初学习机器学习的时候,当时很多算法都是理解了,然后能够用python的库使用了,没有具体深入,能明白大概是什么意思,这也是大多数实战书上的流程。这次就趁这个这个机会,把这部分内容来学习一下。

在学习EM算法的过程中,实际上我参考了非常多的资料,因为书上的讲解例子都是从数学的角度出发,都太过抽象,所以本次学习过程中,都是参考了一些国外的博客上的文章。

但是即使是这样,很多文章虽然表面上看起来是一样的,但是从推导上,很多地方都不一样。这也造成了,看了很多文章,反而更糊涂的结果。本篇文章讲从表层来入手,从最开始的一些内容,然后再到实际的数学公式来介绍。

(本人非数学的专业,本文仅记录自己在参考各个文章时候的思考。)

1. 初步的感受

EM算法的流程非常像k均值算法,都是先初步随机设置一个值,然后循环进行更新,EM算法只有两个步骤,分别是E和M过程,但实际上底层涉及的东西很多。

本小节的内容主要参考自文章[1]。

1.1 真实世界的案例

假设统计了一个学校的男女身高,男女的不同分布,通过随机采样两种性别的N个人,然后得到了相应的统计值,那么只需要进行估计相应的参数即可,这部分就是统计学中一些参数估计的方法。在采集的过程中,需要身高的数值,同时还需要性别。从一维数轴上来看,就是不同颜色(不同性别)的点,假设他们都符合高斯分布,然后对分布的参数进行估计。

假设我们并不知道男女的性别,仅仅只有身高的信息。那么应该如何进行估计,如何进行分析,知道两个分布参数,同时估计某个人是什么性别呢?在学习统计学的时候,一般进行参数估计都是针对单个高斯变量,通过最大似然估计就能完成。这里,性别分布也不知道,高斯分布的参数也不知道。这本质上就是一个GMM(高斯混合模型)的问题。

把问题简化一下,假设我们知道某些信息,我们该怎么解决这个参数估计或者概率分布的问题。
1)假设知道男女的标签,那么只需要通过最大似然估计的方式,即可。
μ ^ M L E = 1 N ∑ i N x i = x ˉ θ ^ M L E = 1 N ∑ i N ( x i − x ^ ) 2 \hat{\mu}_{MLE}=\frac{1}{N}\sum_{i}^{N}x_i=\bar{x}\\ \hat{\theta}_{MLE}=\sqrt{\frac{1}{N}\sum_i^N(x_i-\hat{x})^2} μ^MLE=N1iNxi=xˉθ^MLE=N1iN(xix^)2
2)假设知道了分布的参数,想求解每个观察值是属于什么类别,只需要给每个观察值赋予一个混合的概率值(表示其属于某个概率分布的情况),然后同时求解最大似然方程即可。
P ( x i = m a l e ) = α 1 N ( x i ∣ μ 1 , Σ 1 ) Z P ( x i = f e m a l e ) = α 2 N ( x i ∣ μ 2 , Σ 2 ) Z Z = ∑ j = 1 2 α j N ( x i ∣ μ j , Σ j ) P(x_i=male)=\frac{\alpha_1\mathcal N(x_i|\mu_1,\Sigma_1)}{Z} \\ \quad\\ P(x_i=female)=\frac{\alpha_2\mathcal N(x_i|\mu_2,\Sigma_2)}{Z}\\ \quad\\ Z=\sum_{j=1}^2{\alpha_j \mathcal N(x_i|\mu_j,\Sigma_j)} \\ P(xi=male)=Zα1N(xiμ1,Σ1)P(xi=female)=Zα2N(xiμ2,Σ2)Z=j=12αjN(xiμj,Σj)
(上述公式摘抄自文章[2],后续会对其进行具体分析)
从上述的内容中可以看出,假设我们知道一部分信息,我们可以推导出另外一部分信息。这就是他们很多在介绍EM算法的时候,提到的鸡和蛋的问题。在无监督学习中,通过GMM进行聚类的时候,并不知道这些信息。理解EM算法最直观的例子就是GMM的训练过程了。
问题就是,我们仅仅知道测量值的时候,我们如何进行GMM的参数估计还有相应的标签赋值呢?

1.2 宏观的理解EM算法

既然没有办法直接的进行解决,同样是分为两个步骤,在初始化过程中,将一些参数随机,例如直接给出正态分布的参数,或者给出每个观察值的标签。下面假设我们给出了每个观察值的标签。
1)通过观察值的标签,我们可以直接对这个参数分布进行估计,然后得到了相应的概率分布
2)前一步中得到的概率分布参数,重新对观察值进行标签赋值
3)重复以上两个步骤,直到收敛

这个步骤跟k-means算法的步骤非常像。但是实际上,虽然看起来很简单,但是需要思考的内容有很多,就比如说你怎么保证这个东西就一定收敛?或者说,这一定会成功呢?!

1.3 小节

前面的示例中,是从一个实际的问题出发;实际上EM算法解决最大似然估计的方法是引入了一个潜在变量,通过这个潜在变量将本来不好优化的问题转化为可以优化的部分。(但是前面的例子中没有直白的说明这个潜在变量)
前面宏观的理解非常简单,与k-means非常像。很多文章在利用GMM进行介绍的时候,也非常容易明白,但是一旦涉及到具体的公式,问题就变得抽象了。

2. EM算法在GMM模型中的应用

本小节将主要利用EM算法来解决GMM模型的问题,通过具体的数学公式,明白实际上操作流程。本小节的内容参考自文章[3]。
在这里插入图片描述
上述图片也是来自文章[3],好像是一个通过matlab的程序生成的,后续的时候可以尝试也绘制一个这种图片。文章[3]要解决的问题,就是估计GMM的参数,在估计过程中,采用软聚类的形式,也就是说,给每个点赋予一个属于某个类的概率,而不是直接属于某个类。具体问题是,存在数据集 n n n个点,其属于 R d R^d Rd空间,他们由一个GMM(Gaussian Mixture Model)模型生成,现在的任务就是估计出最可能产生这些点的GMM模型,也就是求解他们的参数。

2.1 参数设置

本小节主要介绍一下后文中主要使用的参数都有哪些
1)k个成分,GMM模型中,有k个高斯分布,一般这个数值都是实现指定的。
2)每个高斯分布 j , k ∈ { 1 , 2 , . . . , k } j,k\in\{1,2,...,k\} jk{1,2,...,k}有参数 μ \mu μ σ 2 \sigma^2 σ2去确定
P x ( x ∣ μ j , σ j 2 ) = N ( X ; μ j , σ j 2 ) = 1 ( 2 π σ j 2 ) d 2 e − ∥ x − μ j ∥ 2 2 σ j 2 P_x(x|\mu^j,\sigma^2_j)=\mathcal N(X;\mu^j,\sigma^2_j)=\frac{1}{(2\pi\sigma^2_j)^{\frac{d}{2}}}e^{\frac{-\|x-\mu^j\|^2}{2\sigma^2_j}} Px(xμj,σj2)=N(X;μj,σj2)=(2πσj2)2d1e2σj2xμj2
上面这些变量的含义,很好理解,但是这里有些不一样的是,他没有使用协方差矩阵,在有些公式里面可能是协方差矩阵,这里不影响理解。
3)每个高斯分布有一个权重,这个权重代表这个可能是这个高斯成分的概率
j ∼ M u l t i n o n i a l ( p 1 , p 2 , . . . , p K ) j\sim Multinonial(p_1,p_2,...,p_K) jMultinonial(p1,p2,...,pK)
4)最后是所有的要去估计的参数集合
Θ = p 1 , p 2 , . . . , p K , μ 1 , μ 2 , . . . , μ K , σ 1 1 , σ 2 2 , . . . , σ K 2 \Theta=p_1,p_2,...,p_K,\mu^1,\mu^2,...,\mu^K,\sigma^1_1,\sigma^2_2,...,\sigma^2_K Θ=p1,p2,...,pK,μ1,μ2,...,μK,σ11,σ22,...,σK2

2.2 最大似然估计

最大似然估计是指选取能够满足所有观测值最大出现概率的参数值。
P ( X n ∣ Θ ) = ∏ i = 1 n ∑ j = 1 K p j N ( x i ; μ j , σ j 2 ) {\rm \textbf P}(X_n|\Theta)=\prod_{i=1}^n\sum_{j=1}^{K}p_j\mathcal N(x_i;\mu^j,\sigma^2_j) P(Xn∣Θ)=i=1nj=1KpjN(xi;μj,σj2)
而求解这个方程的过程会非常复杂,正如前面所说,很多内容都不知道。

2.3 EM过程求解

首先初始化变量 Θ \Theta Θ

2.3.1 E步骤(Expectation)

当所有参数都被确定了,那么就需要求解每个数据的后验概率(每个数据点属于每个高斯分布的概率),换句话说,就是已经看到了这些点,那么每个成分的权重是多少。
P ( j ∣ i ) = P ( y = j ∣ X n ) = P ( j ) P ( X n ∣ j ) P ( X n ) = P ( j ) P ( X n ∣ j ) ∑ j = 1 K P ( j ) P ( X n ∣ j ) {\rm \textbf P}(j|i)={\rm \textbf P}(y=j|X_n)=\frac{{\rm \textbf P}(j){\rm \textbf P}(X_n|j)}{{\rm \textbf P}(X_n)}=\frac{{\rm \textbf P}(j){\rm \textbf P}(X_n|j)}{\sum_{j=1}^{K}{\rm \textbf P}(j){\rm \textbf P}(X_n|j)} P(ji)=P(y=jXn)=P(Xn)P(j)P(Xnj)=j=1KP(j)P(Xnj)P(j)P(Xnj)
先验概率是 P ( j ) {\rm \textbf P}(j) P(j),似然值是 P ( X n ∣ j ) {\rm \textbf P}(X_n|j) P(Xnj)。在另一篇文章中《先验概率及后验概率等解释》记录了这些名词的解释。
这里的 P ( j ) {\rm \textbf P}(j) P(j)就是前面的每个成分的权重,从历时解释的角度来说,{\rm \textbf P}(j|i)就是要求,在看到这个样本点之后,其属于成分 j j j的概率是多少,实质上就是要确定每个样本点属于每个高斯成分的概率,正是一个打标签的过程。类别k-means方法,就是随机中心样本点之后,求每个点的标签。

2.3.2 M步骤(Maximization)

前面的步骤已经得到了每个点属于每个高斯成分的后验概率,这部分将重新估计初始化的数值。首先重新估计 P ( j ) {\rm \textbf P}(j) P(j)
P ^ ( j ) = n ^ j n = ∑ i = 1 n P ( j ∣ i ) n \hat{\rm \textbf P}(j)=\frac{\hat{n}_j}{n}=\frac{\sum_{i=1}^{n}{\rm \textbf P}(j|i)}{n} P^(j)=nn^j=ni=1nP(ji)
然后,利用最大似然来估计其他高斯分布的参数。
P ( X n ∣ Θ ) = ∏ i = 1 n ∑ j = 1 K p j N ( x i ; μ j , σ j 2 ) {\rm \textbf P}(X_n|\Theta)=\prod_{i=1}^{n}\sum_{j=1}^{K}p_j\mathcal N(x_i;\mu^j,\sigma^2_j) P(Xn∣Θ)=i=1nj=1KpjN(xi;μj,σj2)
将其改写为 l o g log log似然函数。
log ⁡ ( P ( X n ∣ Θ ) ) = ℓ ( X n ; Θ ) ℓ ( X n ; Θ ) = ∑ i = 1 n l o g ∑ j = 1 K P ^ ( j ) N ( x i ; μ j , σ j 2 ) \log({\rm \textbf P}(X_n|\Theta))=\ell(X_n;\Theta) \\ \ell(X_n;\Theta)=\sum_{i=1}^{n}log\sum_{j=1}^{K}\hat{\rm \textbf P}(j)\mathcal N(x_i;\mu^j,\sigma^2_j) log(P(Xn∣Θ))=(Xn;Θ)(Xn;Θ)=i=1nlogj=1KP^(j)N(xi;μj,σj2)
其中 p j p_j pj已经被替换为前面估计出来的 P ^ ( j ) \hat{\rm \textbf P}(j) P^(j)。最后是各个参数的估计方式。
μ ^ j = 1 n ^ j ∑ i = 1 n P ( j ∣ i ) x i σ ^ j 2 = 1 n ^ j ∑ i = 1 n P ( j ∣ i ) ∥ x i − μ ^ j ∥ 2 \hat{\mu}^j=\frac{1}{\hat{n}_j}\sum^{n}_{i=1}{\rm \textbf P}(j|i)x_i \\ \hat{\sigma}_j^2=\frac{1}{\hat{n}_j}\sum_{i=1}^n{\rm \textbf P}(j|i)\|x_i-\hat{\mu}^j\|^2 μ^j=n^j1i=1nP(ji)xiσ^j2=n^j1i=1nP(ji)xiμ^j2
(正如前面介绍参数的时候所说,这里没有利用协方差矩阵的形式,仅仅是一个例子,能够明白其推到的过程)

2.3.3 重复上述步骤

通过重复上述两个步骤,直到最后数值收敛即可。

2.4 小节

本部分的内容,主要就是第一小节的公式实例推导,但前面也说过,EM算法的通过引入了一个潜在的变量来实现参数估计,这里的情况比较特殊,没有具体说明,在后面具体引入通用公式的时候再来具体说明。英语好的读者可以直接阅读文章[3]来获得最佳的体验。
利用GMM的例子来进行解释,能够知道大致的步骤,但是对于实际的问题来说,例如HMM训练算法的推导,还是不一样,因此需要一个更通用的公式来解决这个鸡和蛋的问题。

3. EM推导过程

注意如果上述内容能够明白,就已经大致知道了EM算法的思想,由于本人能力有限,下面的推导也是看了其他的一些文章,虽然能明白他要干什么,但是对数学公式不甚理解,为了不误人子弟,请读者谨慎阅读。

其实在看这部分内容的时候,耗费了很久,很多文章的角度不同,深度也不同,我也很难明白。但是我觉得,学习这个东西的目标应该循序渐进,既然以后要用到这个东西,那么可以先从怎么使用来入手。并不是说,在sklearn中直接使用了GMM这种形式(EM被隐式的调用),而是我能够把自己的问题形式化为直接使用EM的形式,这是第一个目标,而第二个目标,就是能够理解底层的数学原理。先简单说一下EM要优化的目标。

3.1 优化目标

在文章[2]中,文章的前半部分也是利用GMM来进行说明,来看一看他的公式。
Θ = { α 1 , α 2 , . . , α K , μ 1 , μ 2 , . . . , μ K , Σ 1 , Σ 2 , . . . , Σ K } max ⁡ Θ P ( X ∣ Θ ) = max ⁡ Θ ∏ i P ( x i ∣ Θ ) = max ⁡ α j , μ j Σ j ∏ i ⟮ ∑ j = 1 K α j N ( x i ∣ μ j , Σ j ) ⟯ \Theta=\{\alpha_1,\alpha_2,..,\alpha_K,\mu_1,\mu_2,...,\mu_K,\Sigma_1,\Sigma_2,...,\Sigma_K\} \\ \max_\Theta P(X|\Theta)=\max_\Theta \prod_i P(x_i|\Theta)=\max_{\alpha_j,\mu_j\Sigma_j}\prod_i\lgroup\sum_{j=1}^{K}\alpha_j\mathcal N(x_i|\mu_j,\Sigma_j)\rgroup Θ={α1,α2,..,αK,μ1,μ2,...,μK,Σ1,Σ2,...,ΣK}ΘmaxP(X∣Θ)=ΘmaxiP(xi∣Θ)=αj,μjΣjmaxij=1KαjN(xiμj,Σj)⟯
转化为 l o g log log似然函数
max ⁡ Θ l o g P ( X ∣ Θ ) = max ⁡ Θ l o g ( ∏ i P ( x i ∣ Θ ) ) = max ⁡ Θ ∑ i l o g ( P ( x i ∣ Θ ) ) = max ⁡ α i , μ j , Σ j ∑ i l o g ( ∑ j = 1 K α j N ( x i ∣ μ j , Σ j ) ) \max_\Theta logP(X|\Theta)=\max_\Theta log(\prod_i P(x_i|\Theta))=\max_\Theta \sum_i log(P(x_i|\Theta))\\=\max_{\alpha_i,\mu_j,\Sigma_j}\sum_i log(\sum_{j=1}^{K}\alpha_j \mathcal N(x_i|\mu_j,\Sigma_j)) ΘmaxlogP(X∣Θ)=Θmaxlog(iP(xi∣Θ))=Θmaxilog(P(xi∣Θ))=αi,μj,Σjmaxilog(j=1KαjN(xiμj,Σj))
这个公式跟前面讲解GMM的时候的公式是一致的。虽然从前面的讲解中,我们知道了GMM的参数如何用EM算法进行估计,但是EM算法本身的描述更为形式化,或者说更通用,他可以应用于很多优化问题,本质上的想法就是要去优化一个似然函数,或者说 l o g − log- log似然函数,如
max ⁡ Θ l o g ( X ∣ Θ ) = max ⁡ Θ l o g ( ∏ i P ( x i ∣ Θ ) ) = max ⁡ Θ ∑ i l o g ( P ( x i ∣ Θ ) ) \max_\Theta log(X|\Theta)=\max_\Theta log(\prod_i P(x_i|\Theta))=\max_\Theta \sum_i log(P(x_i|\Theta)) Θmaxlog(X∣Θ)=Θmaxlog(iP(xi∣Θ))=Θmaxilog(P(xi∣Θ))
那么也就是说,将问题更改为,如果这个概率的分布并不是混合高斯分布的情况下,甚至于更通用的场景下,应该怎么来解决这个优化问题。这里文章[2]介绍了一些数学基础才开始将EM算法,我这里直接就开始将EM,然后穿插着再把这些数学基础带上,这里最重要的就是这个Jensen’s inequality。

3.2 隐含变量

隐含变量是一个非常重要的概念,但是经过这些文中的描述之后,我有点不明白这其中的问题了。有些文章直接从隐含变量的角度来说明,其要最大似然估计的公式中就带有着隐含变量,因为求导过程复杂,所以采用了EM算法;而有些文章则是说是为了求解这个最大似然函数,然后构造了一个隐含变量,以此帮助进行优化。感觉很多内容都不统一,这也导致我看了越来越多的文章之后,越来越感觉非常疑惑。但是有些文章也指出,**EM算法最初的提出,就是为了解决含有隐含变量的最大似然函数的求解 **,这句话我感觉也挺正确的。总之,这里要说明的问题就是,因为这些概念的不明确,导致我从这些博客从这些文章中得到的思想是非常不一样的,也就导致了不能理解。看来得多看一些比较权威的文章或者是书籍才行。

通俗一点来讲,在前面的GMM中,一个指示样本 x x x属于某个类别的变量,就被称为隐含变量,用公式写出来,就是:
l o g ( X ∣ θ ) = ∑ i l o g ( ∑ z i p ( x i , z i ∣ θ ) ) log(X|\theta)=\sum_i log(\sum_{z_i}p(x_i,z_i|\theta)) log(Xθ)=ilog(zip(xi,ziθ))
也就是说, 通过遍历隐含变量的空间,计算整个边缘概率,就是原始的概率结果。

3.3 EM的形式化推导

首先,EM算法就是要求解出来一个下限值,然后通过迭代的方式,来持续获取到最大的下限。要使用jensen不等式的内容来辅助推导。这部分可以看文章[2]的一个动图来加深理解。
意思就是说,找到一个函数,先固定参数,然后调整函数来让他达到最大的下限;而第二步之后,固定函数,调整参数再次达到最大下限。重复这个步骤,最终得到相应的结果。

接着前面的内容继续来说,通过加入了隐含变量,或者说我本来就有隐含变量,那么似然值应该是如下过程:
P ( x i ∣ θ ) = ∑ j = 1 K P ( x i ∣ t i = j , θ ) P ( t i = j ∣ θ ) = ∑ j = 1 K P ( x i , t i = j ∣ θ ) P(x_i|\theta)=\sum_{j=1}^{K}P(x_i|t_i=j,\theta)P(t_i=j|\theta)=\sum_{j=1}^{K}P(x_i,t_i=j|\theta) P(xiθ)=j=1KP(xiti=j,θ)P(ti=jθ)=j=1KP(xi,ti=jθ)
其中, t i t_i ti是一个隐含变量,其解释了 x i x_i xi属于哪个聚类的类别。那么根据jensen不等式的内容,
l o g ( ∑ j = 1 K β j ν j ) ≥ ∑ j = 1 K l o g ( β j ν j ) log(\sum_{j=1}^{K}\beta_j\nu_j)\geq\sum_{j=1}^{K}log(\beta_j\nu_j) log(j=1Kβjνj)j=1Klog(βjνj)
其中,各项内容分别是
β j = P ( t i = j ∣ θ ) ν j = P ( x i ∣ t i = j , θ ) \beta_j=P(t_i=j|\theta)\\ \nu_j=P(x_i|t_i=j,\theta) βj=P(ti=jθ)νj=P(xiti=j,θ)
前面已经定义了,本来要求解得最优化目标是
max ⁡ Θ l o g ( X ∣ Θ ) = max ⁡ Θ l o g ( ∏ i P ( x i ∣ Θ ) ) = max ⁡ Θ ∑ i l o g ( P ( x i ∣ Θ ) ) \max_\Theta log(X|\Theta)=\max_\Theta log(\prod_i P(x_i|\Theta))=\max_\Theta \sum_i log(P(x_i|\Theta)) Θmaxlog(X∣Θ)=Θmaxlog(iP(xi∣Θ))=Θmaxilog(P(xi∣Θ))
那么讲上述内容带入进去,
∑ i l o g ( P ( x i ∣ θ ) ) = ∑ i l o g ( ∑ j = 1 K P ( x i ∣ t i = j , θ ) P ( t i = j ∣ θ ) ) ≥ ∑ i ∑ j = 1 K l o g ( β j ν j ) = ∑ i ∑ j = 1 K l o g ( P ( t i = j ∣ θ ) P ( x i ∣ t i = j , θ ) ) \sum_i log(P(x_i|\theta))=\sum_i log(\sum_{j=1}^{K}P(x_i|t_i=j,\theta)P(t_i=j|\theta))\geq\\ \sum_i\sum_{j=1}^{K}log(\beta_j\nu_j)=\sum_i\sum_{j=1}^{K}log(P(t_i=j|\theta)P(x_i|t_i=j,\theta)) ilog(P(xiθ))=ilog(j=1KP(xiti=j,θ)P(ti=jθ))ij=1Klog(βjνj)=ij=1Klog(P(ti=jθ)P(xiti=j,θ))
但是公式右边是一个 θ \theta θ的函数,还要有一个分布 q q q
l o g ( P ( x i ∣ θ ) ) = l o g ( ∑ j = 1 K P ( x i ∣ t i = j , θ ) P ( t i = j ∣ θ ) ) = l o g ( ∑ j = 1 K P ( x i , t i = j ∣ θ ) ) = l o g ( ∑ j = 1 K q ( t i = j ) q ( t i = j ) P ( x i , t i = j ∣ θ ) ) = l o g ( ∑ j = 1 K q ( t i = j ) P ( x i , t i = j ∣ θ q ( t i = j ) ) log(P(x_i|\theta))=log(\sum_{j=1}^{K}P(x_i|t_i=j,\theta)P(t_i=j|\theta)) \\ =log(\sum_{j=1}^{K}P(x_i,t_i=j|\theta)) \\ =log(\sum_{j=1}^{K}\frac{q(t_i=j)}{q(t_i=j)}P(x_i,t_i=j|\theta))\\ =log(\sum_{j=1}^{K}q(t_i=j)\frac{P(x_i,t_i=j|\theta}{q(t_i=j)}) log(P(xiθ))=log(j=1KP(xiti=j,θ)P(ti=jθ))=log(j=1KP(xi,ti=jθ))=log(j=1Kq(ti=j)q(ti=j)P(xi,ti=jθ))=log(j=1Kq(ti=j)q(ti=j)P(xi,ti=jθ)
再次利用jensen不等式。
l o g ( ∑ j = 1 K q ( t i = j ) P ( x i , t i = j ∣ θ ) q ( t i = j ) ) ≥ ∑ j = 1 K l o g ( q ( t i = j ) P ( x i , t i = j ∣ θ ) q ( t i = j ) ) = L ( θ , q ) log(\sum_{j=1}^{K}q(t_i=j)\frac{P(x_i,t_i=j|\theta)}{q(t_i=j)})\geq\sum_{j=1}^{K}log(q(t_i=j)\frac{P(x_i,t_i=j|\theta)}{q(t_i=j)})=L(\theta,q) log(j=1Kq(ti=j)q(ti=j)P(xi,ti=jθ))j=1Klog(q(ti=j)q(ti=j)P(xi,ti=jθ))=L(θ,q)
这部分内容定义了一个下限,保证所有的值都小于等于最大似然值。
那么下面的步骤就是最大化这个下限。

1)Expection Step

q k + 1 = arg ⁡ max ⁡ L ( θ k , q k ) q^{k+1}=\arg\max L(\theta^k,q^k) qk+1=argmaxL(θk,qk)
固定参数 θ \theta θ,求解最大的下限值。而上述公式可以推导为
q k + 1 ( t i ) = arg ⁡ max ⁡ L ( θ k , q k ) = P ( t i ∣ x i , θ ) q^{k+1}(t_i)=\arg \max L(\theta^k,q^k)=P(t_i|x_i,\theta) qk+1(ti)=argmaxL(θk,qk)=P(tixi,θ)
这个公式就是前面GMM时候求解的 P ( j ∣ x ) P(j|x) P(jx)

2)Maximization Step

θ k + 1 = arg ⁡ max ⁡ L ( θ k , q k + 1 ) \theta^{k+1}=\arg \max L(\theta^k,q^{k+1}) θk+1=argmaxL(θk,qk+1
固定 q q q然后最大的这个下限,这里文章[2]的公式就不对了,感觉他少推到了一些东西,最后就得到了一个期望值。

3.4 小节

这部分还是没有从公式的角度,或者从数学的角度上弄明白,就感觉不知道他到底想说什么,也没有一个承上启下的过程。

再来记录一下:
因为直接对含有因变量的似然函数进行求解很难,所以采用一种另外的方法,也就是通过求解他的紧下界,也就是必须存在等于的情况;那么此时通过jensen不等式的内容,可以直接求解。而具体的实现步骤,就是通过固定某些参数,然后最大化另外的,持续这个步骤,直到收敛。

jensen不等式的内容:
E [ f ( x ) ] ≥ f ( E X ) {\rm E}[f(x)]\geq f({\rm E}X) E[f(x)]f(EX)
其中 f f f是一个凸函数( f ′ ′ ( x ) ≥ 0 f^{''}(x)\geq 0 f′′(x)0), X X X是一个随机变量,也就是他的期望值在某些函数下,不等式成立。

我觉得,我大致上明白了具体的含义,通过参考了两个部分的内容:

同时我觉得文章[1]在后面写的挺好的,就是必须有一定的基础;同时她在最后对比了这种方式与梯度下降算法的异同,贴一个图。
在这里插入图片描述

同时文章The Expectation-Maximization Algorithm的解释,看起来更为形式化,可以作为参考。


20220924 -

本篇文章重点针对最大期望值算法进行了介绍,但是没有说GMM的事情。最近在做相关的研究,就对GMM进行了了解,有两篇文章的记录比较清晰,在这里留存一下。其中文章[4]从数学的角度,结合EM算法进行了介绍,读完之后比较理解内部原理,而文章[5]图比较多,更直观清晰。

两部分文章在最后的时候都介绍了如何选择GMM的簇个数问题。

参考

[1]The EM Algorithm Explained
[2]Gaussian Mixture Models and Expectation-Maximization (A full explanation)
[3]Expectation-Maximization Algorithm Step-by-Step
[4]GMM
[5]In Depth: Gaussian Mixture Models

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最大期望值(EM算法)学习 的相关文章

  • stats

    本篇介绍基础包stats中的一个函数nls 它的作用是求解非线性回归的待定参数 nls formula data start control algorithm trace subset weights na action model lo
  • 标准库类型sring

    1 string 类型表示可变长的字符序列 需要包含头文件 include 2 定义和初始化 string 对象 拷贝初始化 使用了 号 直接初始化 用 3 string 对象的操作 cin lt lt string 会忽略前面的空白的无效
  • Java访问数据库的速度瓶颈问题的分析及解决

    内容 速度瓶颈问题的提出 JDBC访问数据库的机制 不同模式的 JDBC接口的选择 Java程序中SQL语句格式的优化 软件模型中对数据库访问的设计模式的优化 将深入研究的问题 参考资料 关于作者 FoolsGarden SMTH 自由Ja

随机推荐

  • 解决VS Code连接远程服务器使用Python中的matplotiib包画图无法显示的问题

    项目场景 在使用VS Code连接远程服务器使用Python中的matplotiib包画图时 会出现无法显示的问题 问题描述 在直接执行画图程序时 会报错 RuntimeError Invalid DISPLAY variable 原因分析
  • [Java学习]报错:类 OperatorDemo01 是公共的, 应在名为 OperatorDemo01.java 的文件中声明

    搭建好环境 用notepad 编写完程序 打开cmd编译文件 算数运算符 public class OperatorDemo01 public static void mian String args int a 6 int b 4 Sys
  • 编译原理(第四版)复习 (一)

    第一章 编译概述 编译程序 将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序 解释程序 也是一种翻译程序 将源程序翻译并执行 边解释边执行 两者的区别 解释程序的执行过程不会生成目标程序 编译过程的5个阶段 词法分析 语法分析
  • 用Python实现进制转换,这一篇教程就够了

    Python 实现进制转换 一 导言 导语 在计算机进行数据交换时 常常会有一个进制转换的过程 我们知道计算机只认0 和 1 在内存系统中 基本基于二进制进行运算的 但是有时候数据过于庞大 为了方便存储管理 计算机会使用十六进制存储数据 但
  • GNU-ld链接脚本浅析

    0 Contents 1 概论 2 基本概念 3 脚本格式 4 简单例子 5 简单脚本命令 6 对符号的赋值 7 SECTIONS命令 8 MEMORY命令 9 PHDRS命令 10 VERSION命令 11 脚本内的表达式 12 暗含的连
  • web前后端分离

    1 介绍 参考链接 https www cnblogs com leotsai p vuejs front backend architecture html 前后端分离的话 则可以很好的解决前后端分工不均的问题 将更多的交互逻辑分配给前端
  • JDBC学习(四)时间类型

    在Java代码中 java sql包原则上不能出现在DAO以外的地方 数据库和java中的时间类型的对应关系 DATE gt java sql Date TIME gt java sql Time TIMESTAMP gt java sql
  • 概念基础:恶意软件混淆的方法

    2020 05 20 看了一些网站的内容 发现主要存在四种方式 xor 加壳 base64编码 rot13 arm的一个指令 1 2 分别是简答介绍了这集中方式 3 是一个实验室的工具 可以取出一些混淆的字符串 但是只支持pe格式 在原理方
  • Android和iOS 测试五个最好的开源自动化工具

    本文主要介绍Android和iOS 五个最好的开源自动化工具 这里整理了相关资料 希望能帮助测试软件的朋友 有需要的看下 自动化测试在产品测试上有着非常重要的作用 实现测试自动化有多种积极的方式 包括最大限度地减少测试执行时间 在关键的发布
  • 相约久久网 -- 有很多东西值得学习

    http www meet99 com 转载于 https www cnblogs com yqskj archive 2012 10 07 2714622 html
  • flutter 怎么实现app整体灰度

    今天举国哀悼 进入各种大厂的app也可以看到主色都变成灰色的了 作为程序员我们肯定会想怎么可以实现的 我简单研究了10分钟 flutter中只要在整体外面套一个ShaderMask 然后修改blendMode即可 核心代码 class My
  • CentOS7目录结构详细版

    原文地址 http www cnblogs com ellisonDon archive 2012 10 03 2710730 html 原文地址 https www cnblogs com ellisonDon archive 2012
  • SpringBoot集成ShardingJDBC系列【2】—— 基于yaml基本配置

    文章只负责讲解sharding的相关配置 springboot其他的配置自己解决 文章内容将分开发布 便于平时查阅 基于yaml基本配置 在application yml配置文件中对mybatis plus做简单的配置 这里不对Mybati
  • Flutter设置Container的高度随ListView或者GridView

    在做移动端的时候 很多时候会需要下图所示的需求 如图1美团外卖首页的一部分 先进行需求分析 这个模块可以设计成Container包含GridView GridView中子内容个数由后台数据控制 但是在直接写Container包含GridVi
  • 第130篇 在 OpenSea 上创建自己的 NFT 商店(2)

    本文介绍一种通过自己部署智能合约 在 OpenSea 上创建自己的 NFT 商店的方法 1 ERC721合约 写一个最简单的标准 ERC721 合约 源码 SPDX License Identifier MIT pragma solidit
  • java 简介

    java 简介 1991 年Sun公司的James Gosling 詹姆斯 高斯林 等人开始开发名称为 Oak 的语言 希望用于控制嵌入在有线电视交换盒 PDA等的微处理器 1994年将Oak语言更名为Java 1 java体系结构 j2s
  • C语言笔记 指针 数组

    C语言中 指针做函数参数传递二维数组有两种基本方法 1 传递 数组指针 include
  • Openstack常用命令

    目录 一 创建用户 二 创建删除模板和模板其他操作 三 创建更新删除镜像 四 创建网络 五 VPN的使用 六 创建容器swift模块 前言 在linux中使用openstakc命令前 需要source etc keystone admin
  • 设计模式在开源框架中的应用

    设计模式不是虚的 实实在在出现在很多开源框架中 比如spring tomcat等等 现在这篇文章是一个阅读合集 整理了设计模式在开源框架中的应用 后续会逐渐补充 1 tomcat中设计模式的使用 Tomcat 系统架构与设计模式 第 2 部
  • 最大期望值(EM算法)学习

    20201008 0 引言 提示 本篇文章并没有详细的说明EM算法数学推导 虽然前面通过GMM的例子能够明白大致的思想 但是在底层数学推导部分没有非常完整说明 后续有时间可能会继续添加 如果想知道数学原理的读者 就不要浪费时间再看这篇文章了