zoukankan      html  css  js  c++  java
  • EM 摘要

    离开EM接近一年了,昨晚的PR课继续保持了沉闷的风格,于是打算推一遍...结果半路卡住了。先看看走到哪一步了,然后借了Nglecture才解脱(去年也是找到这本pdf才算明白,言简意赅)。

    Block

    首先是独立同分布的似然估计(不支持m,用大写代替):

    [egin{equation}label{eq:likehood} P(X; heta)=prod_{i=1}^{N}p(x_i; heta) end{equation} ]

    后面作用对数:

    [egin{eqnarray} l( heta) &=& log P(X; heta) onumber\ & = & sum_{i=1}^{N} log P(x_i; heta) label{eq:loss} end{eqnarray} ]

    引入类变量(我这样称呼,auxiliary variable 可能通用些):

    [egin{eqnarray} l( heta) & = & sum_{i=1}^{N} log P(x_i; heta) onumber \ & = & sum_{i=1}^{N} log sum_{c_i=1}^{M} P(x_i|c_i; heta)P(c_i; heta) label{eq:wrong_way} end{eqnarray} ]

    然后用那个什么inequality:

    [egin{eqnarray} log sum_{c_i=1}^{M}P(x_i|c_i; heta)P(c_i; heta) ge sum_{c_i=1}^{M}P(c_i; heta)log P(x_i|c_i; heta) label{eq:jensen_ineq} end{eqnarray} ]

    于是 ef{eq:wrong_way}可以发展出:

    [l( heta) > sum_{i=1}^{N} sum_{c_i=1}^{M}P(c_i; heta)log P(x_i|c_i; heta) label{eq:stall} ]

    然后就在这死循环了...只记得似乎要牵涉一个(Q(c_i))

    Solution

    赶紧爪机上下载pdf一睹为快...

    Where goes wrong

    原来在 ef{eq:wrong_way}就已经走偏了,而(Q(c_i))正是在那引入的:

    [egin{eqnarray} l( heta) & = & sum_{i=1}^{N} log P(x_i; heta) onumber\ & = & sum_{i=1}^{N} log sum_{c_i=1}^{M} frac{P(x_i,c_i; heta)}{Q(c_i)}Q(c_i) label{eq:right_way}\ & ge & sum_{i=1}^{N} sum_{c_i=1}^{M} Q(c_i) log frac{P(x_i,c_i; heta)}{Q(c_i)} label{eq:jensen_ineq_r} end{eqnarray} ]

    **Note **
    此处的(Q(c_i)) 应该假定为一个分布。

    So

    一个奇兵突起之处就在这里:对于 ef{eq:jensen_ineq_r},要使等号成立,需要对数项为常量:

    [egin{equation} frac{P(x_i,c_i; heta)}{Q(c_i)} equiv c label{eq:constant} end{equation} ]

    现在可以利用(Q(c_i))为分布的假定了,求取(Q(c_i)):

    [egin{eqnarray} int cQ(c_i) & = & int P(x_i,c_i; heta) onumber\ c & = & P(x_i; heta) onumber\ Q(c_i) & = & P(c_i|x_i; heta) label{eq:expactation} end{eqnarray} ]

    Maximization

    最终目标是( heta^*),这一步通过最大化求解已经具有等于性质的 ef{eq:jensen_ineq_r}完成:

    [egin{equation}label{eq:maximization} heta^* = mathop{argmax}_{ heta} sum_{i=1}^{N} sum_{c_i=1}^{M} Q(c_i) log frac{P(x_i,c_i; heta)}{Q(c_i)} end{equation} ]


    15 Jul, 2017 记
    这里要说明的是 ef{{eq:maximization}}中,分数线上下的两个( heta)是不一样的,*i.e.: *(Q(c_i)=Q(c_i| heta_n))( heta^*= heta_{n+1})

    优化的证明

    这里再说明一下如何证明这样的迭代具有优化作用。
    首先有:

    [egin{eqnarray} l( heta_{n+1}) & = & sum_{i=1}^{N}logsum_{c_i=1}^{M}frac{P(x_i,c_i; heta_{n+1})}{Q(c_i; heta_{n+1})}Q(c_i; heta_{n+1})label{eq:l_n+1}\ & ge & sum_{i=1}^{N}sum_{c_i=1}^{M}Q(c_i; heta_n)logfrac{P(x_i,c_i; heta_{n+1})}{Q(c_i; heta_n)} label{eq:greater_1}\ & ge& sum_{i=1}^{N}sum_{c_i=1}^{M}Q(c_i; heta_n)logfrac{P(x_i,c_i; heta_{n})}{Q(c_i; heta_n)} label{eq:greater_2}\ & = & sum_{i=1}^{N}logsum_{c_i=1}^{M}frac{P(x_i,c_i; heta_{n})}{Q(c_i; heta_{n})}Q(c_i; heta_{n})label{eq:l_n}\ & = & l( heta_n) end{eqnarray} ]

    ef{eq:greater_1}能够成立的原因是(P(x_i,c_i; heta_{n+1})/Q(c_i; heta_n))不再(一定)为常数,而仅当为常数时有等号成立。
    ef{eq:greater_2}由极大化得到;当(log)操作的结果再次成为常数时, ef{eq:l_n}成立。


    Review

    一些tricks很值得回味...

    EM成功的关键

    1. 类变量的引入。显然,没有auxiliary变量的引入,就不能使用Jensen inequality,所以这很关键。然而更有意思的,是这与通常要进行classification问题正好契合了其中的class变量。
    2. 分布函数的假定和常数设定。 很容易以为Jensen不等式是关键。但就像我在上面个走错的一样,这个不等式比较容易被想到。更重要的一步是equality hold,而这一步却是通过(Q(c_i))为分布函数的假定(和 ef{eq:constant}的设定一并)得到的。
      分布函数的假定,使得

    [egin{equation} sum_{c_i=1}^{M}Q(c_i) =1 end{equation} ]

    所以才有:

    [egin{eqnarray} log sum_{c_i=1}^{M}Q(c_i)c = sum_{c_i=1}^{M}Q(c_i)log c label{eq:key_hold} end{eqnarray} ]

    如果(sum_{c_i=1}^{M}Q(c_i) e 1)的话, ef{eq:key_hold}也就不能成立,这一点很有趣:) 。
    而常数的设定,还可以使得(Q(c_i))能够被求解出来。

    命名

    似乎总是在完成之后才想起命名上的线索,但这里想强调的不是E(前文已经说过了)。回想之前对EM的印象,觉得似乎是不用求导的。然而看看命名就应该明白这是很显然的问题。

  • 相关阅读:
    JMeter和JMeterPlugin 下载安装
    Beanshell语法
    逻辑控制器
    常用配置元件
    jmeter结构体系
    正则表达式提取器
    ab 测试工具
    spring cloud_docker
    jmeter+maven
    TFS
  • 原文地址:https://www.cnblogs.com/chenyliang/p/6991274.html
Copyright © 2011-2022 走看看