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

深度學習最佳實踐系列——權重w初始化

2018-06-28    來源:raincent

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

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

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

基礎和符號

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

 

 

除了權重和偏置之外,在訓練過程中,還會計算以下中間變量

 

 

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

1.初始化權重和偏置。

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

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

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

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

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

 

 

前向傳播

 

 

反向傳播

權重W初始化

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

1.將所有權重初始化為0

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

2.隨機初始化權重

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

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

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

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

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

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

最佳實踐

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

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

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

 

 

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

 

 

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

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

 

 

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

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

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

結(jié)論

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

參考

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

作者信息

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

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

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

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

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

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