八.DBN深度置信网络
BP神經(jīng)網(wǎng)絡是1968年由Rumelhart和Mcclelland為首的科學家提出的概念,是一種按照誤差反向傳播算法進行訓練的多層前饋神經(jīng)網(wǎng)絡,是目前應用比較廣泛的一種神經(jīng)網(wǎng)絡結構。BP網(wǎng)絡神經(jīng)網(wǎng)絡由輸入層、隱藏層和輸出層三部分構成,無論隱藏層是一層還是多層,只要是按照誤差反向傳播算法構建起來的網(wǎng)絡(不需要進行預訓練,隨機初始化后直接進行反向傳播),都稱為BP神經(jīng)網(wǎng)絡。BP神經(jīng)網(wǎng)絡在單隱層的時候,效率較高,當堆積到多層隱藏層的時候,反向傳播的效率就會大大降低,因此BP神經(jīng)網(wǎng)絡在淺層神經(jīng)網(wǎng)路中應用較廣,但由于其隱層數(shù)較少,所以映射能力也十分有限,所以淺層結構的BP神經(jīng)網(wǎng)絡多用于解決一些比較簡單的映射建模問題。
??在深層神經(jīng)網(wǎng)絡中,如果仍采用BP的思想,就得到了BP深層網(wǎng)絡結構,即BP-DNN結構。由于隱藏層數(shù)較多(通常在兩層以上),損失函數(shù)關于W,b的偏導自頂而下逐層衰減,等傳播到最底層的隱藏層時,損失函數(shù)關于W,b的偏導就幾乎為零了。如此訓練,效率太低,需要進行很長很長時間的訓練才行,并且容易產(chǎn)生局部最優(yōu)問題。因此,便有了一些對BP-DNN進行改進的方法,例如,采用ReLU的激活函數(shù)來代替?zhèn)鹘y(tǒng)的sigmoid函數(shù),可以有效地提高訓練的速度。此外,除了隨機梯度下降的反向傳播算法,還可以采用一些其他的高效的優(yōu)化算法,例如小批量梯度下降算法(Mini-batch Gradient Descent)、沖量梯度下降算法等,也有利于改善訓練的效率問題。直到2006年,Hinton提出了逐層貪婪預訓練受限玻爾茲曼機的方法,大大提高了訓練的效率,并且很好地改善了局部最優(yōu)的問題,算是開啟了深度神經(jīng)網(wǎng)絡發(fā)展的新時代。Hinton將這種基于玻爾茲曼機預訓練的結構稱為深度置信網(wǎng)絡結構(DBN),用深度置信網(wǎng)絡構建而成的DNN結構,就是本文要重點介紹的一種標準型的DNN結構,即DBN-DNN。
深度置信神經(jīng)網(wǎng)絡
如圖一所示,以3層隱藏層結構的DBN-DNN為例,網(wǎng)絡一共由3個受限玻爾茲曼機(RBM,Restricted Boltzmann Machine)單元堆疊而成,其中RBM一共有兩層,上層為隱層,下層為顯層。堆疊成DNN的時,前一個RBM的輸出層(隱層)作為下一個RBM單元的輸入層(顯層),依次堆疊,便構成了基本的DBN結構,最后再添加一層輸出層,就是最終的DBN-DNN結構。
圖一 深度置信神經(jīng)網(wǎng)絡(DBN-DNN)結構
??受限玻爾茲曼機(RBM)是一種具有隨機性的生成神經(jīng)網(wǎng)絡結構,它本質(zhì)上是一種由具有隨機性的一層可見神經(jīng)元和一層隱藏神經(jīng)元所構成的無向圖模型。它只有在隱藏層和可見層神經(jīng)元之間有連接,可見層神經(jīng)元之間以及隱藏層神經(jīng)元之間都沒有連接。并且,隱藏層神經(jīng)元通常取二進制并服從伯努利分布,可見層神經(jīng)元可以根據(jù)輸入的類型取二進制或者實數(shù)值。
??進一步地,根據(jù)可見層(v)和隱藏層(h)的取值不同,可將RBM分成兩大類,如果v和h都是二值分布,那么它就是Bernoulli-Bernoulli RBM(貝努力-貝努力RBM);如果v是實數(shù),比如語音特征,h為二進制,那么則為Gaussian-Bernoulli RBM(高斯-貝努力RBM)。因此,圖一中的RBM1為高斯-貝努力,RBM2和RBM3都是貝努力-貝努力RBM。
??既然提到了受限玻爾茲曼機(RBM),就不得不說一下,基于RBM構建的兩種模型:DBN和DBM。如圖二所示,DBN模型通過疊加RBM進行逐層預訓練時,某層的分布只由上一層決定。例如,DBN的v層依賴于h1的分布,h1只依賴于h2的分布,也就是說,h1的分布不受v的影響,確定了v的分布,h1的分布只由h2來確定。而DBM模型為無向圖結構,也就是說,DBM的h1層是由h2層和v層共同決定的,它是雙向的。如果從效果來看,DBM結構會比DBN結構具有更好的魯棒性,但是其求解的復雜度太大,需要將所有的層一起訓練,不太利于應用。而DBN結構,如果借用RBM逐層預訓練的方法,就方便快捷了很多,便于應用,因此應用的比較廣泛。
DBN訓練與反向調(diào)優(yōu)
1.進行基于RBM的無監(jiān)督預訓練
利用CD-k算法(Contrastive Divergence,對比散度算法)進行權值初始化如下,Hinton 發(fā)現(xiàn)k取為1時,就可以有不錯的學習效果。
1)隨機初始化權值{W,a,b},其中W為權重向量,a是可見層的偏置向量,b為隱藏層的偏置向量,隨機初始化為較小的數(shù)值(可為0)
其中,M為顯元的個數(shù),N為隱元的個數(shù)。可初始化為來自正態(tài)分布N(0 , 0.01)的隨機數(shù),初始化,其中表示訓練樣本中第i個樣本處于激活狀態(tài)(即取值為1)的樣本所占的比例,而可以直接初始化為0。隱元和顯元值的計算可以表示如下:
2)將賦給顯層,計算它使隱層神經(jīng)元被開啟的概率:
(對于高斯或貝努力可見層神經(jīng)元)
其中,式中的上標用于區(qū)別不同的向量,下標用于區(qū)別同一向量中的不同維。
3)根據(jù)計算的概率分布進行一步Gibbs抽樣,對隱藏層中的每個單元從{0 , 1}中抽取得到相應的值,即。詳細過程如下:
??首先,產(chǎn)生一個[0 , 1]上的隨機數(shù),然后確定的值如下:
4)用重構顯層,需先計算概率密度,再進行Gibbs抽樣:
(對于貝葉斯可見層神經(jīng)元)
(對于高斯可見層神經(jīng)元)
其中,N表示為正態(tài)分布函數(shù)。
5)根據(jù)計算到的概率分布,再一次進行一步Gibbs采樣,來對顯層中的神經(jīng)元從{0 , 1}中抽取相應的值來進行采樣重構,即。詳細過程如下:
??首先,產(chǎn)生[0 , 1]上的隨機數(shù),然后確定的值:
6)再次用顯元(重構后的),計算出隱層神經(jīng)元被開啟的概率:
(對于高斯或者貝努力可見層神經(jīng)元)
7)更新得到新的權重和偏置。
其中,為學習率。
需要說明的是,RBM的訓練,實際上是求出一個最能產(chǎn)生訓練樣本的概率分布。也就是說,要求一個分布,在這個分布里,訓練樣本的概率最大。由于這個分布的決定性因素在于權值W,所以我們訓練的目標就是尋找最佳的權值,以上便是Hinton于2002年提出的名為對比散度學習算法,來尋找最佳的權值。
在圖一中,利用CD算法進行預訓練時,只需要迭代計算RBM1,RBM2和RBM3三個單元的W,a,b值,最后一個BP單元的W和b值,直接采用隨機初始化的值即可。通常,我們把由RBM1,RBM2和RBM3構成的結構稱為DBN結構(深度置信網(wǎng)絡結構),最后再加上一層輸出層(BP層)后,便構成了標準型的DNN結構:DBN-DNN。
2.有監(jiān)督反向調(diào)參
進行有監(jiān)督的調(diào)優(yōu)訓練時,需要先利用前向傳播算法,從輸入得到一定的輸出值,然后再利用后向傳播算法來更新網(wǎng)絡的權重值和偏置值。
1.前向傳播
1)利用CD算法預訓練好的W,b來確定相應隱元的開啟和關閉。
??計算每個隱元的激勵值如下:
其中,為神經(jīng)網(wǎng)絡的層數(shù)索引。而W和b的值如下:
,
其中,代表從第i個顯元到第j個隱元的權重,M代表顯元的個數(shù),N代表隱元的個數(shù)。
2)逐層向上傳播,一層層地將隱藏層中每個隱元的激勵值計算出來并用sigmoid函數(shù)完成標準化,如下所示:
當然,上述是以sigmoid函數(shù)作為激活函數(shù)的標準化過程為例。
3)最后計算出輸出層的激勵值和輸出。
其中,輸出層的激活函數(shù)為,為輸出層的輸出值。
2.反向傳播
1)采用最小均方誤差準則的反向誤差傳播算法來更新整個網(wǎng)絡的參數(shù),則代價函數(shù)如下:
其中,E為DNN學習的平均平方誤差,和分別表示了輸出層的輸出和理想的輸出,i為樣本索引。表示在層的有待學習的權重和偏置的參數(shù)。
2)采用梯度下降法,來更新網(wǎng)絡的權重和偏置參數(shù),如下所示:
其中,為學習效率。
以上便是構建整個DBN-DNN結構的兩大關鍵步驟:無監(jiān)督預訓練和有監(jiān)督調(diào)優(yōu)訓練。選擇好合適的隱層數(shù)、層神經(jīng)單元數(shù)以及學習率,分別迭代一定的次數(shù)進行訓練,就會得到我們最終想要的DNN映射模型。
總結
以上是生活随笔為你收集整理的八.DBN深度置信网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四种Java脚本语言
- 下一篇: 自己的房子大但只有两层,白虎方的房子占地