[機器學習] UFLDL筆記 - ICA(Independent Component Analysis)(Representation)

引言

 機器學習欄目記錄我在學習Machine Learning過程的一些心得筆記,涵蓋線性迴歸、邏輯迴歸、Softmax迴歸、神經網絡和SVM等等,主要學習資料來自Standford Ag老師的教程,同時也查閱並參考了大量網上的相關資料(在後面列出)。

 本文主要記錄我在學習ICA(獨立成分分析)過程中的心得筆記,對於ICA模型的理解和疑問,也糾正網絡上一些Tutorial、資料和博文中的錯誤,歡迎大家一起討論。
 全文共分爲兩個部分:
 ICA: Representation:ICA的模型描述;  
 ICA: Code:ICA的代碼實現

前言 

 本文主要介紹ICA的基礎知識,源自於我在學習ICA過程中的筆記資料,包括了我個人對ICA模型的理解以及網絡資料,引用部分我都會標註出來文章小節安排如下:
 1)ICA的背景
 2)ICA的概述
 3)目標函數
 4)優化參數
 5)優化參數 - 實踐
 7)參考資料
 8)結語


ICA的背景 

 獨立成分分析(Independent Component Analysis, ICA)是近年來出現的一種強有力的數據分析工具(Hyvarinen A, Karhunen J, Oja E, 2001; Roberts S J, Everson R, 2001)。1994年由Comon給出了ICA的一個較爲嚴格的數學定義,其思想最早是由Heranlt和Jutten於1986年提出來的。
 ICA從出現到現在雖然時間不長,然而無論從理論上還是應用上,它正受到越來越多的關注,成爲國內外研究的一個熱點。特別是從應用角度看,它的應用領域與應用前景都是非常廣闊的,目前主要應用於盲源分離、圖像處理、語言識別、通信、生物醫學信號處理、腦功能成像研究、故障診斷、特徵提取、金融時間序列分析和數據挖掘等。
 ICA是一種用來從多變量(多維)統計數據裏找到隱含的因素或成分的方法,被認爲是主成分分析(Principal Component Analysis, PCA)和因子分析(Factor Analysis)的一種擴展。對於盲源分離問題,ICA是指在只知道混合信號,而不知道源信號、噪聲以及混合機制的情況下,分離或近似地分離出源信號的一種分析過程。
引自:獨立成分分析(ICA)

ICA的概述 

 稀疏編碼算法可以爲樣本數據學習到一個超完備基(over-complete basis),也就是基底(basis)中基向量(basis vector)的個數大於數據的維、數,那麼這些基向量之間一定是線性相關的。超完備基的好處是能更有效地找出隱含在輸入數據內部的結構與模式,問題是對於超完備基來說,係數 ai 不再由輸入向量 x 唯一確定。
 ICA(Independent Component Analysis)可以爲樣本數據學習得到一組線性獨立(linearly independent)的基向量,也就是基底中基向量的個數小於等於數據的維數,同時這還是一個標準正交基(orthonormal basis)
 與稀疏編碼類似,給定數據 x,ICA希望學習得到一組基向量 —— 以列向量形式構成的矩陣 W,滿足:
 1)特徵是稀疏的(sparse);
 2)基底是正交的(orthonormal)。
 與稀疏編碼不同的是,在稀疏編碼中,矩陣 A 用於將特徵 s 映射到原始數據,而在ICA中,矩陣 W 工作的方向相反,是將原始數據 x 映射到特徵。
 補充:標準正交基
 在線性代數中,一個內積空間的正交基(orthogonal basis)是元素兩兩正交的基。稱基中的元素爲基向量。假若,一個正交基的基向量的模長都是單位長度1,則稱這正交基爲標準正交基(Orthonormal basis)。
 具體來說,
 如果一組基向量 (Φ1, Φ2, …, Φn) 滿足 Φi · Φj = 0 ( i≠j ),Φi · Φj = 1 ( i=j ),那麼稱爲標準正交基。
 

目標函數(Objective function) 

 ICA模型的目標函數如下:
 
 ICA模型的目標函數

 直觀地看,這是樣本數據 x 經過參數矩陣 W 線性變換後的結果的L1範數,實際上也就是描述樣本數據的特徵。將ICA的目標函數與Sparse coding的目標函數對比:
 
 Sparse coding的目標函數
 
 可以發現,
 ICA目標函數等價於在稀疏編碼中特徵 s 的稀疏懲罰項(sparsity penalty),這其實就是稀疏性約束,保證了ICA得到的特徵是稀疏的。加入標準正交性約束(orthonormality constraint)後,獨立成分分析相當於求解如下優化問題:
 
 標準正交ICA的目標函數

 這便是標準正交ICA的目標函數。與深度學習中的通常情況一樣,這個問題沒有簡單的解析解(simple analytic solution),因此需要使用梯度下降來求解,而由於標準正交性約束(orthonormality constraint),又需要每次梯度下降迭代之後,將新的基映射回正交基空間中(以此保證正交性約束)。
 
 通過觀察可知,約束 WWT = I 隱含着另外兩個約束:
 第一,因爲要學習到一組標準正交基,所以基向量的個數必須小於輸入數據的維度;
 第二,數據必須經過無正則 ZCA白化(也即,ε 設爲0)。

疑問:???
 這裏 WWT = I 隱含的第二點約束“數據必須經過無正則 ZCA白化”還沒有理解。

補充:白化
 白化是一種重要的預處理過程,其目的就是降低輸入數據的冗餘性,使得經過白化處理的輸入數據具有如下性質:(i)特徵之間相關性較低;(ii)所有特徵具有相同的方差。
 白化處理分PCA白化和ZCA白化,PCA白化保證數據各維度的方差爲1,而ZCA白化保證數據各維度的方差相同。PCA白化可以用於降維也可以去相關性,而ZCA白化主要用於去相關性,且儘量使白化後的數據接近原始輸入數據。
 

優化參數(Optimizing) 

 針對ICA的目標函數和約束條件,可以使用梯度下降法,並在梯度下降的每一步中增加投影(projection )步驟,以滿足標準正交約束。過程如下:
 
 ICA梯度下降法
 
 在實際中,
 學習速率 α 是可變的,使用一個線搜索算法(line-search algorithm)來加速梯度下降;
 投影步驟通過設置 W<—(WWT)-1/2W 來完成,這實際上可以看成就是ZCA白化。
 
疑問:??? 
 爲何參數矩陣的正交化可以看作是ZCA白化,還沒有理解。

補充:線性搜索算法
 例如有數組data,含1000個元素,要從裏面找 x。線性搜索算法,就是從頭找到尾,依次判斷 data[0] 是否等於 x,如果不是則判斷 data[1],data[2],..,依次類推,一直找到最後一個data[999]。線性搜索算法速度最慢,但是適用性最廣。
 

優化參數(Optimizing) - 實踐 

 ICA的具體優化過程在UFLDL Tutorial中並沒有進行詳細的講解,造成了很多人的誤解,並且沒有辦法實現課後練習(主要是代價函數及梯度求解錯誤導致線性搜索陷入死循環)。這裏給出正確的分析和求解過程。
 首先回顧標準正交ICA的目標函數:
 
 這裏寫圖片描述

 通過分析ICA模型的目標函數可以發現該函數是一個L1範數,在 0 點處不可微,也就影響了梯度方法的應用。儘管可以通過其他非梯度下降方法避開這一問題,但是這裏通過使用近似值“平滑” L1 範數的方法解決此難題。
 即使用 ( x2+ε )1/2 代替 |x|,對 L1 範數進行平滑,其中 ε 是“平滑參數”(”smoothing parameter”)。
 因此,
 ICA模型重寫爲:
 ICA模型
  其中,
  ICA模型

 爲了表述便利,並考慮均值化問題,最終ICA的目標函數及對W的梯度如下,
 標準正交ICA的目標函數:
 標準正交ICA的目標函數

 標準正交ICA的目標函數對W的梯度:
 標準正交ICA的目標函數對W的梯度


關於正交化步驟
 注意一點,正交化通過 W<—(WWT)-1/2W 來完成,其實現爲:
 正交化
 而不是
 正交化

 因此,ICA的梯度下降算法如下:
 1. 隨機初始化 W;
 2. 重複以下步驟直至收斂:
  2.1 計算梯度 wF(W),並更新參數:
  梯度下降
  2.2 正交化:
  正交化
 其中省去了線性搜索步驟,具體可參考代碼實現。
 
 
備註:
 UFLDL Tutorial中並沒有詳細詳解ICA的優化過程,導致很多同學在學習過程中遇到問題併產生錯誤理解。這裏給出我在網上看到的資料中存在的理解錯誤和一些不容易理解的地方,供參考。
 1)UFLDL - Deriving gradients using the backpropagation idea
 地址:
 http://ufldl.stanford.edu/wiki/index.php/Deriving_gradients_using_the_backpropagation_idea
 文中示例3:ICA reconstruction cost,所提到的 reconstruction cost term 如下:
 
 reconstruction cost term
 
 這並不是ICA的代價函數,而是RICA(Reconstruction ICA)的一個soft reconstruction penalty,因此示例3其實是在對這個重建代價項求導。

 1)2)Deep learning:三十三(ICA模型) 和 Deep learning:三十九(ICA模型練習)
 地址(三十三(ICA模型) ):
 http://www.cnblogs.com/tornadomeet/archive/2013/04/25/3041963.html
 地址(三十九(ICA模型練習)):
 http://www.cnblogs.com/tornadomeet/archive/2013/05/07/3065953.html
 tornadomeet同學在ICA這兩篇博文中對ICA的目標函數理解有誤,我猜測也是和UFLDL中不清楚的講解有關,這裏指出一下,即ICA的目標函數是:
 
 ICA的目標函數
 
 而
 
 soft reconstruction penalty

 是RICA的soft reconstruction penalty,對應的RICA的目標函數是:
 
 RICA的目標函數

 具體可以參考UFLDL Tutorial新版中對RICA的講解:
 http://ufldl.stanford.edu/tutorial/unsupervised/RICA/
 簡單來說,
 ICA模型的正交性限制帶來了一些缺點,換句話說,特徵矩陣W的特徵數量(即基向量數量)大於原始數據維度會產生優化方面的困難,並導致訓練時間過長。RICA是在ICA基礎上的擴展,通過將正交性約束改爲一個soft reconstruction penalty,克服了ICA模型的缺陷。
 另外,我在學習UFLDL過程中經常會查閱到tornadomeet同學的博文,這裏表示感激。
 
 

討論(Discussion) 

1)ICA與PCA
 1)
 可以感性上對比下ICA和PCA的區別,
 一方面,PCA是將原始數據降維並提取出不相關的屬性,而ICA是將原始數據降維並提取出相互獨立的屬性。
 另一方面,PCA目的是找到這樣一組分量表示,使得重構誤差最小,即最能代表原事物的特徵。ICA的目的是找到這樣一組分量表示,使得每個分量最大化獨立,能夠發現一些隱藏因素。由此可見,ICA的條件比PCA更強些。
 參考:一些知識點的初步理解_9(獨立成分分析-ICA,ing…)
 2)
 ICA與PCA的區別在於:
 ICA要求找到最大獨立的方向,各個成分是獨立的;PCA要求找到最大方差的方向,各個成分是正交的。
 參考:獨立成分分析(ICA)
 3)
 總的來說,ICA認爲觀測信號是若干個統計獨立的分量的線性組合,ICA要做的是一個解混過程。而PCA是一個信息提取的過程,將原始數據降維,現已成爲ICA將數據標準化的預處理步驟。
 參考:獨立成分分析 ( ICA ) 與主成分分析 ( PCA ) 的區別在哪裏?
 

參考資料 

 UFLDL Tutorial (new version)
 http://ufldl.stanford.edu/tutorial/
 UFLDL Tutorial (old version)
 http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
 Deep learning:三十三(ICA模型)
 http://www.cnblogs.com/tornadomeet/archive/2013/04/25/3041963.html
 一些知識點的初步理解_9(獨立成分分析-ICA,ing…)
 http://www.cnblogs.com/tornadomeet/archive/2012/12/30/2839841.html
 獨立成分分析(Independent Component Analysis)
 http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html
 獨立成分分析(ICA)
 http://blog.sciencenet.cn/blog-479412-391808.html
 機器學習中的範數規則化之(一)L0、L1與L2範數
 http://blog.csdn.net/zouxy09/article/details/24971995
 

結語 

 下一篇文章會撰寫ICA模型的訓練過程、代碼以及實驗結果(對應UFLDL的課後練習),謝謝!

 本文的文字、公式和圖形都是筆者根據所學所看的資料經過思考後認真整理和撰寫編制的,如有朋友轉載,希望可以註明出處: 
 [機器學習] UFLDL筆記 - ICA(Independent Component Analysis)(Representation)
 http://blog.csdn.net/walilk/article/details/50468140

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章