大纲

  • 数学基础:凸凹函数,Jensen不等式,MLE
  • EM算法公式,收敛性
  • HMM高斯混合模型

一、数学基础

1. 凸函数

通常在实际中,最小化的函数有几个极值,所以最优化算法得出的极值不确实是否为全局的极值,对于一些特殊的函数,凸函数与凹函数,任何局部极值也是全局极致,因此如果目标函数是凸的或凹的,那么优化算法就能保证是全局的
定义1:集合R EM方法代码 em算法r语言代码_极值是凸集,如果对每对点R EM方法代码 em算法r语言代码_机器学习_02,每个实数R EM方法代码 em算法r语言代码_极值_03,点R EM方法代码 em算法r语言代码_R EM方法代码_04
R EM方法代码 em算法r语言代码_机器学习_05

定义2:我们称定义在凸集R EM方法代码 em算法r语言代码_极值_06上的函数R EM方法代码 em算法r语言代码_R EM方法代码_07为凸的,如果对每对R EM方法代码 em算法r语言代码_极值_08与每个实数R EM方法代码 em算法r语言代码_机器学习_09,则满足不等式
R EM方法代码 em算法r语言代码_python_10如果R EM方法代码 em算法r语言代码_机器学习_11,则R EM方法代码 em算法r语言代码_R EM方法代码_07是严格凸的。
R EM方法代码 em算法r语言代码_机器学习_13

2. Jensen不等式

定义1:若R EM方法代码 em算法r语言代码_R EM方法代码_07为区间R EM方法代码 em算法r语言代码_python_15上的凸函数,则R EM方法代码 em算法r语言代码_python_16, 若R EM方法代码 em算法r语言代码_R EM方法代码_17, 且R EM方法代码 em算法r语言代码_极值_18, 则:
R EM方法代码 em算法r语言代码_极值_19
推论1:若R EM方法代码 em算法r语言代码_R EM方法代码_07为区间R EM方法代码 em算法r语言代码_机器学习_21上的凸函数,R EM方法代码 em算法r语言代码_极值_22为一任意函数,R EM方法代码 em算法r语言代码_python_15为一取值范围有限的离散变量,R EM方法代码 em算法r语言代码_算法_24R EM方法代码 em算法r语言代码_python_25都存在,则:
R EM方法代码 em算法r语言代码_R EM方法代码_26

3. MLE

极大似然估计方法(Maximum Likelihood Estimate,MLE)也称为最大概似估计或最大似然估计。
一般说来,事件A发生的概率与某一未知参数R EM方法代码 em算法r语言代码_R EM方法代码_27有关,R EM方法代码 em算法r语言代码_R EM方法代码_27的取值不同,则事件A发生的概率R EM方法代码 em算法r语言代码_R EM方法代码_29也不同,当我们在一次试验中事件A发生了,则认为此时的 R EM方法代码 em算法r语言代码_R EM方法代码_27 值应是 R EM方法代码 em算法r语言代码_python_31 的一切可能取值中使R EM方法代码 em算法r语言代码_R EM方法代码_29达到最大的那一个,极大似然估计法就是要选取这样的R EM方法代码 em算法r语言代码_python_31值作为参数R EM方法代码 em算法r语言代码_python_31的估计值,使所选取的样本在被选的总体中出现的可能性为最大。

二、EM算法

1. EM算法简介

概率模型有时既含有观测变量(observable variable),又含有隐变量或潜在变量(latent variable),如果仅有观测变量,那么给定数据就能用极大似然估计或贝叶斯估计来估计model参数;但是当模型含有隐变量时,需要一种含有隐变量的概率模型参数估计的极大似然方法估计——EM算法, 称为期望极大值算法(expectation maximizition algorithm,EM),是一种启发式的迭代算法。
EM算法的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。

可以通过K-Means算法来简单理解EM算法的过程。
-E步:在初始化K个中心点后,我们对所有的样本归到K个类别。
-M步:在所有的样本归类后,重新求K个类别的中心点,相当于更新了均值。

2. EM算法公式

对于 R EM方法代码 em算法r语言代码_python_35 个样本观察数据 R EM方法代码 em算法r语言代码_python_36中,找出样本的模型参数 R EM方法代码 em算法r语言代码_R EM方法代码_27,极大化模型分布的对数似然函数如下,
R EM方法代码 em算法r语言代码_算法_38

