1. 程式人生 > >Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波

Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波

structure 分布 的確 tlab bolt 期望 有一個 尋找 mean

Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波

自己平時看了一些論文,但老感覺看完過後就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有看過一樣。所以想習慣地把一些感覺有用的論文中的知識點總結整理一下,一方面在整理過程中,自己的理解也會更深,另一方面也方便未來自己的勘察。更好的還可以放到博客上面與大家交流。因為基礎有限,所以對論文的一些理解可能不太正確,還望大家不吝指正交流,謝謝。

本文的論文來自:

Sparse filtering , J. Ngiam, P. Koh, Z. Chen, S. Bhaskar, A.Y. Ng. NIPS2011。在其論文的支撐材料中有相應的Matlab代碼,代碼很簡介。不過我還沒讀。

下面是自己對其中的一些知識點的理解:

《Sparse Filtering》

本文還是聚焦在非監督學習Unsupervised feature learning算法。因為一般的非監督算法需要調整很多額外的參數hyperparameter。本文提出一個簡單的算法:sparse filtering。它只有一個hyperparameter(需要學習的特征數目)需要調整。但它很有效。與其他的特征學習方法不同,sparse filtering並沒有明確的構建輸入數據的分布的模型。它只優化一個簡單的代價函數(L2範數稀疏約束的特征),優化過程可以通過幾行簡單的Matlab代碼就可以實現。而且,sparse filtering可以輕松有效的處理高維的輸入,並能拓展為多層堆疊。

sparse filtering方法的核心思想就是避免對數據分布的顯式建模,而是優化特征分布的稀疏性從而得到好的特征表達。

一、非監督特征學習

一般來說,大部分的特征學習方法都是試圖去建模給定訓練數據的真實分布。換句話說,特征學習就是學習一個模型,這個模型描述的就是數據真實分布的一種近似。這些方法包括denoising autoencoders,restricted Boltzmann machines (RBMs), independent component analysis (ICA) 和sparse coding等等。

這些方法效果都不錯,但煩人的一點就是,他們都需要調節很多參數。比如說學習速率learning rates、動量momentum(好像rbm中需要用到)、稀疏度懲罰系數sparsity penalties和權值衰減系數weight decay等。而這些參數最終的確定需要通過交叉驗證獲得,本身這樣的結構訓練起來所用時間就長,這麽多參數要用交叉驗證來獲取時間就更多了。我們花了大力氣去調節得到一組好的參數,但是換一個任務,我們又得調節換另一組好的參數,這樣就會花了俺們太多的時間了。雖然ICA只需要調節一個參數,但它對於高維輸入或者很大的特征集來說,拓展能力較弱。

技術分享

本文中,我們的目標是研究一種簡單並且有效的特征學習算法,它只需要最少的參數調節。雖然學習數據分布的模型是可取的,而且效果也不錯,但是它往往會使學習的算法復雜化,例如:RBMs需要近似對數劃分log-partition函數的梯度,這樣才可能優化數據的似然函數。Sparse coding需要在每次的叠代過程中尋找活躍的基的系數,這是比較耗時的。而且,稀疏因子也是一個需要調整的參數。本文方法主要是繞過對數據分布的估計,直接分析優化特征的分布。那怎樣的特征的分布才是優的呢?到這裏,我們需要先關註特征的一些主要屬性:population sparsity,lifetime sparsity和 high dispersal。怎樣的特征才是好的特征,才是對分類或者其他任務好的特征。我們的學習算法就應該學會去提取這種特征。

二、特征分布

上面討論的特征學習算法都可以認為是生成特定的特征分布Feature distributions。例如,sparse coding只用少許的非零系數(特征)來描述每個樣本。而一個面向特征分布的方法可以認為是直接優化特征分布的一些屬性,使其可以更好的描述樣本。

我們引入一個特征分布矩陣,矩陣的每一行是一個特征,每一列是一個樣本。每個元素技術分享表示第i個樣本的第j個特征的激活值。由上面的分析可以知道,這是一個由輸入到特征的映射函數(特征提取函數)來得到。

下面我們就來討論下什麽樣的特征分布才是好的:

1)每個樣本的特征應該是稀疏的(Population Sparsity)

每個樣本都只用很少的激活(非零)特征來描述。具體來說,對於特征矩陣的每一列(一個樣本)f(i),只有很少的非零元素。其他的都是0 。例如,一幅圖像可以由裏面包含的一些目標來描述,如果裏面存在很多可能的目標,那麽在某一時刻,也只可能出現一些。我們稱之為population sparsity(種群稀疏)。

2)樣本間的特征應該是稀疏的(Lifetime Sparsity)

