您好,登錄后才能下訂單哦!
大數(shù)據(jù)中梯度消失與梯度膨脹以及6種解決措施分別是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
根據(jù)鏈?zhǔn)椒▌t,如果每一層神經(jīng)元對上一層的輸出的偏導(dǎo)乘上權(quán)重結(jié)果都小于1的話,那么即使這個結(jié)果是0.99,在經(jīng)過足夠多層傳播之后,誤差對輸入層的偏導(dǎo)會趨于0。
這種情況會導(dǎo)致靠近輸入層的隱含層神經(jīng)元調(diào)整極小。
根據(jù)鏈?zhǔn)椒▌t,如果每一層神經(jīng)元對上一層的輸出的偏導(dǎo)乘上權(quán)重結(jié)果都大于1的話,在經(jīng)過足夠多層傳播之后,誤差對輸入層的偏導(dǎo)會趨于無窮大。
這種情況又會導(dǎo)致靠近輸入層的隱含層神經(jīng)元調(diào)整變動極大。
本文提供6種常見的解決梯度消失和膨脹的方法,歡迎閱讀學(xué)習(xí)。
此方法來自Hinton在2006年發(fā)表的一篇論文,Hinton為了解決梯度的問題,提出采取無監(jiān)督逐層訓(xùn)練方法,其基本思想是每次訓(xùn)練一層隱節(jié)點(diǎn),訓(xùn)練時將上一層隱節(jié)點(diǎn)的輸出作為輸入,而本層隱節(jié)點(diǎn)的輸出作為下一層隱節(jié)點(diǎn)的輸入,此過程就是逐層“預(yù)訓(xùn)練”(pre-training);在預(yù)訓(xùn)練完成后,再對整個網(wǎng)絡(luò)進(jìn)行“微調(diào)”(fine-tunning)。
Hinton在訓(xùn)練深度信念網(wǎng)絡(luò)(Deep Belief Networks)中,使用了這個方法,在各層預(yù)訓(xùn)練完成后,再利用BP算法對整個網(wǎng)絡(luò)進(jìn)行訓(xùn)練。此思想相當(dāng)于是先尋找局部最優(yōu),然后整合起來尋找全局最優(yōu),此方法有一定的好處,但是目前應(yīng)用的不是很多了。
梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設(shè)置一個梯度剪切閾值,然后更新梯度的時候,如果梯度超過這個閾值,那么就將其強(qiáng)制限制在這個范圍之內(nèi),通過這種直接的方法就可以防止梯度爆炸。
注:在WGAN中也有梯度剪切限制操作,但是和這個是不一樣的,WGAN限制梯度更新信息是為了保證lipchitz條件。
關(guān)于WGAN(Wasserstein GAN) 的介紹
We introduce a new algorithm named WGAN, an alternative to traditional GAN training. In this new model, we show that we can improve the stability of learning, get rid of problems like mode collapse, and provide meaningful learning curves useful for debugging and hyperparameter searches. Furthermore, we show that the corresponding optimization problem is sound, and provide extensive theoretical work highlighting the deep connections to other distances between distributions.
另外一種解決梯度爆炸的手段是采用權(quán)重正則化(weithts regularization)比較常見的是l1正則,和l2正則,在各個深度框架中都有相應(yīng)的API可以使用正則化,比如在tensorflow中,搭建網(wǎng)絡(luò)的時候已經(jīng)設(shè)置了正則化參數(shù),則調(diào)用以下代碼可以直接計算出正則損失:
regularization_loss = tf.add_n(tf.losses.get_regularization_losses(scope='my_resnet_50'))
如果沒有設(shè)置初始化參數(shù),也可以使用以下代碼計算l2 正則損失:
l2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables() if 'weights' in var.name])
正則化是通過對網(wǎng)絡(luò)權(quán)重做正則限制過擬合,仔細(xì)看正則項(xiàng)在損失函數(shù)的形式:
其中,α 是指正則項(xiàng)系數(shù),因此,如果發(fā)生梯度爆炸,權(quán)值的范數(shù)就會變的非常大,通過正則化項(xiàng),可以部分限制梯度爆炸的發(fā)生。
注:事實(shí)上,在深度神經(jīng)網(wǎng)絡(luò)中,往往是梯度消失出現(xiàn)的更多一些。
Relu:思想也很簡單,如果激活函數(shù)的導(dǎo)數(shù)為1,那么就不存在梯度消失爆炸的問題了,每層的網(wǎng)絡(luò)都可以得到相同的更新速度,relu就這樣應(yīng)運(yùn)而生。
Relu的主要貢獻(xiàn)在于:
解決了梯度消失、爆炸的問題
計算方便,計算速度快
加速了網(wǎng)絡(luò)的訓(xùn)練
同時也存在一些缺點(diǎn):
由于負(fù)數(shù)部分恒為0,會導(dǎo)致一些神經(jīng)元無法激活(可通過設(shè)置小學(xué)習(xí)率部分解決)
輸出不是以0為中心的
leakrelu就是為了解決relu的0區(qū)間帶來的影響,其數(shù)學(xué)表達(dá)為:leakrelu=max(k?x,x)
其中k是leak系數(shù),一般選擇0.01或者0.02,或者通過學(xué)習(xí)而來。leakrelu解決了0區(qū)間帶來的影響,而且包含了relu的所有優(yōu)點(diǎn)
Batchnorm是深度學(xué)習(xí)發(fā)展以來提出的最重要的成果之一了,目前已經(jīng)被廣泛的應(yīng)用到了各大網(wǎng)絡(luò)中,具有加速網(wǎng)絡(luò)收斂速度,提升訓(xùn)練穩(wěn)定性的效果,Batchnorm本質(zhì)上是解決反向傳播過程中的梯度問題。
batchnorm全名是batch normalization,簡稱BN,
通過規(guī)范化操作將輸出x規(guī)范化以此來保證網(wǎng)絡(luò)的穩(wěn)定性。
batchnorm就是通過對每一層的輸出規(guī)范為均值和方差一致的方法,消除了w帶來的放大縮小的影響,進(jìn)而解決梯度消失和爆炸的問題。
詳情可參考文章:
http://blog.csdn.net/qq_25737169/article/details/79048516
事實(shí)上,就是殘差網(wǎng)絡(luò)的出現(xiàn)導(dǎo)致了image net比賽的終結(jié),自從殘差提出后,幾乎所有的深度網(wǎng)絡(luò)都離不開殘差的身影,相比較之前的幾層,幾十層的深度網(wǎng)絡(luò),在殘差網(wǎng)絡(luò)面前都不值一提,殘差可以很輕松的構(gòu)建幾百層,一千多層的網(wǎng)絡(luò)而不用擔(dān)心梯度消失過快的問題,原因就在于殘差的捷徑(shortcut)部分。
殘差結(jié)構(gòu)說起殘差的話,不得不提這篇論文了:
Deep Residual Learning for Image Recognition
LSTM全稱是長短期記憶網(wǎng)絡(luò)(long-short term memory networks),是不那么容易發(fā)生梯度消失的,主要原因在于LSTM內(nèi)部復(fù)雜的“門”(gates),LSTM通過它內(nèi)部的“門”可以接下來更新的時候“記住”前幾次訓(xùn)練的”殘留記憶“,因此,經(jīng)常用于生成文本中。
看完上述內(nèi)容,你們掌握大數(shù)據(jù)中梯度消失與梯度膨脹以及6種解決措施分別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。