1. 程式人生 > >[深度學習] 梯度消失與梯度爆炸的原因及解決方法

[深度學習] 梯度消失與梯度爆炸的原因及解決方法

前言

本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失及爆炸的解決方案。有基礎的同鞋可以跳著閱讀。 
其中,梯度消失爆炸的解決方案主要包括以下幾個部分。

- 預訓練加微調
- 梯度剪下、權重正則(針對梯度爆炸)
- 使用不同的啟用函式
- 使用batchnorm
- 使用殘差結構
- 使用LSTM網路

第一部分:為什麼要使用梯度更新規則

在介紹梯度消失以及爆炸之前,先簡單說一說梯度消失的根源—–深度神經網路和反向傳播。目前深度學習方法中,深度神經網路的發展造就了我們可以構建更深層的網路完成更復雜的任務,深層網路比如深度卷積網路,LSTM等等,而且最終結果表明,在處理複雜任務上,深度網路比淺層的網路具有更好的效果。但是,目前優化神經網路的方法都是基於反向傳播的思想,即根據損失函式計算的誤差通過梯度反向傳播的方式,指導深度網路權值的更新優化。這樣做是有一定原因的,首先,深層網路由許多非線性層堆疊而來,每一層非線性層都可以視為是一個非線性函式 f

(x)f(x)(非線性來自於非線性啟用函式),因此整個深度網路可以視為是一個複合的非線性多元函式 

F(x)=fn(...f3(f2(f1(x)θ1+b)θ2+b)...)F(x)=fn(...f3(f2(f1(x)∗θ1+b)∗θ2+b)...)我們最終的目的是希望這個多元函式可以很好的完成輸入到輸出之間的對映,假設不同的輸入,輸出的最優解是g(x)g(x) ,那麼,優化深度網路就是為了尋找到合適的權值,滿足Loss=L(g(x),F(x))Loss=L(g(x),F(x))取得極小值點,比如最簡單的損失函式 
Loss=||g(x)f(x)||22Loss=||g(x)−f(x)||22
,假設損失函式的資料空間是下圖這樣的,我們最優的權值就是為了尋找下圖中的最小值點,對於這種數學尋找最小值問題,採用梯度下降的方法再適合不過了。 
這裡寫圖片描述

第二部分:梯度消失、爆炸

梯度消失與梯度爆炸其實是一種情況,看接下來的文章就知道了。兩種情況下梯度消失經常出現,一是在深層網路中,二是採用了不合適的損失函式,比如sigmoid。梯度爆炸一般出現在深層網路和權值初始化值太大的情況下,下面分別從這兩個角度分析梯度消失和爆炸的原因。

1.深層網路角度

比較簡單的深層網路如下: 
這裡寫圖片描述 
圖中是一個四層的全連線網路,假設每一層網路啟用後的輸出為fi(x)fi(x),其中ii為第ii層, xx代表第ii層的輸入,也就是第i

1i−1層的輸出,ff是啟用函式,那麼,得出fi+1=f(fiwi+1+bi+1)fi+1=f(fi∗wi+1+bi+1),簡單記為fi+1=f(fiwi+1)fi+1=f(fi∗wi+1)。 
BP演算法基於梯度下降策略,以目標的負梯度方向對引數進行調整,引數的更新為ww+Δww←w+Δw,給定學習率αα,得出Δw=αLosswΔw=−α∂Loss∂w。如果要更新第二隱藏層的權值資訊,根據鏈式求導法則,更新梯度資訊: 
Δw1=Lossw2=Lossf4f4

相關推薦

[深度學習] 梯度消失梯度爆炸原因解決方法

前言本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失及爆炸的解決方案。有基礎的同鞋可以跳著閱讀。 其中,梯度消失爆炸的解

[深度學習] 梯度消失梯度爆炸、Loss為Nan的原因

現象 如何確定是否出現梯度爆炸? 在訓練過程中出現梯度爆炸會伴隨一些細微的訊號,如: (1)模型無法從訓練資料中獲得更新; (2)模型不穩定,導致更新過程中的損失出現顯著變化; (3)訓練過程中,模型的損失變為Nan。 梯度消失與梯度爆炸原因 首先,來看神經

機器學習中的梯度消失爆炸原因及其解決方法(筆記1)

前言         本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失

入門|詳解機器學習中的梯度消失爆炸原因及其解決方法

前言:   本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失及爆炸的解決方案。有基礎的同鞋可以跳著閱讀。 其中,梯度

【機器學習】【RNN中的梯度消失梯度爆炸

學習speech synthesis的Tacotron模型,而Tacotron是基於seq2seq attention,RNN中的一類。所以得先學習RNN,以及RNN的變種LSTM和GRU。 RNN的詳細我這裡不再介紹了,許多神犇的部落格及網上免費的課程講得都很詳細。這裡僅

梯度消失爆炸原因及其解決方法

一、梯度不穩定問題: 什麼是梯度不穩定問題:深度神經網路中的梯度不穩定性,前面層中的梯度或會消失,或會爆炸。 原因:前面層上的梯度是來自於後面層上梯度的乘乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景,如梯度消失和梯度爆炸。 二、梯度消失(vanishing gradient problem)