假设数据中有隐含变量 R EM方法代码 em算法r语言代码_机器学习_39, 加入隐含变量公式变为如下(E步就是估计R EM方法代码 em算法r语言代码_R EM方法代码_40函数),
R EM方法代码 em算法r语言代码_R EM方法代码_41

根据Jensen不等式,(1)式变为(2), 注意到下式中 R EM方法代码 em算法r语言代码_R EM方法代码_42 是一个分布,因此 R EM方法代码 em算法r语言代码_R EM方法代码_43 可以理解为 R EM方法代码 em算法r语言代码_R EM方法代码_44 基于条件概率分布 R EM方法代码 em算法r语言代码_R EM方法代码_42 的期望。
R EM方法代码 em算法r语言代码_python_46

第(2)式是我们的包含隐藏数据的对数似然的一个下界。如果我们能极大化这个下界,则也在尝试极大化我们的对数似然。即我们需要最大化下式:
R EM方法代码 em算法r语言代码_机器学习_47

去掉上式中为常数的部分,则我们需要极大化的对数似然下界为:
R EM方法代码 em算法r语言代码_极值_48

3. EM算法流程

输入:观察数据 R EM方法代码 em算法r语言代码_python_36,联合分布 R EM方法代码 em算法r语言代码_算法_50, 条件分布 R EM方法代码 em算法r语言代码_极值_51, EM算法退出的阈值 R EM方法代码 em算法r语言代码_机器学习_52

  1. 随机初始化模型参数 R EM方法代码 em算法r语言代码_极值_53 的初值 R EM方法代码 em算法r语言代码_算法_54
  2. E步:求Q函数(联合分布的条件概率期望),对于每一个i,计算根据上一次迭代的模型参数来计算出隐性变量的后验概率(其实就是隐性变量的期望),来作为隐藏变量的现估计值 R EM方法代码 em算法r语言代码_算法_55
  3. M步:极大化 R EM方法代码 em算法r语言代码_R EM方法代码_56, 得到 R EM方法代码 em算法r语言代码_算法_57
  4. 重复2,3两步,直到极大似然估计 R EM方法代码 em算法r语言代码_R EM方法代码_56 的变化小于 R EM方法代码 em算法r语言代码_算法_59

如果我们从算法思想的角度来思考EM算法,我们可以发现我们的算法里已知的是观察数据,未知的是隐含数据和模型参数,在E步,我们所做的事情是固定模型参数的值,优化隐含数据的分布,而在M步,我们所做的事情是固定隐含数据分布,优化模型参数的值。

4. EM算法的收敛性思考

EM算法的流程并不复杂,但是还有两个问题需要我们思考:

1) EM算法能保证收敛吗?
2) EM算法如果收敛,那么能保证收敛到全局最大值吗?

首先我们来看第一个问题, EM算法的收敛性。要证明EM算法收敛,则我们需要证明我们的对数似然函数的值在迭代的过程中一直在增大。即:
R EM方法代码 em算法r语言代码_R EM方法代码_60

由于
R EM方法代码 em算法r语言代码_python_61 令:R EM方法代码 em算法r语言代码_极值_62

上两式相减得到:
R EM方法代码 em算法r语言代码_R EM方法代码_63

在上式中分别取 R EM方法代码 em算法r语言代码_R EM方法代码_27R EM方法代码 em算法r语言代码_机器学习_65,并相减得到:
R EM方法代码 em算法r语言代码_机器学习_66

要证明EM算法的收敛性,我们只需要证明上式的右边是非负的即可。
由于 R EM方法代码 em算法r语言代码_R EM方法代码_67 使得 R EM方法代码 em算法r语言代码_R EM方法代码_68 极大,因此有:
R EM方法代码 em算法r语言代码_R EM方法代码_69

而对于第二部分,我们有:
R EM方法代码 em算法r语言代码_极值_70

其中第(2)式用到了Jensen不等式,只不过和第二节的使用相反而已,第(3)式用到了概率分布累积为1的性质。

至此,我们得到了:R EM方法代码 em算法r语言代码_算法_71, 证明了EM算法的收敛性。

从上面的推导可以看出,EM算法可以保证收敛到一个稳定点,但是却不能保证收敛到全局的极大值点,因此它是局部最优的算法,当然,如果我们的优化目标 R EM方法代码 em算法r语言代码_R EM方法代码_68

5. 另一种推导EM算法公式方法

如果我们关心的参数为θ,观察到的数据为y,隐藏变量为z,那么根据全概率公式:
R EM方法代码 em算法r语言代码_python_73

