原文地址:http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html
獨立成分分析(Independent Component Analysis)
1. 問題:
1、上節提到的PCA是一種數據降維的方法,但是只對符合高斯分布的樣本點比較有效,那么對於其他分布的樣本,有沒有主元分解的方法呢?
2、經典的雞尾酒宴會問題(cocktail party problem)。假設在party中有n個人,他們可以同時說話,我們也在房間中一些角落里共放置了n個聲音接收器(Microphone)用來記錄聲音。宴會過后,我們從n個麥克風中得到了一組數據,i表示采樣的時間順序,也就是說共得到了m組采樣,每一組采樣都是n維的。我們的目標是單單從這m組采樣數據中分辨出每個人說話的信號。
將第二個問題細化一下,有n個信號源,
,每一維都是一個人的聲音信號,每個人發出的聲音信號獨立。A是一個未知的混合矩陣(mixing matrix),用來組合疊加信號s,那么
x的意義在上文解釋過,這里的x不是一個向量,是一個矩陣。其中每個列向量是,
表示成圖就是
這張圖來自
的每個分量都由
的分量線性表示。A和s都是未知的,x是已知的,我們要想辦法根據x來推出s。這個過程也稱作為盲信號分離。
將W表示成
2. ICA的不確定性(ICA ambiguities)
由於w和s都不確定,那么在沒有先驗知識的情況下,無法同時確定這兩個相關參數。比如上面的公式s=wx。當w擴大兩倍時,s只需要同時擴大兩倍即可,等式仍然滿足,因此無法得到唯一的s。同時如果將人的編號打亂,變成另外一個順序,如上圖的藍色節點的編號變為3,2,1,那么只需要調換A的列向量順序即可,因此也無法單獨確定s。這兩種情況稱為原信號不確定。
還有一種ICA不適用的情況,那就是信號不能是高斯分布的。假設只有兩個人發出的聲音信號符合多值正態分布,,I是2*2的單位矩陣,s的概率密度函數就不用說了吧,以均值0為中心,投影面是橢圓的山峰狀(參見多值高斯分布)。因為
,因此,x也是高斯分布的,均值為0,協方差為
。
令R是正交陣,
。如果將A替換成A’。那么
。s分布沒變,因此x’仍然是均值為0,協方差
。
因此,不管混合矩陣是A還是A’,x的分布情況是一樣的,那么就無法確定混合矩陣,也就無法確定原信號。
3. 密度函數和線性變換
在討論ICA具體算法之前,我們先來回顧一下概率和線性代數里的知識。
假設我們的隨機變量s有概率密度函數(連續值是概率密度函數,離散值是概率)。為了簡單,我們再假設s是實數,還有一個隨機變量x=As,A和x都是實數。令
是x的概率密度,那么怎么求
?
令,首先將式子變換成
,然后得到
,求解完畢。可惜這種方法是錯誤的。比如s符合均勻分布的話(
),那么s的概率密度是
,現在令A=2,即x=2s,也就是說x在[0,2]上均勻分布,可知
。然而,前面的推導會得到
。正確的公式應該是
推導方法
更一般地,如果s是向量,A可逆的方陣,那么上式子仍然成立。
4. ICA算法
ICA算法歸功於Bell和Sejnowski,這里使用最大似然估計來解釋算法,原始的論文中使用的是一個復雜的方法Infomax principal。
這個公式代表一個假設前提:每個人發出的聲音信號各自獨立。有了p(s),我們可以求得p(x)
左邊是每個采樣信號x(n維向量)的概率,右邊是每個原信號概率的乘積的|W|倍。
前面提到過,如果沒有先驗知識,我們無法求得W和s。因此我們需要知道,我們打算選取一個概率密度函數賦給s,但是我們不能選取高斯分布的密度函數。在概率論里我們知道密度函數p(x)由累計分布函數(cdf)F(x)求導得到。F(x)要滿足兩個性質是:單調遞增和在[0,1]。我們發現sigmoid函數很適合,定義域負無窮到正無窮,值域0到1,緩慢遞增。我們假定s的累積分布函數符合sigmoid函數
求導后
這就是s的密度函數。這里s是實數。
如果我們預先知道s的分布函數,那就不用假設了,但是在缺失的情況下,sigmoid函數能夠在大多數問題上取得不錯的效果。由於上式中是個對稱函數,因此E[s]=0(s的均值為0),那么E[x]=E[As]=0,x的均值也是0。
知道了,就剩下W了。給定采樣后的訓練樣本
,樣本對數似然估計如下:
使用前面得到的x的概率密度函數,得
接下來就是對W求導了,這里牽涉一個問題是對行列式|W|進行求導的方法,屬於矩陣微積分。這里先給出結果,在文章最后再給出推導公式。
注意:我們計算最大似然估計時,假設了與
之間是獨立的,然而對於語音信號或者其他具有時間連續依賴特性(比如溫度)上,這個假設不能成立。但是在數據足夠多時,假設獨立對效果影響不大,同時如果事先打亂樣例,並運行隨機梯度上升算法,那么能夠加快收斂速度。
回顧一下雞尾酒宴會問題,s是人發出的信號,是連續值,不同時間點的s不同,每個人發出的信號之間獨立(和
之間獨立)。s的累計概率分布函數是sigmoid函數,但是所有人發出聲音信號都符合這個分布。A(W的逆陣)代表了s相對於x的位置變化,x是s和A變化后的結果。
5. 實例
s=2時的原始信號
觀察到的x信號
使用ICA還原后的s信號
6. 行列式的梯度
對行列式求導,設矩陣A是n×n的,我們知道行列式與代數余子式有關,