受限玻爾茲曼機和深度置信網絡


2016-07-20   11:21:33

1受限玻爾茲曼機

梯度下降法(以及相關的L-BFGS算法等)在使用隨機初始化權重的深度網絡上效果不好的技術原因是:梯度會變得非常小。具體而言,當使用反向傳播方法計算導數的時候,隨着網絡的深度的增加,反向傳播的梯度(從輸出層到網絡的最初幾層)的幅度值會急劇地減小。結果就造成了整體的損失函數相對於最初幾層的權重的導數非常小。這樣,當使用梯度下降法的時候,最初幾層的權重變化非常緩慢,以至於它們不能夠從樣本中進行有效的學習。這種問題通常被稱為“梯度的彌散”[4]。

與梯度彌散問題緊密相關的問題是:當神經網絡中的最后幾層含有足夠數量神經元的時候,可能單獨這幾層就足以對有標簽數據進行建模,而不用最初幾層的幫助。因此,對所有層都使用隨機初始化的方法訓練得到的整個網絡的性能將會與訓練得到的淺層網絡(僅由深度網絡的最后幾層組成的淺層網絡)的性能相似。

梯度彌散一直是困擾着深度神經網絡的發展,那么如何解決梯度彌散問題呢?多倫多大學的Geoff Hinton提出了設想:受限玻爾茲曼機(Restricted Boltzmann Machines, RBM)[1],即一類具有兩層結構的、對稱鏈接無自反饋的隨機神經網絡模型(一種特殊的馬爾科夫隨機場)。

如圖1所示,一個RBM包含一個由隨機的隱單元構成的隱藏層(一般是伯努利分布)和一個由隨機的可見(觀測)單元構成的可見(觀測)(一般是伯努利分布或高斯分布)。RBM可以表示成一個二分圖模型,所有可見單元和隱單元之間存在連接,而隱單元兩兩之間和可見單元兩兩之間不存在連接,也就是層間全連接,層內無連接(這也是和玻爾茲曼機BM模型的區別,層間、層內全連接)。每一個可見層節點和隱藏層節點都有兩種狀態:處於激活狀態時值為1,未被激活狀態值為0。這里的0和1狀態的意義是代表了模型會選取哪些節點來使用,處於激活狀態的節點被使用,未處於激活狀態的節點未被使用。節點的激活概率由可見層和隱藏層節點的分布函數計算。

圖1 受限玻爾茲曼機

一個RBM中,v表示所有可見單元,h表示所有隱單元。要想確定該模型,只要能夠得到模型三個參數 即可。分別是權重矩陣W,可見層單元偏置A,隱藏層單元偏置B。假設一個RBM有n個可見單元和m個隱單元,用表示第i個可見單元,表示第j個隱單元,它的參數形式為:

 

表示第i個可見單元和第j個隱單元之間的權值。

表示第i個可見單元的偏置閾值。

表示第j個隱單元的偏置閾值。

 

對於一組給定狀態下的(v, h)值,假設可見層單元和隱藏層單元均服從伯努利分布,RBM的能量公式是:

 

 

其中,令是RBM模型的參數(均為實數),能量函數表示在每一個可見節點的取值和每一個隱藏層節點的取值之間都存在一個能量值。

 

對該能量函數指數化正則化后可以得到可見層節點集合和隱藏層節點集合分別處於某一種狀態下(v, h)聯合概率分布公式:

其中,為歸一化因子或配分函數(partition function),表示對可見層和隱藏層節點集合的所有可能狀態的(能量指數)求和。

 

對於參數的求解往往采用似然函數求導的方法。已知聯合概率分布,通過對隱藏層節點集合的所有狀態求和,可以得到可見層節點集合的邊緣分布

邊緣分布表示的是可見層節點集合處於某一種狀態分布下的概率,邊緣分布往往被稱為似然函數(如何對模型參數求解在下面章節闡述)。

 

由於RBM模型的特殊的層間連接、層內無連接的結構,它具有以下重要性質:

1)在給定可見單元的狀態時,各隱藏層單元的激活狀態之間是條件獨立的。此時,第j個隱單元的激活概率為:

2)相應的,當給定隱單元的狀態時,可見單元的激活概率同樣是條件獨立的: 

其中,是sigmoid函數,其函數曲線如圖2所示:

圖2 Sigmoid函數

采用該函數用作每一層節點的激活概率公式的原因是:sigmoid函數的定義域是 ,值域處於(0,1)之間。也就是說,無論模型的可見層輸入節點數據處於一個多大的范圍內,都可以通過sigmoid函數求得它相應的函數值,即節點的激活概率值。

