這兩天跟人討論起說在DL中用DBN的,而DBN就是用很多RBM疊加起來的,想起以前看到的RBM,只是粗略看了下,沒有仔細研究,
現在正好借這個機會好好研讀一番。
玻爾茲曼機(BM):
波爾茲曼機(Boltzmann Machine, BM)是Hiton(是的,Hiton大牛)和Sejnowski 於1986年基於統計力學提出的神經網絡,這種網絡中的神經元是隨機神經元,神經元的輸出只有兩種狀態(激活和未激活),一般用二進制0或1表示。如下圖所示:
受限玻爾茲曼機(RBM):
BM具有強大的無監督學習能力,能夠學習數據中復雜的規則。但是訓練時間過長,另外其概率分布很難獲得,為了克服這一個問題,Smolensky引入一個受限玻爾茲曼機(Restricted Boltzmann Machine,RBM),如下圖所示:
可以看到,隱層和可見層在層內是無連接的。這樣,當給定了可見層狀態時,隱層個單元的激活狀態是相互獨立的,反之,給定隱層狀態,各可見層單元的狀態也是相互獨立的。這樣可以用Gibbs采樣逼近其概率分布。
前面說到,BM是基於統計力學來的,首先介紹其能量函數:
這里,v和h代表可見層和隱層的狀態向量。ai,bj和Wij為三個實數參數,分別表示可見層i單元的偏置項,隱層j單元偏置項,可見層i單元和隱層j單元的連接權重。其中:
基於此能量函數,可以得到v和h的概率分布:
其中Z(θ)是歸一化因子。
學習:
學習RBM的任務當然是求出最優參數θ,可以通過最大化在某個訓練集上的對數似然函數來求得:
其中t是訓練樣本標記(t∈(1,T))T為訓練樣本總數。
其中L(Θ):
為了求最優Θ*,可以用隨機梯度法求L(θ)的最大值,關鍵就是求梯度,即L(Θ)對各個參數的偏導數:
其中<.>P表示求關於P的分布。顯然,第一項的邊緣分布P(h|v(t),θ)是在訓練樣本已知的情況下求相對的隱層的分布,比較容易計算。第二項是聯合分布,不容易求,但是可以通過Gibbs采樣來逼近。值得指出的是在最大化似然函數的過程中,為加快速度,上述偏導數在每一迭代步中的計算一般只基於部分而非所有的訓練樣本進行。假設只有一個訓練樣本,對數似然函數對於三個參數Wij,ai和aj的偏導數:
其中data和model分別是對上面兩項分布的簡寫。
Gibbs采樣:
由於RBM模型的對稱性及各層間神經元狀態的獨立性,可以用Gibbs采樣得到服從RBM定義的分布的隨機樣本。在RBM中進行k步Gibbs采樣的具體算法:用一個訓練樣本(或者可見層的任何隨機化狀態)初始化可見層狀態v0,交替進行如下采樣:
這樣可以得到一個聯合分布的近似。
基於對比散度(CD)的快速學習算法:
CD(Contrastive Divergence)法是Hiton在2002年提出的一個快速學習算法。不同於Gibbs采樣,當使用訓練數據初始化v0時,只需要k(通常k=1)步Gibbs采樣即可得到足夠好的近似。
算法基本流程如下:
參考文獻:
1. Wikipedia: Restricted Boltzmann Machine
2. 張春霞, 姬楠楠, 王冠偉. 受限玻爾茲曼機簡介.