1. 程式人生 > >Deep Learning 18:DBM的學習及練習_讀論文“Deep Boltzmann Machines”的筆記

Deep Learning 18:DBM的學習及練習_讀論文“Deep Boltzmann Machines”的筆記

前言

      論文“Deep Boltzmann Machines”是Geoffrey Hinton和他的大牛學生Ruslan Salakhutdinov在論文“Reducing the Dimensionality of Data with Neural Networks”合作後的又一次聯合發表的一篇有深遠影響的論文,這篇論文第一次提出了DBM及其學習方法,對DBM原理、來源都做了詳細講解。

 論文內容

前面介紹的都是BM原理及其訓練,可以不用管它,下面直接從第3節開始……

3.DBM

      一般情況下,我們很少對複雜的全連線的玻爾茲曼機(BM)感興趣,而是對一個深度多層的BM感興趣,具體見圖2的左邊部分。圖中的每一層都能從下一層隱藏特徵的啟用值中提取出更高階的特徵。我們對DBM感興趣有如下幾個原因。第一,與DBN一樣,DBM也有學習內部特徵的能力且DBM在目標和語音識別方面的作用非常有前途;第二,DBM能從大量的無標籤數量中學習出高階特徵,然後再用少量有標籤資料對整個模型微調;第三,與DBN不一樣,DBM的逼近推導過程,除了有自底向上的傳播之外,還包含了自頂向下的反饋,從而使DBM能更好地傳播模糊輸入的不確定性,因此它的魯棒性更好。

圖2. 左圖:一個三層的DBN和一個三層的DBM;右圖:預訓練一系列RBM,然後把它們組合成一個DBM

      對於一個無層內連線的2層的BM(即:RBM),它的能量函式如下:

可視層向量V的概率密度函式如下:

對可視單元和兩層隱藏單元的條件概率分佈如下:

      對於DBM的最大似然函式的逼近學習,仍可用上面提到的普通BM的學習方法,但是學習速率會非常慢,特別是隱含層越多學習速率會越慢。下面一節提出一種快速的演算法來初始化模型引數。

3.1 利用逐層貪婪演算法預訓練DBM

     hinton在2006年的論文“A Fast Learning Algorithm for Deep Belief Nets

”中介紹了一種逐層貪婪無監督學習演算法。在一系列堆疊的RBM中,該演算法一次只學習一個RBM,依次學習。在學習完整個堆疊的RBM後,可以把這個用RBM堆積起來的模型看作成一個概率模型,叫“深度信念網路(DBN)”。特別注意,這個模型並不是一個DBM。DBN的最上面兩層是一個RBM,它是一個無向圖模型,但DBN其餘下面的層是一個有向生成模型(見圖2)。在學習完DBN中的第一個RBM後,生成模型可寫成如下形式:

其中,p(h1;w1)是h1的隱式先驗概率。對DBM中的第二個RBM,實際上就是用p(h1;w2)代替原來的p(h1;w1)。如果第2個RBM按照論文A Fast Learning Algorithm for Deep Belief Nets

”中的方法進行正確的初始化,p(h1;w2)就會變為一個更好的h1的後驗分佈模型,在這個模型中,這個後驗分佈對於所有訓練樣本都是一個簡單的階乘後驗組合成的非階乘混合。因為第2個RBM用了一個更好地模式取代了p(h1;w1),那麼就可能通過對這兩個模型中的h1求平均從而推匯出p(h1;w1,w2),具體方法就是把自底向上得到的w1的一半和自頂向下得到的w2的一半相加。這裡利用的自底向上得到的w1和自頂向下得到的w2,就相當於重複計算了,因為h2對v是獨立的。

      為了初始化DBM的模型引數,本文提出了逐層貪婪預訓練RBM堆的演算法,但是同論文“A Fast Learning Algorithm for Deep Belief Nets”中方法相比,有一個小小的變化,這是為了消除把自頂向下和自底向上聯合在一起所帶來的重複計算問題。對於最下層的RBM,我們使輸入單元加倍且約束住可視層與隱含層間的權值,見圖2右邊部分。這個用相關引數修改過的RBM對隱藏單元和可視單元的條件概率分佈如下:

      CD演算法用於這個RBM的預訓練可得到非常好的結果,而這個修改過的RBM也能很好地重建訓練資料。相反地,可把最頂層的RBM的隱藏單元數加倍。最頂層RBM的條件分佈如下:

 當這兩個模組組合成一個模型後,進入第一個隱含層的總輸入,有如下h1的條件分佈:

 對V和h2的條件分佈同式16和18一樣。

       通過觀察可發現,上面現個RBM組合而成的模型的條件分佈與DBM的條件分佈(式11、12、13)是一樣的。因此,用貪婪演算法預訓練這兩個修改過的RBM可得到一個權值對稱的無向模型——DBM。當用貪婪演算法預訓練2個以上RBM時,只需要修改最底和最頂的2個RBM。對所有中間的RBM,只需要在組合成DBM的時候,簡單把兩個方向上的權值均分即可。

       以上面的貪婪演算法預訓練DBM的權值,有2個目的。第一,使權值初始化到一個合適的值,見實驗結果部分。第二,有一個快速方法進行逼近推導,該方法以通過RBM堆單一向上傳播的方式進行。在可視層給一個數據向量,通過自底向上的傳遞,每個隱含層單元都能被啟用,且用自底向上翻倍輸入的方式來彌補自上而下反饋的缺乏(除了最高一層沒有自上而下的輸入外)。這種快速逼近推導方法通常用來初始化平均場方法,該初始化方法比隨機初始化法收斂更快。

