梯度弥散
在深度神經(jīng)網(wǎng)絡(luò)中經(jīng)常聽說梯度彌散,下面就介紹一下,并搜集了當(dāng)時(shí)的科學(xué)家是怎樣避免的
梯度彌散問題
梯度下降法(以及相關(guān)的L-BFGS算法等)在使用隨機(jī)初始化權(quán)重的深度網(wǎng)絡(luò)上效果不好的技術(shù)原因是:梯度會(huì)變得非常小。具體而言,當(dāng)使用反向傳播方法計(jì)算導(dǎo)數(shù)的時(shí)候,隨著網(wǎng)絡(luò)的深度的增加,反向傳播的梯度(從輸出層到網(wǎng)絡(luò)的最初幾層)的幅度值會(huì)急劇地減小。結(jié)果就造成了整體的損失函數(shù)相對(duì)于最初幾層的權(quán)重的導(dǎo)數(shù)非常小。這樣,當(dāng)使用梯度下降法的時(shí)候,最初幾層的權(quán)重變化非常緩慢,以至于它們不能夠從樣本中進(jìn)行有效的學(xué)習(xí)。這種問題通常被稱為“梯度的彌散”.
與梯度彌散問題緊密相關(guān)的問題是:當(dāng)神經(jīng)網(wǎng)絡(luò)中的最后幾層含有足夠數(shù)量神經(jīng)元的時(shí)候,可能單獨(dú)這幾層就足以對(duì)有標(biāo)簽數(shù)據(jù)進(jìn)行建模,而不用最初幾層的幫助。因此,對(duì)所有層都使用隨機(jī)初始化的方法訓(xùn)練得到的整個(gè)網(wǎng)絡(luò)的性能將會(huì)與訓(xùn)練得到的淺層網(wǎng)絡(luò)(僅由深度網(wǎng)絡(luò)的最后幾層組成的淺層網(wǎng)絡(luò))的性能相似。
梯度彌散一直是困擾著深度神經(jīng)網(wǎng)絡(luò)的發(fā)展,那么如何解決梯度彌散問題呢?多倫多大學(xué)的Geoff Hinton提出了設(shè)想:受限玻爾茲曼機(jī)(RBM),即一類具有兩層結(jié)構(gòu)的、對(duì)稱鏈接無自反饋的隨機(jī)神經(jīng)網(wǎng)絡(luò)模型, 層與層之間是全連接,層內(nèi)無鏈接 ,從而形成一個(gè)二分圖。
 
 
RBM是一種有效的特征提取方法,常用于初始化前饋神經(jīng)網(wǎng)絡(luò),可明顯提高泛化能力。而由多個(gè)RBM結(jié)構(gòu)堆疊而成的深度信念網(wǎng)絡(luò)能提取出更好更抽象的特征,從而用來分類。
 
 ? ? 最后,再為大家總結(jié)描述一下RBM算法的過程:
a)?正向過程,對(duì)每個(gè)可見層的輸入,都要結(jié)合了一個(gè)單邊的權(quán)重和一個(gè)可見層的偏置,按隱藏層的條件概率公式計(jì)算出結(jié)果傳到隱藏層,有些節(jié)點(diǎn)可能會(huì)被激活,有的則可能不會(huì)被激活;
b)在反向過程中,對(duì)每個(gè)激活的隱藏層節(jié)點(diǎn),也結(jié)合了一個(gè)單邊的權(quán)重和一個(gè)隱藏層的偏置,按可見層的條件概率公式重構(gòu)可見層輸入;
c)?在可見層,將重構(gòu)輸入與原始輸入進(jìn)行比較,早期是用KL散度方法進(jìn)行兩個(gè)概率分布差異度量,現(xiàn)在也引入了效率更高的CD散度來進(jìn)行度量。根據(jù)比較結(jié)果,更新權(quán)值和偏置。
重復(fù)步驟a)到步驟c),直至重構(gòu)的輸入與原始輸入的盡可能的接近。
根據(jù)RBM產(chǎn)生的DBM(deep Boltzmann Machine),DBN(deep Belief Nets),CAE(covolutional Auto-Encode),DAE(denoise Auto-Encode ),SAE(Stacked Auto-Encode)等都是利用的是逐層貪婪的訓(xùn)練方法, 在一隱含層訓(xùn)練穩(wěn)定時(shí)在向下一層進(jìn)行訓(xùn)練學(xué)習(xí)達(dá)到穩(wěn)定,依次類推,是一種堆疊的模式(stacked)。
 
