1. 程式人生 > >受限玻爾茲曼機(RBM)原理總結

受限玻爾茲曼機(RBM)原理總結

guid filter font list cuc spa 得到 aci dcb

https://blog.csdn.net/l7H9JA4/article/details/81463954

授權轉發自:劉建平《受限玻爾茲曼機(RBM)原理總結》

地址:http://www.cnblogs.com/pinard/p/6530523.html

前 言

本文主要關註於這類模型中的受限玻爾茲曼機(Restricted Boltzmann Machine,以下簡稱RBM),RBM模型及其推廣在工業界比如推薦系統中得到了廣泛的應用。
章節目錄

  • RBM模型結構

  • RBM概率分布

  • RBM模型的損失函數與優化

  • RBM在實際中應用方法

  • RBM推廣到DBM

  • RBM小結

01

RBM模型結構

玻爾茲曼機是一大類的神經網絡模型,但是在實際應用中使用最多的則是RBM。RBM本身模型很簡單,只是一個兩層的神經網絡,因此嚴格意義上不能算深度學習的範疇。不過深度玻爾茲曼機(Deep Boltzmann Machine,以下簡稱DBM)可以看做是RBM的推廣。理解了RBM再去研究DBM就不難了,因此本文主要關註於RBM。

回到RBM的結構,它是一個個兩層的神經網絡,如下圖所示:

技術分享圖片

上面一層神經元組成隱藏層(hidden layer), 用h向量隱藏層神經元的值。下面一層的神經元組成可見層(visible layer),用v向量表示可見層神經元的值。隱藏層和可見層之間是全連接的,這點和DNN類似, 隱藏層神經元之間是獨立的,可見層神經元之間也是獨立的。連接權重可以用矩陣W表示。和DNN的區別是,RBM不區分前向和反向,可見層的狀態可以作用於隱藏層,而隱藏層的狀態也可以作用於可見層。隱藏層的偏倚系數是向量b,而可見層的偏倚系數是向量a。

常用的RBM一般是二值的,即不管是隱藏層還是可見層,它們的神經元的取值只為0或者1。本文只討論二值RBM。

總結下RBM模型結構的結構:主要是權重矩陣W, 偏倚系數向量a和b,隱藏層神經元狀態向量h和可見層神經元狀態向量v。

02

RBM概率分布

RBM是基於基於能量的概率分布模型。怎麽理解呢?分兩部分理解,第一部分是能量函數,第二部分是基於能量函數的概率分布函數。

對於給定的狀態向量h和v,則RBM當前的能量函數可以表示為:

技術分享圖片

有了能量函數,則我們可以定義RBM的狀態為給定v,h的概率分布為:

技術分享圖片

其中Z為歸一化因子,類似於softmax中的歸一化因子,表達式為:

技術分享圖片

有了概率分布,我們現在來看條件分布P(h|v):

技術分享圖片

其中Z′為新的歸一化系數,表達式為:

技術分享圖片

  同樣的方式,我們也可以求出P(v|h),這裏就不再列出了。

有了條件概率分布,現在我們來看看RBM的激活函數,提到神經網絡,我們都繞不開激活函數,但是上面我們並沒有提到。由於使用的是能量概率模型,RBM的基於條件分布的激活函數是很容易推導出來的。我們以P(hj=1|v)為例推導如下。

技術分享圖片

從上面可以看出, RBM裏從可見層到隱藏層用的其實就是sigmoid激活函數。同樣的方法,我們也可以得到隱藏層到可見層用的也是sigmoid激活函數。即:

技術分享圖片

有了激活函數,我們就可以從可見層和參數推導出隱藏層的神經元的取值概率了。對於0,1取值的情況,則大於0.5即取值為1。從隱藏層和參數推導出可見的神經元的取值方法也是一樣的。

03

RBM模型的損失函數與優化

RBM模型的關鍵就是求出我們模型中的參數W,a,b。如果求出呢?對於訓練集的m個樣本,RBM一般采用對數損失函數,即期望最小化下式:

技術分享圖片

對於優化過程,我們是首先想到的當然是梯度下降法來叠代求出W,a,b。我們首先來看單個樣本的梯度計算, 單個樣本的損失函數為:?ln(P(V)), 我們先看看?ln(P(V))具體的內容:

技術分享圖片

註意,這裏面V表示的是某個特定訓練樣本,而v指的是任意一個樣本。

我們以ai的梯度計算為例:

技術分享圖片

 其中用到了:

技術分享圖片

同樣的方法,可以得到W,b的梯度。這裏就不推導了,直接給出結果:

技術分享圖片

雖然梯度下降法可以從理論上解決RBM的優化,但是在實際應用中,由於概率分布的計算量大,因為概率分布有2^nv+nh種情況, 所以往往不直接按上面的梯度公式去求所有樣本的梯度和,而是用基於MCMC的方法來模擬計算求解每個樣本的梯度損失再求梯度和,常用的方法是基於Gibbs采樣的對比散度方法來求解,對於對比散度方法,由於需要MCMC的知識,這裏就不展開了。對對比散度方法感興趣的可以看參考文獻中2的《A Practical Guide to Training Restricted Boltzmann Machines》,對於MCMC,後面我專門開篇來講。

04

RBM在實際中應用方法

大家也許會疑惑,這麽一個模型在實際中如何能夠應用呢?比如在推薦系統中是如何應用的呢?這裏概述下推薦系統中使用的常用思路。

RBM可以看做是一個編碼解碼的過程,從可見層到隱藏層就是編碼,而反過來從隱藏層到可見層就是解碼。在推薦系統中,我們可以把每個用戶對各個物品的評分做為可見層神經元的輸入,然後有多少個用戶就有了多少個訓練樣本。由於用戶不是對所有的物品都有評分,所以任意樣本有些可見層神經元沒有值。但是這不影響我們的模型訓練。在訓練模型時,對於每個樣本,我們僅僅用有用戶數值的可見層神經元來訓練模型。

對於可見層輸入的訓練樣本和隨機初始化的W,a,我們可以用上面的sigmoid激活函數得到隱藏層的神經元的0,1值,這就是編碼。然後反過來從隱藏層的神經元值和W,b可以得到可見層輸出,這就是解碼。對於每個訓練樣本, 我們期望編碼解碼後的可見層輸出和我們的之前可見層輸入的差距盡量的小,即上面的對數似然損失函數盡可能小。按照這個損失函數,我們通過叠代優化得到W,a,b,然後對於某個用於那些沒有評分的物品,我們用解碼的過程可以得到一個預測評分,取最高的若幹評分對應物品即可做用戶物品推薦了。

如果大家對RBM在推薦系統的應用具體內容感興趣,可以閱讀參考文獻3中的《Restricted Boltzmann Machines for Collaborative Filtering》

05

RBM推廣到DBM

RBM很容易推廣到深層的RBM,即我們的DBM。推廣的方法就是加入更多的隱藏層,比如一個三層的DBM如下:

技術分享圖片

當然隱藏層的層數可以是任意的,隨著層數越來越復雜,那模型怎麽表示呢?其實DBM也可以看做是一個RBM,比如下圖的一個4層DBM,稍微加以變換就可以看做是一個DBM。

技術分享圖片

將可見層和偶數隱藏層放在一邊,將奇數隱藏層放在另一邊,我們就得到了RBM,和RBM的細微區別只是現在的RBM並不是全連接的,其實也可以看做部分權重為0的全連接RBM。RBM的算法思想可以在DBM上使用。只是此時我們的模型參數更加的多,而且叠代求解參數也更加復雜了。

06

RBM小結

RBM所在的玻爾茲曼機流派是深度學習中三大流派之一,也是目前比較熱門的創新區域之一,目前在實際應用中的比較成功的是推薦系統。以後應該會有更多類型的玻爾茲曼機及應用開發出來,讓我們拭目以待吧!

技術分享圖片

END

受限玻爾茲曼機(RBM)原理總結