理论上,只要最大化这个密度函数的对数,就可以得到极大似然估计MLE。然而问题是,对z进行积分很多情况下是非常困难的,特别是z的维数可能与样本量一样大,这个时候如果计算数值积分是非常恐怖的一件事情。

而EM算法可以解决这个问题。根据贝叶斯法则,我们可以得到:R EM方法代码 em算法r语言代码_R EM方法代码_74

EM算法的精髓就是使用这个公式处理z的维数问题。

直觉上,EM算法就是一个猜测的过程:给定一个猜测θ’,那么可以根据这个猜测θ’和现实的数据计算隐藏变量取各个值的概率。有了z的概率之后,再根据这个概率计算更有可能的θ。

准确的来说,EM算法就是如下的迭代过程:
R EM方法代码 em算法r语言代码_R EM方法代码_75

本节介绍的EM算法是通用的EM算法框架,其实EM算法有很多实现方式,其中比较流行的一种实现方式是高斯混合模型(Gaussian Mixed Model)


三、GMM(Gaussian mixture model) 混合高斯模型(EM算法)

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。

1. GMM原理

我们已经学习了EM算法的一般形式:

R EM方法代码 em算法r语言代码_python_76 现在我们用高斯分布来一步一步的完成EM算法。
设有随机变量 R EM方法代码 em算法r语言代码_算法_77,则混合高斯模型可以用下式表示:
R EM方法代码 em算法r语言代码_python_78

其中 R EM方法代码 em算法r语言代码_R EM方法代码_79 称为混合模型中的第 R EM方法代码 em算法r语言代码_机器学习_80 个分量(component)。可以看到 R EM方法代码 em算法r语言代码_极值_81 相当于每个分量 R EM方法代码 em算法r语言代码_R EM方法代码_79

a. 引入隐变量

我们引入一个隐变量 R EM方法代码 em算法r语言代码_极值_83R EM方法代码 em算法r语言代码_极值_83的含义是样本 R EM方法代码 em算法r语言代码_机器学习_85 来自第 R EM方法代码 em算法r语言代码_机器学习_80 个模型的数据分布。
R EM方法代码 em算法r语言代码_极值_87

则有
R EM方法代码 em算法r语言代码_极值_88

其中 R EM方法代码 em算法r语言代码_R EM方法代码_89
再对(2)进一步化简得到:
R EM方法代码 em算法r语言代码_极值_90

取对数log后:
R EM方法代码 em算法r语言代码_R EM方法代码_91

b. 确定E步极大似然函数

计算最大似然估计 R EM方法代码 em算法r语言代码_R EM方法代码_92 ,R EM方法代码 em算法r语言代码_机器学习_93 是第R EM方法代码 em算法r语言代码_机器学习_93次EM的过程,下式子中的R EM方法代码 em算法r语言代码_极值_95是(1)中R EM方法代码 em算法r语言代码_R EM方法代码_40函数的期望值
R EM方法代码 em算法r语言代码_机器学习_97

我们记 R EM方法代码 em算法r语言代码_R EM方法代码_98R EM方法代码 em算法r语言代码_算法_99 可以算出
R EM方法代码 em算法r语言代码_python_100

因为 R EM方法代码 em算法r语言代码_R EM方法代码_101 是常数,忽略不计
R EM方法代码 em算法r语言代码_算法_102

c. 确定M步,更新参数

M步的过程是最大 R EM方法代码 em算法r语言代码_R EM方法代码_68,求出 R EM方法代码 em算法r语言代码_python_104

R EM方法代码 em算法r语言代码_python_105
因为有
R EM方法代码 em算法r语言代码_机器学习_106
通过 R EM方法代码 em算法r语言代码_R EM方法代码_68R EM方法代码 em算法r语言代码_极值_108R EM方法代码 em算法r语言代码_python_109

R EM方法代码 em算法r语言代码_R EM方法代码_110
R EM方法代码 em算法r语言代码_R EM方法代码_111
R EM方法代码 em算法r语言代码_极值_112

2. GMM算法流程

输入:观测数据 R EM方法代码 em算法r语言代码_算法_113
输出:GMM的参数

  1. 初始化参数
  2. E步:根据当前模型,计算模型R EM方法代码 em算法r语言代码_算法_114R EM方法代码 em算法r语言代码_机器学习_115的影响 R EM方法代码 em算法r语言代码_python_116
  3. M步:计算 R EM方法代码 em算法r语言代码_R EM方法代码_117R EM方法代码 em算法r语言代码_机器学习_118
  4. 重复2,3两步直到收敛