3.2 評估DBM

       最近,Salakhutdinov 和Murray在2008年提出了一種利用退火式重要性抽樣(AIS,基於蒙特卡羅的演算法,Radford M. Neal於1998年在論文“Annealed Importance Sampling”中首次提出)來評估RBM的配分函式的方法(Estimating Partition Functions of RBM's)。本小節介紹了怎樣利用AIS來評估DBM的配分函式。與變分推導一起,就會較好地評估出測試資料對數概率的下界。

3.3 DBM的微調

       完成上面的學習後,DBM中每一層的二值特徵由原來的啟用值變為一個確定的真實概率。DBM將會以下面的方式初始化為一個層數確定的多層神經網路。對於每個輸入向量v,通過平均場推導可得到一個近似後驗分佈q(h|v)。這個近似後驗分佈的邊緣分佈q(h2j=1|v)與樣本資料一起作為這個深度多層神經網路的“增廣”輸入,見圖3。然後通過標準的後向傳播微調這個模型。

圖3:學習完成後,DBM被初始化為一個多層神經網路。邊緣後驗概率q(h2|v)作為另外一個輸入。這個網路通過後向傳播進行微調。

      上面這個不同尋常的輸入,實際上只是把DBM轉換為一個確定層數的神經網路所得到一個副產品。基於梯度的微調一般會忽略q(h2|v),比如,使第一層的連線權值W2為0就會得到一個標準神經網路模型。相反地,這個模型使第一層的連線權值W1為0就會忽略資料的輸入。在我做的實驗中,這個模型是用整個增廣輸入來作預測。

4 實驗結果

     在實驗中,利用了MNIST和NORB資料集。為了加快學習速率,資料集被細分為了很多個mini-batches。每個mini-batches包含了100個樣本,每完成一個mini-batches的學習就更新一次權值。fantasy particles(理解:就是一對(vi,hi)形成的系統)用於追蹤模型的統計,它的數量為100的平方。對於隨機逼近演算法,本實驗用5步Gibbs取樣更新fantasy particles。學習速率初始化為0.005,然後逐漸降到0。對於DBM的微調,實驗中在5000個mini-batches基礎上用共軛梯度演算法進行微調,在每次迭代中對每個mini-batches進行3次線性搜尋。

4.1 MNIST資料集

     文章中說,通過這個實驗發現DBM比DBN要好。原話:Table 1 shows that the estimates of the lower bound on the average test logprobability were −84.62 and −85.18 for the 2- and 3-layer BM’s respectively. This result is slightly better compared to the lower bound of −85.97, achieved by a two-layer deep belief network (Salakhutdinov and Murray, 2008).

     圖4:  左圖:實驗中的2個DBM;   右圖:訓練集中隨機抽樣出的樣本和從2個DBM中通過10萬步Gibbs取樣所得到對應的樣本。圖中顯示的是已知隱藏單元狀態條件下的可視單元概率密度。

     2層的BM錯誤識別率只有0.95%,在該論文之前,這個錯誤率是最低的。3層的BM的錯誤識別率為1.01%,而SVM的錯誤率是1.4%,隨機初始化後向傳播錯誤率是1.6%,DBN的錯誤率是1.2%(hinton  2006)。

4.2 NORB資料集

      本實驗中的2層BM的錯誤率為10.8%,SVM的錯誤率是11.6%,邏輯迴歸的錯誤率是22.5%,K均值的錯誤率是18.4%。 

——

相關推薦

Deep Learning 18DBM學習練習_論文Deep Boltzmann Machines”的筆記

前言       論文“Deep Boltzmann Machines”是Geoffrey Hinton和他的大牛學生Ruslan Salakhutdinov在論文“Reducing the Dimensionality of Data with Neural Networks”合作後的又一次聯合發表的一篇

Deep Learning入門引數意義對一些trick理解的總結

以下大部分都是在CIFAR10資料集使用tensorflow時獲得的經驗。 一、batch normalization batch normalization是以一個batch為整體進行歸一化,一般方法是(x-均值)/方差。 由於該方法能將圖片上的值的範圍變換致(-c,c)

深度學習 Deep Learning UFLDL 最新Tutorial 學習筆記 4Debugging: Gradient Checking

style inline add tom radi posit math size tutorial 1 Gradient Checking 說明前面我們已經實現了Linear Regression和Logistic Regression。關鍵在於代價函數Cost Fun

Deep Learning 15RBM的學習

RBM是深度學習的核心,所以必須徹底清楚地理解RBM原理、推導及其訓練方法 1.讀學位論文“基於深度學習的人臉識別研究”: 對RBM、DBN的介紹比較詳細,可以作為基礎閱讀,再去讀英文論文。 2.RBM的推導: 講得非常清楚,第一重點推薦! 這個講很直白,感覺非常好!第二重點推薦,也不知道是

Deep Learning》(深度學習)中文版 開發下載

mic enc 由於 phi gen war class models -a 《Deep Learning》(深度學習)中文版開放下載 《Deep Learning》(深度學習)是一本皆在幫助學生和從業人員進入機器學習領域的教科書,以開源的形式免費在網絡上提供

課程一(Neural Networks and Deep Learning)總結Logistic Regression

pdf idt note hub blog bsp http learn gre -------------------------------------------------------------------------

慕課網/安卓攻城獅視頻學習練習(四)

cti row fcm dma term relative man water 形式 relativelayout 子類控件自身的位置屬性: framelayout absolutelayout很少使用 tablelayout 五布局

慕課網/安卓攻城獅視頻學習練習(五)——簡陋計算器

!= activit 技術分享 lis 傳遞 ride iss alt result 簡陋計算器 1 public class FActivity extends Activity implements OnClickListener{ 2

慕課網/安卓攻城獅視頻學習練習(六)

lba etl 居住 style 北京 click con notify absl manifest A跳轉B,在B的文件中用permission權限,然後A就無權跳轉到B,如果在A中用uses-permission把權限給了A,那麽A就可以跳轉到B了.可以通俗的說,

Python個人學習練習筆記

mymodule.py:   # -*- coding: utf-8 -*- import sys #匯入整個string模組 print sys.path ''' 如果使用 from import sys 則本頁可以直接使用stdout.write() 否則需要sys.std

課程一(Neural Networks and Deep Learning),第一週(Introduction to Deep Learning)—— 0、學習目標

1. Understand the major trends driving the rise of deep learning. 2. Be able to explain how deep learning is applied to supervised learning. 3. Unde

程式設計基本功訓練流程圖畫法練習

對於“程式設計”的工作,許多初學者的理解就是“寫程式碼”。同樣,新手們苦惱的問題是,他們只會“寫程式碼”。當接到一個新的任務,不少人總是在第一時間就爬到鍵盤上去敲程式碼。敲著敲著,就把自己繞糊塗了。頭暈腦脹地堅持下來,程式能執行,阿彌託佛,趕緊撤。這樣做出的程式,並不可靠。 

[深度學習] 《Deep Learning》(深度學習)中文版開放下載

《Deep Learning》(深度學習)是一本皆在幫助學生和從業人員進入機器學習領域的教科書,以開源的形式免費在網路上提供,這本書是由學界領軍人物 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 合力打造

Deep Learning 36python中的一些函式

snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1,0]) 上面這句話的意思是: Xd.keys()取出Xd中的鍵keys,形為('8PSK',-10),故snrs值為:sorted(list(set

Deep Learning 26論文“Maxout Networks”——ICML 2013

論文Maxout Networks實際上非常簡單,只是發現一種新的啟用函式(叫maxout)而已,跟relu有點類似,relu使用的max(x,0)是對每個通道的特徵圖的每一個單元執行的與0比較最大化操作,而maxout是對5個通道的特徵圖在通道的維度上執行最大化操作 這些論文已經有很多前人幫我們解讀了,所

Deep Learning 24論文“Batch-normalized Maxout Network in Network”——mnist錯誤率為0.24%

讀本篇論文“Batch-normalized Maxout Network in Network”的原因在它的mnist錯誤率為0.24%,世界排名第4。並且程式碼是用matlab寫的,本人還沒裝cafe……  理論知識 本文是臺灣新竹國立交通大學的Jia-Ren Chang 寫的,其實要說這篇文章有多在

Deep Learning 25論文“Network in Network”——ICLR 2014

論文Network in network  (ICLR 2014)是對傳統CNN的改進,傳統的CNN就交替的卷積層和池化層的疊加,其中卷積層就是把上一層的輸出與卷積核(即濾波器)卷積,是線性變換,然後再加上一個非線性變換的啟用函式(比如:relu),但是在NIN中並有像CNN中這樣, 1.它們的區別之一是卷

Deep Learning 33論文“Densely Connected Convolutional Networks”-------DenseNet 簡單理解

1 Model created 2 ____________________________________________________________________________________________________ 3 Layer (type) Output Shape P

Deep Learning 29: caffe入門學習

.prototxt檔案:網路結構檔案 solver.prototxt:網路求解檔案 net: "examples/mnist/lenet_train_test.prototxt" //定義網路結構檔案,也就是我們上一步編寫的檔案 test_iter: 100 test_interval: 500

Deep Learning 23dropout理解_論文“Improving neural networks by preventing co-adaptation of feature detectors”

 感覺沒什麼好說的了,該說的在引用的這兩篇部落格裡已經說得很清楚了,直接做試驗吧 注意: 1.在模型的測試階段,使用”mean network(均值網路)”來得到隱含層的輸出,其實就是在網路前向傳播到輸出層前時隱含層節點的輸出值都要減半(如果dropout的比例為p=50%),其理由如下: At