基于梯度爆炸的解決方法:clip gradient
1. 梯度爆炸的影響
在一個只有一個隱藏節(jié)點的網(wǎng)絡(luò)中,損失函數(shù)和權(quán)值w偏置b構(gòu)成error surface,其中有一堵墻,如下所示
損失函數(shù)每次迭代都是每次一小步,但是當(dāng)遇到這堵墻時,在墻上的某點計算梯度,梯度會瞬間增大,指向某處不理想的位置。如果我們使用縮放,可以把誤導(dǎo)控制在可接受范圍內(nèi),如虛線箭頭所示
2. 解決梯度爆炸問題的方法
通常會使用一種叫”clip gradients “的方法. 它能有效地權(quán)重控制在一定范圍之內(nèi).
算法步驟如下。
首先設(shè)置一個梯度閾值:clip_gradient
在后向傳播中求出各參數(shù)的梯度,這里我們不直接使用梯度進去參數(shù)更新,我們求這些梯度的l2范數(shù)
然后比較梯度的l2范數(shù)||g||與clip_gradient的大小
如果前者大,求縮放因子clip_gradient/||g||, 由縮放因子可以看出梯度越大,則縮放因子越小,這樣便很好地控制了梯度的范圍
最后將梯度乘上縮放因子便得到最后所需的梯度
3. 有無clip_gradient在GRU模型中的結(jié)果比較
無clip_gradient
可以很清楚地發(fā)現(xiàn)在2000次迭代出發(fā)生了梯度爆炸,最終影響了訓(xùn)練的效果。
有clip_gradient
可以發(fā)現(xiàn)clip_gradient在前期有效了控制了梯度爆炸的影響,使得最終的loss能下降到滿意的結(jié)果
以上這篇基于梯度爆炸的解決方法:clip gradient就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python +Selenium解決圖片驗證碼登錄或注冊問題(推薦)
這篇文章主要介紹了Python Selenium解決圖片驗證碼登錄或注冊問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Python基礎(chǔ)之字符串操作常用函數(shù)集合
這篇文章主要介紹了Python基礎(chǔ)之字符串操作常用函數(shù)集合,需要的朋友可以參考下2020-02-02Python如何統(tǒng)計函數(shù)調(diào)用的耗時
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)統(tǒng)計函數(shù)調(diào)用的耗時,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04