2模型參數求解

在給定一個訓練樣本后,訓練一個RBM的意義在於調整模型的參數,以擬合給定的訓練樣本,使得在該參數下RBM表示的可見層節點概率分布盡可能的與訓練數據相符合。

對於該模型需要確定兩部分。一是如果想確定這個模型,首先是要知道可見層和隱藏層節點個數,可見層節點個數即為輸入的數據維數,隱藏層節點個數在一些研究領域中是和可見層節點個數有關的,如用卷積受限玻爾茲曼機處理圖像數據,在這里不多分析。但多數情況下,隱藏層節點個數需要根據使用而定或者是在參數一定的情況下,使得模型能量最小時的隱藏層節點個數。

其次,要想確定這個模型還得要知道模型的三個參數,下面就圍繞着參數的求解進行分析。

 

上面已經提到了,參數求解用到了似然函數的對數對參數求導。由於從可知,能量E和概率P是成反比的關系,所以通過最大化P,才能使能量值E最小。最大化似然函數常用的方法是梯度上升法,梯度上升法是指對參數進行修改按照以下公式:

 

 

通過求關於的導數,即,然后對原值進行修改。如此迭代使似然函數P最大,從而使能量E最小。

對數似然函數對參數求導分析:

首先是對數似然函數的格式:表示模型的輸入數據。

然后對里的參數分別進行求導,詳細的推導過程就不寫了:

由於上面三式的第二項中都含有中仍然含有參數,所以它是式中求不出來的。所以,有很多人就提出了一些通過采樣逼近的方法來求每一個式子中的第二項。

 

3模型訓練算法

3.1 Gibbs采樣算法

因為在上一章節末尾講對參數的求導中仍然存在不可求項表示可見層節點的聯合概率。所以,要想得到 的值,就得要逼近它,求它的近似值。

Gibbs采樣的思想是雖然不知道一個樣本數據的聯合概率P(x),但是知道樣本中每一個數據的條件概率 (假設每一個變量都服從一種概率分布),則我可以先求出每一個數據的條件概率值,得到x的任一狀態 。然后,我用條件概率公式迭代對每一個數據求條件概率。最終,迭代k次的時候,x的某一狀態 將收斂於x的聯合概率分布P(x)。

對於RBM來講,則執行過程如圖3所示:

圖3 Gibbs采樣過程

求解過程是:假設給我一個訓練樣本v0,根據公式 求 h0中每個節點的條件概率,再根據公式 求v1 中每個節點的條件概率,然后依次迭代,直到執行K步(K足夠大),此時 的概率將收斂於P(v)的概率。如下所示:

 

3.2 CD-k算法

