難以置信!LSTM和GRU的解析從未如此清晰(動圖+視頻)

2021-02-19 機器學習算法與自然語言處理

作者 | Michael Nguyen

編譯 | 蔡志興、費棋

編輯 | Jane

出品 | AI科技大本營


【導語】機器學習工程師 Michael Nguyen 在其博文中發布了關於 LSTM 和 GRU 的詳細圖解指南。博文中,他先介紹了 LSTM 和 GRU 的本質, 然後解釋了讓 LSTM 和 GRU 有良好表現的內部機制。 當然,如果你還想了解這兩種網絡背後發生了什麼,那麼這篇文章就是為你準備的。


視頻詳解

短時記憶

RNN 會受到短時記憶的影響。如果一條序列足夠長,那它們將很難將信息從較早的時間步傳送到後面的時間步。 因此,如果你正在嘗試處理一段文本進行預測,RNN 可能從一開始就會遺漏重要信息。


在反向傳播期間,RNN 會面臨梯度消失的問題。 梯度是用於更新神經網絡的權重值,消失的梯度問題是當梯度隨著時間的推移傳播時梯度下降,如果梯度值變得非常小,就不會繼續學習。

梯度更新規則


因此,在遞歸神經網絡中,獲得小梯度更新的層會停止學習—— 那些通常是較早的層。 由於這些層不學習,RNN 可以忘記它在較長序列中看到的內容,因此具有短時記憶。

作為解決方案的 LSTM 和 GRU

LSTM 和 GRU 是解決短時記憶問題的解決方案,它們具有稱為「門」的內部機制,可以調節信息流。


這些「門」可以知道序列中哪些重要的數據是需要保留,而哪些是要刪除的。 隨後,它可以沿著長鏈序列傳遞相關信息以進行預測,幾乎所有基於遞歸神經網絡的技術成果都是通過這兩個網絡實現的。


LSTM 和 GRU 可以在語音識別、語音合成和文本生成中找到,你甚至可以用它們為視頻生成字幕。對 LSTM 和 GRU 擅長處理長序列的原因,到這篇文章結束時你應該會有充分了解。 


下面我將通過直觀解釋和插圖進行闡述,並避免儘可能多的數學運算。

本質


讓我們從一個有趣的小實驗開始吧。當你想在網上購買生活用品時,一般都會查看一下此前已購買該商品用戶的評價。

當你瀏覽評論時,你的大腦下意識地只會記住重要的關鍵詞,比如「amazing」和「awsome」這樣的詞彙,而不太會關心「this」、「give」、「all」、「should」等字樣。如果朋友第二天問你用戶評價都說了什麼,那你可能不會一字不漏地記住它,而是會說出但大腦裡記得的主要觀點,比如「下次肯定還會來買」,那其他一些無關緊要的內容自然會從記憶中逐漸消失。


而這基本上就像是 LSTM 或 GRU 所做的那樣,它們可以學習只保留相關信息來進行預測,並忘記不相關的數據。

RNN 述評

為了了解 LSTM 或 GRU 如何實現這一點,讓我們回顧一下遞歸神經網絡。 RNN 的工作原理如下;第一個詞被轉換成了機器可讀的向量,然後 RNN 逐個處理向量序列。

 逐一處理矢量序列


處理時,RNN 將先前隱藏狀態傳遞給序列的下一步。 而隱藏狀態充當了神經網絡記憶,它包含相關網絡之前所見過的數據的信息。


       

將隱藏狀態傳遞給下一個時間步


讓我們看看 RNN 的一個細胞,了解一下它如何計算隱藏狀態。 首先,將輸入和先前隱藏狀態組合成向量, 該向量包含當前輸入和先前輸入的信息。 向量經過激活函數 tanh之後,輸出的是新的隱藏狀態或網絡記憶。

       

RNN 細胞

激活函數 Tanh


激活函數 Tanh 用於幫助調節流經網絡的值。 tanh 函數將數值始終限制在 -1 和 1 之間。


當向量流經神經網絡時,由於有各種數學運算的緣故,它經歷了許多變換。 因此想像讓一個值繼續乘以 3,你可以想到一些值是如何變成天文數字的,這讓其他值看起來微不足道。