Deep Neural Networks的問題:
- 以前機(jī)器學(xué)習(xí)的數(shù)據(jù)量不是很大(標(biāo)記數(shù)據(jù)更少),而DNN待學(xué)習(xí)的參數(shù)非常的多(Andrew Ng在Google搞的那個(gè)有1.15billion個(gè)參數(shù)),這樣就會(huì)出現(xiàn)嚴(yán)重的過擬合現(xiàn)象;這也是DNN之前沒有像現(xiàn)在這樣火的原因之一(難以訓(xùn)練,計(jì)算復(fù)雜度高等也是原因)。
- 層數(shù)多了以后,梯度下降的優(yōu)化過程就變成非凸優(yōu)化,比較容易陷入局部極值;(關(guān)于凸優(yōu)化,非凸優(yōu)化的區(qū)別可以參考http://hi.baidu.com/tuenmei/item/beedffa6714dce228819d329)
- 層數(shù)多以后,會(huì)出現(xiàn)梯度彌散(diffusion of gradients)的現(xiàn)象:梯度下降法(以及相關(guān)的L-BFGS算法等)在使用隨機(jī)初始化權(quán)重的深度網(wǎng)絡(luò)上效果不好的技術(shù)原因是:梯度會(huì)變得非常小。具體而言,當(dāng)使用反向傳播方法計(jì)算導(dǎo)數(shù)的時(shí)候,隨著網(wǎng)絡(luò)的深度的增加,反向傳播的梯度(從輸出層到網(wǎng)絡(luò)的最初幾層)的幅度值會(huì)急劇地減小。結(jié)果就造成了整體的損失函數(shù)相對(duì)于最初幾層的權(quán)重的導(dǎo)數(shù)非常小。這樣,當(dāng)使用梯度下降法的時(shí)候,最初幾層的權(quán)重變化非常緩慢,以至于它們不能夠從樣本中進(jìn)行有效的學(xué)習(xí)。這種問題通常被稱為“梯度的彌散”(http://ufldl.stanford.edu/wiki/index.php/深度網(wǎng)絡(luò)概覽)。
- 利用未標(biāo)記的數(shù)據(jù),提出自編碼器(Auto Encoder,包括Forward Neural Networks,Restricted Boltzmann Machine),采用逐層學(xué)習(xí)的方式(layer-wise的pretraining);
- 減少參數(shù),提出CNN (Convolution Neural Networks)。
針對(duì)梯度彌散如何去更好的解決也僅限于Hinton的RBM的那種設(shè)計(jì)。
以下是在知乎上看到的
dnn 從名字上你就可以看出來,是深度神經(jīng)網(wǎng)絡(luò),類比于淺層神經(jīng)網(wǎng)絡(luò),它的訓(xùn)練方法也是BP,沒有引入無監(jiān)督的預(yù)訓(xùn)練。隱層的激活函數(shù)使用了 ReLU,改善了“梯度彌散”,通過正則化+dropout 改善了過擬合的現(xiàn)象,在輸出層 是softmax 作為激活函數(shù)。目標(biāo)函數(shù)是交叉熵。
他是一個(gè) 有監(jiān)督的判別模型。
stacked denoised autoencoder (SDA)深度學(xué)習(xí)結(jié)構(gòu),和DBN類似 使用 無監(jiān)督的網(wǎng)絡(luò)“堆疊”起來的,他有分層預(yù)訓(xùn)練來尋找更好的參數(shù),最后使用BP來微調(diào)網(wǎng)絡(luò)。比dnn利用各種算法來初始化權(quán)值矩陣,從經(jīng)驗(yàn)上來看是有幫助的。但是缺點(diǎn)也很明顯,每層的貪婪學(xué)習(xí)權(quán)值矩陣,也帶來了過長(zhǎng)的訓(xùn)練時(shí)間。在大量的數(shù)據(jù)面前 dnn(relu)的效果已經(jīng)不差于預(yù)訓(xùn)練的深度學(xué)習(xí)結(jié)構(gòu)了。最終DBN也是看成是“生成模型”。
CNN 也沒有pre-train過程,訓(xùn)練算法也是用BP。 因?yàn)榧尤刖矸e 可以更好的處理2D數(shù)據(jù),例如圖像和語音。并且目前看來 相比其它網(wǎng)絡(luò)有更好的表現(xiàn)。dnn/dbn/sda 等都是處理1D的數(shù)據(jù)。
CNN解決梯度彌散是使用的權(quán)值共享的策略。
補(bǔ)充:
今天再看RNN 時(shí)遇到一個(gè)關(guān)于梯度爆炸的概念
和梯度彌散的問題相反,這時(shí)候梯度會(huì)在?BP?的時(shí)候發(fā)生指數(shù)級(jí)地增長(zhǎng)。也就是說,遇到了梯度爆炸的問題。
 
 
總結(jié)
 
                            
                        - 上一篇: Lua pairs与ipairs效率分析
- 下一篇: 自媒体初学者如何正确学习视频剪辑【视频制
