EM算法,全称Expectation Maximization Algorithm,译作最大期望化算法或期望最大算法,它是一种迭代算法,用于含有隐变量(hidden variable)的概率参数模型的最大似然估计或极大后验概率估计。
例子
下面先通过一个例子实验,来直观感受对含有隐藏变量概率模型的参数估计。
这里用PYTOHN 写一个可自定义生成概率的01分布:
例如 index = random_index([70, 30]) 则为 P(index=0) = 0.7 , P(index=1) = 0.3。生成100个样本:
[0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0]
可以统计到 1 的个数为28个。
现在实验用两个分布 H0(random_index([70, 30])) , H1(random_index([40, 60])), 每次用一个分布实验,共五次实验,如:
实验 | 0个数 | 1个数 | 统计 |
H0 | 73 | 27 | P(1) = 0.27 |
H1 | 36 | 64 | P(1) = 0.64 |
H0 | 67 | 33 | P(1) = 0.33 |
H1 | 43 | 57 | P(1) = 0.57 |
H0 | 71 | 29 | P(1) = 0.29 |
图 1
假设我们不知真实分布,那么通过上图的随机过程可统计,可得
P( 1 / H0) = (0.27 + 0.33 + 0.29) / 3 = 0.2966... P( 1 / H1) = (0.64 + 0.57) / 2 = 0.605
以上实验,如果我们存在两个分布,但不知其分布参数,但如果观察的随机样本是可知由哪个分布产生的,那么统计,就可以各个分布的参数。
上述实验模型的变量仅仅是观测变量,通过给定观察数据便可以估计模型参数。
但通常遇到问没这么简单,如我们观察的到随机样本,它是在一个有个多分布组合的系统中产生的,而且我们无法观察到时由哪个分布(或者由怎样的权重组合的分布)产生的,也就是说系统存在隐藏变量决定了分布的出现情况。
对于这种情况,通过观察样本,直接估计整个系统的模型很难,比如对于一个GMM 模型:
要高斯变量的分布 和 Z变量的F 直接去估计出来可能无法解析, 因此我们只能以某个启发式方法,去估计, 以可以准确描述我们的观察数据。
在下面的实验中,我们不知每一次实验是H0 还是 H1,那么这时不仅有观察变量,是观察的出现的1 或 0, 还有隐藏变量,表示每次实验是H0 还是 H1 可能结果。
实验 | 0个数 | 1个数 | 统计 |
H? | 73 | 27 | P(1) = 0.27 |
H? | 36 | 64 | P(1) = 0.64 |
H? | 67 | 33 | P(1) = 0.33 |
H? | 43 | 57 | P(1) = 0.57 |
H? | 71 | 29 | P(1) = 0.29 |
图 2
如上述实验,我们假设系统存在两个不同分布 H0 和 H1 以某种可能组合。
假设 初始值 P(1 / H0) = 0.2 , P(1/ H1) = 0.7.
实验 | H0 | H1 |
1 | 0.8`(7.3)*0.2`(2.7) = 0.002543 | 0.3`(7.3) * 0.7`(2.7)=0.000058 |
2 | 0.8`(3.6) *0.2`(6.4) = 0.000050 | 0.3`(3.6) * 0.7`(6.4)=0.005004 |
3 | 0.8`(6.7) *0.2`(3.3) = 0.001106 | 0.3`(6.7) * 0.7`(3.3)=0.000032 |
4 | 0.8`(4.3) *0.2`(5.7) = 0.000039 | 0.3`(4.3) * 0.7`(5.7)=0.000739 |
5 | 0.8`(7.1) *0.2`(2.9) = 0.001927 | 0.3`(7.1) * 0.7`(2.9)=0.000069 |
图 3
此时估计出了隐藏变量
实验 | H0 | H1 |
1 | 0.97 | 0.03 |
2 | 0.01 | 0.99 |
3 | 0.97 | 0.03 |
4 | 0.05 | 0.95 |
5 | 0.96 | 0.04 |
图 4
上面估计出的隐藏变量的很准确的反应真实情况,主要是因为我们的模型初始化值很接近真实参数。
接下来用估计的隐藏变量,及观察样本统计 H0 和 H1 各自的分布:
对于 H0 :
实验 | 0 | 1 |
1 | 0.97 * 73 | 0.97 * 27 |
2 | 0.01 * 36 | 0.01 * 64 |
3 | 0.97 * 67 | 0.97 * 33 |
4 | 0.05 * 43 | 0.05 * 57 |
5 | 0.96 * 71 | 0.96 * 29 |
图 5
P(0/ H0) = 206.47/ (206.47+ 89.53) = 0.6975 , P(1/ H0) = 1 - P(0/ H0) = 0.3025
同理,对于H1
实验 | 0 | 1 |
1 | 0.03 * 73 | 0.03 * 27 |
2 | 0.99 * 36 | 0.99 * 64 |
3 | 0.03 * 67 | 0.03 * 33 |
4 | 0.95 * 43 | 0.95 * 57 |
5 | 0.04 * 71 | 0.04 * 29 |
图 6
P(0/ H1) = 83.53/(83.53 + 120.47) = 0.4094, P(1/ H1) = 1 - P(0 / H1) = 0.5906
由上两图统计以看出,H0 和 H1 的参数由初始值,经过一轮优化更新接近了真实值。例如对于H1, 我们估计隐藏变量 ,第一次实验出现H1的 P1(H1) = 0.03 , 类似 P2(H1) = 0.99, P3(H1) = 0.03, P4(H1) = 0.95 , P5(H1)= 0.04 分别作为五次实验为H1 的权重来统计所有样本,由于隐藏变量估计准确,所有用来加权估计所有样本对其他某个分布的参数也将更接近真实分布。
算法理论
一般的,用Y 表示观测随机变量的数据, Z表示隐藏随机变量的数据。 Y 和 Z 称为完全数据(complete data), 观测数据Y 称为不完全数据(incomplete data). 对于其似然是 , 而完全数据的似然是 。目标是极大化观测数据(不完全数据)Y 关于参数的对数似然函数,即极大化:
假设观察样本是相互独立的,那么 , 其中 为 Y 中第 i 个样本。
假设在观察样本 的隐藏变量为 , 则完全数据的极大似然为:
则上面式子与前面的例子对应,如图2 ,样本的是相互独立的,那么联合概率为独立样本概率相乘,取对数则变为所有样本的对
数似然值相加 , 即 ; 而图5 图6 是考虑所有可能的隐藏变量可能权重相加(期望)得到似然值,即
。 可看出例子的对模型参数估计包含两个步骤:
1 通过观察样本和当前的模型参数(如初始值), 估计隐藏变量;
2 在第一步估计出隐藏变量值,通过观察样本,极大似然估计模型参数。
上述两个步骤不断重复迭代,直至模型收敛。
EM 算法的思想也如例子一样,不是直接极大化 , 而是不断建立 的下界函数,然后然后优化下界,循环迭代直至模型收敛,其本质思想是固定前的模型的观察变量的参数,估计隐藏变量,再固定隐藏变量,估计观察变量的参数,循环迭代,直至收敛到局部最优解。其推导如下:
公式(1) 中非线性函数log 中里面又有加和,直接求导求极值非常困难,应该想办法解决这种情况。因此,对于每个观察样本 , 用 表示该样本下隐藏变量
的分布, 满足 , 则 (1) 式可转换为:
根据jenson 不等式可变换化为:
公式(2)将 解析表达出两个不同的分布 , 公式(3)为了求解,变化为公式(2)的下界函数,只要能极大化下界函数,那么原始函数也会不断极大化。令下界函数为:
那么要想下界函数可能极大化, 其求解思想可以是:
找到令 的 , 即 ;然后再寻找 使得 极大化,即 , 那么此时得到的参数 带入 公式(2)便极大化了 。
因此,找到令 的 , 即 :
根据 jenson 不等式的性质,对于公式(2)中的期望 , 当且仅当 为常数时,公式(3)中的等号成立,即:
, 则
因此, 。
上述即EM算法的E步骤。从而得到EM 算法:
E 步骤: 根据当前的模型参数,估计隐藏变量 Z 的后验概率,
M 步骤: 根据E步骤得到的 , 对 极大似然估计:
对模型初始化参数,然后通过迭代 E步骤和 M步骤,对模型极大似然求解。
GMM 参数估计
设 GMM 的对数似然函数为:
其中 为混合高斯分布的权重参数,即 ; 。
根据 EM算法的E步,估计隐变量的后验概率,即在在当前分布下观测样本属于第j个高斯分布的概率:
接下来是M步,极大似然估计模型参数,即对各参数求导:
将E步的 和高斯分布 , 带入:
公式(5)先对均值U 求导:
令公式(6) = 0, 则可得:
同理可得: