簡單解釋一下sparse autoencoder, sparse coding和restricted boltzmann machine的關係?

剛剛接觸Deep Learning,在網上看了一部分資料,對這三種技術的區別與聯繫有點迷糊,困於細節而無法縱覽全局,希望高手幫忙解惑一下。


最近也在看這一塊的內容,拋磚引玉一下,有錯誤還請大家指點。

我認為autoencoder和RBM是一類的,都屬於學習模型;而稀疏編碼更像是施加在這些基本模型上的一種優化手段。

先說說autoencoder和RBM的不同之處:

  1. autoencoder的神經元是確定型的,用的是sigmold函數,就像傳統的ff網路一樣。而RBM的神經元是隨機的。(最基本的RBM神經元只有0和1兩種狀態,但是擴展後可以在left[ 0,1 
ight] 這個區間上取任何值)
  2. 由於autoencoder的確定性,它可以用BP方法來訓練。但是RBM就只能用採樣的方法來得到一個服從RBM所表示分布的隨機樣本。(Gibbs採樣,CD採樣等等)

在深度學習裡面,可以把autoencoder和RBM都看作是一塊塊磚頭,我們可以用許多這樣的磚頭構造出深層次的網路。基本思路是前面先用這些「磚頭」搭出幾層網路,自動學習出數據的一些特徵後,後面再用一個分類器來分類,得到最後的結果。如果用autoencoder作磚頭,得到的就是stacked autoencoder;如果用RBM作磚頭,得到的就是deep belief network。

再說稀疏編碼,它是把大多數的神經元限制為0,只允許少量的神經元激活,來達到「稀疏」的效果。這主要是為了模擬人眼視覺細胞的特性。在演算法里,其實就是在用來優化的目標函數裡面加入一個表示稀疏的正則項,一般可以通過L1範數或者KL divergence來實現。正如題主所說,稀疏性可以加到autoencoder上,也可以加到RBM上。

-----------------------------------------------題外話------------------------------------

再扯幾句RBM,這個模型實在是太神奇了,感覺要補物理了。。

RBM是由BM簡化得到的。(BM允許所有神經元之間的相連,而RBM只允許visible node和hidden node之間相連)而BM又是根據一種叫做EBM(Energy based model)的基本框架產生的。EBM把模型里的所有參數和一個能量函數聯繫起來,通過使這個能量函數最小化的方式來使整個系統達到穩定狀態。


Sparse auto encoder 是訓練整個深層神經網路的一種預先訓練的方法。它是一個非監督學習的過程,通過神經元對feature本身作一次回歸,可以得到一個神經元的初始參數。這些參數對再下來的監督學習過程算是個初始化。這一步也可以用分層的監督學習來取代。

而RBM是指的一種可以輸出概率的神經網路,用於分類問題,而不是實數值的回歸。

具體的區別在於,似乎這兩個詞都指一種網路結構,但實際上SAE更多理解成一個方法。可以對一個RBM 網路的深度結點先用SAE訓練一下,再放到RBM里做FineTune。


這個問題是幾天前問的,現在資料讀著讀著也有了自己的理解,和樓上不太一樣呢……

一、有些文章上寫這三種方法都是用來構建deep network的基本方法,也就是說它們都是可以stack起來的,倒也不是說sparse coding 就是shallow的,它們都是磚塊吧……

二、似乎前兩個技術都是確定性的變換,而RBM是概率性的變換(所以我一直無法在情感上接受它T_T)。

三、sparse coding的編碼函數是隱式的(就是寫不出)而後兩種的編碼函數是顯式的(表現為一個權值矩陣和偏置向量),然後它們仨的解碼函數都是顯式的。

四、spase autoencoder編碼(去)和解碼(來)的權值矩陣是可以不一樣的,而RBM去和來的權值矩陣是一樣的。

五、其實RBM也可以加上稀疏限制,就變成sparse RBM了,論文上說效果會更好。

六、對於構建convolutional neural network而言,後兩種方法可以通過隨機取方便地訓練出幾十上百種濾波器(特徵檢測器),但是sparse coding因為訓練出來的是隱式的編碼函數所以感覺train完之後在test階段運算不方便,因為是要去「找」一個係數向量來讓那些bases的線性組合逼近原始圖像,而不是直接乘一個矩陣映射過去……

請 @Orangeprince指正。


sparse autoencoder 是autoencoder加上sparse的約束來的,autoencoder 是一類特殊的nn的結構。sparse coding 是從壓縮感知來的,目的是為了用少數幾個基來表示樣本,目標函數基本是square loss + l1正則。rbm和他們關係比較遠。


