使用Keras進行深度學習:(六)GRU講解及實踐

2021-02-18 磐創AI


編輯 | 磐石

出品 | 磐創AI技術團隊

【磐創AI導讀】:本文詳細介紹了GRU結構並在文末介紹其python實現。歡迎大家點擊上方藍字關注我們的公眾號:磐創AI。進入公眾號通過下方文章精選系列文章了解更多keras相關項目。

介紹

GRU(Gated Recurrent Unit) 是由 Cho, et al. (2014) 提出,是LSTM的一種變體。GRU的結構與LSTM很相似,LSTM有三個門,而GRU只有兩個門且沒有細胞狀態,簡化了LSTM的結構。而且在許多情況下,GRU與LSTM有同樣出色的結果。GRU有更少的參數,因此相對容易訓練且過擬合問題要輕一點。 

目錄

一、 GRU原理講解

下圖展示了GRU的網絡結構,GRU的網絡結構和LSTM的網絡結構很相似,LSTM中含有三個門結構和細胞狀態,而GRU只有兩個門結構:更新門和重置門,分別為圖中的z_t和r_t,結構上比LSTM簡單。

 將GRU網絡結構具體運算操作用下圖進行表示。接下來將會針對該圖每一部分進行詳細的講解。

 首先說明圖中每個符號的意義:

1.更新門(update gate):

 

[.]_j表示一個向量的第j個元素。與LSTM中忘記門和輸入門的操作一樣,也是該時刻的輸入x_t、上一時刻隱藏層h_(t-1)分別和權重矩陣W_z、U_z相乘,再將這兩部分結果相加後放入sigmoid激活函數中,將結果壓縮在0-1之間。

更新門的作用是決定上一層隱藏層狀態中有多少信息傳遞到當前隱藏狀態h_t中,或者說前一時刻和當前時刻的信息有多少需要繼續傳遞的(在最後的公式中可以看到此功能的表示,並有詳細講解更新門為什麼有這個作用)。當z_j越接近0為說明上一層隱藏狀態的第j個信息在該隱藏層被遺忘,接近1則說明在該隱藏層繼續保留。

2.重置門(reset gate):

和更新門的運算操作類似,只是權重矩陣不同而已。重置門是決定上一時刻隱藏狀態的信息中有多少是需要被遺忘的。當該值接近於0,則說明上一時刻第j個信息在當前記憶內容(在後文解釋該詞)中被遺忘,接近於1則說明在當前記憶內容中繼續保留。

讀到這裡,有些讀者可能會感覺重置門和更新門的作用很相似,是否可以再簡化只用一個門即可?其實不然,這兩個門作用的對象是不一樣的,GRU雖然沒有LSTM的細胞狀態,但是它有一個記憶內容,更新門是作用於上一時刻隱藏狀態和記憶內容,並最終作用於當前時刻的隱藏狀態(如文中最後一條公式所表達),而重置門作用於當前記憶內容。

3.確定當前記憶內容

除了和上面兩個門一樣與權重矩陣相乘之外,還計算重置門結果r_t和h_(t-1)進行Hadamard乘積,即對應元素相乘。因為r_t是由0到1的向量組成的,因此,進行Hadamard乘積的意義就在於使用重置門決定在當前記憶內容中要遺忘多少上一時刻隱藏狀態的內容,正如重置門處描述,值接近於0說明該信息被遺忘,接近於1則保留該信息。最後再將這兩部分信息相加放入tanh激活函數中,將結果縮放到-1到1中。

記憶內容就是GRU記錄到的所有重要信息,類似於LSTM中的細胞狀態,比如在語言模型中,可能保存了主語單複數,主語的性別,當前時態等所有記錄的重要信息。

因此,通過此處的運算操作的說明,就可以了解該時刻的記憶內容由兩部分組成,一部分是使用重置門儲存過去相關的重要信息,另一部分是加上當前時刻輸入的重要信息。這兩部分就組成了當前時刻的所有記憶內容。

4.確定當前時刻隱藏層保留的信息


(公式說明:此處是標量相乘,若是以向量表示,需要使用Hadamard乘積)

解釋在第2部分更新門處遺留的問題

最後,該網絡需要計算 h_t向量,該向量將保留當前單元的信息並傳遞到下一個單元中。在此過程,使用更新門,一方面,如公式第一項,它決定了上一個時刻的h_(t-1)中多少信息在此時刻隱藏單元h_t需要保留,另一方面,如公式的第二項,通過(1-z_j)表示那些需要遺忘的信息,用此時刻的記憶內容中相應的內容進行更新。這樣更新門就能決定了分別需要在當前時刻的記憶內容和上一時刻隱藏層的信息收集哪些內容了

