BP神經網絡是1968年由Rumelhart和Mcclelland為首的科學家提出的概念,是一種按照誤差反向傳播算法進行訓練的多層前饋神經網絡,是目前應用比較廣泛的一種神經網絡結構。BP網絡神經網絡由輸入層、隱藏層和輸出層三部分構成,無論隱藏層是一層還是多層,只要是按照誤差反向傳播算法構建起來的網絡(不需要進行預訓練,隨機初始化后直接進行反向傳播),都稱為BP神經網絡。BP神經網絡在單隱層的時候,效率較高,當堆積到多層隱藏層的時候,反向傳播的效率就會大大降低,因此BP神經網絡在淺層神經網路中應用較廣,但由於其隱層數較少,所以映射能力也十分有限,所以淺層結構的BP神經網絡多用於解決一些比較簡單的映射建模問題。
在深層神經網絡中,如果仍采用BP的思想,就得到了BP深層網絡結構,即BP-DNN結構。由於隱藏層數較多(通常在兩層以上),損失函數關於W,b的偏導自頂而下逐層衰減,等傳播到最底層的隱藏層時,損失函數關於W,b的偏導就幾乎為零了。如此訓練,效率太低,需要進行很長很長時間的訓練才行,並且容易產生局部最優問題。因此,便有了一些對BP-DNN進行改進的方法,例如,采用ReLU的激活函數來代替傳統的sigmoid函數,可以有效地提高訓練的速度。此外,除了隨機梯度下降的反向傳播算法,還可以采用一些其他的高效的優化算法,例如小批量梯度下降算法(Mini-batch Gradient Descent)、沖量梯度下降算法等,也有利於改善訓練的效率問題。直到2006年,Hinton提出了逐層貪婪預訓練受限玻爾茲曼機的方法,大大提高了訓練的效率,並且很好地改善了局部最優的問題,算是開啟了深度神經網絡發展的新時代。Hinton將這種基於玻爾茲曼機預訓練的結構稱為深度置信網絡結構(DBN),用深度置信網絡構建而成的DNN結構,就是本文要重點介紹的一種標准型的DNN結構,即DBN-DNN。
深度置信神經網絡
如圖一所示,以3層隱藏層結構的DBN-DNN為例,網絡一共由3個受限玻爾茲曼機(RBM,Restricted Boltzmann Machine)單元堆疊而成,其中RBM一共有兩層,上層為隱層,下層為顯層。堆疊成DNN的時,前一個RBM的輸出層(隱層)作為下一個RBM單元的輸入層(顯層),依次堆疊,便構成了基本的DBN結構,最后再添加一層輸出層,就是最終的DBN-DNN結構。
圖一 深度置信神經網絡(DBN-DNN)結構
受限玻爾茲曼機(RBM)是一種具有隨機性的生成神經網絡結構,它本質上是一種由具有隨機性的一層可見神經元和一層隱藏神經元所構成的無向圖模型。它只有在隱藏層和可見層神經元之間有連接,可見層神經元之間以及隱藏層神經元之間都沒有連接。並且,隱藏層神經元通常取二進制並服從伯努利分布,可見層神經元可以根據輸入的類型取二進制或者實數值。
進一步地,根據可見層(v)和隱藏層(h)的取值不同,可將RBM分成兩大類,如果v和h都是二值分布,那么它就是Bernoulli-Bernoulli RBM(貝努力-貝努力RBM);如果v是實數,比如語音特征,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訓練與反向調優
1.進行基於RBM的無監督預訓練
利用CD-k算法(Contrastive Divergence,對比散度算法)進行權值初始化如下,Hinton 發現k取為1時,就可以有不錯的學習效果。
1)隨機初始化權值{W,a,b},其中W為權重向量,a是可見層的偏置向量,b為隱藏層的偏置向量,隨機初始化為較小的數值(可為0)
其中,M為顯元的個數,N為隱元的個數。可初始化為來自正態分布N(0 , 0.01)的隨機數,初始化
,其中
表示訓練樣本中第i個樣本處於激活狀態(即取值為1)的樣本所占的比例,而
可以直接初始化為0。隱元和顯元值的計算可以表示如下:
2)將賦給顯層
,計算它使隱層神經元被開啟的概率:
(對於高斯或貝努力可見層神經元)
其中,式中的上標用於區別不同的向量,下標用於區別同一向量中的不同維。
3)根據計算的概率分布進行一步Gibbs抽樣,對隱藏層中的每個單元從{0 , 1}中抽取得到相應的值,即。詳細過程如下:
首先,產生一個[0 , 1]上的隨機數,然后確定
的值如下:

4)用重構顯層,需先計算概率密度,再進行Gibbs抽樣:
(對於貝葉斯可見層神經元)
(對於高斯可見層神經元)
其中,N表示為正態分布函數。
5)根據計算到的概率分布,再一次進行一步Gibbs采樣,來對顯層中的神經元從{0 , 1}中抽取相應的值來進行采樣重構,即。詳細過程如下:
首先,產生[0 , 1]上的隨機數,然后確定的值:
6)再次用顯元(重構后的),計算出隱層神經元被開啟的概率:
(對於高斯或者貝努力可見層神經元)
7)更新得到新的權重和偏置。



需要說明的是,RBM的訓練,實際上是求出一個最能產生訓練樣本的概率分布。也就是說,要求一個分布,在這個分布里,訓練樣本的概率最大。由於這個分布的決定性因素在於權值W,所以我們訓練的目標就是尋找最佳的權值,以上便是Hinton於2002年提出的名為對比散度學習算法,來尋找最佳的權值。
在圖一中,利用CD算法進行預訓練時,只需要迭代計算RBM1,RBM2和RBM3三個單元的W,a,b值,最后一個BP單元的W和b值,直接采用隨機初始化的值即可。通常,我們把由RBM1,RBM2和RBM3構成的結構稱為DBN結構(深度置信網絡結構),最后再加上一層輸出層(BP層)后,便構成了標准型的DNN結構:DBN-DNN。
2.有監督反向調參
進行有監督的調優訓練時,需要先利用前向傳播算法,從輸入得到一定的輸出值,然后再利用后向傳播算法來更新網絡的權重值和偏置值。
1.前向傳播
1)利用CD算法預訓練好的W,b來確定相應隱元的開啟和關閉。
計算每個隱元的激勵值如下:

其中,為神經網絡的層數索引。而W和b的值如下:


其中,代表從第i個顯元到第j個隱元的權重,M代表顯元的個數,N代表隱元的個數。
2)逐層向上傳播,一層層地將隱藏層中每個隱元的激勵值計算出來並用sigmoid函數完成標准化,如下所示:

當然,上述是以sigmoid函數作為激活函數的標准化過程為例。
3)最后計算出輸出層的激勵值和輸出。


其中,輸出層的激活函數為,
為輸出層的輸出值。
2.反向傳播
1)采用最小均方誤差准則的反向誤差傳播算法來更新整個網絡的參數,則代價函數如下:





2)采用梯度下降法,來更新網絡的權重和偏置參數,如下所示:

其中,為學習效率。
以上便是構建整個DBN-DNN結構的兩大關鍵步驟:無監督預訓練和有監督調優訓練。選擇好合適的隱層數、層神經單元數以及學習率,分別迭代一定的次數進行訓練,就會得到我們最終想要的DNN映射模型。