最近看了很多关于EM算法推导的文章,包括《统计学习方法(第二版)》中关于EM算法的内容,总感觉说得不够清楚。虽然公式都写得挺详细,但是没有说清楚为什么要这样算,怎么想到这样变形的,本文总结一下我理解的EM算法推导过程,尽量把EM的核心思想说清楚。

  • 参考:
  1. 《统计学习方法(第二版)》—— 第九章
  2. ​​浅析:从最大似然估计(MLE)、最大后验估计(MAP)到期望最大算法(EM)​​
  3. ​​为什么不把EM算法说清楚?​​
  4. ​​EM算法详细推导和讲解​​
  5. ​如何感性地理解EM算法?​
  6. ​​NLP —— 图模型(零):EM算法简述及简单示例(三硬币模型)​​
  7. ​EM算法的九重境界​

文章目录

  • ​​0. 补充​​
  • ​​1. 引入​​
  • ​​1.1 三硬币模型​​
  • ​​1.1.1 建模​​
  • ​​1.1.2 分析​​
  • ​​1.1.2 使用EM方法解​​
  • ​​1.2 问题形式化​​
  • ​​2. EM算法​​
  • ​​2.1 EM算法流程​​
  • ​​2.2 EM算法的推导​​
  • ​​2.2.1 EM核心思想:迭代优化​​
  • ​​2.2.2 EM推导​​
  • ​​2.2.2.1 两个难点​​
  • ​​2.2.2.2 解难点2:Jensen不等式​​
  • ​​2.2.2.3 解难点1:分步迭代​​
  • ​​2.3 EM算法的收敛性​​
  • ​​2.3.1 定理1​​
  • ​​2.3.2 定理2​​
  • ​​2.3.3 小结​​
  • ​​3. 用EM算法解三硬币问题​​
  • ​​3.1 E步​​
  • ​​3.1.1 公式法直接计算 Q 函数​​
  • ​​3.1.2 从期望角度计算 Q 函数​​
  • ​​3.2 M步​​
  • ​​3.3 对比​​
  • ​​3.4 代码​​

0. 补充

  1. 极大似然估计、最大后验估计:​​一文看懂 “极大似然估计” 与 “最大后验估计”​​
  2. 关于Jensen不等式:​​Jensen不等式​​

1. 引入

  • 根据观测性,可以把模型变量分为 ​观测变量​​ 和 ​隐变量/潜在变量​。如果模型的变量都是观测变量,可以直接使用极大似然估计或最大后验估计法估计模型参数。但当模型含有隐变量时,这些方法就不能直接使用了。
  • EM算法是一种迭代算法,用于对含有隐变量的概率模型参数进行极大似然估计或最大后验概率估计。EM的适用情况和 MLE 或 MAP 一样,都是在模型确定的情况下估计模型参数,区别在于EM算法允许模型中存在隐变量

1.1 三硬币模型

  • 先看一个经典的三硬币模型示例,感受变量的观测性和EM算法流程。

1.1.1 建模

  • 假设有 A,B,C 三枚硬币,正面出现的概率分别为 EM算法(1)—— 彻底理解EM算法推导_推导。进行如下实验:先掷硬币A,正面选B,反面选C;然后掷选出的硬币。我们不能观测到A的结果(隐变量),但是可以观测到选出硬币B或C的掷币结果(观测变量)。假如10次实验观测结果为
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_02
    现在请估计三枚硬币掷出正面的概率,即三硬币模型的参数
  • 用1表示正面,0表示反面,设随机变量 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_03 分别为观测变量(B/C的掷币结果)和隐变量(A的掷币结果),观测值分别为 EM算法(1)—— 彻底理解EM算法推导_迭代_04 ,模型参数为 EM算法(1)—— 彻底理解EM算法推导_迭代_05 。注意到掷硬币是一种两点分布,则三硬币问题可以建模表示为
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_06
  • 将 ​观测数据​​ 和 ​未观测数据​​ 分别表示为来自总体 EM算法(1)—— 彻底理解EM算法推导_EM算法_07EM算法(1)—— 彻底理解EM算法推导_迭代_08 的容量为 EM算法(1)—— 彻底理解EM算法推导_迭代_09 的简单随机样本 EM算法(1)—— 彻底理解EM算法推导_期望最大化_10 ,观测值和未观测值分别为 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_11,考虑求模型参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_12
  1. 极大似然估计:观测数据的似然函数、对数似然函数、参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_13 估计值分别为
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_14
    EM算法(1)—— 彻底理解EM算法推导_推导_15
  2. 最大后验估计:参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_13 的后验概率、估计值分别为
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_17
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_18
    这里需要 EM算法(1)—— 彻底理解EM算法推导_EM算法_13 的先验概率 EM算法(1)—— 彻底理解EM算法推导_期望最大化_20,可以设成三个 EM算法(1)—— 彻底理解EM算法推导_EM算法_21 的正态分布连乘,比较麻烦,所以这个例子后面就只写最大似然估计的过程了。

