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

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

2018-06-28    來(lái)源:raincent

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

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

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

基礎(chǔ)和符號(hào)

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

 

 

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

 

 

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

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

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

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

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

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

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

 

 

前向傳播

 

 

反向傳播

權(quán)重W初始化

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

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

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

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

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

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

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

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

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

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

最佳實(shí)踐

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

2.對(duì)于深度網(wǎng)絡(luò),可以使用啟發(fā)式來(lái)根據(jù)非線性激活函數(shù)初始化權(quán)重。在這里,并不是從標(biāo)準(zhǔn)正態(tài)分布繪圖,而是用方差為k /n的正態(tài)分布初始化W,其中k的值取決于激活函數(shù)。盡管這些啟發(fā)式方法不能完全解決梯度消失/爆炸問(wèn)題,但它們?cè)诤艽蟪潭壬嫌兄诰徑膺@一問(wèn)題。最常見(jiàn)的啟發(fā)式方法是:

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

 

 

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

 

 

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

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

 

 

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

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

需要注意的一點(diǎn)是,就是上述內(nèi)容都是談的權(quán)重W的各種初始化方法,并沒(méi)有介紹任何偏置b的初始化方法。這是因?yàn)槊繉悠玫奶荻葍H取決于該層的線性激活值,而不取決于較深層的梯度值。因此,對(duì)于偏置項(xiàng)不會(huì)存在梯度消失和梯度爆炸問(wèn)題。如前所述,可以安全地將偏置b初始化為0。

結(jié)論

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

參考

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

作者信息

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

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

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

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

上一篇:將會(huì)改變?nèi)藗儗?duì)大數(shù)據(jù)增長(zhǎng)看法的10個(gè)圖表

下一篇:DeepMind CEO哈比薩斯出任英國(guó)政府AI辦公室顧問(wèn)