本文介紹獨立成分分析(ICA),同 PCA 類似,我們是要找到一個新的基來表示數據,但目的就不一樣了。
雞尾酒會問題:n 個人在一個 party 上同時說話,n 個麥克風放置在房間的不同位置,因為每個麥克風跟每個人的距離都不一樣,所以它們記錄的說話者重疊的聲音也不一樣。根據麥克風記錄的聲音,如何分離出 n 個說話者的聲音呢?
為形式化這個問題,我們想象有一些數據 s∈R 是從 n 個獨立的源生成的,我們觀察到的是
x=As,
矩陣 A 是未知的,被稱作混合矩陣,通過不斷觀察得到的是 {x(i);=1,...,m},我們的目標是找到生成數據(x(i)=As(i))的源 s(i)。
在雞尾酒問題中,s(i) 是個 n 維向量,sj(i) 是講話者 j 在時間 i 發出的聲音, x(i) 也是個 n 維向量,xj(i) 是麥克風 j 在時間點 i 記錄的聲音。
設 W=A-1 為一個分離矩陣,我們的目標就是找到 W,這樣就能根據麥克風記錄的聲音 x(i),來恢復聲源 s(i)=Wx(i)。為表示方便起見,使 wiT 表示 W 的第 i 行。

所以,wi∈Rn, 第 j 個源能夠通過計算 sj(i)=wj(i) x(i) 來恢復。
1、ICA 的模糊性
W=A-1 能恢復到什么程度?如果沒有源和混合矩陣的先驗知識,不難看出,只給定 x,A 有一些固有的模糊性是不可能被恢復的。
設 P 為一個 n×n 的排列矩陣,這意味着 P 的每一行和每一列都只有一個 1,下面是一些排列矩陣的例子:

如果 z 是一個向量,那么 Pz 就是 z 的坐標重排版本的另一個向量。只給定 x(i),就沒辦法分辨 W 和 PW。原始信號的排列也是模糊不清的,幸運的是,這對大部分應用都不重要。
還有,無法恢復 wi 的准確比例,例如,如果 A 換成 2A,每個 s(i) 都換成 (0.5)s(i),那么我們觀察到的依舊是 x(i)=2A·(0.5)s(i)。同樣,如果 A 的一個列向量乘以因子 α,相應的源乘以因子 1/α,依然沒有辦法在只給定 x(i) 的情況下決定發生了什么。所以,我們無法恢復源的准確比例。不過,對於很多應用來說,這種模糊性都無關緊要,包括雞尾酒會問題。
這就是 ICA 中模糊性唯一的源了嗎?當 si 是非高斯,就是這樣的。
那么高斯數據的困難是什么呢,看一個例子,n=2,s~N(0,I),其中 I 是 2×2 的單位矩陣。標准正態分布 N(0,I) 的密度的輪廓是以原點為中心的圓,密度時旋轉對稱的。
現在,假定我們觀察到 x=As,其中 A 是混合矩陣,x 的分布也是高斯,均值為 0,協方差 E[xxT]=E[AssTAT]=AAT。設 R 為一個任意的正交矩陣,所以 RRT=RTR=I,使 A'=AR,如果數據是通過 A' 而不是 A 來混合的,那么可觀察到 x'=A's。x 的分布也是高斯的,均值為 0,協方差為 E[x'(x')T]=E[A'ssT(A')T]=E[ARssT(AR)T]=ARRTAT=AAT。所以,不管混合矩陣是 A 還是 A',都能觀察到數據符合 N(0,AAT) 分布。所以,就無法分辨源是通過 A 還是 A' 混合的,所以混合矩陣的旋轉組件無法從數據中找出來,我們不能恢復原始源。
上面的討論是基於多元標准正態分布是旋轉對稱的,ICA 在高斯數據上表現不行,但只要數據不是高斯的,給定足夠的數據,我們就能恢復出 n 個獨立的源。
2、密度和線性轉換
在推導 ICA 算法之前,我們先來討論下密度的線性轉換的影響。
假定隨機變量 s 符合密度函數 ps(s) ,簡單起見,假設 s∈R 是一個實值,現在,隨機變量 x 為 x=As,其中 s∈R,A∈R。那么 x 的密度 px 是什么?
設 W=A-1,為計算特定值 x 的概率,容易想到 s=Wx,然后估計該點的 ps,得出 px(x)=ps(Wx),當然這是不對的!例如,設 s~Uniform[0,1],所以 s 的密度為 ps(s)=1{0≤s≤1},現在讓 A=2,那么 x=2s,很明顯,x 是均勻分布在區間 [0,2],所以,它的密度為 px(x)=(0.5){0≤x≤2},而不是 ps(Wx),其中 W=0.5=A-1,正確的公式是 px(x)=ps(Wx)|W|。
一般地說,如果 s 是一個向量值,分布密度為 ps,x=As,其中 A 為可逆矩陣,那么 x 的密度為:
px(x)=ps(Wx)·|W|
其中 W=A-1。
3、ICA 算法
現在來推導 ICA 算法,ICA 算法歸功於 Bell 和 Sejnowski,這里使用最大似然估計來解釋算法,原始論文中的解釋是用一種稱為 infomax principal 的復雜思想,已經不適用於當前對 ICA 的理解。
假設每個源 si 的概率密度為 ps,源 s 的聯合分布為:

把聯合分布建模為邊緣分布的乘積,這里假設源是相互獨立的。使用之前的公式,x=As=W-1s 的概率密度為:

剩下的就是給獨立的源 ps 指定一個密度。
給定一個實值隨機變量 z,它的累積分布函數(cdf)F 定義為,F(z0)=P(z≤z0)=∫pz(z)dz,z 的密度就是對 F 求導:pz(z)=F'(z)。
所以,要指定 si 的密度,先指定一個累積分布函數 cdf。一個 cdf 是從 0 到 1 的單調遞增函數,根據之前的討論,不能選擇高斯累積分布函數,因為 ICA 在高斯數據上無效。要選擇一個合理的能從 0 到 1 緩慢遞增的函數,就選擇 sigmoid 函數:g(s)=1/(1+e-s),所以 ps(s)=g'(s)。
矩陣 W 是模型的參數,給定訓練集 {x(i);i=1,...,m},log 似然為:

要以 W 為參數最大化該式。求導並使用事實 ▽w|W|=|W|(W-1)T,很容易就導出隨機梯度下降學習規則。對於一個訓練例子 x(i),更新規則為:

其中 α 是學習率。算法收斂后,就能夠通過計算 s(i)=Wx(i) 來恢復原始信號。
寫數據的似然時,x(i) 之間是相互獨立的,所以訓練集的似然為 ∏i p(x(i);W),這個假設對於講話數據和其它 x(i) 依賴的時間序列是明顯不對的,但可以看到,如果有足夠的數據,即使訓練集是相關的,也不會影響算法的性能。但是,對於連續訓練例子是相關的問題,執行隨機梯度下降時,有時碰到一些隨機排列的訓練集也會加速收斂。
參考資料:
[1] http://cs229.stanford.edu/notes/cs229-notes11.pdf
[2] http://blog.csdn.net/stdcoutzyx/article/details/38037659
