MLAPP 读书笔记
11 混合模型和期望最大化算法
A Chinese Notes of MLAPP,MLAPP 中文笔记项目
https://zhuanlan.zhihu.com/python-kivy
转载:cycleuser
侵权立删,本意是为广大学习爱好者提供中文资料,同时在这里补充了图片,方便阅读,如果有任何法律问题,我会立即删除。
11.1 隐变量模型
在Chap10我们呈现了用图模型定义高维联合概率分布的操作。其基本理念在两个变量之间加入连边来模拟它们之间的依赖性(严格来讲图模型规定的是条件独立性,但你应该懂我的意思)。
当然我们可以从另一个角度来假设观测变量的关联性来自于一个隐藏的,共同的“原因”。这种含有隐藏变量的模型就叫做隐变量模型(LVM:Latent variable models)。在本章节中,我们会看到这些模型会比没有隐变量的模型更难拟合。然而,隐变量模型有两大优点:
第一,隐变量模型一般来说比那些显式地处理关联性的模型有更少的参数。这在图11.1中可以看出:如果所有的节点(包括H)都是二值,并且所有的条件概率分布都是查表的,那么左边的那个模型有17个自由参数,儿右边的那个模型有59个自由参数。
第二,隐变量模型中的隐藏变量可以起瓶颈的作用,并将原来的数据转化成某种压缩过的表示。我们接下来会看到这其实是无监督学习的基础。图11.2画出了一些可以作此用途的通用隐变量模型结构。通常来讲我们有 L L L 个隐变量, z i 1 , … , z i L z_{i1},\dots,z_{iL} zi1,…,ziL 以及 D D D 个显变量 x i 1 , … , x i D x_{i1},\dots,x_{iD} xi1,…,xiD ,并且 D ≪ L D\ll L D≪L。如果有 L > 1 L>1 L>1,那么每个观测变量都是多个因变量共同作用的结果,于是就形成了一个多对多的映射。如果 L = 1 L=1 L=1, 我们就只有一个隐变量。 此时一般使用一个离散的 z i z_i zi ,也就形成了一个一对多的映射。 当然也存在多对一的映射,也就是多个因子或者原因争相解释一个观测变量。 这样的模型也是概率性矩阵分解的基础, 我们在Sec27.6.2中会加以讨论。 最后,也存在一对一的的映射 z i → x i z_i \rightarrow x_i zi→xi。 如果我们允许 z i z_i zi 和/或 x i x_i xi 取矢量值,这个形式就可以囊括其他的几个形式。 通过取不同的似然函数 p ( x i ∣ z i ) p(x_i | z_i) p(xi∣zi) 和先验函数 p ( z i ) p(z_i) p(zi) ,我们可以得到一系列模型,见表Table11.1。
|
p
(
x
i
∣
z
i
)
p(x_i | z_i)
p(xi∣zi) |
p
(
z
i
)
p(z_i)
p(zi)| 名称 | 章节 |
|:-----------------😐 ------------ | ----------- |------ |
| 多维正态分布 | 范畴分布 | 高斯混合模型 | 11.2.1\ref{sec:11.2.1} |
| 范畴分布之积 | 范畴分布 | 多项混合分布 | 11.2.2\ref{sec:11.2.2} |
| 高斯分布之积|高斯分布之积|因子分析/概率性PCA | 12.1.5\ref{sec:12.1.5}|
| 高斯分布之积|拉普拉斯分布之积| 稀疏编码/概率性ICA | 12.6\ref{sec:12.6} |
| 范畴分布之积| 高斯分布之积 | 多项分布PCA(?前面两个貌似反了) | 27.2.3\ref{sec:27.2.3} |
| 范畴分布之积| 狄利克雷分布| 隐狄利克雷分配(LDA)| 27.3\ref{sec:27.3} |
|含噪或函数之积| 伯努利函数之积 | BN20/QMR | 10.2.3\ref{sec:10.2.3}|
11.2 混合模型
最简单的隐变量模型具有隐变量 z i ∈ { 1 , … , K } z_i\in\{1,\dots,K\} zi∈{1,…,K}, 表示一个离散的隐藏状态,对此我们采用一个范畴函数作为先验 p ( z i ) = Cat ( π ) p(z_i) = \text{Cat}(\pi) p(zi)=Cat(π)。 对似然函数,我们采用 p ( x i ∣ z i = k ) = p k ( x i ) p(x_i| z_i =k ) =p_k(x_i) p(xi∣zi=k)=pk(xi),其中 p k p_k pk 是观测值的第k个基底分布,并且可以取任意形式。这个模型总体上讲是一个混合模型,因为 K K K 个基底分布通过以下的形式混合:
p ( x i ∣ θ ) = ∑ k = 1 K π k p k ( x i ∣ θ ) (11.1) p (x_i | \theta) = \sum^K_{k=1}{ \pi_k p_k(x_i | \theta) } \tag{11.1} p(xi∣θ)=k=1∑Kπkpk(xi∣θ)(11.1)
这是所有 p k p_k pk 的一个凸组合,因为我们取的是一个加权和,并且权重 π k \pi_k πk 满足 0 ≤ π k ≤ 1 0 \le \pi_k \le 1 0≤πk≤1 并且有 ∑ k K π k = 1 \sum_k^{K}\pi_k =1 ∑kKπk=1。 我们接下来给出一些例子。
11.2.1 高斯分布混合模型
最常用的混合模型是高斯分布混合模型(MOG:Mixture of Gaussians, GMM: Gaussian Mixture Model)。在这个模型中,每个基底分布都是一个多变量高斯分布,并有均值 μ k \mu_k μk 和协方差矩阵 Σ k \Sigma_k Σk。因而其似然函数有以下形式
p ( x i ∣ θ ) = ∑ k = 1 K π k N ( x i ∣ μ k , Σ k ) (11.2) p(x_i | \theta) = \sum_{k=1}^K \pi_k \mathcal{N}( \pmb {x_i} | \pmb {\mu_k}, \pmb{\Sigma_k }) \tag{11.2} p(xi∣θ)=k=1∑KπkN(xi∣μk,Σk)(11.2)
图Fig11.3展示了3个高斯混合模型的联合概率分布2D图。 每一个混合成分都由不同的椭圆形轮廓线显示。当混合成分的数量足够大,这个高斯混合模型就可以近似任意一个定义在 R D \mathbb{R}^D RD 上的概率密度。
11.2.2 多努利分布混合模型(mixture of multinoullis)
我们可以使用混合模型在许多数据类型上定义(概率)密度模型。譬如,假如我们的数据是D维的二值向量,我们就可以将条件概率定义成伯努利分布的乘积:
p ( x i ∣ z i = k , θ ) = ∏ j = 1 D Ber ( x i j ∣ μ j k ) = ∏ j = 1 D μ j k x i j ( 1 − μ j k ) 1 − x i j (11.3) p(x_i | z_i = k, \pmb{\theta} ) = \prod_{j=1}^D \text{Ber}(x_{ij}| \mu_{jk}) = \prod_{j=1}^D \mu_{jk}^{x_ij}(1-\mu_{jk})^{1-x_{ij}} \tag{11.3} p(xi∣zi=k,θ)=j=1∏DBer(xij∣μjk)=j=1∏Dμjkxij(1−μjk)1−xij(11.3)
其中 μ j k \mu_{jk} μjk是第j个比特在第k个类别中取真值的概率。
隐变量本身并不一定要有现实意义,引入隐变量有时只是简单地为了使模型更为强大。以上例而言,可以证明(Exer11.8\ref{exer-11.8})混合分布的均值和方差服从:
E [ x ] = ∑ k π k μ k cov [ x ] = ∑ k π k [ Σ k + μ k μ k T ] − E [ x ] [ x ] T \begin{align} E[\pmb{x}] &= \sum_k \pi_k \pmb{\mu_k} \tag{11.4} \\ \text{cov} [\pmb{x} ] &= \sum_k \pi_k [\pmb {\Sigma_k} + \pmb{\mu_k} \pmb{\mu_k}^T] - E[\pmb x] [\pmb x] ^T \tag{11.5} \end{align} E[x]cov[x]=k∑πkμk=k∑πk[Σk+μkμkT]−E[x][x]T(11.4)(11.5)
此处有 Σ k = diag ( μ j k ( 1 − μ j k ) ) \pmb{\Sigma}_k = \text{diag}(\mu_{jk} (1-\mu_{jk}) ) Σk=diag(μjk(1−μjk))。因此尽管每个成分的条件分布都是可以因子分解的,混合后的联合分布却不是。因此混合分布可以抓住变量之间的相关性,而单成分的多努利分布则不行。
11.2.3 使用混合模型进行聚类
混合模型有两大主要应用。第一种是将它们作为一个黑盒式的密度模型 p ( x i ) p({\pmb x }_i) p(xi)使用。在诸如数据压缩,异常值探知,和创建生成式分类器的很多任务中都很有用。在生成分类器中我们用一个混合模型来拟合每个类型的条件概率 p ( x ∣ y = c ) p(\pmb x | y = c) p(x∣y=c)(见Sec14.7.3\ref{sec-14.7.3})。
另外一个更为常见的用法是用混合模型来做聚类,我们会在Chap25\ref{chap-25}中详细讨论。但其理念是很简单的:我们拟合混合模型,然后再计算 p ( z i = k ∣ x i , θ ) p(z_i=k| \pmb{x}_i,\pmb \theta) p(zi=k∣xi,θ)作为数据点i属于类别k的后验概率。这个概率也被称为类别k对数据i的责任,并可以用贝叶斯规则作如下计算得到:
r i k ≜ p ( z i = k ∣ x i , θ ) = p ( z i = k ∣ θ ) p ( x i ∣ z i = k , θ ) ∑ k ′ = 1 K p ( z i = k ′ ∣ θ ) p ( x i ∣ z i = k ′ , θ ) (11.6) r_{ik}\triangleq p(z_i = k | \pmb{x}_i,\pmb \theta ) = \frac{p(z_i = k| \pmb \theta) p(\pmb{x}_i | z_i = k ,\pmb \theta) } {\sum_{k'=1}^{K} p(z_i = k' | \pmb \theta) p(\pmb {x}_i | z_i = k',\pmb\theta) } \tag{11.6} rik≜p(zi=k∣xi,θ)=∑k′=1Kp(zi=k′∣θ)p(xi∣zi=k′,θ)p(zi=k∣θ)p(xi∣zi=k,θ)(11.6)
这个过程叫做软聚类,并且和生成式分类器的概率计算是完全一样的。这两个模型的区别仅仅在于其训练过程:在混合模型中,我们并未对 z i z_i zi作出过任何观测,相比之下生成型分类器在训练时是可以观测到 y i y_i yi的(它就是 z i z_i zi的对应物)。
我们可以用 1 − max k r i k 1-\max_k{r_{ik}} 1−maxkrik来表示对分类的不确定性。假若这个不确定性很小,那就有理由用最大后验点估计来计算一个硬聚类:
z i ∗ = arg max k log p ( x i ∣ z i = k , θ ) + log p ( z i = k ∣ θ ) (11.7) z_i^* = \arg \underset{k}{\max}\log{p(\pmb{x}_i | z_i = k ,\pmb \theta) }+\log p(z_i =k | \pmb\theta) \tag{11.7} zi∗=argkmaxlogp(xi∣zi=k,θ)+logp(zi=k∣θ)(11.7)
图11.4\ref{fig:11.4}
图11.5\ref{fig:11.5}
图8.4\ref{fig:8.4}展示了用高斯混合模型做硬聚类,来拟合人们的身高-体重分布。颜色表示了硬聚类的类别。注意此时类别本身的颜色是无关的:我们可以对所有的类别随意重命名而不影响对数据的剖分。这被称为标签转换。
图11.4\ref{fig:11.4}给出了另一个例子。这里的数据向量 x i ∈ R 7 \pmb{x}_i\in\mathbb{R}^7 xi∈R7代表不同基因在7个不同时间点时的表达水平。我们用一个高斯混合模型进行了聚类。可以看到有一些基因的表达水平随着时间单调上升(以对某个刺激做出应答),有些单调下降,或者表现出复杂的模式。我们这里将数据剖分成了 K = 16 K=16 K=16个类别。(见章节11.5 Sec11.5\ref{sec:11.5})对K值选取的细节)。我们还可以用一个原型或类别中心来代表一个的类别,见图11.4\ref{fig:11.4}.
再举一个二值数据的例子:考虑一个二值化的MNIST手写数字数据集图1.5\ref{fig:1.5}。如果将类别标签隐藏起来,并用一个 K = 10 K=10 K=10类别的混合多努利模型来拟合这个分布。我们可以看到类别中心 μ ^ k \hat{\mu}_k μ^k(图11.5 \ref{fig:11.5})正确地发现了一些数字类别,但也对某些数字创建了多个类别,或零个类别。这些“错误”可能源自以下原因:
-
这个模型太简单了,以至于不能抓住数字的视觉特征。每个像素被当做一个独立的变量因而也就没有形状或者笔画的概念。
-
尽管我们认为应该有10个类别,有些数字内部可能还有很大的视觉差异。比如说,7有两种带横线和不带横线的写法。图1.5\ref{fig:1.5}给出了一些书写风格上的差异。因此我们需要 K ≫ 10 K\gg 10 K≫10个类别才能充足地拟合这些数据。然而,如果我们给出了过大的 K K K,这个模型和算法并不能阻止多余类别的生成和使用,以至于一个数字对应到多个类别。我们可以用模型选择来防止生成过多的类别,但视觉上吸引人的结果可能和一个好的密度模型相去甚远。
-
似然函数可能是非凸的,我们可能困在局部最优里了。详见章节11.3.2\ref{sec:11.3.2}。
这个例子的情况对混合模型来说非常典型,因而我们在“解读”模型所生成的类别的时候一定要多加小心。加入一些监督,或者是包含信息的先验都可以有所增益。
11.2.4 混合专家模型
章节14.7.3介绍了如何使用混合模型来构建一个生成型分类器。我们也可以用混合模型来创建判别模型来进行分类和回归。比如说对于图11.6\ref{fig:11.6}中的数据,三个线性回归函数看起来是一个很好的模型,每个都对输入空间不同的一部分进行处理。我们可以用一个基于输入的混合权重和混合组分来构建模型:
p ( y i ∣ x i , z i = k , θ ) = N ( y i ∣ w k T x i , σ k 2 ) p ( z i ∣ x i , θ ) = Cat ( z i ∣ S ( V T x i ) ) \begin{align} p(y_i | \pmb{x}_i,z_i = k, \pmb{\theta}) &= \mathcal{N}(y_i|\pmb{w}_k^T \pmb{x}_i,\sigma_k^2) \tag{11.8} \\ p(z_i| x_i,\theta) &= \text{Cat}(z_i| \mathcal{S} (\pmb{V}^T \pmb{x}_i)) \tag{11.9} \end{align} p(yi∣xi,zi=k,θ)p(zi∣xi,θ)=N(yi∣wkTxi,σk2)=Cat(zi∣S(VTxi))(11.8)(11.9)
图11.7\ref{11.7}展示了该模型对应的有向图。
这个模型被称为混合专家模型MoE(Jordan and Jacobs 1994,@Jordan&Jacobs1994)。每个子模型都被称作对输入空间某一部分专精的一个"专家"。函数 p ( z i = k ∣ x i , θ ) p(z_i = k | \pmb{x}_i,\pmb {\theta}) p(zi=k∣xi,θ)被称作是阀门函数根据输入值决定使用哪个专家。 图11.6\ref{fig:11.6}显示了三个专家分食了一维的输入空间,图11.6\ref{fig:11.6}显示了每个专家单独给出的预测。此处所有的专家都是线性回归模型。 图11.6\ref{fig:11.6}给出了模型最后的预测,计算如下:
p ( y i ∣ x i , θ ) = ∑ k p ( z i = k ∣ x i , θ ) p ( y i ∣ x i , z i = k , θ ) (11.10) p(y_i | \pmb {x}_i,\pmb \theta ) = \sum_k p(z_i = k | x_i ,\pmb \theta) p(y_i | \pmb{x}_i,z_i = k,\pmb \theta) \tag{11.10} p(yi∣xi,θ)=k∑p(zi=k∣xi,θ)p(yi∣xi,zi=k,θ)(11.10)
我们将在章节11.4.3\ref{sec:11.4.3}中讨论该模型的拟合。
显然的是我们可以“插入”任何模型作为我们的专家。例如,我们可以用神经网络(章节16\ref{chap:16})来同时表示阀门函数和专家。这样的得出的模型就是混合密度网络。这样的模型相较一般的混合专家模型来说训练得更慢,但也更灵活,详见(Bishop 1994,@Bishop1994)。
另外也可将每个专家自身变成一个混合专家模型。这就给出了一个名为层次化专家混合模型。图11.7\ref{fig:11.7}给出了其概率图模型,详见章节16.2.6\ref{sec:16.2.16}。
EM算法可以见:https://zhuanlan.zhihu.com/p/40991784
994)。