MLaPP Chapter 11 Mixture models and the EM algorithm

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangxb35/article/details/54928401

11.1 Latent variable models 隐变量模型

图模型尝试在不同的观察变量之间建立条件独立关系,另一种思路则是用隐变量模型,即 LVMs, Latent variable models,这种模型假设观察变量都是从一个共同的“隐变量”中得到的。

隐变量的意思就是无法观测到,没有数据,可以人为定义个数和表示的含义。因此聚类算法中的簇就可以看做是隐变量,而有监督学习中如果给了簇的标定数据,就变成观察数据了,叫做标签。

隐变量模型虽然很难推导,但是也有很多的好处。首先隐变量相对于图模型,解决同一个问题时,其参数更少。其次,隐变量可以作为 bottleneck,计算了数据的压缩表示(compressed representation of the data),这个是无监督学习的基础。

我们可以用 xi=(xi1,...,xiD) 表示观察变量,用 zi=(zi1,...,ziL) 表示隐变量。根据先验概率 p(zi) 和似然概率 p(xi|zi) 服从的概率分布,隐变量模型可以有很多的模型。比如混合高斯模型(Mixture of Gaussian),概率 ICA(Probablistic ICA),隐狄利克雷分配(LDA,Latent Dirichlet Allocation),稀疏编码(Sparse Coding),因子分析(Factor Analysis)

11.2 Mixture models 混合模型

最简单的隐变量模型,就是让隐变量服从离散分布,即 zi{1,...,K} ,等于是加一个先验, p(zi)=Cat(π) ,其中 π={π1,...,πK} 表示每个隐变量取值的概率。而似然可以用符号 p(xi|zi=k)=pk(xi) 表示,其中 pk 就是观察变量的第 k 个基本分布(base distribution),整个模型就是混合模型,即第 i 个数据 xi 的“新的似然概率”可以表示如下,

p(xi|θ)=k=1Kπkpk(xi|θ)
这是一个 pk 的凸组合(convex combination),因为每个混合权重(mixing weights) πk 都满足 0πk1 Kk=1πk=1 。下面有一些混合模型的例子。

11.2.1 Mixtures of Gaussians 高斯混合模型

如果把上面的 base distribution 取多元高斯分布(MVN)的话,得到的就是高斯混合模型,GMM,Gaussian Mixture Model,

p(xi|θ)=k=1KπkN(xi|μk,Σk)
如果 K 充分大的话,GMM 可以拟合定义在 RD 上的任意密度。

11.2.2 Mixture of multinoullis 多努利混合模型

如果我们的数据是 D 维的 bit vectors,比如文档模型,那么最好用伯努利分布的乘积来表示,

p(xi|zi=k,θ)=j=1DBer(xij|μjk)=j=1Dμxijjk(1μjk)1xij
比如说我们用来表示词袋模型,词汇表里有 D 个词汇,训练集中文档的索引用 i 来表示,那么 xi 表示的是第 i 个文档, xij 表示的文档中是否有第 j 个词,就是说 xij{0,1} ,是个比特值。那么 ujk 表示的就是第 j 个词,出现在第 k 类文档中的概率。这里的要学习的参数 θ 就是要学习的矩阵 μ

有时候隐变量不一定要有什么意义(难解释性),可能只是说让模型更强大。可以证明混合分布的均值和方差如下:

E(x)=kπkμkcov[x]=kπk[Σk+μkμTk]E[x]E[x]T
其中 Σk=diag(μjk(1μjk))

混合模型的联合概率分布不可以因式分解,所以可以抓到变量之间的相关关系(correlations)。

11.2.3 Using mixture models for clustering 使用混合模型做聚类

混合模型有两种应用,第一种就是拿来做黑盒(black-box)密度模型 p(xi) ,比如数据压缩(data compression),离异值检测(outlier detection),或者用混合分布给 class-conditional density 建模以创建一个生成式分类器。