沒有 tanh 函數的向量轉換


tanh 函數確保值保持在 -1~1 之間,從而調節了神經網絡的輸出。 你可以看到上面的相同值是如何保持在 tanh 函數所允許的邊界之間的。


有 tanh 函數的向量轉換


這是一個 RNN。 它內部的操作很少,但在適當的情形下(如短序列)運作的很好。 RNN 使用的計算資源比它的演化變體 LSTM 和 GRU 要少得多。


LSTM


LSTM 的控制流程與 RNN 相似,它們都是在前向傳播的過程中處理流經細胞的數據,不同之處在於 LSTM 中細胞的結構和運算有所變化。

LSTM 的細胞結構和運算


這一系列運算操作使得 LSTM具有能選擇保存信息或遺忘信息的功能。咋一看這些運算操作時可能有點複雜,但沒關係下面將帶你一步步了解這些運算操作。


核心概念


LSTM 的核心概念在於細胞狀態以及「門」結構。細胞狀態相當於信息傳輸的路徑,讓信息能在序列連中傳遞下去。你可以將其看作網絡的「記憶」。理論上講,細胞狀態能夠將序列處理過程中的相關信息一直傳遞下去。

因此,即使是較早時間步長的信息也能攜帶到較後時間步長的細胞中來,這克服了短時記憶的影響。信息的添加和移除我們通過「門」結構來實現,「門」結構在訓練過程中會去學習該保存或遺忘哪些信息。


Sigmoid


門結構中包含著 sigmoid 激活函數。Sigmoid 激活函數與 tanh 函數類似,不同之處在於 sigmoid 是把值壓縮到 0~1 之間而不是 -1~1 之間。這樣的設置有助於更新或忘記信息,因為任何數乘以 0 都得 0,這部分信息就會剔除掉。同樣的,任何數乘以 1 都得到它本身,這部分信息就會完美地保存下來。這樣網絡就能了解哪些數據是需要遺忘,哪些數據是需要保存。


Sigmoid 將值壓縮到 0~1 之間


接下來了解一下門結構的功能。LSTM 有三種類型的門結構:遺忘門、輸入門和輸出門。


遺忘門


遺忘門的功能是決定應丟棄或保留哪些信息。來自前一個隱藏狀態的信息和當前輸入的信息同時傳遞到 sigmoid 函數中去,輸出值介於 0 和 1 之間,越接近 0 意味著越應該丟棄,越接近 1 意味著越應該保留。


遺忘門的運算過程


輸入門


輸入門用於更新細胞狀態。首先將前一層隱藏狀態的信息和當前輸入的信息傳遞到 sigmoid 函數中去。將值調整到 0~1 之間來決定要更新哪些信息。0 表示不重要,1 表示重要。

其次還要將前一層隱藏狀態的信息和當前輸入的信息傳遞到 tanh 函數中去,創造一個新的侯選值向量。最後將 sigmoid 的輸出值與 tanh 的輸出值相乘,sigmoid 的輸出值將決定 tanh 的輸出值中哪些信息是重要且需要保留下來的。

輸入門的運算過程


細胞狀態


下一步,就是計算細胞狀態。首先前一層的細胞狀態與遺忘向量逐點相乘。如果它乘以接近 0 的值,意味著在新的細胞狀態中,這些信息是需要丟棄掉的。然後再將該值與輸入門的輸出值逐點相加,將神經網絡發現的新信息更新到細胞狀態中去。至此,就得到了更新後的細胞狀態。

細胞狀態的計算


輸出門


輸出門用來確定下一個隱藏狀態的值,隱藏狀態包含了先前輸入的信息。首先,我們將前一個隱藏狀態和當前輸入傳遞到 sigmoid 函數中,然後將新得到的細胞狀態傳遞給 tanh 函數。

最後將 tanh 的輸出與 sigmoid 的輸出相乘,以確定隱藏狀態應攜帶的信息。再將隱藏狀態作為當前細胞的輸出,把新的細胞狀態和新的隱藏狀態傳遞到下一個時間步長中去。


 輸出門的運算過程