1.1.2 分析

  • 先尝试直接极大似然估计求解。令偏导为0列方程组
    EM算法(1)—— 彻底理解EM算法推导_EM算法_22
    带入观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23,有
    EM算法(1)—— 彻底理解EM算法推导_EM算法_24
    发现式子(2)(3)有关系:EM算法(1)—— 彻底理解EM算法推导_推导_25,这两个式子等价,因此有无穷解。最终结果为 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_26EM算法(1)—— 彻底理解EM算法推导_极大似然估计_27。由于未观测数据 EM算法(1)—— 彻底理解EM算法推导_EM算法_28 不可见,直接最大化观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23 的似然会导致 EM算法(1)—— 彻底理解EM算法推导_EM算法_28 及相关参数被当作不存在,使得模型实质上退化到了一个硬币(不存在隐变量)的情况

1.1.2 使用EM方法解

  • 使用EM算法可迭代求出更好的唯一解,过程如下
  1. 先选取参数初值,EM算法(1)—— 彻底理解EM算法推导_EM算法_31
  2. 反复执行以下两步,迭代计算参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_13 估计值直到收敛为止。设第 EM算法(1)—— 彻底理解EM算法推导_EM算法_33 次迭代参数估计值为 EM算法(1)—— 彻底理解EM算法推导_迭代_34,则第 EM算法(1)—— 彻底理解EM算法推导_迭代_35 次迭代如下
  1. E步:计算模型在参数 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_36 下观测数据 EM算法(1)—— 彻底理解EM算法推导_推导_37 来自掷硬币 B 的概率 EM算法(1)—— 彻底理解EM算法推导_EM算法_38
    EM算法(1)—— 彻底理解EM算法推导_EM算法_39
  2. M步:计算模型参数的新估计值
    EM算法(1)—— 彻底理解EM算法推导_推导_40
  • 带入观测值计算
  1. 初值选 EM算法(1)—— 彻底理解EM算法推导_EM算法_41 时,EM方法解出的估计值为 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_42
  2. 初值选 EM算法(1)—— 彻底理解EM算法推导_期望最大化_43 时,EM方法解出的估计值为 EM算法(1)—— 彻底理解EM算法推导_期望最大化_44

可见,EM方法与初值的选择有关,选择不同初值可能得到不同的参数估计值

1.2 问题形式化

  • 一般地,EM算法(1)—— 彻底理解EM算法推导_期望最大化_45 表示观测变量的数据,用 EM算法(1)—— 彻底理解EM算法推导_期望最大化_46 表示隐变量的数据,用 EM算法(1)—— 彻底理解EM算法推导_迭代_47
  1. 完全数据:模型中所有随机变量的数据,EM算法(1)—— 彻底理解EM算法推导_EM算法_48EM算法(1)—— 彻底理解EM算法推导_迭代_49 连在一起
  2. 不完全数据:观测数据 EM算法(1)—— 彻底理解EM算法推导_EM算法_48 又称不完全数据
  • 当完全数据已知时,可以直接使用MLE估计或MAP估计 EM算法(1)—— 彻底理解EM算法推导_EM算法_12;只知道不完全数据时,EM算法通过迭代最大化似然函数或后验概率。每次迭代分成两步
  1. E步:求Q函数(期望)
  2. M步:求Q函数(期望)极大

2. EM算法