三者都是無監督學習的方法。學習機理不一樣,但是sae和sparse coding學習到的差不多,個人認為只是學習機制不一樣


-----------------------個人看法,歡迎指正---------------------

首先,你可以說RBM和Autoencoder是一個東西,之前也有人回答過有人證明了兩者在sigmoid下的等價。他們的目標是相同的,就是給定一個輸入,得到一個中間層,並利用中間層去重構一個和輸入相同的樣本,然後利用不同的評價指標(歐幾里得距離、輸入輸出樣本的KL散度等),通過某種優化方法(SGD或者CD,註:bp不是一種優化方法)儘可能的縮小輸出樣本與輸入樣本之間的差異。所以廣義上來講,RBM也是一種編碼器,之前提到的中間層在訓練完成後,就可以看做是每個樣本所提取出的特徵(這個就和稀疏編碼有關了,待會再講)。

那麼,這兩種方法到底有什麼區別,以至於從我的角度來看,並不認為二者可以混為一談。

1.出發點不一樣:

Autoencoder作為確定模型,它的輸入和輸出之間有著嚴格的數學公式,也就是當你輸入1+1的時候必然得到2。然而RBM作為一個不確定性模型,它的輸入和輸出是通過概率連接的,也就是說當你輸入1+1的時候,整個網路只能告訴你,它之所以輸出2,是因為模型中1+1=2的幾率最大,這就要拜RBM中的一個叫採樣的東西所賜。

2.訓練過程不同:

Autoencoder採用的是梯度下降的方式,而RBM採用的是散度(也就是概率的梯度)。所以從道理上來講兩者的優化目的並不相同。

上面兩點的不同也就直接導致了為什麼這兩種方法都有各自存在道理的原因:

autoencoder可以直接做梯度下降(直接看成一個層的BP神經網路即可),所以訓練速度快,可以在短時間內達到比較不錯的效果,然而,快速的訓練導致的直接結果就是模型過於呆板,對於輕微的擾動就出出現不穩定的現象(可以參考對抗學習中舉的誤差累積的例子)。因此才有了在樣本中加入擾動項的Denoising Autoencoder,從而提高泛化性能。

而RBM呢,由於概率本身帶來的不確定性,導致了即便是針對同一個樣本每次輸出的結果也無法完全相同,在這種情況下就可以很好的提高模型的泛化能力。

籠統點講,確定性模型只是儘可能的記住了你的所有樣本,並通過某些擾動去儘可能的製造更多樣的樣本。而RBM則是通過概率的方式去儘可能的逼近樣本的原始分布,所以從本質上來講RBM比Autoencoder更接近問題的根本。

至於RBM為什麼效果沒有Autoencoder或者CNN,LSTM等網路好,我也不太清楚,以下只是猜想:

--------------------純屬蒙的,不要見怪--------------------

1.訓練太麻煩,好像即便用了簡化Gibbs sample的CD,收斂速度也沒有sgd的效果好

2.原始分布未知,評價模型困難

3.速度+調參,這個真的很重要,你運行一遍別人跑了十幾遍,怎麼破啊


研究生期間做了一些關於自編碼和RBM的項目,項目中包括對它們進行機理分析和實驗模擬。我們從機理和實驗中分別探究自編碼和RBM的區別和聯繫。本人才疏學淺,回答的粗略,有不對的地方希望能得到您的指正。

1.機理分析

首先應該給出統計學習三要素:模型、策略和演算法,雖然這自編碼和RBM不屬於統計學習範疇,但依然可以無違和的引用過來做分析。

聯繫:

它們均屬於無監督學習,提取特徵的方法。他們的作用是相同的。

區別:

三要素均不相同。他們最終獲得的模型雖然都是雙層模型,但自編碼是以三層網路作為訓練模型;策略決定了模型的運行目標,自編碼目標就是使三層網路的輸入等於輸出,而RBM的目標是降低能級,隱式的完成了重構能力;演算法是策略的實施,RBM採用了


RBM是無向圖,另外兩個是有向圖。。。。


推薦閱讀:

有哪些比較好的機器學習,深度學習的網路資源可利用?
如何理解soft target這一做法?
神經網路的歷史?
卷積神經網路中用1*1 卷積有什麼作用或者好處呢?
如何看待指出 神經網路的訓練罪魁禍首是退化一文?

TAG:數據挖掘 | 機器學習 | 深度學習DeepLearning |