梯度消失梯度爆炸總結

神經網路中梯度消失與梯度爆炸問題綜述前言隨著計算資源和資料量的增加,深度學習方法又再次回到公眾的視野。但是隨著深度的增加,神經網路的訓練越來越難,一個重要的原因是,深度的增加會導致梯度消失和梯度爆炸問題的出現,使網路權重難以訓練。文章分為兩部分,第一部分簡單介紹梯度消失和

梯度消失梯度爆炸

LSTM 與 Gradient Vanish 上面說到,LSTM 是為了解決 RNN 的 Gradient Vanish 的問題所提出的。關於 RNN 為什麼會出現 Gradient Vanish,上面已經介紹的比較清楚了,本質原因就是因為矩陣高次冪導致的。下面簡要解釋一下為什麼 LSTM 能有效避免 Gr

Coursera | Andrew Ng (02-week-1-1.10)—梯度消失梯度爆炸

該系列僅在原課程基礎上部分知識點添加個人學習筆記,或相關推導補充等。如有錯誤,還請批評指教。在學習了 Andrew Ng 課程的基礎上,為了更方便的查閱複習,將其整理成文字。因本人一直在學習英語,所以該系列以英文為主,同時也建議讀者以英文為主,中文輔助,以便後期

[Deep Learning] 深度學習消失梯度

  好久沒有更新blog了,最近抽時間看了Nielsen的《Neural Networks and Deep Learning》感覺小有收穫,分享給大家。   瞭解深度學習的同學可能知道,目前深度學習面臨的一個問題就是在網路訓練的過程中存在梯度消失問題(vanishing gradient problem)

梯度消失梯度膨脹,以及6種解決措施

我無意中看到一篇公眾號,挺不錯,就寫下來了 1.梯度消失 根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都小於1的話,那麼即使這個結果是0.99,在經過足夠多層傳播之後,誤差對輸入層的偏導會趨於0。 這種情況會導致靠近輸入層的隱含層神經元調整極小

Tomcat啟動一閃而過就消失原因解決方法

引言:Tomcat啟動一閃而過怎麼辦? 這成為了許多剛接觸tomcat開發環境工作者的一個大問題,許多使用者朋友都不知道是因為什麼問題導致出現這種情況,下面就一起來了解一下吧。 原因一:  (1)首先要搞明白啟動不起來的原因。方法是在命令列下,執行startup.bat檔案,這

python機器學習實踐 第二章的2.1.2.1線性迴歸器程式報錯Reshape your data either using array.reshap(-1,1)的原因解決方法

最近在看Python機器學習及實踐(從零開始kaggle競賽之路)這本書,到了第二章的線性迴歸器的GradientBoostingRegressor模型照著敲程式碼的時候 出現了以下的錯誤 出錯的問題在於標準化函式這裡。 可見fit_tran

mysql主從同步延遲原因解決方法

解決方案 數據庫 master 朋友 mysql MySQL主從延遲原因以及解決方案:談到MySQL數據庫主從同步延遲原理,得從mysql的數據庫主從復制原理說起,mysql的主從復制都是單線程的操作(mysql5.6版本之前),主庫對所有DDL和DML產生binlog,binlog是順序

在js文件中寫el表達式取不到值的原因解決方法

.ajax cnblogs 一個 雙引號 ssid null 使用 ucc name 1、javascript是客戶端執行,EL是在服務端執行,而服務端比客戶端先執行,所以取不到值 2、要想獲取"${jcDropClass.jcClass.id}"的值,可以在jsp中,用一

旗正規則引擎內存表出錯的原因解決方法分享

規則引擎 企業信息化 系統升級 業務規則管理系統1 內存表1.1 匯總1.1.1 錯誤匯總列中必須包含分組列所屬部門 1.1.2 解決方案點擊圖片中的“sum(基本工資)”,彈出窗體,將所屬部門加入。引發該問題的原因是,分組列存在的字段,必須要包含在匯總列中。1.

load data inpath出錯原因解決方法

別名 and err failed 導入 ase line 解決 機器名 hive> load data inpath "hdfs://Master.hdp:9000/person.txt" into table Person1;

VS調試_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));崩潰原因解決方法

說道 動態 意義 討論 清理 問題 [] all 測試 今天下午對面的老大調試遇到這個問題,大家一起討論好久才解決這個問題 crt源代碼都是可以看到的,為了了解清楚原因,十分有必要查看源碼,源碼一般在你的VS安裝路徑下VC\crt\src下。 點擊重試,定位到崩潰源碼地方

jmeter(二十二):內存溢出原因解決方法

ext 內容 str 百度百科 詳細 由於 ora aik 異常 jmeter是一個java開發的開源性能測試工具,在性能測試中可支持模擬並發壓測,但有時候當模擬並發請求較大或者腳本運行時間較長時,壓力機會出現卡頓甚至報異常————內存溢出,這裏就介紹些如何解決內存溢出及相

SSH連接時出現Host key verification failed的原因解決方法

避免 and 方便 roo code middle rect int 添加 SSH連接的時候Host key verification failed. [root@cache001 swftools-0.9.0]# ssh 192.168.1.90@@@@@@@@@@@@@