好的特征應該是具有區分性的,這樣才可以區分樣本。例如需要區分人臉和人手,那麽很明顯,膚色不是區分性的特征,因為人臉和人手都有膚色。但如果看有沒有眼睛,那麽就很容易區分是人臉還是人手了,所以眼睛就是一個區分性的特征。所以要區分樣本,就要選擇樣本獨有的,而不是大家都有的特征。稍微學術點的表達就是,每個特征只允許在少量的樣本內被激活。也就是說,在特征矩陣中,每一行(一種特征)應該只有少量的非零元素。這個特征的屬性被稱為lifetime sparsity(存在稀疏)。

3)特征的分布應該是均勻的(High Dispersal)

對每一行(一種特征在不同樣本的時候的不同取值)的特征的分布,應該和其他行的特征的分布相似,或者說每種特征都應該具有相似的統計特性。具體來說,對矩陣的每一行,我們取該行所有元素(一種特征在不同樣本的時候的不同取值)的平方後的均值作為其統計特性的描述。每一行都存在一個均值,那麽每行的均值都應該是一樣的,這樣就可以認為所有的特征都具有相似的分布。這種屬性我們稱之為high dispersal(高分散性)。但對於一個好的特征描述來說,這個屬性並不是必要的。但它可以防止特征的退化,也就是可以防止提取到相同的特征(如果提取到相同的特征,那麽特征既冗余,又沒有增加信息量,所以一般都要求提取到的特征是正交的)。對於過完備的特征表達。high dispersal可以理解為只有很少的inactive不活躍的特征。例如,PCA編碼一般不會滿足high dispersal,因為大的特征值對應的特征向量(也就是特征code)大部分總是活躍active的。

很多特征學習方法其實有包含上面的這些約束的。例如sparse RBM會約束一個特征的激活值靠近一個目標的值(lifetime sparsity)。ICA會歸一化每個特征,還會優化特征的lifetime sparsity。Sparse autoencoder也會顯式的優化lifetime sparsity。

另外,基於聚類的算法,例如K-means,是population sparsity約束的一種極端形式,它的一個聚類中心只對應一個特征,對每個樣本來說,只有一個特征是激活的(只有一個值是1,其他全是0)。Triangle三角激活函數,本質上也會保證population sparsity。Sparse coding實際上也可以被視為存在population sparsity。

本文中,我們從特征分布的角度去推導得到一種簡單的特征學習算法。它僅僅需要優化high dispersal和population sparsity。因為在我們的實驗中,我們發現,實現這兩種特征的屬性對學習一個過完備的特征表達來說已經足夠了。在後面,我們會說明,這兩種屬性的結合實際上已經蘊含著保證特征的lifetime sparsity。

三、Sparse filtering

下面我們就說明下,sparse filtering是如何捕捉到上面說的那些特性的。我們先考慮下從每個樣本中計算線性特征。具體來說,我們用技術分享來表示第i個樣本(特征矩陣中第i列)的第j個特征值(特征矩陣中第j行)。因為是線性特征,所以技術分享。第一步,我們先簡單的對特征矩陣的行進行歸一化,然後再對列進行歸一化,然後再將矩陣中所有元素的絕對值求和。

具體來說,我們先歸一化每個特征為相等的激活值。具體做法是將每一個特征除以其在所有樣本的二範數:技術分享。然後我們再歸一化每一個樣本的特征。這樣,他們就會落在二範數的單位球體unit L2-ball上面了。具體做法是:技術分享。這時候,我們就可以對這些歸一化過的特征進行優化了。我們使用L1範數懲罰來約束稀疏性。對於一個有M個樣本的數據集, sparse filtering的目標函數表示為:

技術分享

3.1、Optimizing for population sparsity

其中技術分享這一項度量的就是第i個樣本的特征的population sparsity,也就是限制每個樣本只有很少的非零值。因為歸一化的特征技術分享被約束只能落在二範數的單位球體上面,所以當這些特征是稀疏的時候,也就是樣本接近特征坐標軸的時候,上面的目標函數才會最小化。反之,如果一個樣本的每個特征值都差不多,那麽就會導致一個很高的懲罰。可能有點難理解,我們看下圖:

技術分享

左圖:假設我們的特征維數是兩維(f1, f2),我們有兩個樣本,綠色和褐色的。每個樣本都會先投影到二範數的球體上面(二維的話就是單位圓),再進行稀疏性的優化。可以看到,當樣本落在坐標軸的時候,特征具有最大的稀疏性(例如,一個樣本落在f2軸上,那麽這個樣本的表示就是(0, 1),一個特征值為1,其他的為0,那麽很明顯它具有最大的稀疏性)。右圖:因為歸一化,特征之間會存在競爭。上面有一個只在f1特征上增加的樣本。可以看到,盡管它只在f1方向上增加(綠色三角型轉移到藍色三角型),經過列歸一化後(投影到單位圓上),可以看到第二個特征f2會減少(綠色圓圈轉移到藍色圓圈)。也就是說特征之間存在競爭,我變大,你就得變小。