第二个很重要的应用就是做聚类(clustering),会在第 25 章细讲,这里只简单提一下。我们首先拟合模型(fit the model),然后计算 p(zi=k|xi,θ) ,代表了第 i 个点在第 k 类的概率,又叫做 responsibility,可以按照贝叶斯公式展开,

rikp(zi=k|xi,θ)=p(zi=k|θ)p(xi|zi=k,θ)Kk=1p(zi=k|θ)p(xi|zi=k,θ)
这个过程(procedure)和生成分类器的计算过程是一样的,叫做软聚类(soft clustering)。不同点是在训练的时候,聚类里边,隐变量 zi 是观察不到的,而有监督学习里则是观察变量。

如果我们用概率最大的那个类作为结果,那么第 i 个例子的不确定性就是 1maxkrik ,也就是只关注最大的那个,具体的概率就不管了,去掉了上面公式里冗长的分母。这种方法叫做是硬聚类(hard clustering),MAP 过程如下,

zi=argmaxkrik=argmaxklogp(xi|zi=k,θ)+logp(zi=k|θ)

聚类得到的 K 类的结果,标签的名字都是随意取的,label switching 不太重要。书里举了用 GMM 做聚类的两个例子,见 P10 的图 1.8 和本页的图 11.4。还有一个例子比较有意思,就是不用标签信息,直接给 MNIST 数据集直接聚类,发现效果差强人意。如果我们用二值化后的图片,就可以用伯努利分布来建模,假如聚类成 K=10 类,把聚类后的所有图片的重心 μ^k 可视化出来如图 11.5 所示。

聚类不能很好聚成正好对应 10 个分类的原因可能有下面几点,

  • 模型太简单,不能够很好地抓住数字的视觉特点,比如每个像素点都独立的,也没有形状和笔画的概念。
  • 尽管我们认为是 10 个类,但是其实可能内部会有 K10 的情况,比如 7 就有两种写法。然而,如果我们一味地把 K 设置地很大,又可能把相同结构的字聚成两个类别,可以考虑用模型选择来实验。
  • 似然函数可能是非凸的,陷入了局部最小值。

11.2.4 Mixtures of experts 混合专家

混合模型也可以用来做判别分类器,或者做回归模型。我们可以简单地根据不同的输入,调整不同的权重和模型参数,这种叫做是混合专家模型。这种方法的直觉是每个子模型都是某个领域的专家,都能很好地对某些子数据集进行分类。比如我们可以用高斯模型来对每个专家的进行建模,但是不同专家的参数是不同的,

p(yi|xi,zi=k,θ)=N(yi|wTkxi,σ2k)
而选专家这个事儿,就用多努利模型来建模,
p(zi|xi,θ)=Cat(zi|S(VTxi))
p(zi=k|xi,θ) 叫做是 gating function,会根据输入的不同选择不同的专家。所以最后的模型就可以这样子表示
p(yi|xi,θ)=kp(zi=k|xi,θ)p(yi|xi,zi=k,θ)

可以用概率图模型表示上面的模型, zi 表示选择模型的变量,见图 11.7,这个模型可以复杂一点,那就变成了 hierarchical mixture of experts。

11.2.4.1 Application to invert problems

混合专家模型的一个很重要的应用就是逆问题(invert problems)。什么是逆问题呢?就是如果是多到一的映射,一般都很好解,但是反过来求逆函数是不存在的,或者说 x=f1(y) 不是唯一的,这就是逆问题。逆问题应用很多,如机器人学(robotics)里的传感器和马达之间的关系;如运动跟踪问题(kinematic tracking)等。

11.3 Parameter estimation for mixture models 混合模型的参数估计

之前参数估计的方法都是,找一个共轭先验,可以得到可分解的(factored posterior)后验概率。然而考虑图 11.9 的某个模型的盘子表示法,如果 zi 是隐变量且没有被观察到(not observed),那么整条无向路径就是通的, θx θz 就是线性相关的。后验就因此不能分解成先验和似然的乘积了。那么算起来也麻烦的多。