讓我們再梳理一下。遺忘門確定前一個步長中哪些相關的信息需要被保留;輸入門確定當前輸入中哪些信息是重要的,需要被添加的;輸出門確定下一個隱藏狀態應該是什麼。


代碼示例


對於那些懶得看文字的人來說,代碼也許更好理解,下面給出一個用 python 寫的示例。


python 寫的偽代碼


1.首先,我們將先前的隱藏狀態和當前的輸入連接起來,這裡將它稱為 combine;

2.其次將 combine 丟到遺忘層中,用於刪除不相關的數據;

3.再用 combine 創建一個候選層,候選層中包含著可能要添加到細胞狀態中的值;

4.combine 同樣要丟到輸入層中,該層決定了候選層中哪些數據需要添加到新的細胞狀態中;

5.接下來細胞狀態再根據遺忘層、候選層、輸入層以及先前細胞狀態的向量來計算;

6.再計算當前細胞的輸出;

7.最後將輸出與新的細胞狀態逐點相乘以得到新的隱藏狀態。


是的,LSTM 網絡的控制流程就是幾個張量和一個 for 循環。你還可以使用隱藏狀態進行預測。結合這些機制,LSTM 能夠在序列處理中確定哪些信息需要記憶,哪些信息需要遺忘。


GRU


知道了 LSTM 的工作原理之後,來了解一下 GRU。GRU 是新一代的循環神經網絡,與 LSTM 非常相似。與 LSTM 相比,GRU 去除掉了細胞狀態,使用隱藏狀態來進行信息的傳遞。它只包含兩個門:更新門和重置門。

GRU 的細胞結構和門結構

更新門


更新門的作用類似於 LSTM 中的遺忘門和輸入門。它決定了要忘記哪些信息以及哪些新信息需要被添加。


重置門


重置門用於決定遺忘先前信息的程度。


這就是 GRU。GRU 的張量運算較少,因此它比 LSTM 的訓練更快一下。很難去判定這兩者到底誰更好,研究人員通常會兩者都試一下,然後選擇最合適的。


結語

總而言之,RNN 適用於處理序列數據用於預測,但卻受到短時記憶的制約。LSTM 和 GRU 採用門結構來克服短時記憶的影響。門結構可以調節流經序列鏈的信息流。LSTM 和 GRU 被廣泛地應用到語音識別、語音合成和自然語言處理等。


原文連結:https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21