需要注意的是,雖然隱藏層信息的符號和當前記憶內容的符號相似,但是這兩者是有一定的區別的。當前記憶內容在上文中已經說明了是當前時刻保存的所有信息,而隱藏層信息則是當前時刻所需要的信息。比如在語言模型中,在當前時刻可能我們只需要知道當前時態和主語單複數就可以確定當前動詞使用什麼時態,而不需要其他更多的信息。

 

二、Keras實現GRU

在這裡,同樣使用Imdb數據集,且使用同樣的方法對數據集進行處理,詳細處理過程可以參考《使用Keras進行深度學習:(五)RNN和雙向RNN講解及實踐》一文。

 

可以發現GRU和LSTM具有同樣出色的結果,甚至比LSTM結果好一些。在很多時候,人們更願意使用GRU來替換LSTM,因為GRU比LSTM少一個門,參數更少,相對容易訓練且可以防止過擬合。(訓練樣本少的時候可以使用防止過擬合,訓練樣本多的時候則可以節省很多訓練時間。)因此GRU是一個非常流行的LSTM變體。同時,希望通過該文能讓讀者對GRU有更深刻的了解。

參考文獻:https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9be

寫在最後:歡迎大家點擊下方二維碼關注我們的公眾號,點擊乾貨資源專欄發送關鍵字「資源」獲取更多資源推薦。關注我們的歷史文章,和小編一起暢遊在深度學習的世界中。

最後給大家送波福利,七月在線機器學習集訓營課程免費試聽了!!!

掃描下方海報二維碼,領取免費試聽課程,課程紅包!

 點擊下方 |  | 了解更多