10.3.1 Unidentifiability 不可确定性

当计算隐变量模型(LVM)时,一个很大的问题就是后验概率可能有多个极值点(mode,众数)。当最大似然估计的结果不唯一的时候,我们就说参数是不可确定的(not identifiable)。当然此时后验 p(θ|D) 是一个多模型的后验(multi-modal posterior)。具体有多少个局部最优解,这是一个 NP-hard 的问题,即目前没有多项式的算法可以解决此问题。

Unidentifiability 会对贝叶斯推断造成问题。比如考虑用蒙特卡洛方法,从后验概率中不断采样, θ(s)p(θ|D) ,然后求后验均值, θ¯=1SSs=1θ(s) ,然而如果样本是从不同的 mode 中来的,那么求得的均值毫无意义。然而对后验预测分布(posterior predictive distribution), p(x)1SSs=1p(x|θ(s)) 却没有关系,因为似然函数不关心参数从哪个 mode 里来的。

为了解决 Unidentifiability problem,可以用 MCMC 的方法,但是这一章会讲一个简单的方法,即近似最大后验估计(approximate MAP estimation)。

10.3.2 Computing a MAP estimate is non-convex

我们来推导一下隐变量模型(LVM)的似然函数,如下:

logp(D|θ)=ilogp(xi|θ)=ilog[zip(xi,zi|θ)]
明显地,由于混合模型在 log 里有个累加项,所以很难最大化这个似然函数。

考虑如果联合概率 p(zi,xi|θ) 是指数家族分布,即

p(x,z|θ)=1Z(θ)exp[θTϕ(x,z)]
其中 ϕ(x,z) 是充分统计量, Z(θ) 是归一化常数。那么 完全数据的对数似然(compelte data log likelihood) 可以写成
c(θ)=ilogp(xi,zi|θ)=θT(iϕ(xi,zi))NlogZ(θ)
可以证明 logZ(θ) 是凸函数,所以整个似然函数是凹函数(concave),有全局最小值。


如果是针对有 missing data,那么得到 观察数据的对数似然(observed data log likelihood)

(θ)=ilog[zip(xi,zi|θ)]=ilog[zieθTϕ(zi,xi)]NlogZ(θ)
可以证明前面的 log-sum-exp 函数是凸函数,后面 Z(θ) 已知是凸函数。然而这两个函数的差值却既不是凸函数,也不是凹函数,只有局部最优解。

很多最优化算法,求解这种非凸函数的最优解,一般最能得到局部最优,且具体的解取决于初始化的值。比如模拟退火算法(simulated annealing),遗传算法(genetic algorithm)等。也有针对高斯混合模型的算法,流程是想给每个类(cluster)赋予一个数据点,然后用一个凸 1 -type 惩罚。这种方法本质上是稀疏核罗切斯特回归(sparse kernel logistic regression)。

事实上,虽然 1 惩罚是凸函数,但是并不一定是一种促进稀疏性(promote sparsity)最好的办法。其实一些最好的促进稀疏性的方法是使用非凸的惩罚,然后用 EM 算法来优化他们。所以这个故事告诉我们,不要惧怕非凸性。

11.4 The EM algorithm

再次描述一下 EM 算法应用的场景。在估计模型的参数时,如果是 complete data,即模型所有的变量都能观察到,那么就可以直接用 MLE 或者 MAP,但是如果有隐变量或者数据不完整,可以用泛化的(genetic)基于梯度的优化方法来解决,但是只能找到局部最优解。然而模型一般都会有参数的约束(enforce constraints),比如要求协方差矩阵必须是正定矩阵,比如要求混合权重的和为 1,等等。这个时候,使用 expectation-maximization 算法会更简单一下。(因为你也可以用拉格朗日对偶性问题来解决带约束的参数最优化问题。)

