最近新入手稀疏編碼,在這里記錄我對稀疏編碼的理解(根據學習進度不斷更新中)
一,稀疏編碼的概述
稀疏編碼的概念來自於神經生物學。生物學家提出,哺乳類動物在長期的進化中,生成了能夠快速,准確,低代價地表示自然圖像的視覺神經方面的能力。我們直觀地可以想象,我們的眼睛每看到的一副畫面都是上億像素的,而每一副圖像我們都只用很少的代價重建與存儲。我們把它叫做稀疏編碼,即Sparse Coding.
稀疏編碼的目的:在大量的數據集中,選取很小部分作為元素來重建新的數據。
稀疏編碼難點:其最優化目標函數的求解。
二,稀疏線性模型
X為一個n為特征向量,可以是一個小波信號,可以是一副圖片等。
D為標准化的基礎矩陣,由組成元素的基本原子構成,也稱為字典。在信號中可以是不同頻率的波形,在圖像中可以是構成圖像的基本邊,角。
X可以由D中和少量原子線性組合而成,及其表示系數為稀疏。如下:
三、數學模型
引出稀疏表示的兩個基本要求 1:盡可能與原特征相似
2 : 系數為稀疏。
有上圖中,我們要求p>m,根據線性代數的知識我們知道,稀疏系數有無窮多組的解。根據稀疏的條件,我們可以在所有的可行解中挑出非零元素最少的解,也就是滿足稀疏性。於是得到如下的數學模型:
如果再考慮噪聲的話,就得到如下的模型:
目標函數中為L0范數約束,是非確定性多項式(NP)難題,即是指可以在多項式時間內被非確定機(他可以猜,他總是能猜到最能滿足你需要的那種選擇,如果你讓他解決n皇后問題,他只要猜n次就能完成----每次都是那么幸運)解決的問題.
有人做了一個證明,在一定條件下,上述的最優化問題有唯一的解。
Terry tao又證明了,在滿足一定條件下,零范數問題與一范數問題是等價的。於是上述模型轉化為:
四、L0范數與L1范數
L0范數是指向量中非0的元素的個數。如果我們用L0范數來規則化一個參數矩陣W的話,就是希望W的大部分元素都是0。這太直觀了是不是?,換句話說,讓參數W是稀疏的。OK,看到了“稀疏”二字,大家應該意識到,原來用的漫山遍野的“稀疏”就是通過這玩意來實現的。但是看到的papers世界中,稀疏不是都通過L1范數來實現嗎?這個時候你又該懷疑了,腦海里是不是到處都是||W||1影子呀!幾乎是抬頭不見低頭見。沒錯,這就是這節的題目把L0和L1放在一起的原因,因為他們有着某種不尋常的關系。那我們再來看看L1范數是什么?它為什么可以實現稀疏?為什么大家都用L1范數去實現稀疏,而不是L0范數呢?
L1范數是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。現在我們來分析下這個價值一個億的問題:為什么L1范數會使權值稀疏?有人可能會這樣給你回答“它是L0范數的最優凸近似”。實際上,還存在一個更美的回答:任何的規則化算子,如果他在Wi=0的地方不可微,並且可以分解為一個“求和”的形式,那么這個規則化算子就可以實現稀疏。這說是這么說,W的L1范數是絕對值,|w|在w=0處是不可微,但這還是不夠直觀。這里因為我們需要和L2范數進行對比分析。所以關於L1范數 的直觀理解,請待會看看第二節。
那么還有一個問題:既然L0可以實現稀疏,為什么不用L0,而要用L1呢?本人查資料理解為兩點:
1.因為L0范數很難優化求解(NP難問題)
2.L1范數是L0范數的最優凸近似,而且它比L0范數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1范數。
小結:L1范數和L0范數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用。
好,到這里,我們大概知道了L1可以實現稀疏,但我們會想呀,為什么要稀疏?讓我們的參數稀疏有什么好處呢?這里扯兩點:
1)特征選擇(Feature Selection):
傳統的pattern recognition為:
進行特征提取后為:
原始的模式識別是直接對原始圖形進行特征提取,而所提取出來的特征和最終的輸出很多情況下其實是有冗余成分的,就是說我們只需要關鍵特征識別就可以,沒有必要用那么多特征,更多情況下,那些冗余信息會干擾我們最后的識別結果!
稀疏編碼算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數據。大家對稀疏規則化趨之若鶩的一個關鍵原因在於它能實現特征的自動選擇。一般來說,xi的大部分元素(也就是特征)都是和最終的輸出yi沒有關系或者不提供任何信息的,在最小化目標函數的時候考慮xi這些額外的特征,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的信息反而會被考慮,從而干擾了對正確yi的預測。稀疏規則化算子的引入就是為了完成特征自動選擇的光榮使命,它會學習地去掉這些沒有信息的特征,也就是把這些特征對應的權重置為0。
2)可解釋性(Interpretability):
另一個青睞於稀疏的理由是,模型更容易解釋。例如患某種病的概率是y,然后我們收集到的數據x是1000維的,也就是我們需要尋找這1000種因素到底是怎么影響患上這種病的概率的。假設我們這個是個回歸模型:y=w1*x1+w2*x2+…+w1000*x1000+b(當然了,為了讓y限定在[0,1]的范圍,一般還得加個Logistic函數)。
說簡單些,logistic函數其實就是這樣一個函數:
這個函數的曲線如下所示:
很像一個“S”型吧,所以又叫 sigmoid曲線(S型曲線)。詳細的資料可以參考 http://www.cnblogs.com/chaosimple/archive/2013/06/10/3130628.html
通過學習,如果最后學習到的w*就只有很少的非零元素,例如只有5個非零的wi,那么我們就有理由相信,這些對應的特征在患病分析上面提供的信息是巨大的,決策性的。也就是說,患不患這種病只和這5個因素有關,那醫生就好分析多了。但如果1000個wi都非0,醫生面對這1000種因素,累覺不愛。
本節至此結束,之后會錄取更新,同時我的新浪博客有學習記錄總結,希望可以和各方學者交流成長http://blog.sina.com.cn/u/2029100307