前情提示: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=As,AA和xx都是實數。令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不適用的情況,那就是信號不能是高斯分佈的。假設只有兩個人發出的聲音信號符合多值正態分佈,,I是2*2的單位矩陣,s的概率密度函數就不用說了吧,以均值0爲中心,投影面是橢圓的山峯狀(參見多值高斯分佈)。因爲,因此,x也是高斯分佈的,均值爲0,協方差爲。
令R是正交陣,。如果將A替換成A’。那麼。s分佈沒變,因此x’仍然是均值爲0,協方差。
因此,不管混合矩陣是A還是A’,x的分佈情況是一樣的,那麼就無法確定混合矩陣,也就無法確定原信號。
5.ICA算法的預處理:矩陣中心化+漂白
此部分主要參考文章:https://blog.csdn.net/xuyanan3/article/details/504754505.1矩陣中心化
也就是求x均值,然後讓所有x減去均值,這一步與PCA一致。
這個可以參看以前寫的文章:【機器學習】【線性代數】均值,無偏估計,總體/樣本方差,樣本標準差,矩陣中心化/標準化、協方差,正/不/負相關等,協方差矩陣
5.2漂白
漂白目的是將x乘以一個矩陣變成,使得的協方差矩陣是。解釋一下吧,原始的向量是x。轉換後的是。
其中使用特徵值分解來得到E(特徵向量矩陣)和D(特徵值對角矩陣),計算公式爲
5.3漂白的圖形直觀描述
假設信號源s1和s2是獨立的,比如下圖橫軸是s1,縱軸是s2,根據s1得不到s2。
我們只知道他們合成後的信號x,如下
此時x1和x2不是獨立的(比如看最上面的尖角,知道了x1就知道了x2)。那麼直接代入我們之前的極大似然概率估計會有問題,因爲我們假定x是獨立的。因此,漂白這一步爲了讓x獨立。漂白結果如下:
可以看到數據變成了方陣,在的維度上已經達到了獨立。然而這時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)