2.1 EM算法流程

  • 输入:观测变量数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23,隐变量数据 EM算法(1)—— 彻底理解EM算法推导_EM算法_28,联合分布 EM算法(1)—— 彻底理解EM算法推导_推导_54,条件分布 EM算法(1)—— 彻底理解EM算法推导_迭代_55
  • 输出:模型参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_12
  • 流程:
  1. 选择合适的初始参数 EM算法(1)—— 彻底理解EM算法推导_推导_57,开始迭代。初值可以任意选择,但需注意EM算法是对初值敏感的
  2. E步:记 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_58 为第 EM算法(1)—— 彻底理解EM算法推导_EM算法_33 轮迭代参数估计值,在第 EM算法(1)—— 彻底理解EM算法推导_迭代_35 次迭代的 E 步,计算
    EM算法(1)—— 彻底理解EM算法推导_EM算法_61
    这里 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_62 是给定观测数据 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_63 和当前估参数估计值 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_58 下隐变量数据 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_65
  3. M步:求使得 EM算法(1)—— 彻底理解EM算法推导_迭代_66 最大化的 EM算法(1)—— 彻底理解EM算法推导_EM算法_13,确定第 EM算法(1)—— 彻底理解EM算法推导_迭代_35 轮的参数估计值 EM算法(1)—— 彻底理解EM算法推导_迭代_69
    EM算法(1)—— 彻底理解EM算法推导_迭代_70
  4. 重复第 2/3 步,直到收敛。收敛条件一般是:对于给定小量 EM算法(1)—— 彻底理解EM算法推导_期望最大化_71,满足下式则收敛,停止迭代
    EM算法(1)—— 彻底理解EM算法推导_推导_72
  • Q函数​ :定义完全数据的对数似然函数 EM算法(1)—— 彻底理解EM算法推导_EM算法_73 关于给定观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_45 和当前估计参数 EM算法(1)—— 彻底理解EM算法推导_迭代_75 下对未观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_46 的条件概率分布 EM算法(1)—— 彻底理解EM算法推导_EM算法_77为Q函数,即
    EM算法(1)—— 彻底理解EM算法推导_EM算法_78
    EM 算法的每次迭代,实际是在求Q函数这个期望及其极大,这也是EM算法全程 “期望最大化”(Expection-Maximization)的由来

2.2 EM算法的推导

  • EM算法目标:极大化参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_12 下观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23
  • 方法:利用Jensen不等式推出目标对数似然函数下界,迭代优化下界以优化目标,不保证全局最优

2.2.1 EM核心思想:迭代优化

  • 在推导之前,有必要探讨一下为什么直接最大化似然函数没有解析解。先看极大化目标:参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_12 下观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23 的对数似然函数。即
    EM算法(1)—— 彻底理解EM算法推导_迭代_83
    回顾极大似然估计 MLE 的一般形式,假设可以观测到完全数据 EM算法(1)—— 彻底理解EM算法推导_迭代_84,对数似然函数为
    EM算法(1)—— 彻底理解EM算法推导_推导_85
    要得到 EM算法(1)—— 彻底理解EM算法推导_期望最大化_86 的解析解,需要保证 EM算法(1)—— 彻底理解EM算法推导_迭代_87 中只有 EM算法(1)—— 彻底理解EM算法推导_迭代_47 一个变量。在隐变量 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_89 不能观测时,优化目标中同时存在估计量 EM算法(1)—— 彻底理解EM算法推导_迭代_90EM算法(1)—— 彻底理解EM算法推导_迭代_47
  • 事实上,未观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_46 和参数 EM算法(1)—— 彻底理解EM算法推导_迭代_47。还是以三硬币模型为例,如果我们知道 EM算法(1)—— 彻底理解EM算法推导_EM算法_28,就能知道哪些观测结果来自硬币B,哪些来自硬币C,进而能分别使用极大似然估计法得到 EM算法(1)—— 彻底理解EM算法推导_EM算法_95。在只有不完全数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23 时,为了区分观测结果的来源以估计 EM算法(1)—— 彻底理解EM算法推导_EM算法_95,我们需要先估计每一个观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_98 对应的 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_99 取值(或取值的分布),这个估计又是依赖于 EM算法(1)—— 彻底理解EM算法推导_EM算法_95 的,如图所示

    对于这种含有两个未知变量的优化问题,可以使用迭代的方法。选取一个合适的初始值开始迭代,每轮迭代过程中,先固定一个变量优化另一个,再固定另一个变量估计优化这个,直到二者逐步收敛为止。EM 算法在此思想基础上更进一步,在估计未观测数据时,不止估计其值,而是估计其分布,进而把优化目标转换完全数据似然函数为对未观测数据分布的期望形式。此处推荐参考一篇文章:​​如何感性地理解EM算法?​
  • 强化学习中 model-based 方法 policy-iteration 使用了这种分步迭代思想,不妨把它的示意图贴过来

    policy-iteration 的迭代分为两个阶段,evaluation步骤对当前策略下的状态价值进行评估,improvement步骤利用策略价值贪心地优化策略。可以把每个流程看成二维空间中的一条线,代表对于其目标的解决方案。每个流程都把价值 EM算法(1)—— 彻底理解EM算法推导_迭代_101 或 策略 EM算法(1)—— 彻底理解EM算法推导_迭代_102 推向其中一条线,由于这两条线不是正交的,所以两个目标间会产生相互作用。evaluation步会导致策略逐渐偏离最优,improvement步会导致价值偏离新策略,直接冲向某个目标会导致某种程度上偏离另一个目标,然而整体流程的结果最终会更接近最优的总目标。EM算法中的E步可以类比为evaluation步骤,M步可以类比为improvement步骤

