一、上節提到的PCA是一種數據降維的方法,可是隻對符合高斯分佈的樣本點比較有效,那麼對於其餘分佈的樣本,有沒有主元分解的方法呢?html
二、經典的雞尾酒宴會問題(cocktail party problem)。假設在party中有n我的,他們能夠同時說話,咱們也在房間中一些角落裏共放置了n個聲音接收器(Microphone)用來記錄聲音。宴會事後,咱們從n個麥克風中獲得了一組數據,i表示採樣的時間順序,也就是說共獲得了m組採樣,每一組採樣都是n維的。咱們的目標是單單從這m組採樣數據中分辨出每一個人說話的信號。node
將第二個問題細化一下,有n個信號源,,每一維都是一我的的聲音信號,每一個人發出的聲音信號獨立。A是一個未知的混合矩陣(mixing matrix),用來組合疊加信號s,那麼web
x的意義在上文解釋過,這裏的x不是一個向量,是一個矩陣。其中每一個列向量是,算法
表示成圖就是函數
這張圖來自post
的每一個份量都由的份量線性表示。A和s都是未知的,x是已知的,咱們要想辦法根據x來推出s。這個過程也稱做爲盲信號分離。url
將W表示成rest
因爲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的分佈狀況是同樣的,那麼就沒法肯定混合矩陣,也就沒法肯定原信號。
在討論ICA具體算法以前,咱們先來回顧一下機率和線性代數裏的知識。
假設咱們的隨機變量s有機率密度函數(連續值是機率密度函數,離散值是機率)。爲了簡單,咱們再假設s是實數,還有一個隨機變量x=As,A和x都是實數。令是x的機率密度,那麼怎麼求?
令,首先將式子變換成,而後獲得,求解完畢。惋惜這種方法是錯誤的。好比s符合均勻分佈的話(),那麼s的機率密度是,如今令A=2,即x=2s,也就是說x在[0,2]上均勻分佈,可知。然而,前面的推導會獲得。正確的公式應該是
推導方法
更通常地,若是s是向量,A可逆的方陣,那麼上式子仍然成立。
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變化後的結果。
s=2時的原始信號
觀察到的x信號
使用ICA還原後的s信號
對行列式求導,設矩陣A是n×n的,咱們知道行列式與代數餘子式有關,