CD算法是需要k次(k=1Gibbs采樣對可見層節點進行重構得到可見層節點的概率分布。其思想是:假設給模型一個樣本v0,通過求所有隱藏層節點的概率值,然后每一個概率值和隨機數進行比較得到每一個隱藏層節點的狀態,然后通過公式求每一個可見層節點的概率值,再由

求每一個隱藏層節點的概率值。最后參數梯度的計算公式變為:

 

其中,μ是學習率,data和recon分別表示訓練數據的概率分布和重構后的概率分布。

通過以上方法都可以求出參數的梯度來,由每一個參數的梯度對原參數值進行修改來使模型的能量減小。

圖4 CD算法偽代碼

4模型的評估

對於模型的評估,一般程序中並不會去真的計算當模型訓練好時的模型能量E,而是采用近似的方法來對模型進行評估。

常用的近似方法是重構誤差,所謂重構誤差是指以訓練樣本作為初始狀態,經過RBM模型的分布進行一次Gibbs采樣后與原數據的差異值。具體解釋如下:

對於一個給定的樣本,通過公式 對所有隱藏層節點的條件概率進行采樣,再通過公式 對所有可見層節點的條件概率進行采樣,最后由樣本值和采樣出的可見層概率值做差取絕對值,作為該模型的評估。重構誤差能夠在一定程度上反映RBM對訓練數據的似然度。

5節點狀態如何確定

對於每一層節點狀態(0 or 1)的確定是采用與隨機數(在0到1之間)進行比較的方法,如果節點被激活的概率值大於一個隨機產生的數,則認為該節點被激活。原因是:給定可見層節點v時,隱藏層第j個節點狀態為1的激活概率。這時,在區間[0,1]上產生一個隨機數落在子區間的概率也是既然兩個事件的概率是相等的,若隨機數 落在子區間,則認為第j個節點的狀態為1,否則為0。

如下:對於隱藏層節點的激活狀態

同理,對於可見層節點的激活狀態

總結:受限玻爾茲曼機網絡模型的目的就是最大可能的擬合輸入數據,即最大化Hinton提出的一種快速訓練算法,即contrastive divergence(對比散度CD-k)算法。

該算法需要迭代k次,就可以獲得模型對輸入數據的估計,而通常k取1。CD算法在開始是用訓練數據去初始化可見層,然后用條件分布計算隱藏層;然后,再根據隱藏層狀態,同樣,用條件分布計算可見層。這樣產生的結果就是對訓練數據的一個重構。根據CD算法可得模型對網絡權值的梯度:

其中,μ是學習率, 是樣本數據的期望, 是重構后可見層數據的期望。

6深度置信網絡

本節討論RBM如何堆疊組成一個深度置信網絡(Deep Belief Network, DBN),從而作為DBN預訓練的基礎模型。在進行細節探究之前,我們需要首先知道,由Hinton和Salakhutdinov在文章[2]提出的這種預訓練過程是一種無監督的逐層預訓練的通用技術,也就是說,不是只有RBM可以堆疊成一個深度生成式(或判別式)網絡,其他類型的網絡也可以使用相同的方法來生成網絡,比如Bengio等人在文獻[3]中提出的自動編碼器(autoencoder)的變形。

圖5描述了一個逐層訓練的例子,將一定數目的RBM堆疊成一個DBN,然后從底向上逐層預訓練。堆疊過程如下:訓練一個高斯-伯努利RBM(對於語音應用使用的連續特征)或伯努利-伯努利RBM(對於正態分布或二項分布特征應用,如黑白圖像或編碼后的文本)后,將隱單元的激活概率(activation probabilities)作為下一層伯努利-伯努利RBM的輸入數據。第二層伯努利-伯努利RBM的激活概率作為第三層伯努利-伯努利RBM的可見層輸入數居,以后各層以此類推。關於這種有效的逐層貪婪學習策略的理論依據由文獻[2]給出。已經表明,上述的貪婪過程達到了近似的最大似然學習。這個學習過程是無監督的,所以不需要標簽信息。

當應用到分類任務時,生成式預訓練可以和其他算法結合使用,典型的是判別式方法,他通過有效地調整所有權值來改善網絡的性能。判別式精調(fine-tune)通常是在現有網絡的最后一層上在增加一層節點,用來表示想要的輸出或者訓練數據提供的標簽,它與標准的前饋神經網絡(feed-forward neural network)一樣,可以使用反向傳播算法(back-propagation algorithm)來調整或精調網絡的權值。DBN最后一層即標簽層的內容,根據不同的任務和應用來確定。

5 DBN逐層預訓練示意圖

上述生成式預訓練應用在音素和語音識別中,要比隨機初始化網絡的效果要好。研究已經表明其他種類的預訓練策略的有效性。比如,在執行逐層貪婪訓練時,可以在每一層的生成損失函數中增加一項判別項。如果不適用生成式預訓練,只使用隨機梯度下降方法來對隨機初始化DBN進行判別式訓練,研究結果表明,當非常仔細的選取初始權值並且謹慎的選取適合於隨機梯度下降的“迷你批量”(mini-batch)的大小(例如,隨着訓練輪數增加大小),也將會獲得很好的效果。“迷你批量”用於在收斂速度和噪聲梯度之間進行折中。同時,在建立“迷你批量”時,對數據進行充分的隨機化也是至關重要的。另外,很重要的一個發現是:從一個只含有一層的淺層神經網絡開始學習一個DBN是非常有效的。當折中方法用於訓練區分式模型時(使用提前結束訓練的策略以防止過擬合的出現),在第一個隱藏層和標簽的softmax輸出層之間插入第二個隱藏層,然后對整個網絡應用反向傳播來微調網絡的權值。這種判別式預訓練在實踐中取得了比較好的效果,特別是在有大量的訓練數據的情況下效果較好。當訓練數據不斷增多時,即使不使用上述預訓練,一些特別設計的隨機初始化方法也能夠取得很好的效果。

 參考文獻

[1] Hinton G. A practical guide to training restricted Boltzmann machines[J]. Momentum, 2010, 9(1): 926.

[2] Hinton G E, Osindero S, Teh Y W. A fast learning algorithm for deep belief nets[J]. Neural computation, 2006, 18(7): 1527-1554.

[3] Bengio Y, Lamblin P, Popovici D, et al. Greedy layer-wise training of deep networks[J]. Advances in neural information processing systems, 2007, 19: 153.

[4] http://blog.csdn.net/losteng/article/details/51020552


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM