教程 | 一步一步,看圖理解長短期記憶網絡與門控循環網絡

2022-01-06 機器之心

選自TowardsDataScience

作者:Michael Nguyen

機器之心編譯

參與:高璇、思源

大家好,歡迎來到 LSTM 和 GRU 的圖解指南。在本文中,Michael 將從 LSTM 和 GRU 的背後的原理開始,然後解釋令 LSTM 和 GRU 具有優秀性能的內部機制。如果你想了解這兩個網絡背後發生了什麼,這篇文章就是為你準備的。

如果喜歡,你還可以觀看這篇文章的視頻版。

問題重點——短期記憶


循環神經網絡(RNN)很大程度上會受到短期記憶的影響,如果序列足夠長,它們將很難將信息從早期時間步傳遞到靠後的時間步。因此,如果你試圖處理一段文字來做預測,RNN 可能從一開始就遺漏掉重要的信息。

在反向傳播過程中,循環神經網絡也存在梯度消失等問題。一般而言,梯度是用來更新神經網絡權值的,梯度消失問題是梯度會隨著時間的推移逐漸縮小接近零。如果梯度值變得非常小,它就不能為學習提供足夠的信息。

梯度更新規則

所以在 RNN 中,通常是前期的層會因為梯度消失和停止學習。因此,RNN 會忘記它在更長的序列中看到的東西,從而只擁有短期記憶。

解決方案——LSTM 和 GRU


創建 LSTM 和 GRU 可以作為短期記憶的解決方案,它們有一種稱為「門」的內部機制,可以調節信息流。

這些門可以判斷數據在一個序列中該保留或棄用,因此它可以將相關信息傳遞到較長序列鏈中進行預測。幾乎所有基於循環神經網絡的最新成果都是通過這兩個網絡實現的。LSTM 和 GRU 可以應用在語音識別、語音合成和文本生成中。你甚至可以用它們來生成視頻的字幕。

現在你應該理解 LSTM 和 GRU 擅長處理長序列的原因了。我將用直觀的解釋和插圖來解答這個問題,我儘量避免使用數學。

直觀解釋


好,讓我們從一個思維實驗開始。假設你通過在網上看評論來決定是否買 Life 牌麥片。因為我們先看評論,然後判斷其他人認為它是好還是壞。

當你閱讀評論時,你的大腦潛意識裡只會記住重要的關鍵詞。你會側重一些諸如「驚人的」和「完美均衡早餐」之類的詞。你不會在意「這個」、「給予」、「所有」、「應該」等等。如果朋友第二天問你評論說了什麼,你可能不會逐字逐句地記住。但你可能還記得一些重點,比如「肯定會再買」,其他的詞會從記憶中消失。

這就是 LSTM 或 GRU 的作用,它可以學會只保留相關的信息以進行預測。在這種情況下,你記得的評論會讓你做出好的判斷。

回顧循環神經網絡


為了理解 LSTM 或 GRU 是如何做到這一點的,讓我們回顧一下循環神經網絡。RNN 是這樣工作的:第一個單詞被轉換成機器可讀的向量。然後,RNN 逐個處理向量序列。

逐個處理序列

在處理過程中,它將之前的隱狀態傳遞給序列的下一個步驟。隱狀態作為神經網絡的記憶,保存著網絡先前觀察到的數據信息。

傳遞隱藏狀態到下一時間步

觀察 RNN 的一個單元格,看看如何計算隱狀態。首先,輸入和之前的藏狀態組合成一個向量。這個向量現在有當前輸入和先前輸入的信息。向量通過 tanh 激活,輸出是新的隱狀態,或神經網絡的記憶。

RNN 單元

雙曲正切(tanh)激活函數


tanh 激活函數用於調節在神經網絡中傳遞的值,它會將輸入值壓縮到-1 到 1 之間。

Tanh 將輸入壓縮到介於-1 到 1 之間

當向量通過神經網絡時,由於各種數學運算,它會經歷許多變換。假設一個值連續乘以 3,結果會爆炸增長成天文數字,從而導致其他值的變化變得微不足道。

缺少 tanh 的向量變換

tanh 函數確保值保持在-1 到 1 之間,從而控制神經網絡的輸出。下圖可以看到數值是如何藉助 tanh 函數在不同的時間步之中保持穩定。

tanh 函數下的向量變化

這就是 RNN。它的內部操作很少,但在適當的環境下(比如短序列)會有很好的性能。RNN 使用的計算資源比它的改進版 LSTM 和 GRU 要少得多。

LSTM


LSTM 具有與循環神經網絡相似的控制流,它在前向傳播時處理傳遞信息的數據,兩者區別在於單元內的處理過程不同。

LSTM 單元及內部運算

這些內部操作用於允許 LSTM 保存或丟棄信息,現在看這些操作可能會有點難,所以我們一步步來看。