相關焦點

  • 使用Keras進行深度學習(二): CNN講解及實踐
    本文將通過講解CNN的介紹以及使用keras搭建CNN常用模型LeNet-5實現對MNist數據集分類,從而使得讀者更好的理解CNN。1.CNN的介紹CNN是一種自動化提取特徵的機器學習模型。顯然不是的,接下來將講解CNN是如何實現有效的分類從而理解卷積和池化的意義。用深度學習解決圖像識別問題,從直觀上講是一個從細節到抽象的過程。所謂細節,就是指輸入圖像的每個像素點,甚至像素點構成的邊也可以理解為是細節。假設我們大腦接收到一張動物圖,大腦最先反應的是該圖的點和邊。
  • 初學者怎樣使用Keras進行遷移學習
    訓練數據必須以特定格式存儲,以便饋送到網絡中進行訓練。我們將使用Keras中提供的ImageDataGenerator來訓練我們的可用數據模型。這樣,就代碼而言,該過程變得更加簡單。 必須有一個主數據文件夾,在該數據文件夾中,每個包含相應圖像的數據類必須有一個文件夾。文件夾的名稱必須是其各自類的名稱。
  • 深度學習 | Keras 簡介
    戳左上藍字「阿力阿哩哩的煉丹日常」關注作者哦~這章開始,筆者開始帶領大家一起學習深度學習的原理和實踐。
  • 用 Keras 功能 API 進行深度學習
    Keras Python庫可快速輕鬆地創建深度學習模型。順序API允許您針對大多數問題逐層創建模型。它的局限性在於它不允許您創建共享圖層或具有多個輸入或輸出的模型。Keras中的功能性API是創建模型的替代方法,它提供了更大的靈活性,包括創建更複雜的模型。在本教程中,您將發現如何在Keras中使用更靈活的功能API來定義深度學習模型。
  • 使用 Keras搭建一個深度卷積神經網絡來識別 c驗證碼
    ,建議使用顯卡來運行該項目。使用生成器生成器的使用方法很簡單,只需要用 next 函數即可。下面是一個例子,生成32個數據,然後顯示第一個數據。當然,在這裡我們還對生成的 One-Hot 編碼後的數據進行了解碼,首先將它轉為 numpy 數組,然後取36個字符中最大的數字的位置,因為神經網絡會輸出36個字符的概率,然後將概率最大的四個字符的編號轉換為字符串。
  • 使用Keras進行遷移學習
    使用Keras進行遷移學習,從實際代碼出發,清楚明白。因此,使用預先訓練的網絡權值作為初始化或固定的特徵提取器有助於解決現有的大多數問題。非常深的網絡訓練是昂貴的。最複雜的模型需要使用數百臺配備了昂貴gpu的機器,數周的時間來進行訓練。因為深度學習確定結構/調整/訓練方法/超參數是一門沒有太多理論指導的黑盒子。
  • 深度學習——keras教程系列基礎知識
    本著和大家一起學習的態度,有什麼寫的不是很好的地方還請大家多多指教。這裡我默認大家已經搭建好了深度學習的實踐環境了。Keras介紹關於什麼是深度學習,我這裡就不多說明了,大家Google就能知道答案。關於深度學習的框架有很多:Tensorflow、Keras、PyTorch、 MXNet、PaddlePaddle等等,那麼為什麼我這裡就開講Keras呢,因為它簡潔好用啊。它的簡潔在於:Keras是一個高級深度學習API,使用Python語言進行編寫的。
  • 深度學習第17講:keras入門和快速上手指南
    作者:魯偉一個數據科學踐行者的學習日記。
  • 深度學習優質實踐案例:用 Keras 實現人群中的口罩檢測
    Keras 是一個由 Python 編寫的開源人工神經網絡庫,可以作為 Tensorflow、Microsoft-CNTK 和 Theano 的高階應用程式接口,進行深度學習模型的設計、調試評估、應用和可視化。
  • 易用的新深度學習框架Keras簡介及使用
    Theano,前面五篇Deeplearning相關的文章也是學習Theano的一些筆記,當時已經覺得Theano用起來略顯麻煩,有時想實現一個新的結構,就要花很多時間去編程,所以想過將代碼模塊化,方便重複使用,但因為實在太忙沒有時間去做。
  • 深度學習的學習率調節實踐
    當一個ANN包含一個很深的隱藏層時,它被稱為深度神經網絡(DNN)。在本文中,我們將在MNIST數據集上訓練一個深度MLP,並通過指數增長來尋找最佳學習率,繪製損失圖,並找到損失增長的點,以達到85%以上的準確率。對於最佳的實踐過程,我們將實現早期停止,保存檢查點,並使用TensorBoard繪製學習曲線。
  • 用Keras進行深度學習模式的正則化方法:Dropout
    Dropout是神經網絡和深度學習模型的簡單而有效的正則化技術。在這篇文章中,你將發現Dropout正則化技術,以及如何使用Keras將其應用於Python中的模型。看完這篇文章後,你會知道:Dropout正則化的原理。如何在輸入層上使用Dropout。如何在隱藏的層上使用Dropout。
  • 《概率深度學習:使用Python,Keras和TensorFlow概率》附下載
    Probabilistic Deep Learning: With Python, Keras and TensorFlow Probability作者: Oliver Duerr出版日期: 2020ISBN: 9781617296079頁數: 252語言: English格式: PDF大小: 60 Mb概率性深度學習
  • R語言做深度學習
    《Deep Learning With Python》這本書使用Python語言和強大的Keras庫帶您進入深度學習領域。 本書由Keras創建者和Google AI研究員FrançoisChollet撰寫,通過直觀的解釋和實際的例子幫助您構建對深度學習的理解。您將在計算機視覺,自然語言處理和生成模型中應用和實踐。
  • Python安裝TensorFlow 2、tf.keras和深度學習模型的定義
    p=15826 深度學習的預測建模是現代開發人員需要了解的一項技能。TensorFlow是Google開發和維護的首要的開源深度學習框架。儘管直接使用TensorFlow可能具有挑戰性,但現代的tf.keras API使得Keras在TensorFlow項目中的使用簡單易用。使用tf.keras,您可以設計,擬合,評估和使用深度學習模型,從而僅用幾行代碼即可做出預測。
  • Keras 深度學習模型可視化
    深度學習可視化深度學習的過程是一個黑盒子,模型通過大量的權重去學習擬合輸入的數據和學習目標,模型的性能很大程度上取決於模型的輸入的數據;深度學習的擬合效果往往出乎我們的的想像,但是模型如何擬合數據和學習目標之間的關係,我們知之甚少。
  • [阿里DIEN] 深度興趣進化網絡源碼分析 之 Keras版本
    DeepCtr是一個簡易的CTR模型框架,集成了深度學習流行的所有模型,適合學推薦系統模型的人參考。這個項目主要是對目前的一些基於深度學習的點擊率預測算法進行了實現,如PNN,WDL,DeepFM,MLR,DeepCross,AFM,NFM,DIN,DIEN,xDeepFM,AutoInt等,並且對外提供了一致的調用接口。
  • 深度學習,基於Keras的Python實踐
    今天這篇文章目的很簡單,就是給大家送出 3 本《深度學習:基於Keras的Python實踐》。感謝博文視點出版社提供的3本書籍!
  • 技術分享|深度學習之Keras簡介與使用
    ,它在keras中是個類。是否使用Nesterov momentum2.1.2 RMSprop 優化器keras.optimizers.RMSprop(learning_rate=0.001, rho=0.9)建議除了學習率外,保留此優化器的默認參數。
  • Python 深度學習,你的 Keras 準備好了嗎?
    該書是由 Keras 作者寫的,所以全書基本圍繞著 Keras 講深度學習的各種實現,從 CNN,RNN 到 GAN 等,偏入門,但理論和實戰部分都講的還不錯,承載著很多作者對深度學習整體性的思考。總之,Keras 非常適合大家快速上手深度學習項目。好了,今天從基礎開始,教大家在 win10 系統中,使用 Anaconda + TensorFlow + Keras,快速搭建一個 Keras 的開發環境(CPU 版本),非常容易。1.