EM 算法是个迭代的算法,每次迭代分两步:E 步就是给定当前的参数来推断那些丢失的值;M 步就是使用那么 “filled in” 数据来优化参数。表 11.2 里的模型,比如混合高斯模型,HMM,Factor analysis,带隐变量的贝叶斯网络等,都可以用 EM 算法来求解。

11.4.1 Basic idea

再次定义一下符号,用 xi 表示第 i 个观察变量,用 zi 表示第 i 个隐变量或者丢失变量。那么目的是最大化观察变量的对数似然函数,

(θ)=i=1Nlogp(xi|θ)=i=1Nlog[zip(xi,zi|θ)]
很明显这个函数是很难优化的。定义完整数据(complete data)的对数似然函数,
c(θ)i=1Nlogp(xi,zi|θ)
EM 算法要优化的是 Q 函数,定义为 c 在数据集 D 和当前时刻参数 θt1 上的期望,表达式如下,
Q(θ,θt1)=E[c(θ)|D,θt1]
函数 Q 又叫做 辅助函数(auxiliary function),E 的过程就是求解期望,也即求解 Q 函数,E 的过程又叫做 expected sufficient statistics 或者 ESS。

在 M 阶段,我们要优化 Q 函数,

θt=argmaxθQ(θ,θt1)
如果是 MAP 的话,
θt=argmaxθQ(θ,θt1)+logp(θ)
后面我们会理论上证明,EM 算法会令函数 (θ) 单调递增(非严格单调递增)。所以如果函数值变小了,肯定是你程序出 bug 或者公式算错啦!

10.4.2 EM for GMMs

10.4.2.1 Auxiliary function

公式化简见书里所示,结论是

Q(θ,θ(t1))E[ilogp(xi,zi)|θ]=ikriklogπk+ikriklogp(xi|θk)
其中 rikp(zi=k|xi,θ(t1)) 是前面提到过的 responsibility 的概念。其实理解这段会有点懵,因为书里没有讲清楚,其实已经默认用的是 hard cluster 的思想,即混合高斯模型里,只用某个最大的 k 做结果。比如样本 zi=k 表示第 i 个样本属于第 k 个簇(cluster)。

10.4.2.2 E step

直接把前面讲的公式 11.6 的结果带进去,得到

rik=πkp(xi|θ(t1)k)kπkp(xi|θ(t1)k)

10.4.2.3 M step

在 M 步,我们优化参数 π θk ,先考虑前者,

πk=1Nirik=rkN
其中 rkirik 表示每个点赋给类别(cluster) k 的权重值。

在高斯模型里,具体的参数还有 μk Σk ,如果我们只考虑函数 Q 的后一项,

(θk,Σk)=ikriklogp(xi|θk)=12irik[log|Σk|+(xiμk)TΣ1k(xiμk)]
后面的化简就是直接把多元高斯分布的表达式带进去得到的。最后得到的参数估计的结果是,
μk=irikxirkΣk=irik(xiμk)(xiμk)Trk=irikxixTirkμkμTk

综上,可以得到时刻 t 的参数估计 θt=(πk,μk,Σk)

11.4.2.4 Example

例子给的是用 EM 算法估计 GMM 的参数,和 K-means 有点类似。

11.4.2.5 K-means algorithm

考虑在 GMM 中用 EM 算法的变种,叫做 K-mean 算法。其实就是做了一个简单的假设,所有的高斯模型的协方差矩阵都是固定的一个, Σk=σ2ID ,且所有的高斯模型权重 πk=1/K 也是固定的。所以参数只有 μkRD 即要聚类的中心位置是可变的。

E 步可以做一个 delta-function approximation,

p(zi=k|xi,θ)I(k=zi)
其中 zi=argmaxkp(zi=k|xi,θ) 这个是 hard EM。针对每个点,把离这个点最近的 μk 赋给这个点,归属到第 k 个 cluster 里面,
zi=argmaxkxiμk22
我觉的其实可以把 zi 看做是隐变量,那么 E 步就是用当前的参数 μk 来推断隐变量。