核心概念


LSTM 的核心概念是單元狀態,及單元中各種各樣的門。單元狀態好比傳輸的高速公路,在序列鏈中傳遞相關信息。你可以把它看作是網絡的「記憶」。從理論上講,單元狀態可以在整個序列處理過程中攜帶相關信息。因此,即使是前期時間步的信息也可以幫助後續時間步的處理,因此單元狀態有效減少了短期記憶的影響。隨著單元狀態在不同時間步的傳遞,我們可以通過門控機制添加或刪除單元狀態中的信息。這些門是不同的神經網絡,用來決定能夠進入單元狀態的信息。在訓練過程中,門可以學習到哪些信息是需要保存或遺忘的。

sigmoid 函數


門控機制主要由 sigmoid 激活函數構成,sigmoid 激活函數類似於 tanh 激活函數,它會將數值控制在 0 到 1 之間,而不是-1 到 1。這有助於更新或丟棄數據,因為任何數乘以 0 都是 0,這將導致數值消失或被「遺忘」。任何數字乘以 1 都是其本身,因此這個值不變或者「保存」。網絡可以知道哪些數據不重要,可以被遺忘,或者哪些數據需要保存。

Sigmoid 會將數值控制在 0 到 1 之間

讓我們再深入探討一下各種門的作用,我們有三個不同的門來調節 LSTM 單元中的信息流,即遺忘門、輸入門和輸出門。

遺忘門


首先是遺忘門(forget gate),這個門決定了哪些信息應該被丟棄或保存。在遺忘門中,來自先前隱狀態的信息和來自當前輸入的信息傳遞到 sigmoid 函數,並將值壓縮到 0 和 1 之間。越接近 0 意味著丟棄,越接近 1 意味著保留。

遺忘門操作

輸入門


為了更新單元狀態,LSTM 需要輸入門(input gate)。首先,我們將前面的隱狀態和當前輸入傳遞給一個 sigmoid 函數,它通過將值轉換為 0 到 1 來決定將更新哪些值。0 表示不重要,1 表示重要。還可以將隱狀態和當前輸入傳遞給 tanh 函數,使值變為-1 到 1 之間的值,以幫助調節神經網絡。然後將 tanh 輸出與 sigmoid 輸出相乘,sigmoid 輸出將決定保留 tanh 輸出的重要信息。

輸入門操作

單元狀態

現在應該有足夠的信息來計算單元狀態。首先,單元狀態逐點乘以遺忘向量,如果它與接近 0 的值相乘,就有可能在單元狀態中得到低值。然後,從輸入門讀取上一步輸出,並逐點相加,將單元狀態更新為神經網絡認為相關的新值,這就得到了新的單元狀態。

計算單元狀態

輸出門


最後是輸出門(output gate),輸出門決定下一個隱藏狀態。記住,隱藏狀態包含先前輸入的信息。隱藏狀態也用於預測。首先,我們將前面的隱狀態和當前輸入傳遞給一個 sigmoid 函數。然後我們將新修改的單元狀態傳遞給 tanh 函數。我們將 tanh 輸出與 sigmoid 輸出相乘,以確定隱狀態應該包含的信息。新的單元狀態和新的隱藏狀態隨後被轉移到下一步中。

輸出門操作

需要了解的是,遺忘門決定了哪些內容與前面的步驟相關。輸入門決定從當前步驟中添加哪些相關信息。輸出門決定下一個隱狀態應該是什麼。

代碼演示


對於那些需要通過代碼更好地理解模型的人來說,這裡有一個 Python 偽代碼示例:

Python 偽代碼

首先,將前面的隱狀態和當前輸入拼接起來,即為 combine。

將 combine 的值送至遺忘層,並刪除不相關的數據。

使用 combine 創建候選層,候選項保存要添加到單元狀態的可能值。

將 combine 的值送至輸入層,這一層決定應該添加到新的單元狀態的候選數據。

在計算遺忘層、候選層和輸入層後,利用這些向量和前面的單元格狀態計算新單元格狀態。

然後計算輸出。

輸出和新單元狀態之間的對應元素乘積將得到新的隱藏狀態。

GRU


我們已經知道 LSTM 是如何工作的,讓我們簡單看看 GRU。GRU 是新一代的循環神經網絡,它與 LSTM 非常相似。GRU 擺脫了單元狀態,直接用隱藏狀態傳遞信息,它只有重置門和更新門這兩個門控機制。

GRU 單元和它的門

更新門的作用類似於 LSTM 的遺忘門和輸入門。它同時決定丟棄什麼舊信息,添加什麼新信息。而重置門是一個用來決定要忘記多少過去信息的門。

