主讲人 戴玮
(新浪微博:@戴玮_CASIA)
Wilbur_中博(1954123) 20:00:49
我今天讲PRML的第十二章,连续隐变量。既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是什么?我们可能还记得之前尼采兄讲过的9.2节的高斯混合模型。它有一个K维二值隐变量z,不仅只能取0-1两个值,而且K维中只能有1维为1、其他维必须为0,表示我们观察到的x属于K类中的哪一类。显然,这里的隐变量z就是个离散隐变量。不过我们容易想到,隐变量未必像kmeans或GMM这种聚类算法那样,非此即彼、非白即黑,我们当然也可能在各个聚类或组成成分之间连续变化。而且很多情况下,连续变化都是更合理、更容易推广的。所以,我们这一章引入了连续隐变量。
书中举了一个例子:从某张特定的手写数字图像,通过平移和旋转变换生成多张图像。虽然我们观察到的是整个图像像素的一个高维数据空间中的样本,但实际上只是由平移和旋转这三个隐变量产生的,这里的平移和旋转就是连续隐变量。还举了个石油流量的例子,是从两个隐变量经过测量得到12个观察变量,那里的两个隐变量也是连续的。 一般来说,样本不会精确处在由隐变量表示的低维流形上,而是可能稍有偏差,这种偏差可视作噪声。噪声的来源各种各样,不是我们能把握的,一般只能统一把它们看成单一的噪声项来处理。
最简单的情况下,我们可以把隐变量和观察变量都假设为高斯分布,并且利用2.3.1讲过的条件分布与边缘分布之间的线性高斯关系,来建立观察变量与隐变量之间的线性模型。这样,我们就可以建立主成分分析(PCA)以及与之相关的因子分析(FA)的概率模型。不过在此之前,我们还是看看传统视角是如何处理主成分分析的:
PCA也叫Karhunen-Loève transform(KL变换)或Hotelling transform(霍特林变换)。它有两种可产生相同算法的等价视角:最大方差和最小重构误差。两种视角都希望找到一组正交投影,把原数据投影到低维的线性子空间上。但最大方差视角是说,我们希望数据投影之后在投影方向上有最大方差;而最小重构误差视角是说,我们希望投影后的数据和原数据之间的均方差最小。前者由Hotelling于1933年提出,后者由Pearson于1901年提出。
先来看最大方差视角。首先定义样本均值和样本协方差:
然后,我们可以得到某个投影方向u_1上的方差:
不失一般性,我们令,这样我们就可以将
作为约束,将方差最大作为目标函数,把这个问题看作有约束最优化问题,因此可用拉格朗日乘子法求解:
令其导数为0,可得到:
这是我们熟悉的线性代数中的特征值分解问题,lambda_1和u_1分别是S的特征值和特征向量。而且可以看到,这里求出的u_1方向的最大方差就是:
在余下的方向中依次选择最大方差方向,就是S由大到小给出的各个特征值以及对应的特征向量,这也容易从S是实对称矩阵、因此得到的特征向量之间是正交的这一点看出来。
再来看最小重构误差视角,由投影方向之间的标准正交关系,我们可以得到样本在D个投影方向下的表示:
但我们不想用D个投影方向,而是想用M<D个方向来表示样本,并且希望这样表示尽可能接近原样本。那么原样本与M个方向重构得到的样本之间的误差,用均方差来衡量就是:
上面的公式12.14展开之后就是:
我们想最小化这个重构误差项。因为投影方向之间正交,所以也可以逐一求解,也就是目标函数:
约束条件是:
同样可以由拉格朗日乘子法得到:
这和最大方差视角一样,也是特征值问题。只不过这里是去掉较小特征值对应的方向,因为那些方向对应着较小的重构误差,而先前是保留较大特征值对应的方向。但得到的结果是完全一样的。
在D个特征向量中选择前M个作为投影方向,得到的重构误差就是:
下面简单谈谈PCA的复杂度问题。我们知道,S是DxD维矩阵,对S做特征值分解需要O(D^3)的复杂度。如果仅需要前M个最大的特征值以及特征向量,那么有一些算法可达到O(M*D^2)复杂度,比如power method(Golub and Van Loan, 1996)。然而,即使是O(M*D^2),在D较大的时候也是难以接受的。比如我们可能会用PCA做人脸识别的一些处理,人脸图像一般是几万维的,那么O(M*D^2)就是至少好几亿的复杂度,这显然是无法接受的。一会我们要讲的概率角度下用EM算法求解PPCA可以进一步降低复杂度。但仅从矩阵分解角度,实际上有一个非常巧妙的方法,也是PCA实现中常用的一种技巧:
我们知道,对S做特征值分解的公式是:
我们可以把左右都左乘X,得到:
令得到:
这里可以看到,对做特征值分解,与对
做特征值分解,它们有着相同的非零特征值,但特征向量是不一样的。
不过,对(12.28)左右同时左乘X^T之后,我们可以得到:
则
因为我们要求投影方向是标准正交的,所以归一化之后就是
因为XX^T是NxN矩阵,和样本数量相关而和特征维度无关,所以如果是特征空间维度很高,但样本数量相对来说不那么大,那么我们就可以对XX^T做特征值分解,而不是X^TX。这样算法求解起来会快很多。但是,如果样本数量也很大、特征维度也很高,这样做也不合适了。这时就需要借助概率模型来求解。
============================讨论===================