2.2.2 EM推导

2.2.2.1 两个难点

  • 极大化目标:参数 EM算法(1)—— 彻底理解EM算法推导_EM算法_12 下观测数据 EM算法(1)—— 彻底理解EM算法推导_期望最大化_23 的对数似然函数。即
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_105
  • 注意到 EM算法(1)—— 彻底理解EM算法推导_迭代_106 这一极大化的主要困难有两个
    1. 需要同时完成对 EM算法(1)—— 彻底理解EM算法推导_EM算法_107 的估计和 EM算法(1)—— 彻底理解EM算法推导_推导_108
    2. 求和符号 EM算法(1)—— 彻底理解EM算法推导_推导_109EM算法(1)—— 彻底理解EM算法推导_EM算法_110

2.2.2.2 解难点2:Jensen不等式

  • 首先处理第二个难点,我们希望能把 EM算法(1)—— 彻底理解EM算法推导_EM算法_111 符号拿到 EM算法(1)—— 彻底理解EM算法推导_EM算法_112 外面,这时就要用到 jensen 不等式,即
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_113
    此式要求 EM算法(1)—— 彻底理解EM算法推导_迭代_114 是凸函数,EM算法(1)—— 彻底理解EM算法推导_迭代_115EM算法(1)—— 彻底理解EM算法推导_推导_116,当随机变量 EM算法(1)—— 彻底理解EM算法推导_迭代_84 是常数时等号成立。由于 EM算法(1)—— 彻底理解EM算法推导_期望最大化_118 是凹函数,所以需要应用 jensen 不等式的凹函数形式,即把 EM算法(1)—— 彻底理解EM算法推导_迭代_119 换成 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_120
  • 为了应用 Jensen 不等式,还要拼凑一个 EM算法(1)—— 彻底理解EM算法推导_推导_121。注意到 EM算法(1)—— 彻底理解EM算法推导_EM算法_112 里的和是关于隐变量 EM算法(1)—— 彻底理解EM算法推导_EM算法_28 的和,而 EM算法(1)—— 彻底理解EM算法推导_推导_121 需要满足 EM算法(1)—— 彻底理解EM算法推导_迭代_115EM算法(1)—— 彻底理解EM算法推导_推导_116,不妨设 EM算法(1)—— 彻底理解EM算法推导_推导_121 为隐变量 EM算法(1)—— 彻底理解EM算法推导_迭代_08 的分布函数 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_129,于是有
    EM算法(1)—— 彻底理解EM算法推导_迭代_130
    这样我们就找到了似然函数的下界形式,并成功把 EM算法(1)—— 彻底理解EM算法推导_EM算法_111 拿到了 EM算法(1)—— 彻底理解EM算法推导_EM算法_112 外边,接下来我们希望通过最大化下界来间接地最大化 EM算法(1)—— 彻底理解EM算法推导_EM算法_133。为了保证优化效果,我们要求 EM算法(1)—— 彻底理解EM算法推导_EM算法_134,也就是至少有一点使不等式中等号成立。因为如果这个下界特别小,离似然函数太远,优化它也没有什么用
  • 现在来讨论 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_129 的形式,为了得到紧下界,回头看 Jensen 不等式中使得等号成立的条件,需要满足
    EM算法(1)—— 彻底理解EM算法推导_迭代_136
    因为 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_129EM算法(1)—— 彻底理解EM算法推导_EM算法_28 的分布函数,有
    EM算法(1)—— 彻底理解EM算法推导_迭代_139
  • 这样我们就得到了紧下界的表示形式,由于始终满足等号成立条件 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_140,因此不等号转换为恒等号,可以证明如下
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_141

