中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

深度學(xué)習(xí)最佳實踐系列——權(quán)重w初始化

2018-06-28    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
作為深度學(xué)習(xí)的初學(xué)者,我有意識到的一件事情,即網(wǎng)絡(luò)上沒有太多的在線文檔能夠涵蓋所有深層次的學(xué)習(xí)技巧。都是一些比較零碎的實踐技巧,比如權(quán)重初始化、正則化及循環(huán)學(xué)習(xí)率等,這些可以使得訓(xùn)練和調(diào)試神經(jīng)網(wǎng)絡(luò)變得更容易和更高效。本系列博客內(nèi)容將盡可能多地介紹一些實踐細節(jié),以便你更容易實現(xiàn)深度學(xué)習(xí)方法。

在撰寫本文時,假定讀者已經(jīng)對如何訓(xùn)練神經(jīng)網(wǎng)絡(luò)有著一個基本的理解。理解權(quán)重(weight)、偏置(bias)、隱藏層(hidden layer)、激活函數(shù)(activation function)等內(nèi)容將使你看本篇文章會更加清晰。如果你想建立一個深度學(xué)習(xí)的基礎(chǔ),推薦這門課程。

注明:本文提到神經(jīng)網(wǎng)絡(luò)的層時,表示的是一個簡單的神經(jīng)網(wǎng)絡(luò)層,即全連接層。當然,本文所講解的一些方法也適用于卷積和循環(huán)神經(jīng)網(wǎng)絡(luò)。在本文中,將討論與權(quán)重矩陣初始化相關(guān)的問題以及如何減輕它們的方法。在此之前,先介紹一些將要使用的基本知識和符號。

基礎(chǔ)和符號

考慮一個L層神經(jīng)網(wǎng)絡(luò),它具有L-1個隱藏層和1個輸出層。第l層的參數(shù)(權(quán)重和偏置)表示為

 

 

除了權(quán)重和偏置之外,在訓(xùn)練過程中,還會計算以下中間變量

 

 

一個神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程一般由以下4個步驟組成:

1.初始化權(quán)重和偏置。

2.前向傳播(forward propagation):使用輸入X,權(quán)重W和偏置b,對于每一層計算Z和A。在最后一層中,計算f(A ^(L-1)),它可能會是S形函數(shù)softmax或線性函數(shù)的A ^(L-1),并得到預(yù)測值y_hat。

3.計算損失函數(shù)(loss function):該函數(shù)是理想標簽y和預(yù)測標簽y_hat二者的函數(shù),它表明預(yù)測值離實際目標值有多大差距,訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的目的就是要盡量減少損失函數(shù)的值。

4.反向傳播(back propagation):在這一過程中,需要計算損失函數(shù)f(y,y_hat)相對于A、W和b的梯度,分別稱為dA、dW和db。使用這些梯度值,將參數(shù)的值從最后一層反向更新到第一層。

5.對n次迭代重復(fù)步驟2-4,直到我們覺得已經(jīng)最小化了損失函數(shù),且沒有過擬合訓(xùn)練數(shù)據(jù)時則表明訓(xùn)練結(jié)束。

下面快速瀏覽第2步、第3步和第4步。以一個2層網(wǎng)絡(luò)為例,即只有一個隱藏層。(注意,為了簡單起見,在這里沒有添加偏置):

 

 

前向傳播

 

 

反向傳播

權(quán)重W初始化

建立網(wǎng)絡(luò)時首先需要注意的是要正確初始化權(quán)重矩陣。下面讓我們考慮在訓(xùn)練模型時可能導(dǎo)致出現(xiàn)問題的兩種初始化情況:

1.將所有權(quán)重初始化為0

這樣的操作將使得模型等價于一個線性模型。將所有權(quán)重設(shè)為0時,對于W ^ l中的每個w而言,損失函數(shù)的導(dǎo)數(shù)都是相同的,因此在隨后的迭代中所有權(quán)重具有相同的值,這會使得隱藏單元變得對稱,并繼續(xù)運行設(shè)置的n次迭代。因此,將權(quán)重設(shè)置為零會使得網(wǎng)絡(luò)的性能并不比線性模型更好。值得注意的是,將偏置設(shè)置為0不會產(chǎn)生任何麻煩,因為非零權(quán)重可以打破對稱性,即使偏置為0,每個神經(jīng)元的值仍然不同。

2.隨機初始化權(quán)重

按照標準正態(tài)分布(Python中可以用np.random.randn(size_l,size_l-1)實現(xiàn))隨機初始化權(quán)重可能會導(dǎo)致2個問題——梯度消失(vanishing gradient)或梯度爆炸(exploding gradient):

a)梯度消失——對于深度網(wǎng)絡(luò),任何激活函數(shù)abs(dW)值將隨著反向傳播過程中每一層向后移動而變得越來越小。在這種情況下,較早的層次變化是最慢的。

權(quán)重更新較小,進而導(dǎo)致收斂速度變慢,這使會使得損失函數(shù)的優(yōu)化變得緩慢。在最壞的情況下,可能會完全停止神經(jīng)網(wǎng)絡(luò)的進一步訓(xùn)練。

