1. 程式人生 > >[Deep Learning] 深度學習中消失的梯度

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

  好久沒有更新blog了,最近抽時間看了Nielsen的《Neural Networks and Deep Learning》感覺小有收穫,分享給大家。

  瞭解深度學習的同學可能知道,目前深度學習面臨的一個問題就是在網路訓練的過程中存在梯度消失問題(vanishing gradient problem),或者更廣義地來講就是不穩定梯度問題。那麼到底什麼是梯度消失呢?這個問題又是如何導致的呢?這就是本文要分享的內容。

1. 消失的梯度

  首先,我們將一個網路在初始化之後在訓練初期的結果視覺化如下:

  

  在上圖中,神經元上的條可以理解為神經元的學習速率。這個網路是經過隨機初始化的,但是從上圖不難發現,第二層神經元上的條都要大於第一層對應神經元上的條,即第二層神經元的學習速率大於第一層神經元學習速率。那這可不可能是個巧合呢?其實不是的,在書中,Nielsen通過實驗說明這種現象是普遍存在的。

  我們再來看下對於一個具有四個隱層的神經網路,各隱藏層的學習速率曲線如下:

  

  可以看出,第一層的學習速度和最後一層要差兩個數量級,也就是比第四層慢了100倍。 實際上,這個問題是可以避免的,儘管替代方法並不是那麼有效,同樣會產生問題——在前面的層中的梯度會變得非常大!這也叫做激增的梯度問題(exploding gradient problem),這也沒有比消失的梯度問題更好處理。更加一般地說,在深度神經網路中的梯度是不穩定的,在前面的層中或會消失,或會激增,這種不穩定性才是深度神經網路中基於梯度學習的根本原因

2. 什麼導致了梯度消失?

  為了弄清楚為何會出現消失的梯度,來看看一個極簡單的深度神經網路:每一層都只有一個單一的神經元。下面就是有三層隱藏層的神經網路:

  

  我們把梯度的整個表示式寫出來:

$\dfrac{\partial{C}}{\partial{b_{1}}}=\sigma^{\prime}(z_{1})\omega_{2}\sigma^{\prime}(z_{2})\omega_{3}\sigma^{\prime}(z_{3})\omega_{4}\sigma^{\prime}(z_{4})\dfrac{\partial{C}}{\partial{a_{4}}}$

  為了理解每個項的行為,先看下sigmoid函式導數的曲線:

  

  該導數在$\sigma^{\prime}(0)=\dfrac{1}{4}$時達到最高。現在,如果我們使用標準方法來初始化網路中的權重,那麼會使用一個均值為0標準差為1的高斯分佈。因此所有的權重通常會滿足$|\omega_{j}|<1$。有了這些資訊,我們發現會有$\omega_{j}\sigma^{\prime(z_{j})}<\dfrac{1}{4}$,並且在進行所有這些項的乘積時,最終結果肯定會指數級下降:項越多,乘積的下降也就越快。

  下面我們從公式上比較一下第三層和第一層神經元的學習速率:

  

比較一下$\dfrac{\partial{C}}{\partial{b_{1}}}$和$\dfrac{\partial{C}}{\partial{b_{3}}}$可知,$\dfrac{\partial{C}}{\partial{b_{1}}}$要遠遠小於$\dfrac{\partial{C}}{\partial{b_{3}}}$。 因此,梯度消失的本質原因是:$\omega_{j}\sigma^{\prime}(z_{j})<\dfrac{1}{4}$的約束。

3. 梯度激增問題

舉個例子說明下:

