RBM簡單理解-tornadomeet哥的原文

Deep learning:十九(RBM簡單理解)

 

  這篇博客主要用來簡單介紹下RBM網絡,因爲deep learning中的一個重要網絡結構DBN就可以由RBM網絡疊加而成,所以對RBM的理解有利於我們對DBN算法以及deep learning算法的進一步理解。Deep learning是從06年開始火得,得益於大牛Hinton的文章,不過這位大牛的文章比較晦澀難懂,公式太多,對於我這種菜鳥級別來說讀懂它的paper壓力太大。縱觀大部分介紹RBM的paper,都會提到能量函數。因此有必要先了解下能量函數的概念。參考網頁http://202.197.191.225:8080/30/text/chapter06/6_2t24.htm關於能量函數的介紹:

  一個事物有相應的穩態,如在一個碗內的小球會停留在碗底,即使受到擾動偏離了碗底,在擾動消失後,它會回到碗底。學過物理的人都知道,穩態是它勢能最低的狀態。因此穩態對應與某一種能量的最低狀態。將這種概念引用到Hopfield網絡中去,Hopfield構造了一種能量函數的定義。這是他所作的一大貢獻。引進能量函數概念可以進一步加深對這一類動力系統性質的認識,可以把求穩態變成一個求極值與優化的問題,從而爲Hopfield網絡找到一個解優化問題的應用。

  下面來看看RBM網絡,其結構圖如下所示:

   

  可以看到RBM網絡共有2層,其中第一層稱爲可視層,一般來說是輸入層,另一層是隱含層,也就是我們一般指的特徵提取層。在一般的文章中,都把這2層的節點看做是二值的,也就是隻能取0或1,當然了,RBM中節點是可以取實數值的,這裏取二值只是爲了更好的解釋各種公式而已。在前面一系列的博文中可以知道,我們設計一個網絡結構後,接下來就應該想方設法來求解網絡中的參數值。而這又一般是通過最小化損失函數值來解得的,比如在autoencoder中是通過重構值和輸入值之間的誤差作爲損失函數(當然了,一般都會對參數進行規制化的);在logistic迴歸中損失函數是與輸出值和樣本標註值的差有關。那麼在RBM網絡中,我們的損失函數的表達式是什麼呢,損失函數的偏導函數又該怎麼求呢?

  在瞭解這個問題之前,我們還是先從能量函數出發。針對RBM模型而言,輸入v向量和隱含層輸出向量h之間的能量函數值爲:

   

  而這2者之間的聯合概率爲:

   

  其中Z是歸一化因子,其值爲:

   

  這裏爲了習慣,把輸入v改成函數的自變量x,則關於x的概率分佈函數爲:

   

  令一箇中間變量F(x)爲:

   

  則x的概率分佈可以重新寫爲:

   

  這時候它的偏導函數取負後爲:

   

  從上面能量函數的抽象介紹中可以看出,如果要使系統(這裏即指RBM網絡)達到穩定,則應該是系統的能量值最小,由上面的公式可知,要使能量E最小,應該使F(x)最小,也就是要使P(x)最大。因此此時的損失函數可以看做是-P(x),且求導時需要是加上負號的。

  另外在圖RBM中,可以很容易得到下面的概率值公式:

   

  此時的F(v)爲(也就是F(x)):

  

  這個函數也被稱做是自由能量函數。另外經過一些列的理論推導,可以求出損失函數的偏導函數公式爲:

   

  很明顯,我們這裏是吧-P(v)當成了損失函數了。另外,估計大家在看RBM相關文章時,一定會介紹Gibbs採樣的知識,關於Gibbs內容可以簡單參考上一篇博文:Deep learning:十八(關於隨機採樣)。那麼爲什麼要用隨機採用來得到數據呢,我們不是都有訓練樣本數據了麼?其實這個問題我也一直沒弄明白。在看過一些簡單的RBM代碼後,暫時只能這麼理解:在上面文章最後的求偏導公式裏,是兩個數的減法,按照一般paper上所講,這個被減數等於輸入樣本數據的自由能量函數期望值,而減數是模型產生樣本數據的自由能量函數期望值。而這個模型樣本數據就是利用Gibbs採樣獲得的,大概就是用原始的數據v輸入到網絡,計算輸出h(1),然後又反推v(1),繼續計算h(2),…,當最後反推出的v(k)和k比較接近時停止,這個時候的v(k)就是模型數據樣本了。

  也可以參考博文淺談Deep Learning的基本思想和方法來理解:假設有一個二部圖,每一層的節點之間沒有鏈接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),如果假設所有的節點都是二值變量節點(只能取0或者1值),同時假設全概率分佈p(v, h)滿足Boltzmann 分佈,我們稱這個模型是Restrict  Boltzmann Machine (RBM)。下面我們來看看爲什麼它是Deep Learning方法。首先,這個模型因爲是二部圖,所以在已知v的情況下,所有的隱藏節點之間是條件獨立的,即p(h|v) =p(h1|v).....p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節點都是條件獨立的,同時又由於所有的v和h滿足Boltzmann 分佈,因此,當輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之後,通過p(v|h) 又能得到可視層,通過調整參數,我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那麼得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作爲可視層輸入數據的特徵,所以它就是一種Deep Learning方法。

 

  參考資料:

     http://202.197.191.225:8080/30/text/chapter06/6_2t24.htm

     http://deeplearning.net/tutorial/rbm.html

     http://edchedch.wordpress.com/2011/07/18/introduction-to-restricted-boltzmann-machines/

     Deep learning:十八(關於隨機採樣)

     淺談Deep Learning的基本思想和方法

 

 

 

 

作者:tornadomeet 出處:http://www.cnblogs.com/tornadomeet 歡迎轉載或分享,但請務必聲明文章出處。 (新浪微博:tornadomeet,歡迎交流!)
發佈了21 篇原創文章 · 獲贊 55 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章