GRU 的張量運算很少,因此與 LSTM 相比,它的訓練速度要快一些。目前還不清楚哪一個更好,研究人員和工程師通常都根據自己實際情況選擇二者之一。

結論


綜上所述,RNN 對於處理用於預測的序列數據很有幫助,但其存在短期記憶問題。創建 LSTM 和 GRU 的目的是利用「門」的機制來降低短期記憶。LSTM 和 GRU 廣泛應用在語音識別、語音合成、自然語言理解等最先進的深度學習應用中。

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

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com

投稿或尋求報導:content@jiqizhixin.com

廣告 & 商務合作:bd@jiqizhixin.com

相關焦點

  • LSTM - 長短期記憶網絡
    傳統的卷積神經網絡沒有記憶,不能解決這一個問題,循環神經網絡(Recurrent Neural Networks)可以解決這一個問題,在循環神經網絡中,通過循環可以解決沒有記憶的問題,如下圖:看到這裡,你可能還是不理解為什循環神經網絡就可以有記憶。我們把這個圖展開:
  • 循環神經網絡原理--RNN,LSTM,GRU
    U、V、W代表神經網絡中的權重矩陣。在循環神經網絡中,向量S的值不僅僅和X有關,還和上一層的隱藏層輸出向量S有關。因此U是X和S之間的映射矩陣,W是上一隱藏層S的輸出和該層的向量S的映射矩陣。V是每個隱藏層的向量和輸出層向量映射矩陣。RNN展開後
  • 神經網絡解析|RNN(循環神經網絡)
    RNN是兩種神經網絡模型的縮寫,一種是遞歸神經網絡(Recursive Neural Network),一種是循環神經網絡(Recurrent Neural Network)。雖然這兩種神經網絡有著千絲萬縷的聯繫,但是本文主要討論的是第二種神經網絡模型——循環神經網絡(Recurrent Neural Network)。
  • 如何在長短期記憶(LSTM)網絡中利用TimeDistributed層---python語言
    長短期記憶(LSTM)網絡是一種流行並且性能很好的循環神經網絡(RNN)。像在python深度學習庫Keras中,這些網絡有明確的定義和易用的接口,但是它們一般都是很難配置的,可以解決任意序列的預測問題。在庫Keras中出現這個困難的原因是採用了TimeDistributed包裝層,並且一些LSTM層需要返回的是序列而不是單獨一個值。
  • 深度學習之循環神經網絡匯總(SRN網/Encoder-Decoder模型/BPTT算法/LSTM網絡/長程依賴問題/GRU網絡)
    門控循環網絡(LSTM)&&門控循環單元(GRU)# Deep RNNs with Layer Norm | 在深度循環網絡中應用層歸一化# 在keras中實現一個簡單記憶單元的層歸一化''' 自定義一個記憶單元,類似於常規層
  • 針對初學者的循環神經網絡介紹
    循環神經網絡(RNN)是一種專門處理序列的神經網絡。它們通常用於自然語言處理(NLP)任務,因為它們在處理文本方面非常有效。在本文中,我們將探索什麼是RNN,了解它們是如何工作的,並使用Python從頭構建一個真正的RNN(僅使用numpy庫)。這篇文章假設你有神經網絡的基本知識。
  • 理解循環神經網絡RNN(6.2)
    6.2 理解循環神經網絡(RNN)前面所有見過的神經網絡模型,比如,全聯結網絡和卷積網絡,它們最主要的特徵是沒有記憶。每個輸入被單獨處理,也沒有保留輸入之間的狀態。在這種神經網絡中,要想處理序列數據或者時序數據,那就需要一次輸入整個序列到神經網絡模型:把整個序列當作單個數據點。
  • LSTM、GRU與神經圖靈機:詳解深度學習最熱門的循環神經網絡
    完全循環網絡(Fully Recurrent Networks)遞歸神經網絡(Recursive Neural Networks)神經歷史壓縮器(Neural History Compressor)長短期記憶網絡(LSTM)門控循環單元(GRU)神經網絡神經圖靈機(NTM)循環神經網絡
  • 通俗易懂GRU|門控循環單元(gated recurrent unit, GRU)
    4.6.5 門控循環單元(gated recurrent unit, GRU)4.6.5節我們了解了LSTM的原理,但大家會覺得LSTM門控網絡結構過於複雜與冗餘。為此,Cho、van Merrienboer、 Bahdanau和Bengio[1]在2014年提出了GRU門控循環單元,這個結構如圖 4.53所示,是對LSTM的一種改進。它將遺忘門和輸入門合併成更新門,同時將記憶單元與隱藏層合併成了重置門,進而讓整個結構運算變得更加簡化且性能得以增強。當重置門接近於0時,隱藏狀態被迫忽略先前的隱藏狀態,僅用當前輸入進行復位。
  • LSTM 和遞歸網絡基礎教程
    由於遞歸網絡擁有一種特定的記憶模式,而記憶也是人類的基本能力之一,所以下文會時常將遞歸網絡與人腦的記憶活動進行類比(注 1)。前饋網絡回顧要理解遞歸網絡,首先需要了解前饋網絡的基礎知識。這兩種網絡的名字都來自於它們通過一系列網絡節點數學運算來傳遞信息的方式。前饋網絡將信息徑直向前遞送(從不返回已經過的節點),而遞歸網絡則將信息循環傳遞。
  • 循環神經網絡(RNN)和LSTM初學者指南 | 入門資料
    但是,想要理解循環網絡,首先要必須了解前饋網絡的基本知識。前饋網絡回顧前饋網絡和循環網絡的命名,來自於它們在傳遞信息時,在網絡節點上執行的一系列數學運算的方式。前饋網絡直接向前遞送信息(不會再次接觸已經經過的節點),而循環網絡則是通過循環傳遞信息。前饋網絡中的樣例,輸入網絡後被轉換成輸出;在監督學習中,輸出將是一個標籤,一個應用於輸入的名稱。
  • 入門 | 一文簡述循環神經網絡
    RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。
  • 【專知中秋呈獻-PyTorch手把手深度學習教程03】LSTM快速理解與PyTorch實現: 圖文+代碼
    (三) 基於字符級RNN的姓名生成 >LSTM(Long Short-Term Memory)是長短期記憶網絡,是一種時間遞歸神經網絡,適合於處理和預測時間序列中間隔和延遲相對較長的重要事件。RNN 是包含循環的網絡,允許信息的持久化在上面的示例中,神經網絡模塊A正在讀取一個輸入X,並輸出一個h,循環可以使得信息可以從網絡的當前狀態傳遞到下一個狀態。這些循環使得 RNN 看起來非常神秘。然而,如果你仔細想想,這樣也不比一個正常的神經網絡難於理解。RNN 可以被看做是同一神經網絡的多次複製,每個神經網絡模塊會把消息傳遞給下一個。
  • 全面理解卷積神經網絡及其不同架構
    下面有兩種解決方案一種思路是記憶之前的分類器的狀態,在這個基礎上訓練新的分類器,從而結合歷史影響,但是這樣需要大量歷史分類器重用分類器,只用一個分類器總結狀態,其他分類器接受對應時間的訓練,然後傳遞狀態,這樣就避免了需要大量歷史分類器,而且還比較有效的解決了這個問題。而這樣一種東西是什麼呢?沒錯,就是RNN(循環神經網絡。
  • 機器學習——RNN神經網絡
    對循環神經網絡的研究始於二十世紀80-90年代,並在二十一世紀初發展為深度學習(deep learning)算法之一,其中雙向循環神經網絡(Bidirectional RNN, Bi-RNN)和長短期記憶網絡(Long Short-Term Memory networks,LSTM)是常見的的循環神經網絡  。
  • 教程 | 如何使用LSTM在Keras中快速實現情感分析任務
    長短期記憶網絡通常被稱為 LSTM,它是由 Hochreiter 和 Schmiduber 提出的,被廣泛地應用在語音識別、語言建模、情感分析和文本預測中。在深入 LSTM 之前,我們首先應該理解對 LSTM 的需求,這個可以通過 RNN 在實際應用中的缺陷來解釋。所以我們就從 RNN 開始吧。
  • 生物神經網絡與人工神經網絡的遞歸性
    高級應用程式通常依賴於人工設計的修改,以適應門控機制。在某種意義上,這允許在接收到某個輸入或傳遞某個輸出時「轉儲」循環層的狀態內存。作為一個類比,當你說完一個句子,以及相關的想法,你可能希望拋棄那個想法,這樣它就不會和你的下一個想法混淆。值得注意的是,最常見和最有效的門控層之一——長短期記憶(LSTM)層,最初創建於1997年 ,遠早於基於 rnn 的應用程式的最新進展。
  • 一步一步教您註冊Pi教程
    你的邀請碼(註冊的時候必須填寫一個邀請碼): sanmao2021【註冊教程】包含帳戶註冊,新手教學,手機號驗證三步驟,其中手機號驗證為重點
  • 遞歸神經網絡之父:打造無監督式通用神經網絡人工智慧
    來源:InfoQ授權轉載,新智元譯者:何無魚【導讀】瑞士人工智慧實驗室IDSIA的科學事務主管Jürgen Schmidhuber 1997年率領團隊提出了簡化時間遞歸神經網絡的長短期記憶時間遞歸神經網絡
  • 獨家 | 菜鳥必備的循環神經網絡指南(附連結)
    作者:Victor  Zhou翻譯:王雨桐校對:吳金迪本文將介紹最基礎的循環神經網絡(Vanilla