首先,我們將網路的權重設定得很大,比如$\omega_1=\omega_2=\omega_3=\omega_4=100$。然後,我們選擇偏置使得$\sigma^{'}(z_{j})$項不會太小。這是很容易實現的:方法就是選擇偏置來保證每個神經元的帶權輸入是$z_j=0$(這樣$\sigma^{'}(z_{j})=\dfrac{1}{4}$)。比如說,我們希望$z_1=\omega_1*a_0+b_1$,我們只需要把$b_1=-100*a_0$即可。我們使用相同的方法來獲取其他的偏置。這樣我們可以發現所有的項$w_j*\sigma^{'}(z_j)$都等於100*1/4=25。最終,我們獲得了激增的梯度。

4. 不穩定的梯度問題

  不穩定的梯度問題:根本的問題其實並非是消失的梯度問題或者激增的梯度問題,而是在前面的層上的梯度是來自後面的層上項的乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景。唯一讓所有層都接近相同的學習速度的方式是所有這些項的乘積都能得到一種平衡。如果沒有某種機制或者更加本質的保證來達成平衡,那網路就很容易不穩定了。簡而言之,真實的問題就是神經網路受限於不穩定梯度的問題。所以,如果我們使用標準的基於梯度的學習演算法,在網路中的不同層會出現按照不同學習速度學習的情況。

5. 參考文獻

  1. Michael Nielsen,《Neural Networks and Deep Learning》

相關推薦

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

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

深度學習 deep learning 深度學習框架 caffe 深入學習過程

深度學習(Deep Learning)核心技術開發與應用培訓班 主辦單位:中國管理科學研究院執業資格認證培訓中心 一,時間地點: 2018年09月13日— 2018年09月16日北京 (機房上課,每人一臺電腦進行實際案例操作,贈送 U盤拷貝資料及課件和軟體) 二,培訓目標: 1,

深度學習梯度下降優化演算法綜述

1 簡介 梯度下降演算法是最常用的神經網路優化演算法。常見的深度學習庫也都包含了多種演算法進行梯度下降的優化。但是,一般情況下,大家都是把梯度下降系列演算法當作是一個用於進行優化的黑盒子,不瞭解它們的優勢和劣勢。 本文旨在幫助讀者構建各種優化演算法的直觀理解,以幫助你在訓練神經網

Deep learning深度學習的十大開源框架

Google開源了TensorFlow(GitHub),此舉在深度學習領域影響巨大,因為Google在人工智慧領域的研發成績斐然,有著雄厚的人才儲備,而且Google自己的Gmail和搜尋引擎都在使用自行研發的深度學習工具。對於希望在應用中整合深度學習功能的開發者來說,Git

讀論文:deep Learning 深度學習合集

Deep Learning Very Deep Convolutional Networks for Large-Scale Image Recognition ICLR 2015 問題 網路模型不夠深 方法** 用3個 3x3的核 替換

AWS deep learning 深度學習_亞馬遜深度學習服務

許多組織開始越來越多地轉向深度學習,因為它支援計算機進行獨立學習和執行任務,幾乎無需任何監督,從而可為科學和工業領域帶來諸多非凡的優勢。與傳統的機器學習不同,深度學習試圖通過建立人造的“神經網路”來模擬人類大腦學習和處理資訊的方式,以便從資料中提取複雜的概念和關係。深度學習模型在

Deep Learning(深度學習)程式碼/課程/學習資料整理

轉載自:http://blog.csdn.net/u013854886/article/details/48177251 1. Deep Learning課程(由淺入深): 我們組的一個Deep Learning的比較全面、概括的介紹,視訊:Part1,Part2,Slid

卷積在深度學習的作用(轉自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

範圍 SM 全連接 判斷 contact con 發展 .dsp length 卷積可能是現在深入學習中最重要的概念。卷積網絡和卷積網絡將深度學習推向了幾乎所有機器學習任務的最前沿。但是,卷積如此強大呢?它是如何工作的?在這篇博客文章中,我將解釋卷積並將其與其他概念聯系起來

deep learning學習筆記(8)——深度模型的優化

機器學習中的演算法涉及諸多的優化問題,典型的就是利用梯度下降法(gradient descent)求使損失函式 J(theta) 下降的模型引數 theta 。在深度學習,尤其是深度神經網路的訓練和預測中,大的模型往往要花上數天甚至是數月的訓練時間,因此雖然

深度學習的啟用函式Sigmoid和ReLu啟用函式和梯度消失問題。

1. Sigmoid啟用函式:              Sigmoid啟用函式的缺陷:當 x 取很大的值之後他們對應的 y 值區別不會很大,就會出現梯度消失的問題。因此現在一般都不使用Sigmoid函式,而是使用ReLu啟用函式。2. ReLu啟用函式:       ReL

深度學習的池化詳解 | Pooling in Deep learning

本文由多篇部落格總結整理而成,參考部落格見文末,侵刪。 目錄 最大池化 : 平均池化 重疊池化 參考文獻 參考部落格 首先,什麼是CNN ------------------------------------

自問自答2——深度學習梯度消失/爆炸為什麼是一個問題?(待完善)

我們知道SGD只是用來求解優化問題的一種方法:沿著負梯度方向找到損失最小值。所以SGD的核心就是計算梯度以得到引數更新。而在深層神經網路中,反向傳播時很容易發生梯度消失或者梯度爆炸的問題,尤其是RNN網路中。我們認為這兩種情況是非常危險的,要極力避免。 無論梯

Deep Learning讀書筆記】深度學習的概率論

本文首發自公眾號:RAIS,期待你的關注。 前言 本系列文章為 《Deep Learning》 讀書筆記,可以參看原書一起閱讀,效果更佳。 概率論 機器學習中,往往需要大量處理不確定量,或者是隨機量,這與我們傳統所需要解決掉問題是大不一樣的,因此我們在機器學習中往往很難給出一個百分百的預測或者判斷,基於此

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

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

機器學習 Machine Learning 深度學習 Deep Learning 資料

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

機器學習 Machine Learning 深度學習 Deep Learning 資料 Chapter 1

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

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

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

Deep learning發展歷程的監督學習和非監督學習

1. 前言 在學習深度學習的過程中,主要參考了四份資料: 對比過這幾份資料,突然間產生一個困惑:臺大和Andrew的教程中用了很大的篇幅介紹了無監督的自編碼神經網路,但在Li feifei的教程和caffe的實現中幾乎沒有涉及。當時一直搞不清這種現象的原因,直到翻閱了深度學習的發展史之後,才稍微有了些眉目。

Stanford機器學習課程(Andrew Ng) Week 1 Parameter Learning --- 線性迴歸梯度下降法

本節將梯度下降與代價函式結合,並擬合到線性迴歸的函式中 這是我們上兩節課得到的函式,包括: 梯度下降的公式 用於擬合的線性假設和h(x) 平方誤差代價函式 J

深度學習的三種梯度下降方式:批量(batch),隨機(stochastic),小批量(mini-batch)

  1,批量梯度下降法(Batch Gradient Descent) :在更新引數時都使用所有的樣本來進行更新。   優點:全域性最優解,能保證每一次更新權值,都能降低損失函式;易於並行實現。   缺點:當樣本數目很多時,訓練過程會很慢。   2,隨機梯度下降法(Stoch