zoukankan      html  css  js  c++  java
  • EM算法-完整推导

    前篇已经对EM过程,举了扔硬币和高斯分布等案例来直观认识了, 目标是参数估计, 分为 E-step 和 M-step, 不断循环, 直到收敛则求出了近似的估计参数, 不多说了, 本篇不说栗子, 直接来推导一波.

    Jensen 不等式

    在满足:

    • 一个 concave 函数, 即 形状为 "(igcap)" 的函数 (f(x))

    • (lambda_j ge 0)

    • (sum limits _j lambda_j = 1) 类似于随机变量的分布

    的前提条件下, 则有不等式:

    (f(sum limits _j lambda_j x_j) ge sum limits _j lambda_j f(x_j))

    恒成立, 则该不等式称为 Jensen 不等式. 是有些不太直观哦, (sum 是最后哦, 有时候会犯晕).

    为了更直观一点, 考虑 (lambda) 只有两个值, 即:

    (lambda_1 = 1-t \ lambda_2 = 1)

    (其中, 0 leqslant t leqslant 1)

    "(igcap)" 函数 f(x) 中有一段区间 [a, b], 构造出该 范围内的一个点 (x_t)

    当, (x_t = (1+t)a + tb) 则有:

    (f((1-t)a +tb) ge (1-t)f(a) + tf(b))

    这里跟之前写过的 convex 其实是一模一样的, 要是还不直观, 就自个画个草图就秒懂了.

    左边是函数的值, 右边连接两个端点a,b的函数值的 直线, 因为是 "(igcap 的)", 故函数值必然在直线的上方.

    用数学归纳法, 当 M > 2:

    (f(sum limits _{j=1}^M lambda_j x_j) ge sum limits _{j=1}^M lambda_j f(x_j))

    EM算法推导

    假设给定一个包含 n 个独立的训练样本的数据集, (D = { x_1, x_2, x_3...x_n) }) 希望拟合一个概率模型 (p(x, z)) , 其对数似然函数(log likelihood) 为:

    为啥要 log, 乘法变加法, 不太想说了, 自己都重复吐血了

    似然, 不加log 前是: (l( heta) = prod limits _{i=1}^n p(x; heta)) 的嘛, 样本的联合概率最大

    (l( heta) = sum limits _{i=1}^n log p(x; heta))

    (= sum limits _{i=1}^n log sum limits _{z} p(x, z; heta))

    理解

    (sum limits _{z} p(x, z; heta)) 给定 ( heta) 的前提下, 关于 x, z 的 联合概率

    跟之前扔硬币是一样的, 对于每个独立数据的产生, 其实还有一个隐含的因素 z (扔硬币中,到底这次试验是来自于硬币A 还是硬币B

    每个Z因素, 影响着 p(x,z) 的 联合概率分布. 考虑所有的 z, 则是全概率了呀.

    • 对于 (p(x; heta)) 直接通过 x 来观测 ( heta) 比较难 (扔硬币中, 没有上帝视角, 不知道扔结果是哪个硬币产生的)
    • (z^{(i)}) 是一个隐变量(latent), 如果能观测到 (z^{(i)}) 则参数预测会容易很多, EM算法就是来解决这个问题的

    EM 算法呢, 分为两个步骤:

    • 在 E 步中, 构建 (l( heta)) 的下界函数 (给定 ( heta) 来找 z)
    • 在 M 步中, 最大化 这个下界函数

    不太直观, 就回顾上篇扔硬币的栗子, 这里的 z 就是那个 来自哪里A 还是 B 的概率(每次试验)

    (Q_i) 为关于 z 的概率分布, 即 (sum limits _{z} Q_i(z) = 1) (z 如是连续变量则 (sum ightarrow int_z)) ,

    则对于上面的对数似然函数:

    (= sum limits _{i=1}^n log sum limits _{z} p(x_i, z_i; heta) (1))

    对 p 的部分, 同时 乘上 和除以 (Q_i(z_i)) 不改变等式 , 这种技巧, 中学的 "配平方 或 数列裂项求和" 一样滴

    (= sum limits _i log sum limits _{z_i} Q_i(z_i) frac {p(x_i, z_i; heta)}{Q_i(z_i) } (2))

    log 函数是 concave 的, 联想 jensen不等式

    (f(sum limits _j lambda_j x_j) ge sum limits _j lambda_j f(x_j))

    即 log 对于与 f(); (sum limits _{z_i} Q_i(z_i) 对应于 sum limits _j lambda_j) ; 最后一项对 (x_j)

    (ge sum limits_{i} sum limits_{z_i}Q_i(z_i) log frac {p(x_i, z_i; heta)}{Q_i(z_i) } (3))

    就类似与, 把一个, 函数里面的参数, 提取到 函数外面来. 如还是不理解, 回看之前写的 convex 篇

    什么时候会取到 等于?

    即当 (frac {p(x_i, z_i; heta)}{Q_i(z_i) } = c) 是个常数的时候, (2) 和 (3) 是相等的.

    (p(x_i, z_i; heta) = c * Q_i(z_i))( heta) 给定下, 关于 x, z 的联合概率分布 与 隐变量 z 的分布是一个线性关系

    因为 (sum limits_{z_i} Q_i(z_i) = 1), 如果将 (Q_i(z_i)) 认为是 给定 (x_i 和 z_i)后验概率分布, 这样就得到了该似然函数的一个下界,

    根据全概率(后验) 与贝叶斯公式:

    (Q_i(x_i) = frac {p(x_i, z_i; heta)}{sum limits _{z_i} p(x_i, z_i; heta)})

    (=frac {p(x_i, z_i; heta)}{p(x; heta)})

    (=p(z_i|x_i, heta))

    相当于求 给定 ( heta 和 x_i) 的情况下, 求 z_i 的条件概率, 果然, 深刻理解贝叶斯公式显得多么重要呀

    再回顾一波贝叶斯公式:

    设A1,A2,A3..构成完备事件组, 则对任意一事件B有:

    (P(A_i|B) = frac {P(A_i)P(B|A_i)}{sum limits _{i=1}^n P(A_i)P(B|A_i)})

    同上述, 只要当我们取 (Q_i(z_i)) 的值为 给定 ( heta 和 x_i) 的后验概率分布的时候, 就能保证:

    (frac {p(x_i, z_i; heta)}{Q_i(z_i) })

    的值是一个常数 (反过来推的), 既然是个常数, 也就**前面 (3) 的地方可以取 等号 啦, 即: **

    (sum limits _{i=1}^n log sum limits _{z} p(x_i, z_i; heta) = sum limits_{i} sum limits_{z_i}Q_i(z_i) log frac {p(x_i, z_i; heta)}{Q_i(z_i) })

    这样一来, 相当于在 E 步得到了似然函数的一个下界, 然后在 M 步, 求解(3) 最大值时候的参数 ( heta) . 然后重复以上的 E, M 步骤:

    E-步: For each i:

    (Q_i(z_i) = p(z_i | x_i; heta))

    M-步, 更新( heta):

    ( heta = arg max _ heta sum limits_{i} sum limits_{z_i}Q_i(z_i) log frac {p(x_i, z_i; heta)}{Q_i(z_i) })

    ....

    循环直到收敛, 则估计出了 参数 ( heta) 但, 万一不收敛呢?, so, 必须证明一波, EM算法是收敛的哦

    证明EM算法会收敛

    假设 ( heta^{(t)} 和 heta^{(t+1)}) 为EM算法的连续两个步骤的参数值, 欲证(l ( heta))收敛, 只需证:

    (l( heta^{(t)}) leq l( heta^{(t+1)}))

    即可EM算法使得似然函数的值单调递增即可

    根据前面关于用 jensen不等式的取等条件, 推导出, 取得 (Q_i(z_i)^{(t)}) 的方式是:

    (Q_i ^{(t)} (z_i) = p(z_i | x_i; heta ^{(t)}))

    此条件下, 使得jensen不等式取等即:

    (l( heta^{(t)}) = sum limits_{i} sum limits_{z_i}Q_i(z_i) log frac {p(x_i, z_i; heta ^t)}{Q_i(z_i) })

    而参数 ( heta^{(t+1)}) 的取值方式, 是使得上面的这个等式的值最大, 则必然 (l( heta^{(t+1)}) ge l( heta^{(t)})) 展开一波:

    (l( heta^{(t+1)}) ge sum limits_{i} sum limits_{z_i}Q_i^t(z_i) log frac {p(x_i, z_i; heta ^{(t+1)})}{Q_i^t(z_i) } (4))

    (ge sum limits_{i} sum limits_{z_i}Q_i^t(z_i) log frac {p(x_i, z_i; heta^t)}{Q_i^t(z_i) } (5))

    (=l( heta^{(t)}) (6))

    • (4) 源于不等式的性质, 必然成立嘛
    • (5) 就是取最大值的一个过程必然成立
    • (6) 取相等的方式去是应用了 Jensen不等式

    即证明了(l( heta^{(t)}) leq l( heta^{(t+1)})) , 即EM算法是收敛的呀.

    小结

    首先是要理解,参数估计的 是在干嘛, 需要回顾统计学的基础知识, 或理解上篇扔硬币的栗子

    核心, 用到了一个jensen 不等式, 需要回顾凸函数的一些性质来理解一波

    推导的方式呢, 依旧是极大似然估计, 带log (乘法边加法)

    推导核心技巧是 全概率与贝叶斯公式, 真正理解太重要, 如LDA, 逻辑回归, 贝叶斯...这些算法都用到了.

    证明收敛, 其实只是一些, 推理的技巧, 还是挺有意思的.

    总体上, EM算法, 理解起来,我感觉不是很容易, 但, 也没有想象的那样难, 只要肯坚持, 正如爱因斯坦所说的那样嘛, 当然也为了自勉目前在经济和精神双重困境中的自己:

    耐心和恒心, 总会获得收获的

  • 相关阅读:
    shiro
    leetcode696 C++ 36ms 计算二进制子串
    leetcode557 C++ 56ms 反转字符串中的每个单词
    leetcode657 C++ 16ms 判断回环
    leetcode709 C++ 4ms 转换成小写字母
    leetcode141 C++ 8ms 环形链表
    leetcode160 C++ 32ms 相交链表
    leetcode234 C++ 28ms 回文链表
    leetcode203 C++ 28ms 删除链表中满足条件的节点
    leetcode83 C++ 12ms 删除有序链表中的重复元素
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/12057746.html
Copyright © 2011-2022 走看看