RBM(受限玻爾茲曼機)原理及程式碼
EBMs 的隱藏神經元
在很多情況下, 我們看不到部分的隱藏單元 ,
或者我們要引入一些不可見的參量來增強模型的能力.所以我們考慮一些可見的神經元(依然表示為
) 和 隱藏的部分
.
我們可以這樣寫我們的表示式:
(2)
在這種情況下,公式類似於 (1), 我們引入符號, 自由能量, 定義如下:
也可以這麼寫,
資料的負極大似然梯度表示為.
(4)
注意上面的梯度表示為兩個部分,涉及到正面的部分和負面的部分.正面和負面的不表示等式中每部分的符號,而是表示對模型中概率密度的影響. 第一部分增加訓練資料的概率 (通過降低相應的自由能量), 第二部分降低模型確定下降梯度通常是很困難的, 因為他涉及到計算
![x](http://deeplearning.net/tutorial/_images/math/26eeb5258ca5099acf8fe96b2a1049c48c89a5e6.png)
![P](http://deeplearning.net/tutorial/_images/math/4b4cade9ca8a2c8311fafcf040bc5b15ca507f52.png)
第一步是計算估計固定數量的模型樣本的期望. 用來表示負面部分梯度的表示為負粒子, 表示為 .
梯度可以謝偉:
(5)
我們想 根據 取樣元素
of
(例如.
我們可以做 蒙特卡羅方法). 通過上面的公式, 我們幾乎可以使用隨機粒子演算法來學習EBM模型. 唯一缺少的就是如何提取這些負粒子T
受限玻爾茲曼機 (RBM)
玻爾茲曼機(BMS)是一種特殊的對數線性馬爾可夫隨機場(MRF)的形式,即,其能量函式在其自由引數的線性空間裡。使他們強大到足以代表複雜的分佈,我們考慮到一些變數是沒有觀察到(他們稱為隱藏)。通過更多的隱藏變數(也稱為隱藏的單位),我們可以增加的玻爾茲曼機的建模能力(BM)。受限玻爾茲曼機進一步限制BMS中那些可見-可見和隱藏-隱藏的連線。下面是一個RBM的圖形描述。
RBM能量方程 定義為
:
(6)
表示隱藏單元和可見單元連線的權重,
,
是可見層和隱藏層的偏置.
轉化成下面的自由能量公式:
由於RBM的特殊結構, 可見和隱藏單元 是條件獨立的. 利用這個特性, 我們可以得出:
二值化的RBMs
在通常的情況下使用二值化單元 (和
),
我們從公式. (6) and (2)得到,
概率版本的常用神經元啟用函式:
(7)
(8)
二值RBM的自由能量可以更簡單的表示為:
(9)
二值RBM的引數更新方程
結合等式 (5) 和 (9), 我們得到下面的對數似然梯度方程:
(10)
RBM中的取樣
樣本 可以通過執行Markov
chain收斂得到,使用gibbs取樣作為轉移操作.
N隨機變數的Gibbs取樣的聯合概率可以通過一系列的取樣得到
,其中
包含
個
中其他的隨機引數但不包括
.
對於RBM,包含一組可見或者不可見單元,由於他們是條件獨立的你可以執行塊Gibbs取樣。在這種背景下對可見單元同時取樣來得到隱藏單元的值.
同樣的可以對隱藏單元同時取樣,得到可見單元的值。 一步Markov chainA 由下面公式得到:
其中 表示是指在Markov
chain第n步
的所有隱藏單元. 意思是, 例如,
是根據概率
隨機選擇為1(或者0),
相似的,
是根據概率
隨機選擇為1(或者0).
這可以用下圖說明:
![_images/markov_chain.png](http://deeplearning.net/tutorial/_images/markov_chain.png)
當 ,
樣本
保證處於真實樣本下
.
理論下,每個引數的獲取都必須執行這樣一個鏈知道收斂,不用說這樣做代價是十分昂貴的。因此,大家為RBM設計了不少演算法,為了在學習過程中得到在概率分佈下的有效樣本。
Contrastive Divergence(中文有時稱為對比散度)
(CD-k)CD使用兩個技巧來加速取樣過程 :
- 由於我們最終想要得到
(真實的處於資料分佈的樣本), 我們把馬爾科夫鏈初始化為一個訓練樣本(即,我們要使一個分佈靠近p,那麼我們的鏈應該已經收斂到最後的分佈p)
- CD不需要等待鏈收斂,樣本結果k步gibbs取樣得到,在實踐中,k=1工作的出奇的好。
Persistent CD
Persistent CD [Tieleman08] 使用另一種方法近似下的樣本,他依賴於一個擁有持續性的馬爾科夫鏈, (i.e.,不為每個可見樣本重新計算鏈
). 對於每一個參量更新,我們簡單的執行k-步鏈生成新的樣本。 鏈的狀態需要儲存用來計算以後步驟的參量更新.
一般的直覺是,如果參量更新對於鏈的混合速率足夠小,馬爾科夫鏈應該可以察覺到模型的改變。
下面我們需要用程式碼來實現RBM(使用c語言)