相關焦點

  • 從動圖中理解 RNN,LSTM 和 GRU
    Animated RNN, LSTM and GRU作者 | Raimi Karim譯者 | 汪鵬(重慶郵電大學)、Overfitting本文編輯:王立魚英文原文:https://towardsdatascience.com/animated-rnn-lstm-and-gru-ef124d06cf45
  • LSTM和GRU的解析從未如此通俗易懂(動圖)
    ▌作為解決方案的 LSTM 和 GRULSTM 和 GRU 是解決短時記憶問題的解決方案,它們具有稱為「門」的內部機制,可以調節信息流。AI項目體驗地址 https://loveai.techLSTM 和 GRU 可以在語音識別、語音合成和文本生成中找到,你甚至可以用它們為視頻生成字幕。對 LSTM 和 GRU 擅長處理長序列的原因,到這篇文章結束時你應該會有充分了解。 下面我將通過直觀解釋和插圖進行闡述,並避免儘可能多的數學運算。
  • 動圖詳解LSTM和GRU
    視頻來源Youtube: https://www.youtube.com/watch?v=8HyCNIVRbSU短期記憶的解決方案-LSTM和GRUGRU只有兩個Gates: Reset Gate和Update Gate。
  • 常見的時序模型:RNN/LSTM/GRU
    Klaus Greff LSTM & Colah’s Blog先忽略下圖中的藍線部分,是LSTM的一種變體。Hochreiter LSTM 1997LSTM正式的更新過程如下:colah's blog & gru paper直接由更新門控制時序信息流傳遞,比如更新門等於0,其實就是線性自循環Cell。當前輸入X的信息直接由重置門篩選關聯的hidden層特徵。
  • 超生動圖解LSTM和GRU:拯救循環神經網絡的記憶障礙就靠它們了!
    LSTM和GRU經常用在語音識別、語音合成和文本生成等領域,還可用來為視頻生成字幕。當你看完這篇文章時,我相信你會對LSTM和GRU在處理長序列的突出能力有充分了解。下面我將通過直觀解釋和插圖來進行介紹,並儘可能繞開數學運算。直觀認識我們從一個思考實驗開始。當你在網絡上購買生活用品時,一般會先閱讀商品評論來判斷商品好壞,以確定是否要購買這個商品。
  • 序列模型簡介:RNN, 雙向RNN, LSTM, GRU,有圖有真相
    圖4 循環神經網絡要理解時間步t+1的上下文,我們可能需要知道時間步驟0和1的表示。圖6 遺忘門我們從當前時間步驟中獲取輸入和從上一個時間步驟中獲得的表示,並將它們連接起來。圖9 門控循環單元門控循環單元使用更新門和復位門。更新門決定應該讓過去的多少信息通過,復位門決定應該丟棄過去的多少信息。
  • RNN系列教程之四 | 利用LSTM或GRU緩解梯度消失問題
    你基本上可將LSTB(和GRU)單元視為黑匣子,只要你給定當前輸入和前一時刻的隱藏狀態,便可計算出下一隱藏狀態。如下圖:g是基於當前輸入和先前隱藏狀態計算出的「候選」隱藏狀態。它與傳統RNN中的方程式完全相同,此處僅將參數U和W重命名為U^g和W^g。在傳統RNN中,我們指定g的值為新隱藏狀態,並輸出給下一個狀態,而在LSTM中,我們將通過輸入門來挑選g的一部分值,再輸出給下一個狀態。c_t是內部的記憶單元。
  • 【重溫序列模型】再回首DeepLearning遇見了LSTM和GRU
    下面再來個RNN的圖回顧一下(會發現和之前的圖又是不一樣, 好多種畫法, 但是萬變不離其宗, 原理不會變,哈哈):上一篇文章已經詳細分析了這種網絡的工作原理和計算方面的細節, 這裡就不再過多贅述, 這裡看一點新的東西, 就是序列依賴的問題, 上一篇文章中只是提到了循環網絡一個很重要的作用就是能夠捕捉序列之間的依賴關係, 而原理就是RNN在前向傳播的時候時間步之間有隱藏狀態信息的傳遞, 這樣反向傳播修改參數的時候
  • 「馬賽克」視頻都給弄清晰了??!!TecoGAN論文技術解析
    今天介紹這個新技術是讓模糊的,變清晰,把視頻中物體細節也能補回來的技術,聽起來是不是很厲害?一起來看看厲害在哪裡。看著很複雜的樣子,其實它的作用描述起來很簡單,就是將輸入的一個劣質視頻,通過這個技術分析它,然後輸出一個高解析度的清晰視頻。
  • 用Bi-GRU語義解析,實現中文人物關係分析 | 附完整代碼
    而實體識別和關係抽取是構建知識圖譜等上層自然語言處理應用的基礎。關係抽取可以簡單理解為一個分類問題:給定兩個實體和兩個實體共同出現的句子文本,判別兩個實體之間的關係。使用CNN或者雙向RNN加Attention的深度學習方法被認為是現在關係抽取state of art的解決方案。已有的文獻和代碼,大都是針對英文語料,使用詞向量作為輸入進行訓練。
  • 超生動圖解 LSTM 和 GPU,一文讀懂循環神經網絡!
    LSTM和GRU經常用在語音識別、語音合成和文本生成等領域,還可用來為視頻生成字幕。當你看完這篇文章時,我相信你會對LSTM和GRU在處理長序列的突出能力有充分了解。下面我將通過直觀解釋和插圖來進行介紹,並儘可能繞開數學運算。直觀認識我們從一個思考實驗開始。當你在網絡上購買生活用品時,一般會先閱讀商品評論來判斷商品好壞,以確定是否要購買這個商品。
  • 超生動圖解LSTM和GPU,一文讀懂循環神經網絡!
    LSTM和GRU經常用在語音識別、語音合成和文本生成等領域,還可用來為視頻生成字幕。當你看完這篇文章時,我相信你會對LSTM和GRU在處理長序列的突出能力有充分了解。下面我將通過直觀解釋和插圖來進行介紹,並儘可能繞開數學運算。直觀認識我們從一個思考實驗開始。當你在網絡上購買生活用品時,一般會先閱讀商品評論來判斷商品好壞,以確定是否要購買這個商品。
  • 改變宇宙的照相機,人類的視野從未如此清晰
    上圖為美國國家航空航天局第一次哈勃維修任務。太空人傑弗裡·霍夫曼移除了哈勃的廣角和行星照相機1 (WF/PC 1),並安裝了功能更強大的廣角和行星照相儀2(WF/PC 2)。新安裝的廣角和行星照相機2 (WF/PC2)大大提升了哈勃的成像能力。下圖是第一次維修任務之前和之後的區別!
  • GIF動畫解析RNN,LSTM,GRU
    三種最常見的循環神經網絡分別是:1.維尼拉循環神經網絡(vanilla RNN)2.長短期記憶網絡(LSTM),由Hochreiter和Schmidhuber於1997年提出3.門控循環單元網絡(GRU),由Cho等人於2014年提出現在可以查到許多解釋循環神經網絡這一概念的圖示。
  • 一步一步動畫圖解LSTM和GRU,沒有數學,包你看的明白!
    不過,其實只要幫你梳理一下,理解起來還是很清楚的,其實就是一個信息流動的過程,這次帶給大家的分享更是通過動圖的方式,讓大家一次看個明白。大家好,歡迎來到長短期記憶(LSTM)和門控循環單元(GRU)的圖解指南。我是Michael,我是AI語音助手空間的機器學習工程師。
  • 解讀三星一億像素 手機世界從未如此清晰
    短視頻潮流下 我們更需要手機擁有「高像素」    除了拍照體驗的提升,全新ISOCELL 亮 HMX將變革短視頻、Vlog和幫助用戶擺脫對單反的依賴,使其更具沉浸感和直觀性。5G時代下短視頻興起,用戶對於視頻攝像的需求越來越高,需求也亟待解決。
  • 手寫GRU-[TensorFlow]
    當前時刻標籤的標註是會基於上一時刻的標註結果,其實個人感覺就是循環神經網絡的機制可以完成,然而循環神經網絡輸出為隱藏單元的狀態,直接將這種狀態作為標籤應該是不夠準確的,所以大多論文中會在最後一層網絡中添加一層MLP什麼的,對隱藏單元序列進行解碼輸出所謂標籤,然而作為TensorFlow菜雞,一直就用人家封裝好的函數如下:with tf.variable_scope('GRU-cell'): gru_cell_fw
  • 怎麼製作gif動圖?怎麼用視頻做gif動圖?
    在日常生活中,經常會看到各種類型的gif動圖,比較常見微信表情包,QQ表情包,文章插圖等等。那麼如果想要自制gif動圖的話大家知道怎樣來進行製作嗎?接下來教大家一招,通過裁剪視頻轉gif動圖的操作方法,相信大家都有許多覺得好玩有趣的視頻吧,可以使用視頻轉gif功能快速完成gif在線製作,操作技巧如下。點擊導航欄中的gif工具,選擇視頻轉gif功能。點擊選擇視頻,將想要截取片段的視頻上傳到網站。
  • 可視化LSTM網絡:探索「記憶」的形成
    為了使得圖像清晰易讀,線性激活函數被證明是最佳的激活函數。對於所有被測試的激活函數,所有樣本路徑(example path,該術語將會在下一部分中解釋)都從圖的(0,0)點附近開始。對於非奇對稱函數 (ReLU 和 sigmoid) 而言,所有樣本路徑都在坐標系的第一象限。而對於奇函數而言(例如 tanh 和線性函數),所有路徑在所有象限都大致是均勻分布的。
  • NLP入門(十)使用LSTM進行文本情感分析
    它是對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理的過程。  本文將介紹情感分析中的情感極性(傾向)分析。所謂情感極性分析,指的是對文本進行褒義、貶義、中性的判斷。在大多應用場景下,只分為兩類。例如對於「喜愛」和「厭惡」這兩個詞,就屬於不同的情感傾向。  本文將詳細介紹如何使用深度學習模型中的LSTM模型來實現文本的情感分析。