2.2.2.3 解难点1:分步迭代

  • 难点1的本质就是没法同时估计 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_142 和优化 EM算法(1)—— 彻底理解EM算法推导_迭代_47 ,我们上面的一堆分析并没有解决这个问题。牢记 2.2.1 节的分析,解决这种问题可以使用分步迭代法,每轮迭代先控制一个变量优化另一个变量,再控制另一个变量优化这个变量。具体到EM算法中,第 EM算法(1)—— 彻底理解EM算法推导_迭代_144

    1. 控制 EM算法(1)—— 彻底理解EM算法推导_推导_108 估计 EM算法(1)—— 彻底理解EM算法推导_迭代_49:固定模型参数 EM算法(1)—— 彻底理解EM算法推导_迭代_147,估计 EM算法(1)—— 彻底理解EM算法推导_迭代_49 条件概率分布 EM算法(1)—— 彻底理解EM算法推导_期望最大化_149
    2. 控制 EM算法(1)—— 彻底理解EM算法推导_迭代_49 优化 EM算法(1)—— 彻底理解EM算法推导_推导_108:利用估计的 EM算法(1)—— 彻底理解EM算法推导_期望最大化_149 重新构造紧下界函数,最大化紧下界函数得到新的参数值 EM算法(1)—— 彻底理解EM算法推导_推导_153。由于
      EM算法(1)—— 彻底理解EM算法推导_迭代_154
      此时等号恒成立条件不再满足,还原到不等号
      EM算法(1)—— 彻底理解EM算法推导_EM算法_155
      不妨设紧下界为 EM算法(1)—— 彻底理解EM算法推导_推导_156,即
      EM算法(1)—— 彻底理解EM算法推导_期望最大化_157
      注意到当 EM算法(1)—— 彻底理解EM算法推导_迭代_158 时, EM算法(1)—— 彻底理解EM算法推导_期望最大化_159 等号成立
    3. EM算法(1)—— 彻底理解EM算法推导_期望最大化_160

    4. 如图所示,求 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_161 ,就可以通过增大紧下界间接地增大 EM算法(1)—— 彻底理解EM算法推导_迭代_162
  • 忽略掉对 EM算法(1)—— 彻底理解EM算法推导_迭代_163 中对极大化而言无关的项,得到 Q函数如下
    EM算法(1)—— 彻底理解EM算法推导_EM算法_164

  • 大功告成!至此我们已经对EM算法流程有了清晰的理解,并完整地推导了EM的核心函数 EM算法(1)—— 彻底理解EM算法推导_迭代_165。不妨比较一下 EM算法(1)—— 彻底理解EM算法推导_迭代_165 函数和原始的优化目标 EM算法(1)—— 彻底理解EM算法推导_迭代_87
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_168
    主要的变化有两个

    1. 使用 Jensen 不等式把 EM算法(1)—— 彻底理解EM算法推导_推导_109 拿到 EM算法(1)—— 彻底理解EM算法推导_EM算法_110
    2. 引入后验概率 EM算法(1)—— 彻底理解EM算法推导_期望最大化_149,使迭代求解成为可能。 这里可能会有疑惑,EM算法(1)—— 彻底理解EM算法推导_迭代_66 里有个 EM算法(1)—— 彻底理解EM算法推导_迭代_173,这不还是要用 EM算法(1)—— 彻底理解EM算法推导_EM算法_13 估计未观测数据分布 EM算法(1)—— 彻底理解EM算法推导_推导_175 吗。我个人理解是:式子中存在 EM算法(1)—— 彻底理解EM算法推导_推导_175 不是关键,关键要看优化目标是关于什么的期望,或者说优化目标这个随机变量服从的分布是什么。

