稀疏自動編碼(Sparse Autoencoder)

之前的博文中,我總結了神經網絡的大致結構,以及算法的求解過程,其中我們提高神經網絡主要分爲監督型和非監督型,在這篇博文我總結下一種比較實用的非監督神經網絡——稀疏自編碼(Sparse Autoencoder)。


1.簡介


上圖是稀疏自編碼的一般結構,最大的特點是輸入層結點數(不包括bias結點)和輸出層結點數相同,而隱藏層結點個數少於輸入層和輸出層結點的個數。該模型的目的是學習得到 的函數,然後得到原始數據的低維表示(也就是隱藏層結點)。模型能夠得到原始數據較好的低維表示的前提是輸入數據中存在一定的潛在結構,比如存在相關性,這樣稀疏自動編碼可以學習得到類似於主成分分析(PCA)的低維表示。如果輸入數據的每一個特性都是相互獨立的,最後學習得到的低維表示效果比較差。

在監督神經網絡中,訓練數據爲(x(i),y(i)),我們希望模型能夠準確的預測y,從而使得損失函數(具體實際需求建立不同的損失函數)的值最小,當然,爲了避免過擬合,我們引入了懲罰項。在非監督網絡中,訓練數據是x(i),沒有標註的樣本值(即y值),但是爲了構建損失函數,我們仍然需要y值,在稀疏自動編碼中y(i) = x(i)。在我看來,稀疏自動編碼就是一般神經網絡的特例,只是要求輸入值和輸出值近似,另外使得隱藏層變的稀疏。


2.何爲稀疏(What’s sparsity)

在上面我們提到,一般使得隱含層小於輸入結點的個數,但是我們也可以讓隱藏層的節點數大於輸入結點的個數,只需要對其加入一定的稀疏限制就可以達到同樣的效果。如何隱藏層的節點中大部分被抑制,小部分被激活,這就是稀疏。那什麼是抑制,什麼是激活能?如果的非線性函數是sigmoid函數,當神經元的輸出接近1時爲激活,接近0時爲稀疏;如果採用tanh函數,當神經元的輸出接近1時爲激活,接近-1時爲稀疏。


那添加什麼限制可以使的隱含層的輸出爲稀疏呢?稀疏自動編碼希望讓隱含層的平均激活度爲一個比較小的值。

隱含層的平均激活的數據表示爲:


其中, 表示在輸入數據爲x的情況下,隱藏神經元j的激活度。

 

爲了使得均激活度爲一個比較小的值,引入 ,稱爲稀疏性參數,一般是一個比較小的值,使得這樣就可以是隱含層結點的活躍度很小。


3.損失函數(loss function)

上面只是理論上的解釋,那如何轉化成數據表示,該模型引入了相對熵(KL divergence),使得隱含層結點的活躍度很小。KL的表達式爲:


我們假設 ,得到的相對熵值隨着變化的變化趨勢圖。


如上圖所示,相對熵在 時達到它的最小值0,而當靠近0或者1的時候,相對熵則變得非常大(其實是趨向於)。



根據這個性質,我們就可把相對熵加入到損失中,懲罰平均激活度離 比較遠的值,使得最後學習得到參數能夠讓平均激活度保持在這個水平。所以,以爲我們的損失函數只需要在無稀疏約束的損失函數上加上相對熵的懲罰項,無稀疏約束的損失函數表達式爲:


在隱含層加上稀疏約束後,損失函數爲:




4.損失函數的偏導數(partial derivative of loss function)

損失函數的偏導數計算同樣採用了back propagation方法,只是在求解隱含層的時候有所區別,無稀疏約束的BP算法可表示爲以下幾個步驟:

1、進行正反饋傳導計算,根據公式,得到 直到輸出層 的激活值。

2、對輸出層(第層),計算:


3、對於的各層,計算:


4、計算最終需要的偏導數值:

 

加入稀疏約束後,隱藏結點的誤差表達式由:

變爲:



5.參數求解

到目前爲止,我們已經知道了模型的損失函數和損失函數相對於所有參數的偏導數,爲了求得使損失函數最小的參數,我們很自然的想到的就是梯度下降,具體細節參照之前的博文


6.總結:


總的來說,稀疏自動編碼是在一般神經網絡中加上稀疏限制的特殊的三層神經網絡。該模型希望從原始數據中得到一種低維表示,可以和PCA做類比加深理解。從輸入層到隱含層,類似於PCA找到一個低維空間,把高維數據映射到低維數據;從隱含層到輸出層類似於PCA從投影后的低維數據又恢復到原始的高維數據。在實際應用中,稀疏自動編碼會作爲數據的預處理過程,棧式自編碼算法(Stacked Autoencoders)中就使用方法進行數據的預處理,降低數據的維度,提取出潛在的數據信息。


7.參考:

 UFLDL Tutorial 


發佈了24 篇原創文章 · 獲贊 29 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章