您当前的位置 :首页 > 企业风采 > 环境展示

混合高斯模型应用中的问题

2025-03-09 03:34 作者: 环境展示

  关于混合高斯模型就不说了,没啥特别的地方,但将混合高斯模型用于图像语义特征抽取还是挺有意思的。这是来自于文本检索的一个技术。对于图像训练集,首先使用很多方法(比如,SIFT)提取出局部区域特征(比如车子的轮子,房间的窗户等等),一幅图像大概有几百至几千个特征不等吧,把所有图像的局部特征放在一起,那这个特征就多了去了,在我的实验中大概10万个向量,对这10万个向量做一下聚类,比如假设有300个质心,于是10万个特征就被划分到300个类别中。我现在认为,这300个类别的代表就构成了一个“词典”,显然,质心就是最自然的代表。

  在聚类过程中,最容易想到的那就是kmeans了,简单、直观。但有更好的方法,那就是用概率方法,比如高斯混合模型。混合高斯模型优于kmeans的地方就不多说了,地球人都知道。但是没有想到的是,在这种高维大样本的情形下出现的毛病特别多,总结如下:

  1、协方差矩阵奇异问题。这是混合高斯模型的老问题了,在迭代中假如慢慢的出现某类(概率的)样本特别少的情形,会导致协方差矩阵奇异,这时计算高斯PDF是不可能了,协方差逆不存在,不存在?那就regularize它,事实上很多文献就是这么推荐的。

  2、高斯函数密度全为0。这个是典型的高维空间问题了,在高维空间一点点扰动就非常有可能造成两点之间的距离呈指数级的增长,因此导致所有类别高斯PDF趋近于0。这样的一个问题一度让我很困惑,因为为减少参数数量,我是使用对角矩阵来逼近样本的协方差的(不这么干会内存不够),那这时候就出现了“类中样本少了方差太小有问题,样本多了方差太大也有问题”的两难境地。经过研究MATLAB自带的gmdistribution.fit函数算是暂时解决了这样的一个问题,但心里还是不很踏实。

  3、计算复杂度问题。本来嘛,使用EM算法估计GMM参数复杂度就比kmeans要高,现在可好了,样本大(100,000),高斯分量多(300),这在某种程度上预示着啥问题?意味簇与簇之间的重合覆盖可能会很大啊,这个迭代次数明显地增长。悲剧的是,这么大的规模每次迭代时间是很可观的。同样的训练,kmeans一分钟,GMM两小时之后(没有实际计算,反正出去吃了饭吹会牛,回来还没算完,再看个一集friends差不多了)。

  3、更悲剧的问题:参数终于估计完了,代入直方图,使用支持向量机一分类,比使用kmeans得到的精度差了1%!真心的希望是我的算法编写错了...但是,过年了,再也hold不住了,爱咋咋地吧...

  想问一下协方差矩阵出现奇异如何来解决呢?regularize具体是怎么做的?