2.3 EM算法的收敛性

  • EM算法提供了一种近似计算含有隐变量概率模型的极大似然估计的方法。其最大优点是简单性和普适性。
  • EM算法得到的估计序列是否收敛,如果收敛,是否收敛到全局最大值或局部最大值?下面给出关于EM算法收敛性的两个定理。证明见《统计学习方法(第二版)》第九章

2.3.1 定理1

  • EM算法(1)—— 彻底理解EM算法推导_期望最大化_177 为观测数据的似然函数,EM算法(1)—— 彻底理解EM算法推导_推导_178 为EM算法得到的参数估计序列,EM算法(1)—— 彻底理解EM算法推导_迭代_179 为对应的似然函数序列,则 EM算法(1)—— 彻底理解EM算法推导_推导_180 是单调递增的,即
    EM算法(1)—— 彻底理解EM算法推导_EM算法_181

2.3.2 定理2

  • EM算法(1)—— 彻底理解EM算法推导_极大似然估计_182 为观测数据的似然函数,EM算法(1)—— 彻底理解EM算法推导_期望最大化_183 为EM算法得到的参数估计序列,EM算法(1)—— 彻底理解EM算法推导_迭代_184 为对应的似然函数序列,EM算法(1)—— 彻底理解EM算法推导_EM算法_185

    1. 如果 EM算法(1)—— 彻底理解EM算法推导_EM算法_186 有上界,则 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_187 收敛到某一值 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_188
    2. 在函数 EM算法(1)—— 彻底理解EM算法推导_迭代_189EM算法(1)—— 彻底理解EM算法推导_迭代_162 满足一定条件下(大多数情况下都满足),由 EM 算法得到的参数估计序列 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_58 的收敛值 EM算法(1)—— 彻底理解EM算法推导_迭代_192EM算法(1)—— 彻底理解EM算法推导_迭代_162
  • 参考文献:Wu C . On the Convergence Properties of the EM Algorithm[J]. Annals of Statistics, 1983, 11(1):95-103.

2.3.3 小结

  • EM算法的收敛性包含两层意思,前者不蕴含后者
    1. 对数似然函数 EM算法(1)—— 彻底理解EM算法推导_期望最大化_194
    2. 参数估计序列 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_58
  • 定理仅保证参数估计序列 EM算法(1)—— 彻底理解EM算法推导_迭代_75 收敛到对数似然函数序列 EM算法(1)—— 彻底理解EM算法推导_EM算法_185。如果 EM算法(1)—— 彻底理解EM算法推导_推导_198
  • 在应用中,初值的选择变得非常重要,常用的办法是选取几个不同的初值进行迭代,对各个初始值加以比较,从中选择最好的。
3. 用EM算法解三硬币问题
  • 了解EM算法原理之后,回看 1.1节 最后的三硬币问题求解过程,分析M步和E步的计算

  • 把三硬币问题的 “观测数据” 和 “未观测数据” 分别表示为来自总体 EM算法(1)—— 彻底理解EM算法推导_迭代_199EM算法(1)—— 彻底理解EM算法推导_极大似然估计_89 的容量为 EM算法(1)—— 彻底理解EM算法推导_EM算法_201 的简单随机样本 EM算法(1)—— 彻底理解EM算法推导_迭代_202 ,观测值和未观测值分别为 EM算法(1)—— 彻底理解EM算法推导_EM算法_203,考虑求模型参数 EM算法(1)—— 彻底理解EM算法推导_迭代_47

  • 注意:EM算法(1)—— 彻底理解EM算法推导_极大似然估计_205EM算法(1)—— 彻底理解EM算法推导_推导_206

    1. 在带入观测值前(计算Q函数前),概率相关计算一律使用 EM算法(1)—— 彻底理解EM算法推导_迭代_207;带入观测值后(计算Q函数时)一律使用 EM算法(1)—— 彻底理解EM算法推导_推导_208
    2. 求和符号 EM算法(1)—— 彻底理解EM算法推导_迭代_209 是对每个随机变量EM算法(1)—— 彻底理解EM算法推导_推导_210的取值或观测值EM算法(1)—— 彻底理解EM算法推导_极大似然估计_211求和;EM算法(1)—— 彻底理解EM算法推导_EM算法_212

    第1、2节符号可能有不规范的,都按这个理解

