【機器學習】【ICA-2】ICA獨立成分分析的原理 + ICA前的預處理(中心化+漂白)

前情提示:ICA算法成立的前提是:假設每個人發出的聲音信號各自獨立。

1.雞尾酒宴會問題

n個人在一個房間開party,房間的不同配置擺放了n個聲音接收器,每個接收器在每個時刻同時採集到n個人聲音的重疊聲音。每個接收器和每個人的距離是不一樣的,所以每個接收器接收到的聲音的重疊情況也不同。party結束後,我們得到m個聲音樣例,每個樣例是在具體時刻t,從n個接收器接採集的一組聲音數據(一個接收器得到一個數據,所以有n個數據),如何從這m個樣本集分離出n個說話者各自的聲音呢?

2.問題數字化

首先把m個聲音樣例就是一個樣本集X,shape=(m, n),則行表示m個樣例,n表示每個樣例有n個數據,n個數據是由n個接收器在當前時刻接收到的信號數據。

2.1樣本集數字化

X=

其中i表示在時刻i的樣例,1~n表示第1~n個接收器採集的數據,一個樣例就是在時刻i從n個接收器採集到的信號數據組成的。

2.2每個說話者的獨立聲音數字化

假設我們最後分離出來的n個說話者的聲音組成的樣本集是s,s中每個元素都是每個人的獨立聲音,可以如下表示s:


1~n表示第幾個說話者的聲音數據,每一維都是一個人的聲音信號,每個人發出的聲音信號獨立

2.3目標問題的公式數字化

則一定存在一個矩陣A,使得X=As成立,數字化形式如下所示:


可知shape(X)=(n,m),   shape(A)=(n,n),  shape(s)=(n,m)

對上面公式解釋一下:

x是一個矩陣,由m個列向量組成,每個列向量是一個時刻採集的樣例

                                                                   

可知樣本集X:每個時刻t的樣例有n個聲音數據,每個數據是此時刻n個說話者的聲音數據的線性組合。這句話理解了,就可以容易理解X=As公式了。其中A是一個未知的混合矩陣(Mixing Matrix),就是用來組合疊加信號s的。混合矩陣A就是提供"線性組合"功能的,如果知道了A就輕鬆求出了s,因爲X是party已採集的樣本集,是已知的。

現在的任務就是根據X求出A和s,沒錯,這聽起來太扯了,確實很扯,哈哈,但是ICA可以搞定這麼扯的事情。

這個比較扯的事情,還有個學名,叫盲信號分離:

知道n個說話者的混合聲音的樣本集X,求出混合矩陣A和每個說話者的獨立聲音數據s的過程,稱爲盲信號分離。

2.4每個時刻的樣例=n個說話者的獨立聲音線性組合

這個就是對的示例具體化,讓其更容易理解,舉例如下:


看過上面手稿示例,應該已經理解每個時刻的每個聲音接收器接收到的聲音都是此時刻n個說話者的獨立聲音的線性組合,而混合矩陣A決定了這個線性組合。

2.5決定線性組合的混合矩陣W的數字化


第一要務:此時存在公式s=WX,如果我們知道了W就可以求出s了,我們現在的任務就是想法設法求出W

3.ICA計算過程的原理推理

假設我們的隨機變量ss有概率密度函數ps(s)ps(s)(連續值是概率密度函數,離散值是概率)。爲了簡單,我們再假設ss是實數,還有一個隨機變量x=Asx=AsAAxx都是實數。令px(x)px(x)是x的概率密度,那麼怎麼求px(x)px(x)

計算過程的原理推理用到的數學點都在前面文章詳細介紹過了,具體請看:【機器學習】【ICA-1】概率統計/代數知識詳解:高斯分佈、概率密度函數、累積分佈函數、聯合分佈函數、複合函數的概率密度函數、行列式求導等

這裏面就直接給出推理結論,不再詳細介紹相關函數的推導過程。

3.1 s的累積分佈函數CDF(s)

累積分佈函數一般用大寫的CDF來標記。我們將s的累積分佈函數記作g(s)。

根據累積分佈函數的性質,可以知道g(s)一定滿足如下兩個條件:

(1)g(s)單調遞增
(2)g(s)∈[0,1]

3.2 s的概率密度函數pdf(s)

概率密度函數,一般以小寫的pdf標記。我們將s的概率密度函數記作

現在有公式X=As,可以X是s的複合函數,則X的概率密度函數爲:


注:其中的Fx(x)是X的累積分佈函數,用到了一維隨機變量的概率密度函數等於累積分佈函數的導數

3.3 s的聯合分佈函數

s是多維隨機變量,假設每個人發出的聲音信號是各自獨立的,則s的聯合分佈函數p(s)公式爲:


3.4 X的聯合分佈函數

因爲已經知道了X的概率密度函數,則X的聯合分佈函數爲:


3.5 給s的累積分佈函數g(x)選取一個合理模型函數

已知公式s=WX,但是s和W都未知,我們需要知道s的概率密度函數,因爲概率密度函數pdf是由累計分佈函數CDF求導得到,如果知道了CDF,然後對其求導就可以知道了pdf。因爲s和W都未知,也是沒有先驗知識。所以我們找一個滿足CDF性質的函數作爲s的pdf。

發現sigmoid函數非常符合累積分佈函數CDF的條件。(1)定義域從-∞到+∞,且在定義域內單調遞增(2)值域∈[0,1]

好,我們假設s的累積分佈函數g(s)爲sigmoid:

對g(s)求導得到s的概率密度函數:


知道了s的概率密度函數後,下面開始求W。

3.6. 樣本對數似然估計

對於給定的訓練樣本集X=,其對數似然估計:



行列式|W|求導結果爲:


求導結果爲:



最後求得W的梯度上升的迭代計算公式爲,其中α是梯度上升速率,即學習步長,可以人爲指定:



然後利用上面這個W迭代計算公式進行迭代計算,直到前後計算的W的誤差小於你自己指定的一個誤差閾值,就可以停止迭代計算了,求出的W就是目標W,或者指定一個最大迭代次數。

3.7已知W求s

很簡單,s=WX,帶入W,經過np.dot(W, X)矩陣乘積計算就得到s,就是party上n個說話者各自的獨立聲音信號!

到此已經將ICA的計算原理推理過程全部寫完了,友情提示別被累積分佈函數CDF,概率密度函數pdf,聯合分佈函數/分佈函數給迷惑了,如果迷惑了百度一下,就ok了,瞭解了每個定義的含義和意義就不容易混淆了。

4.爲什麼說ICA不適用於信號服從高斯分佈的情況

此部分from:https://blog.csdn.net/xuyanan3/article/details/50475450

還有一種ICA不適用的情況,那就是信號不能是高斯分佈的。假設只有兩個人發出的聲音信號符合多值正態分佈,clip_image050,I是2*2的單位矩陣,s的概率密度函數就不用說了吧,以均值0爲中心,投影面是橢圓的山峯狀(參見多值高斯分佈)。因爲clip_image052,因此,x也是高斯分佈的,均值爲0,協方差爲clip_image054

     令R是正交陣clip_image056clip_image058。如果將A替換成A’。那麼clip_image060。s分佈沒變,因此x’仍然是均值爲0,協方差clip_image062

     因此,不管混合矩陣是A還是A’,x的分佈情況是一樣的,那麼就無法確定混合矩陣,也就無法確定原信號。

5.ICA算法的預處理:矩陣中心化+漂白

此部分主要參考文章:https://blog.csdn.net/xuyanan3/article/details/50475450

5.1矩陣中心化

     也就是求x均值,然後讓所有x減去均值,這一步與PCA一致。

    這個可以參看以前寫的文章:【機器學習】【線性代數】均值,無偏估計,總體/樣本方差,樣本標準差,矩陣中心化/標準化、協方差,正/不/負相關等,協方差矩陣

5.2漂白

     漂白目的是將x乘以一個矩陣變成clip_image045,使得clip_image045[1]的協方差矩陣是clip_image047。解釋一下吧,原始的向量是x。轉換後的是clip_image045[2]

     clip_image045[3]的協方差矩陣是clip_image047[1],即

     clip_image048

     我們只需用下面的變換,就可以從x得到想要的clip_image045[4]

     clip_image049

     其中使用特徵值分解來得到E(特徵向量矩陣)和D(特徵值對角矩陣),計算公式爲

     clip_image050

5.3漂白的圖形直觀描述

假設信號源s1和s2是獨立的,比如下圖橫軸是s1,縱軸是s2,根據s1得不到s2。

     clip_image051

我們只知道他們合成後的信號x,如下

     image

此時x1和x2不是獨立的(比如看最上面的尖角,知道了x1就知道了x2)。那麼直接代入我們之前的極大似然概率估計會有問題,因爲我們假定x是獨立的。因此,漂白這一步爲了讓x獨立。漂白結果如下:

     clip_image053

可以看到數據變成了方陣,在clip_image045[5]的維度上已經達到了獨立。然而這時x分佈很好的情況下能夠這樣轉換,當有噪音時怎麼辦呢?可以先使用前面提到的PCA方法來對數據進行降維,濾去噪聲信號,得到k維的正交向量,然後再使用ICA。

參考文獻

[1]https://www.cnblogs.com/NaughtyBaby/p/5433672.html

[2]https://blog.csdn.net/sinat_37965706/article/details/71330979

[3]https://blog.csdn.net/xuyanan3/article/details/50475450

(end)

發佈了248 篇原創文章 · 獲贊 189 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章