在前面我們講到了深度學習的兩類神經網路模型的原理,第一類是前向的神經網路,即dnn和cnn。第二類是有反饋的神經網路,即rnn和lstm。今天我們就總結下深度學習裡的第三類神經網路模型:玻爾茲曼機。主要關注於這類模型中的受限玻爾茲曼機(restricted boltzmann machine,以下簡稱rbm), 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$。
rbm是基於基於能量的概率分布模型。怎麼理解呢?分兩部分理解,第一部分是能量函式,第二部分是基於能量函式的概率分布函式。
對於給定的狀態向量$h$和$v$,則rbm當前的能量函式可以表示為:$$e(v,h) = -a^tv - b^th - h^twv $$
有了能量函式,則我們可以定義rbm的狀態為給定$v,h$的概率分布為:$$p(v,h) = \frace^$$
其中$z$為歸一化因子,類似於softmax中的歸一化因子,表示式為:$$z = \sum\limits_e^$$
有了概率分布,我們現在來看條件分布$p(h|v)$:$$ \begin p(h|v) & = \frac \\& = \frac\fracexp\ \\& = \fracexp\ \\& = \fracexp\^(b_j^th_j + h_j^tw_v)\} \\& = \frac \prod\limits_^exp\v\} \end $$
其中$z'$為新的歸一化係數,表示式為:$$\frac = \frac\fracexp\$$
同樣的方式,我們也可以求出$p(v|h)$,這裡就不再列出了。
有了條件概率分布,現在我們來看看rbm的啟用函式,提到神經網路,我們都繞不開啟用函式,但是上面我們並沒有提到。由於使用的是能量概率模型,rbm的基於條件分布的啟用函式是很容易推導出來的。我們以$p(h_j=1|v)$為例推導如下。$$ \begin p(h_j =1|v) & = \frac \\& = \fracv\}} + exp\v\}} \\& = \fracv)\}}\\& = sigmoid(b_j + w_v) \end$$
從上面可以看出, rbm裡從可見層到隱藏層用的其實就是sigmoid啟用函式。同樣的方法,我們也可以得到隱藏層到可見層用的也是sigmoid啟用函式。即:$$ p(v_j =1|h) = sigmoid(a_j + w_^th)$$
有了啟用函式,我們就可以從可見層和引數推導出隱藏層的神經元的取值概率了。對於0,1取值的情況,則大於0.5即取值為1。從隱藏層和引數推導出可見的神經元的取值方法也是一樣的。
rbm模型的關鍵就是求出我們模型中的引數$w,a,b$。如果求出呢?對於訓練集的m個樣本,rbm一般採用對數損失函式,即期望最小化下式:$$l(w,a,b) = -\sum\limits_^ln(p(v^))$$
對於優化過程,我們是首先想到的當然是梯度下降法來迭代求出$w,a,b$。我們首先來看單個樣本的梯度計算, 單個樣本的損失函式為:$-ln(p(v))$, 我們先看看$-ln(p(v))$具體的內容, :$$ \begin -ln(p(v)) & = -ln(\frac\sum\limits_he^) \\& = lnz - ln(\sum\limits_he^) \\& = ln(\sum\limits_e^) - ln(\sum\limits_he^) \end $$
注意,這裡面$v$表示的是某個特定訓練樣本,而$v$指的是任意乙個樣本。
我們以$a_i$的梯度計算為例:$$\begin \frac & = \frac \partiale^)} - \frac \partial)} \\& = -\frace^}(\sum\limits_e^\frac) + \frace^}(\sum\limits_e^\frac) \\& = \sum\limits_ p(h|v)\frac - \sum\limits_p(h,v)\frac \\& = - \sum\limits_ p(h|v)v_i + \sum\limits_p(h,v)v_i \\& = - \sum\limits_ p(h|v)v_i + \sum\limits_p(v)\sum\limits_p(h|v)v_i \\& = \sum\limits_p(v)v_i - v_i \end $$
其中用到了:$$\sum\limits_p(h|v)=1 \;\;\; \sum\limits_p(h|v)=1$$
同樣的方法,可以得到$w,b$的梯度。這裡就不推導了,直接給出結果:$$ \frac = \sum\limits_p(v)p(h_i=1|v) - p(h_i=1|v) $$$$ \frac} = \sum\limits_p(v)p(h_i=1|v)v_j - p(h_i=1|v)v_j $$
雖然梯度下降法可以從理論上解決rbm的優化,但是在實際應用中,由於概率分布的計算量大,因為概率分布有$2^$種情況, 所以往往不直接按上面的梯度公式去求所有樣本的梯度和,而是用基於mcmc的方法來模擬計算求解每個樣本的梯度損失再求梯度和,常用的方法是基於gibbs取樣的對比散度方法來求解,對於對比散度方法,由於需要mcmc的知識,這裡就不展開了。對對比散度方法感興趣的可以看參考文獻中2的《a practical guide to training restricted boltzmann machines》,對於mcmc,後面我專門開篇來講。
rbm可以看做是乙個編碼解碼的過程,從可見層到隱藏層就是編碼,而反過來從隱藏層到可見層就是解碼。在推薦系統中,我們可以把每個使用者對各個物品的評分做為可見層神經元的輸入,然後有多少個使用者就有了多少個訓練樣本。由於使用者不是對所有的物品都有評分,所以任意樣本有些可見層神經元沒有值。但是這不影響我們的模型訓練。在訓練模型時,對於每個樣本,我們僅僅用有使用者數值的可見層神經元來訓練模型。
對於可見層輸入的訓練樣本和隨機初始化的$w,a$,我們可以用上面的sigmoid啟用函式得到隱藏層的神經元的0,1值,這就是編碼。然後反過來從隱藏層的神經元值和$w,b$可以得到可見層輸出,這就是解碼。對於每個訓練樣本, 我們期望編碼解碼後的可見層輸出和我們的之前可見層輸入的差距盡量的小,即上面的對數似然損失函式盡可能小。按照這個損失函式,我們通過迭代優化得到$w,a,b$,然後對於某個用於那些沒有評分的物品,我們用解碼的過程可以得到乙個**評分,取最高的若干評分對應物品即可做使用者物品推薦了。
如果大家對rbm在推薦系統的應用具體內容感興趣,可以閱讀參考文獻3中的《restricted boltzmann machines for collaborative filtering》
當然隱藏層的層數可以是任意的,隨著層數越來越複雜,那模型怎麼表示呢?其實dbm也可以看做是乙個rbm,比如下圖的乙個4層dbm,稍微加以變換就可以看做是乙個dbm。
將可見層和偶數隱藏層放在一邊,將奇數隱藏層放在另一邊,我們就得到了rbm,和rbm的細微區別只是現在的rbm並不是全連線的,其實也可以看做部分權重為0的全連線rbm。rbm的演算法思想可以在dbm上使用。只是此時我們的模型引數更加的多,而且迭代求解引數也更加複雜了。
rbm所在的玻爾茲曼機流派是深度學習中三大流派之一,也是目前比較熱門的創新區域之一,目前在實際應用中的比較成功的是推薦系統。以後應該會有更多型別的玻爾茲曼機及應用開發出來,讓我們拭目以待吧!
基礎演算法 受限玻爾茲曼機 RBM
所謂概率圖模型,就是指運用了概率和圖這兩種工具建立的模型 逐漸忘記標題 咳咳,今天講一下限制玻爾茲曼機,或者叫做受限玻爾茲曼機,這個名字起的真是,好的,咳咳 所謂玻爾茲曼機,就是就是玻爾茲曼家的機,就是說玻爾茲曼這個人發明了一種模型,一種機器,所以叫做玻爾茲曼機器,簡稱玻爾茲曼機。而受限玻爾茲曼機和...
受限玻爾茲曼機二
限制波爾茲曼機rbm使用方法 限制波爾茲曼機rbm能量模型 從能量模型到概率 求解極大似然 用到的抽樣方法 馬爾科夫蒙特卡羅簡介 參考文獻 利用上面的公式得到的是某個單元狀態為1的輸出概率。那麼怎樣才能確定這個單元的狀態是1呢?它通過產生乙個0 1的隨機,如果這個隨機數小於上面得到的概率值,這個單元...
受限玻爾茲曼機二
博主falao beiliu寫的一篇非常好的文章。這裡為方便自己以後速查,做個導航。原文目錄 限制波爾茲曼機rbm使用方法 限制波爾茲曼機rbm能量模型 從能量模型到概率 求解極大似然 用到的抽樣方法 馬爾科夫蒙特卡羅簡介 參考文獻 利用上面的公式得到的是某個單元狀態為1的輸出概率。那麼怎樣才能確定...