高斯混合模型(GMM model)以及梯度下降法(gradient descent)更新參數

關於GMM模型的資料和 EM 參數估算的資料,網上已經有很多了,今天想談的是GMM的協方差矩陣的分析、GMM的參數更新方法

1、GMM協方差矩陣的物理含義

涉及到每個元素,是這樣求算:

用中文來描述就是:

注意後面的那個除以(樣本數-1),就是大括號外面的E求期望 (這叫無偏估計)

上面公式也提到了,協方差本質上是就是很多向量之間的內積,內積的定義如下:

      用個具體例子說明, 比如一組數二維數據(二維的數據好說明,比較直觀),它的所有X值、Y值看成一對兒數據,我們得到它們的協方差如下:這裏寫圖片描述,這些值可以用矩陣來表示,協方差矩陣: (引自點擊打開鏈接 http://blog.csdn.net/liuheng0111/article/details/52608258)
這裏寫圖片描述

很顯然,對角線上的數值肯定是大於零的(平方和),其他非對角線上的值是關於主對角線對稱的,這種矩陣叫 正定矩陣 (Positive Definite)

根據向量內積的物理意義和協方差矩陣的幾何意義,我們可以知道:

協方差矩陣實際上形容的就是這些數據之間的協同分佈情況,比如偏向性、數據聚集程度等。

比如用matlab生成一組二維的數據:

 mu = [2  3];
 SIGMA = [ 3 1; 1 1];
 data(1:100,:) = mvnrnd(mu,SIGMA,100);

畫出來它是這樣:


根據協方差矩陣的幾何意義,它的兩個特徵值的開方,即使從單位矩陣(1,0;0,1)圓 變成 橢圓 的兩個軸的放大倍數,seta角就是旋轉角度


對矩陣進行特徵分解:

[V,l] = eig(cov);
    S = sqrt(l); %開方,求的放大倍數
    R = V;  %旋轉矩陣
    Tm = R*S;  %旋轉+尺度,就是由圓變成有一定傾斜角的橢圓的過程

V =    0.3827   -0.9239 ;   -0.9239   -0.3827
l =    0.5858         0 ;       0    3.4142

一般的旋轉矩陣是這樣:

但我們這裏用的旋轉矩陣是從Y軸開始算旋轉角的,並且X軸要做負對稱,所以旋轉矩陣的結果如下:





2、GMM參數更新方法

一般的,GMM的參數更新方法都是EM的方法,這裏說的是梯度下降的方法。

梯度下降也是求一個函數最小值的方法,相比EM的算法,更新速度比較快,缺點是比較容易陷入局部收斂點。

比如給定了一組數(dataset 有一定維度),讓求一個概率最大下的混合高斯函數的參數(目標:每個GMM的 權重係數、均值,協方差)

我們定義了概率函數, (N代表有多少個數據集,M代表有多少混合高斯)

由於給定了一組數據(dataset),我們採用 batch gradient descent 的方法,實際上還有隨機梯度的方法,就是隨機用一個點去更新,基本思路相同。

實際情況下,求上面那個表達式的最大值比較困難的,我們增加一個負號,就可以使用梯度下降法(下降法只能求最小值,最大值一般不用這個方法,對於一般的函數求最大值,需要先判斷是否收斂再求最大值,或者給定參數範圍,這裏不討論),再用log方便表達式求導數,最後還要知道各個待定參數的導數。即我們要計算下面表達式在最小值的情況下,它的參數是什麼


回顧一下梯度下降法:梯度下降法就是沿着 梯度,不斷的去更新參數值,最後達到一定的收斂條件,得到我們要的參數


這裏面η 是學習率 ,後面的重點就是求梯度了(▽爲對矢量做偏導,它是一個矢量, ▽U表示爲矢量U的梯度)

幸好在matrix code book裏面已經給出了三個重要參數的導數: 地址是:【https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf


注意上面的 協方差矩陣需要保證正定,否則沒有辦法求似然概率。

把梯度下降法的求GMM混合參數的方法寫成如下流程:


給定一組dataset,在這個dataset下進行參數估計

   初始化一組GMM的初始值,混合權重,均值,協方差矩陣 Xk(注意Xk不是dataset,是混合參數)

      while (比較Yk+1和Yk之間的差值,或者循環次數,如果滿足,跳出)

          計算在這個初始值下的似然概率值(注意用log表達,注意我們爲了求最小值給了負號,注意各個dataset中的點的似然概率是乘積關係)

              計算各個偏導數,使用梯度下降的方法更新新的Xk+1 =  Xk - η*∇(Xk)

         比較Xk+1和Xk下面下,這一組dataset的總體似然概率值之差,Yk+1和Yk

         Xk+1=Xk ,繼續循環


3、GMM參數更新方法EM和梯度下降法遇到的問題

用EM算法來擬合分類:


使用梯度下降法擬合:


梯度下降法的擬合結果比較依賴於初始值


下面談一下,遇到非正定協方差矩陣的問題;

我們的參數更新方法:對於權重係數和均值更新問題不大,權重可以每次迭代之後要保證總和要等於一。

可能出問題的就是(在某些情況下)協方差矩陣是非正定(非正定沒法Cholesky,沒法求概率),因爲是兩個正定矩陣的相差,它們的差不一定能保證正定,這時候有幾種方法;


1、修改更新之後的協方差矩陣,使得特徵值爲負數的變成 eps (matlab最小正數),結果橢圓塌陷,收斂到兩個直線上:



可以認爲塌陷到直線的兩類是多餘的。

2、修改更新之後的協方差矩陣,使得特徵值爲負數的變成 1它會重新從圓開始計算開始收斂:



3、保持協方差矩陣,若更新之後的協方差矩陣特徵值爲負數,則保持協方差矩陣不變:



結果最終收斂。


另外多提一句

python中的scipy.stats是可以容許奇異的。是不是對計算logpdf有幫助。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章