一文理解受限玻爾茲曼機(RBM)

hjwang1發表於2020-09-24

ref:https://blog.csdn.net/songguangfan/article/details/99713900

一文理解受限玻爾茲曼機(RBM)

 

限制性玻爾茲曼機(RBM)原理

限制性玻爾茲曼機在玻爾茲曼機基礎上進一步加一些約束,取消了v,h變數內部的聯絡,即不存在可見單元與可見單元的連結,也不存在隱含單元與隱含單元的連結,如下圖所示:
在這裡插入圖片描述

RBM簡單模型

簡單 RBM 模型的引數描述如下:可見層與隱層的之間的權值是w_(n×m),注意到上圖中h有n個節點,v 有m節點,單個節點用vj和hi描述。該模型∀ⅈ,j,v_j ϵ{0,1},h_i ϵ{0,1},注意{0,1}是個集合,只能取0或者1。還有2個引數是c和b,可以參考神經網路裡面的bias,它們都是列向量,每個分量都對應著每個節點的單獨偏置量。

RBM能量函式和概率分佈

根據前面BM的能量函式以及RBM特性,很容易推出RBM的能量函式為
在這裡插入圖片描述
利用該能量函式,可以給出狀態(v,h)的聯合概率分佈為
在這裡插入圖片描述
其中
在這裡插入圖片描述
對於實際問題,我們最關心的是關於觀測資料v的概率分佈Pθ(v),它對應Pθ(v, h)的邊緣分佈,具體為
在這裡插入圖片描述
類似的有
在這裡插入圖片描述
由前面KL距離可知,以上真實的邊緣概率分佈可轉為求某種近似分佈的極大似然來估計。

求極大似然

在RBM模型中,其似然函式可表示為
在這裡插入圖片描述
其中θ是要求解的引數,包括w、b、c。
根據前面的能量模型,有:
在這裡插入圖片描述
而要求極大似然,需對似然函式求導,得到如下
在這裡插入圖片描述
帶入P(v,h)和P(h|v)的表示式,則有
在這裡插入圖片描述
該式的第一項和第二項是不同的,第一項是求在這裡插入圖片描述 在P(h|v)下的期望,第二項是求在這裡插入圖片描述 在P(v,h)下的期望。將θ替換為w、b、c進行分別求導,同時帶入E(v,h)表示式,可得:

  1. 對w求導
    在這裡插入圖片描述
    這裡有個小技巧,
    在這裡插入圖片描述
    最後得到
    在這裡插入圖片描述

  2. 對b求導
    在這裡插入圖片描述

  3. 對c求導
    在這裡插入圖片描述
    我們發現對3個引數求導後,其第二項均需對整個v進行遍歷,這明顯是不可行的。於是我們就想到了Gibbs取樣的方法來估算第二項。假設訓練集為{X1,X2,…,Xl},能得到一組對應符合RBM網路表示的Gibbs分佈的樣本集{Y1,Y2,…Yl},那麼梯度就變為以下的近似公式:
    在這裡插入圖片描述

在這裡插入圖片描述

其中p(hi=1|v)可變為以下等式,若記
在這裡插入圖片描述
表示在h中挖掉分量hk後得到的向量,並引入,
在這裡插入圖片描述
以及
在這裡插入圖片描述
這樣就有:
在這裡插入圖片描述
那麼:
在這裡插入圖片描述
同理可得,
在這裡插入圖片描述

至此,我們已經給出單個訓練樣本情況下的各表示式,對於多個訓練集而言,還需帶入L似然函式求解,有:
在這裡插入圖片描述
可得到如下公式,
在這裡插入圖片描述
然而,我們發現每次進行Gibbs取樣都要進行足夠多的次數的狀態轉移才能保證採集到的樣本符合目標分佈,並且樣本集也需要很大才能比較精確的進行。由於上述式子中第二項的複雜度為O(2^(n_v+n_h )),在海量樣本集情況下會極大加重RBM演算法複雜性,降低其效率,因此需要找到更高效的取樣演算法。

對比散度演算法

基於RBM模型的對稱結構,以及其中節點的條件獨立行,我們可以使用Gibbs抽樣方法得到服從RBM定義的分佈的隨機樣本。在RBM中進行k步Gibbs抽樣的具體演算法為:用一個訓練樣本(或者可視節點的一個隨機初始狀態)初始化可視節點的狀態v0,交替進行下面的抽樣:
在這裡插入圖片描述
在抽樣步數n足夠大的情況下,就可以得到RBM所定義的分佈的樣本(即符合引數確定的Gibbs分佈的樣本)了,得到這些樣本我們就可以拿去計算梯度的第二項了。
可以看到,上面進行了k步的抽樣,這個k一般還要比較大,所以是比較費時間的,尤其是在訓練樣本的特徵數比較多(可視節點數大)的時候,所以hinton教授就給出一個簡化的版本,叫做CD-k,也就是對比散度。
對比散度是英文ContrastiveDivergence(CD)的中文翻譯。與Gibbs抽樣不同,hinton教授指出當使用訓練樣本初始化v0的時候,僅需要較少的抽樣步數(一般就一步)就可以得到足夠好的近似了。
在CD演算法一開始,可見單元的狀態就被設定為一個訓練樣本,並用上面的幾個條件概率來對隱藏節點的每個單元都從{0,1}中抽取到相應的值,然後再利用 來對可視節點的每個單元都從{0,1}中抽取相應的值,這樣就得到了v1了,一般v1就夠了,就可以拿來估算梯度了。
下面給出RBM的基於CD-k的快速學習的主要步驟。
在這裡插入圖片描述
圖中的從條件分佈抽取{0,1}是按如下方式進行:用程式產生一個 0~1的隨機數,如果這個隨機數小於P(hi=1|v),那麼這個隱層節點就取1,反之則取0。假設P(hi=1|v) = 0.6,這時由上面的規則可知,只要隨機數小於0.6,這個隱層節點就取1,而恰巧這個隨機數小於 0.6 的概率是 0.6(因為0~1的隨機數是均勻分佈),那麼這個事件發生了,就可以認為這個隱層節點取值是1的事件也發生了,所以將隱層取值為1。
上述基於CD的學習演算法是針對RBM的可見單元和隱層單元均為二值變數的情形,我們還可以推廣到可見單元和隱單元為高斯變數的情形。

RBM用途

RBM的用途主要是兩種,一是對資料進行編碼,然後交給監督學習方法去進行分類或迴歸,二是得到了權重矩陣和偏移量,供BP神經網路初始化訓練。
第一種可以說是把它當做一個降維的方法來使用。當使用RBM解決分類任務時,最常見的做法是將RBM視為一個特徵提取器,使用觀測資料(忽略類別標籤)訓練RBM,然後用訓練好的RBM的隱單元的啟用概率和原有的類別標籤組成心得訓練集,進而使用其他的分類演算法訓練分類器。
第二種就用途比較奇怪。其中的原因就是神經網路也是要訓練一個權重矩陣和偏移量,但是如果直接用BP神經網路,初始值選得不好的話,往往會陷入區域性極小值。根據實際應用結果表明,直接把RBM訓練得到的權重矩陣和偏移量作為BP神經網路初始值,得到的結果會非常地好。
這就類似爬山,如果一個風景點裡面有很多個山峰,如果讓你隨便選個山就爬,希望你能爬上最高那個山的山頂,但是你的精力是有限的,只能爬一座山,而你也不知道哪座山最高,這樣,你就很容易爬到一座不是最高的山上。但是,如果用直升機把你送到最高的那個山上的靠近山頂處,那你就能很容易地爬上最高的那座山。這個時候,RBM就的角色就是那個直升機。
其實還有兩種用途的,下面說說。
第三種,RBM可以估計聯合概率p(v,h),如果把v當做訓練樣本,h當成類別標籤(隱藏節點只有一個的情況,能得到一個隱藏節點取值為1的概率),就可以利用利用貝葉斯公式求p(h|v),然後就可以進行分類,類似樸素貝葉斯、LDA、HMM。說得專業點,RBM可以作為一個生成模型(Generative model)使用。
第四種,RBM可以直接計算條件概率p(h|v),如果把v當做訓練樣本,h當成類別標籤(隱藏節點只有一個的情況,能得到一個隱藏節點取值為1的概率),RBM就可以用來進行分類。說得專業點,RBM可以作為一個判別模型(Discriminative model)使用。

分散式RBM可能遇到的問題

根據CD-K取樣演算法來進行的RBM,由於取樣過程中,每次迭代均需前一次的抽樣結果作為輸入,所以該演算法模型內部是無法進行模型並行的。
資料並行的設計需要考慮樣本資料如何分割以及每次迭代最後的權值更新。

相關文章