1. 程式人生 > >RBM--- (Restricted Boltzmann Machine,簡稱RBM : 受限玻爾茲曼機 )

RBM--- (Restricted Boltzmann Machine,簡稱RBM : 受限玻爾茲曼機 )

當讀論文Explaining and  Harnessing Adversarial Examples的時候,發現裡面有一個概念 pre-training 不懂,就立刻查詢一下,不巧的是,在解釋pre-training的時候,遇到了RBM,又不懂(他大爺,學點知識怎麼就那麼難。。。),怎麼辦?繼續查詢,呈現如下:

受限玻爾茲曼機(Restricted Boltzmann Machine,簡稱RBM)是由Hinton和Sejnowski於1986年提出的一種生成式隨機神經網路(generative stochastic neural network),該網路由一些可見單元(visible unit,對應可見變數,亦即資料樣本)和一些隱藏單元(hidden unit,對應隱藏變數)構成,可見變數和隱藏變數都是二元變數,亦即其狀態取{0,1}。整個網路是一個二部圖,只有可見單元和隱藏單元之間才會存在邊,可見單元之間以及隱藏單元之間都不會有邊連線,如下圖所示:

  

  上圖所示的RBM含有12個可見單元(構成一個向量v)和3個隱藏單元(構成一個向量h),W是一個12*3的矩陣,表示可見單元和隱藏單元之間的邊的權重。

1. RBM的學習目標-最大化似然(Maximizing likelihood)

  RBM是一種基於能量(Energy-based)的模型,其可見變數v和隱藏變數h的聯合配置(joint configuration)的能量為:

  (式子-1)

  其中θ是RBM的引數{W, a, b}, W為可見單元和隱藏單元之間的邊的權重,b和a分別為可見單元和隱藏單元的偏置(bias)。i和j是對應變數v和h的下標。

  有了v和h的聯合配置的能量之後,我們就可以得到v和h的聯合概率:

                     (式子-2)

其中Z(θ)是歸一化因子(說白了就是將很大的資料通過除來縮小到0-1的範圍內,就是歸一化,歸一化因子就是處於該因子,能夠使被除數的值處於0-1之間,也就是所謂的概率p了),也稱為配分函式(partition function)。根據式子-1,可以將上式寫為:

    (式子-3)

  我們希望最大化觀測資料的似然函式P(v),P(v)可由式子-3求P(v,h)對h的邊緣分佈得到,其中D是變數v的元素的最大個數,F是h的元素的最大個數:

       (式子-4)

  我們通過最大化P(v)來得到RBM的引數,最大化P(v)等同於最大化log(P(v))=L(θ):

                       (式子-5)

2. RBM的學習方法-CD(Contrastive Divergence,對比雜湊)

  可以通過隨機梯度下降(stichastic gradient descent)來最大化L(θ),首先需要求得L(θ)對W的導數:

       (式子-6)

  經過簡化可以得到:

     (式子-7)

  後者等於

                           (式子-8)

  式子-7中的前者比較好計算,只需要求vihj在全部資料集上的平均值即可,而後者涉及到v,h的全部2|v|+|h|種組合,計算量非常大(基本不可解)。

  為了解決式子-8的計算問題,Hinton等人提出了一種高效的學習演算法-CD(Contrastive Divergence),其基本思想如下圖所示:

    

  首先根據資料v來得到h的狀態,然後通過h來重構(Reconstruct)可見向量v1,然後再根據v1來生成新的隱藏向量h1。因為RBM的特殊結構(層內無連線,層間有連線), 所以在給定v時,各個隱藏單元hj的啟用狀態之間是相互獨立的,反之,在給定h時,各個可見單元的啟用狀態vi也是相互獨立的,亦即:

  (式子-9)

  重構的可見向量v1和隱藏向量h1就是對P(v,h)的一次抽樣,多次抽樣得到的樣本集合可以看做是對P(v,h)的一種近似,使得式子-7的計算變得可行。

  RBM的權重的學習演算法:

  1. 取一個樣本資料,把可見變數的狀態設定為這個樣本資料。隨機初始化W。
  2. 根據式子-9的第一個公式來更新隱藏變數的狀態,亦即hj以P(hj=1|v)的概率設定為狀態1,否則為0。然後對於每個邊vihj,計算Pdata(vihj)=vi*hj(注意,vi和hj的狀態都是取{0,1})。
  3. 根據h的狀態和式子-9的第二個公式來重構v1,並且根據v1和式子-9的第一個公式來求得h1,計算Pmodel(v1ih1j)=v1i*h1j。
  4. 更新邊vihj的權重Wij為Wij=Wij+L*(Pdata(vihj)=Pmodel(v1ih1j))。
  5. 取下一個資料樣本,重複1-4的步驟。
  6. 以上過程迭代K次。