3.1 E步

  • 先求 EM算法(1)—— 彻底理解EM算法推导_EM算法_213
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_214
  • 再求 EM算法(1)—— 彻底理解EM算法推导_极大似然估计_215
    EM算法(1)—— 彻底理解EM算法推导_迭代_216

3.1.1 公式法直接计算 Q 函数

  • 直接带入公式计算 EM算法(1)—— 彻底理解EM算法推导_EM算法_217
    EM算法(1)—— 彻底理解EM算法推导_迭代_218

3.1.2 从期望角度计算 Q 函数

  • 从期望角度计算
    EM算法(1)—— 彻底理解EM算法推导_极大似然估计_219

3.2 M步

  • EM算法(1)—— 彻底理解EM算法推导_EM算法_217 求偏导
    EM算法(1)—— 彻底理解EM算法推导_推导_221
  • 令偏导为 0 解 EM算法(1)—— 彻底理解EM算法推导_期望最大化_222
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_223

3.3 对比

  • 对比 EM 和直接最大似然估计的优化目标
    EM算法(1)—— 彻底理解EM算法推导_推导_224
  • 对比 EM 和直接最大似然估计的偏导数方程组(因为最后要令等于0,重点对比分子即可)
    EM算法(1)—— 彻底理解EM算法推导_期望最大化_225

3.4 代码

  • 最后给出三硬币问题的代码。网上搜到的基本都是同一份代码的复制粘贴,其实那份代码是适用于 jupyter notebook 那种交互式环境的,用了比较少见的 ​​yield​​ 关键字,可读性也比较差

  • 我按照 1.1.2 节给出的流程重新写了一遍,如下

    import numpy as np
    import math

    class EM:
    def __init__(self, theta, y):
    self.theta = theta
    self.y = y
    self.mu = [0]*len(y)

    print('init pi={:.3f}; p={:.3f}; q={:.3f}'.format(theta[0],theta[1],theta[2]))

    # E_step
    def EStep(self):
    for j in range(len(self.y)):
    yj = self.y[j]
    pi,p,q = self.theta
    P_B_yj = pi * math.pow(p, yj) * math.pow((1-p), 1-yj)
    P_C_yj = (1-pi) * math.pow(q, yj) * math.pow((1-q), 1-yj)

    self.mu[j] = P_B_yj/(P_B_yj+P_C_yj)

    # m_step
    def MStep(self):
    sum_mu,sum_muy,sum_y = 0,0,0
    N = len(self.y)
    for j in range(N):
    sum_mu += self.mu[j]
    sum_muy += self.mu[j]*self.y[j]
    sum_y += self.y[j]

    self.theta[0] = sum_mu/N # pi
    self.theta[1] = sum_muy/sum_mu # p
    self.theta[2] = (sum_y-sum_muy)/(N-sum_mu) # q

    def em(self):
    num = 1
    while True:
    delta = self.theta.copy()
    self.EStep()
    self.MStep()
    print('ite{} pi={:.3f}; p={:.3f}; q={:.3f}'.format(num,self.theta[0],self.theta[1],self.theta[2]))
    num += 1

    # 退出条件:theta变化量二范数小于阈值
    for i in range(3):
    delta[i] -= self.theta[i]
    if np.linalg.norm(delta) < 0.005:
    print('')
    break

    data=[1,1,0,1,0,0,1,0,1,1]

    test1 = EM([0.5, 0.5, 0.5],data)
    test1.em()

    test2 = EM([0.4, 0.6, 0.7],data)
    test2.em()

    '''
    init pi=0.500; p=0.500; q=0.500
    ite1 pi=0.500; p=0.600; q=0.600
    ite2 pi=0.500; p=0.600; q=0.600

    init pi=0.400; p=0.600; q=0.700
    ite1 pi=0.406; p=0.537; q=0.643
    ite2 pi=0.406; p=0.537; q=0.643
    '''