在 E 的阶段,考虑 N 个点要计算到 K 个 cluster 的中心的欧几里得距离,复杂度为 O(NKD) ,但是可以用一些如三角不等式来减少一些计算量。

M 步就是重新计算重心,即用不全了的数据,重新估算参数,

μk=1Nki:zi=kxi

11.4.2.6 Vector Quantization

事实上,K-means 算法不完全是 EM 算法,可以理解(interpreted)一个贪心算法,是对数据压缩(data compression)的损失函数的近似最小化。

如果我们要对一个实数域的向量 xiRD 进行有损压缩,那么一个很简单的方法就是进行向量量化。突然想到在数字图像处理里面,可以对灰度值进行量化,映射到 0-255 这些离散的像素值里。基本的思想就是用 zi{1,...,K} 代替 xiRD ,其中 zi K 个 prototypes 的索引。在 codebook 里的 K 个 prototypes 表示成 μkRD ,而 xi 的编码的结果是找到离之最近的索引,

encode(xi)=argmaxkxiμk2
可以根据重建后的错误来评估 codebook 的质量,定义 reconstruction error 或者 distortion,
J(μ,z|K,X)1Ni=1Nxidecode(encode(xi))2=1Ni=1Nxiμzi2
其中 decode(k)=μk 就是个索引操作。K-means 算法就可以用来优化此目标函数。

向量量化的极端情况就是,给每个数据一个 prototypes,要花掉 O(NDC) 的复杂度。如果对那些重复的向量,只用索引来存储的话,空间复杂度减少到了 O(Nlog2K+KDC) . 向量量化(VQ)的一个很重要的应用就是图片压缩。

11.4.2.7 Initialization and avoiding local minima

原始的 K-means 算法的 K 个点是随机选取的,而 K-means++ 则做了初始化这块工作。具体的步骤见下面的博客

K-means++ 算法选择初始 seeds 的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

  1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心
  2. 对于数据集中的每一个点 x ,计算它与最近聚类中心(指已选择的聚类中心)的距离 D(x)
  3. 选择一个新的数据点作为新的聚类中心,选择的原则是: D(x) 较大的点,被选取作为聚类中心的概率较大
  4. 重复 2 和 3 直到 K 个聚类中心被选出来
  5. 利用这k个初始的聚类中心来运行标准的 K-means 算法

还有一种 grow GMMs,就是给每个 cluster 一个分数,如果一个新的 cluster 分数太低,或者方差太窄,就会被移除。每次训练的过程,会把分数最高的那个分成两个子 cluster,知道最后想求的 cluster 达到想要的数量。

11.4.2.8 MAP estimation

EM 算法里用到了 MLE,为了避免 overfit,也可以做 MAP 估计。考虑给 Q 函数加一个共轭先验,

Q(θ,θold)=[ikriklogπk+ikriklogp(xi|θk)]+logp(π)+klogp(θk)
具体地,可以有 Dirichlet prior + categorical distribution,如果是高斯混合模型,可以用 NIW 分布做先验。

11.4.3 EM for mixture of experts

11.4.4 EM for DGMs with hidden variables

11.4.5 EM for Student distribution *

11.4.6 EM for probit regression *

11.4.7 Theoretical basis for EM *

11.4.7.1 Expected complete data log likelihood is a lower bound

11.4.7.2 EM monotonically increases the observed data log likelihood

11.4.8 Online EM

11.4.8.1 Batch EM review

11.4.8.2 Incremental EM

11.4.8.3 Stepwise EM

11.4.9 Other EM variants *

11.5 Model slection for latent varibale models

11.6 Fitting models with missing data

猜你喜欢

转载自blog.csdn.net/zhangxb35/article/details/54928401