對特征進行歸一化的一個屬性就是它會隱含的進行特征間的競爭。歸一化會使得如果只有一個特征分量f(i)增大,那麽其他所有的特征分量的值將會減小。相似的,如果只有一個特征分量f(i)減小,那麽其他所有的特征分量的值將會增大。因此,我們最小化技術分享,將會驅使歸一化的特征趨於稀疏和大部分接近於0 。也就是,一些特征會比較大,其他的特征值都很小(接近於0)。因此,這個目標函數會優化特征的population sparsity。

上面的公式與Treves-Rolls的population/life-time sparsity的度量非常相似:

技術分享

這裏F是特征的個數。這個度量常用來衡量大腦神經元激活的稀疏度。我們提出的公式可以看成是這個度量的平方根,再乘以一個尺度因子。

3.2、Optimizing for high dispersal

上面說到,特征的high dispersal屬性要求每個特征被恒等激活。在這裏,我們粗魯地強制每個特征的激活值平方後的均值相等。在上面sparse filtering的公式中,我們首先通過將每個特征除以它在所有樣本上面的二範數來歸一化每個特征,使他們具有相同的激活值:技術分享。實際上,它和約束每個特征具有相同的平方期望值有一樣的效果。技術分享,因此,它已經隱含的優化了high dispersal屬性。

3.3、Optimizing for lifetime sparsity

我們發現,對population sparsity和 high dispersal的優化就已經隱含的優化了特征的lifetime sparsity。這其中的緣由是什麽呢。首先,一個具有population sparsity的特征分布在特征矩陣裏會存在很多非激活的元素(為0的元素)。而且,因為滿足high dispersal,這些零元素會近似均勻的分布在所有的特征裏。因此,每一個特征必然會有一定數量的零元素,從而保證了lifetime sparsity。所以,對於population sparsity和 high dispersal的優化就已經足夠得到一個好的特征描述了。

四、Deep sparse filtering

因為sparse filtering的目標函數是不可知的,我們可以自由地選擇一個前向網絡來計算這些特征。一般來說,我們都使用比較復雜的非線性函數,例如:

技術分享

或者多層網絡來計算這些特征。這樣,sparse filtering也算是訓練深度網絡的一種自然的框架了。

有sparse filtering的深度網絡可以使用權威的逐層貪婪算法來訓練。我們可以先用sparse filtering來訓練得到一個單層的歸一化的特征,然後用它當成第二層的輸入去訓練第二層,其他層一樣。實驗中,我們發現,它能學習到很有意義的特征表達。

五、實驗與分析

在我們的實驗中,我們采用軟絕對值函數作為我們的激活函數:

技術分享

其中?=10^-8,然後用現有的L-BFGS算法來優化sparse filtering的目標函數直至收斂。

技術分享

其他的實驗結果看原文。

六、總結與討論

6.1、與divisive normalization的聯系

sparse filtering的population sparsity和divisive normalization有著緊密的聯系。divisive normalization是一種視覺處理過程,一個神經元的響應會除以其鄰域所有神經元的響應的和(或加權和)。divisive normalization在多級目標識別中是很有效的。然而,它被當成一個預處理階段引入,而不是屬於非監督學習(預訓練)的一部分。實際上,sparse filtering把divisive normalization結合到了特征學習過程中,通過讓特征間競爭,學習到滿足population sparse的特征表達。

6.2、與ICA 和sparse coding的聯系

sparse filtering的目標函數可以看出ICA目標函數的歸一化版本。在ICA中,目標函數是最小化線性濾波器組的響應,例如||Wx||1,但需要滿足濾波器間相互正交的約束。正交約束保證我們學習到的特征是不同的。在sparse filtering中,我們用一個歸一化的稀疏懲罰來替代這個約束,每個濾波器的響應都會除以所有濾波器響應的二範數||Wx||1/||Wx||2,在這裏,就給濾波器引入了競爭,而不需要添加正交化。

同樣,我們也可以將歸一化的思想運用到sparse coding框架。在sparse coding中,類似於L1/L2的稀疏懲罰已經被使用了。我們用一個歸一化的懲罰,例如||s||1/||s||2來替換一般的L1範數的懲罰,例如||s||1。歸一化懲罰具有尺度不變性,對於數據的變化可以更加魯棒。

Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波