更具體地說,在sigmoid(z)和tanh(z)的情況下,如果權(quán)重值很大,那么梯度將會很小,從而有效地防止權(quán)重改變它們的值,這是因為abs(dW)每次迭代后會稍微增加或者變得越來越小。使用RELU(z)作為激活函數(shù)時,梯度消失通常不會成為問題,因為負(和零)輸入的梯度值總為0,其正輸入時梯度的值總為1。

b)梯度爆炸——這與梯度消失完全相反。假設(shè)你有非負的、大的權(quán)重值和小的激活值A(chǔ)(可能是sigmoid(z)的情況)。當這些權(quán)重沿著層次相乘時,會導(dǎo)致?lián)p失函數(shù)發(fā)生較大變化。因此,梯度值也會很大,這意味著W的變化將大幅增加W-?* dW。

這可能導(dǎo)致模型在最小值附近一直振蕩,一次又一次錯過了最佳值,模型將永遠不會得到最好的學(xué)習(xí)!梯度爆炸的另一個影響是梯度的超大值可能會導(dǎo)致數(shù)字溢出,從而導(dǎo)致不正確的計算或引入NaN,這也可能導(dǎo)致出現(xiàn)損失值為NaN的情況。

最佳實踐

1.使用RELU/leaky RELU作為激活函數(shù),因為它對梯度消失/爆炸問題(特別是對于不太深的網(wǎng)絡(luò)而言)相對健壯。在 leaky RELU作為激活函數(shù)的情況下,從來不會有梯度為0的時候,因此模型參數(shù)更新將永遠不會停止,訓(xùn)練仍會繼續(xù)訓(xùn)練。

2.對于深度網(wǎng)絡(luò),可以使用啟發(fā)式來根據(jù)非線性激活函數(shù)初始化權(quán)重。在這里,并不是從標準正態(tài)分布繪圖,而是用方差為k /n的正態(tài)分布初始化W,其中k的值取決于激活函數(shù)。盡管這些啟發(fā)式方法不能完全解決梯度消失/爆炸問題,但它們在很大程度上有助于緩解這一問題。最常見的啟發(fā)式方法是:

a)對于RELU(z)——將隨機生成的W值乘以:

 

 

b)對于tanh(z) ——也被稱為Xavier初始化。與前一個方法類似,但k的值設(shè)置為1而不是設(shè)置為2。

 

 

在TensorFlow中可以用W = tf.get_variable('W',[dims],initializer)實現(xiàn),其中initializer = tf.contrib.layers.xavier_initializer( )。

c)另一個常用的啟發(fā)式方法:

 

 

這些方法都可以作為權(quán)重w初始化方法,都有緩解爆炸或消失梯度的可能性。這樣設(shè)置的權(quán)重w既不會太大,也不會太小于1。因此,梯度不會消失或爆炸,有助于避免收斂緩慢,同時確保模型不會一直在最小值附近搖晃。當然,還存在上述方法的其它變體,大致的思想都是使參數(shù)的方差最小化。

3.梯度剪枝——這是處理梯度爆炸問題的另一種方法。我們可以設(shè)置一個閾值,如果一個梯度的選擇函數(shù)大于這個設(shè)定的閾值,那么我們就將它設(shè)置為另一個值。例如,如果l2_norm(W)>閾值,則將L2范數(shù)超過特定閾值時的梯度值歸一化為-W = W * threshold / l2_norm(W)。

需要注意的一點是,就是上述內(nèi)容都是談的權(quán)重W的各種初始化方法,并沒有介紹任何偏置b的初始化方法。這是因為每層偏置的梯度僅取決于該層的線性激活值,而不取決于較深層的梯度值。因此,對于偏置項不會存在梯度消失和梯度爆炸問題。如前所述,可以安全地將偏置b初始化為0。

結(jié)論

在本文中,著重介紹了權(quán)重初始化方法以及一些緩解技術(shù)。如果本文漏掉了一些與此主題相關(guān)的任何其他有用的見解,希望讀者在留言出指出。在接下來的博客中,將進一步討論正則化方法,以減少過擬合和梯度檢查——這是一種使調(diào)試更簡單的技巧。

參考

  • 1.深層神經(jīng)權(quán)重初始化;
  • 2.神經(jīng)網(wǎng)絡(luò):bp訓(xùn)練算法;
  • 3.神經(jīng)網(wǎng)絡(luò)梯度爆炸簡介;
  • 4.梯度消失問題;
  • 5.為什么梯度爆炸對于RNN模型是一個大問題;

作者信息

Neerja Doshi,數(shù)據(jù)科學(xué),計算機視覺專業(yè)

文章原標題《Deep Learning Best Practices – Weight Initialization》,譯者:海棠

標簽: 安全 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:將會改變?nèi)藗儗Υ髷?shù)據(jù)增長看法的10個圖表

下一篇:DeepMind CEO哈比薩斯出任英國政府AI辦公室顧問