作者:Michael Nguyen編譯:ronghuaiyang
昨天的文章中提到了Michael的這篇文章,今天就來看看,做序列信號的處理,離不開LSTM和GRU,很多人會覺得這兩個東西很複雜,特別是LSTM,裡面一堆的門,看看就頭暈。不過,其實只要幫你梳理一下,理解起來還是很清楚的,其實就是一個信息流動的過程,這次帶給大家的分享更是通過動圖的方式,讓大家一次看個明白。
大家好,歡迎來到長短期記憶(LSTM)和門控循環單元(GRU)的圖解指南。我是Michael,我是AI語音助手空間的機器學習工程師。
在這篇文章中,我們將從LSTM和GRU背後的直覺開始。然後,我將解釋LSTM和GRU的內部機制。如果你想了解這兩個網絡背後發生了什麼,那麼這篇文章就是為你準備的。
本來這裡有個視頻的,不過油管上不了,給個地址給大家,大家各自想辦法吧:https://youtu.be/8HyCNIVRbSU。
循環神經網絡受短期記憶的影響,如果序列足夠長,他們就很難將信息從早期的時間步傳遞到後期的時間步。因此,如果你想處理一段文字來做預測,RNN可能從一開始就遺漏了重要的信息。
在反向傳播過程中,循環神經網絡存在梯度消失問題。梯度是用來更新神經網絡權重的值。消失梯度問題是指,當梯度隨著時間的推移而縮小時。如果梯度值變得非常小,那它對學習就沒有太大的幫助了。
Gradient Update Rule
所以在循環神經網絡中,獲得小梯度的層停止了學習。這些通常是較早的層。因此,由於這些層無法學習,RNN可能會忘記在較長的序列中之前看到的內容,從而產生短期記憶。
解決方案就是LSTMs 和GRUs
LSTMs 和 GRUs 可以用來解決短期記憶的問題。它們有一種叫做「門」的內部機制,可以調節信息的流動。
這些門可以知道序列中哪些數據是重要的,是保留還是丟棄。通過這樣做,它可以將相關信息沿著長鏈傳遞下去,從而做出預測。幾乎所有的業界領先的循環神經網絡都是通過這兩種方式實現的。LSTM和GRU可以用於語音識別、語音合成和文本生成。你甚至可以用它們為視頻生成標題。
好了,在這篇文章的最後,你應該對LSTM和GRU擅長處理長序列的原因有了一個紮實的理解。現在,我將用直觀的解釋和說明來解決這個問題,並儘可能避免使用數學。
直覺
讓我們從一個思想實驗開始。假設你正在查看網上的評論,決定是否是否要買麥片,你會先看一下評論,看看別人認為它是好的還是壞的。
當你閱讀評論時,你的大腦潛意識裡只記住重要的關鍵詞。你學會了「amzing」和「perfectly balanced breakfast」這樣的詞,你不太喜歡像「this」、「give」、「all」、「should」這樣的詞。如果第二天朋友問你評論說了什麼,你可能不會逐字記住,你可能記得要點,比如「will definitely be buying again」。如果你和我差不多的話,其他的詞就會從記憶中消失。
這就是LSTM或GRU的本質。它可以學會只保留相關信息進行預測,而忘記無關的數據。在這種情況下,你記住的單詞使你判斷它是好的。
複習一下循環神經網絡
為了理解LSTM或GRU是如何做到這一點的,讓我們複習一下循環神經網絡。RNN是這樣工作的:將第一個單詞轉換成機器可讀的向量,然後RNN逐個處理向量序列。
Processing sequence one by one
在處理過程中,它將前一個隱藏狀態傳遞給序列的下一個步驟,隱藏狀態充當神經網絡存儲器。它保存網絡以前看到的數據的信息。
Passing hidden state to next time step
我們看下RNN的一個cell,看看如何來計算隱藏狀態。首先,將輸入和之前的隱藏狀態組合成一個向量。這個向量和當前輸入和以前輸入的信息有關。該向量經過tanh激活,輸出是新的隱藏狀態,即網絡的記憶。
RNN Cell
Tanh激活
tanh激活函數用於調節流經網絡的值,tanh函數壓縮後值在-1和1之間。
Tanh squishes values to be between -1 and 1
當向量流經神經網絡時,由於各種數學運算,它會進行許多轉換。假設一個值連續的乘以3,你可以看到一些值是如何爆炸並變成天文數字的,從而導致其他值看起來就微不足道了。
vector transformations without tanh
tanh函數確保值在-1和1之間,從而調節神經網絡的輸出。你可以看到在從前面來的值是如何通過tanh函數,將值保持在tanh函數允許的邊界範圍內的。
vector transformations with tanh
這就是RNN,它內部的操作很少,但是在適當的環境下(比如短序列)可以很好地工作。RNN使用的計算資源比它的進化變種LSTM和GRU少得多。
LSTM
LSTM具有類似於循環神經網絡的控制流。它在向前傳播時處理傳遞信息的數據。不同之處在於LSTM cell內的操作。
LSTM Cell and It’s Operations
這些操作允許LSTM保存或忘記信息,現在看這些運算可能會有點難,所以我們會一步一步地過一遍。
核心概念
LSTM的核心概念是cell狀態,還有各種各樣的門。cell狀態充當傳輸高速公路,沿著序列鏈傳輸相關信息。你可以把它看作網絡的「存儲器」。理論上,cell狀態可以在整個序列處理過程中攜帶相關信息。因此,即使是早期時間步驟的信息也可以傳遞到後期時間步驟,從而減少短期記憶的影響。當cell狀態運行時,信息通過門被添加到cell狀態或從cell狀態中刪除。這些門是不同的神經網絡,決定哪些信息是允許的cell狀態。這些門可以在訓練中學習哪些信息是相關的從而進行保持或忘記。
Sigmoid
門中包含sigmoid激活函數。sigmoid激活函數和tanh激活函數很類似,只是它壓縮之後不是-1和1之間的值,而是0和1之間的值。這有助於更新或忘記數據,因為任何被乘以0的數字都是0,從而導致值消失或「被遺忘」。任何數乘以1都是相同的值,所以這個值保持不變。「網絡可以知道哪些數據重不重要,因此可以忘記或保留那些數據。」
Sigmoid squishes values to be between 0 and 1
我們再更深入地研究一下這些門在做什麼,我們有三個不同的門來調節LSTM cell中的信息流,遺忘門,輸入門,和輸出門。
遺忘門
這個門決定了哪些信息應該丟棄或保留。來自以前隱藏狀態的信息和來自當前輸入的信息通過sigmoid函數進行傳遞。結果在0到1之間。越接近0表示忘記,越接近1表示保留。
Forget gate operations
輸入門
我們使用輸入門來更新cell狀態。首先,我們將之前的隱藏狀態和當前輸入傳遞給一個sigmoid函數。它將值轉換為0到1之間來決定更新哪些值。0表示不重要,1表示重要。你還需要將隱藏狀態和當前的輸入送到tanh函數中,以得到-1到1之間的值,幫助調節網絡。然後將tanh輸出與sigmoid輸出相乘。sigmoid輸出將決定從tanh的輸出中保留哪些重要信息。
Input gate operations
Cell狀態
現在我們有了足夠的信息來計算cell的狀態。首先,cell狀態逐點乘以遺忘向量。如果將其乘以接近0的值,則有可能降低cell狀態下的值。然後我們從輸入門獲取輸出,並進行逐點加法,將cell狀態更新為神經網絡認為相關的新值。這就得到了新的cell狀態。
Calculating cell state
輸出門
最後是輸出門。輸出門決定下一個隱藏狀態應該是什麼。請記住,隱藏狀態中包含之前輸入的信息,隱藏狀態也用於預測。首先,我們將之前的隱藏狀態和當前輸入傳遞給一個sigmoid函數。然後我們將新修改的cell狀態傳遞給tanh函數。我們將tanh輸出與sigmoid輸出相乘,以決定隱藏狀態應該包含哪些信息,輸出是隱藏狀態。新的cell狀態和新的隱藏狀態然後被轉移到下一個時間步驟。
output gate operations
回顧一下,遺忘門決定了前面的步驟什麼是相關的需要保留的。輸入門決定從當前步驟中添加哪些相關信息。輸出門決定下一個隱藏狀態應該是什麼。
編程Demo
這裡有一個使用python偽代碼的示例。
就是這樣!LSTM網絡的控制流程是幾個張量操作和一個for循環,你可以使用隱藏狀態進行預測。結合所有這些機制,LSTM可以選擇在序列處理過程中哪些信息是需要記住的,哪些信息是需要忘記的。
GRU
現在我們知道了LSTM是如何工作的,讓我們簡單地看一下GRU。GRU是新一代的遞歸神經網絡,與LSTM非常相似。GRU擺脫了cell狀態,並使用隱藏狀態來傳輸信息。它也只有兩個門,一個復位門和一個更新門
GRU cell and it’s gates
更新門
更新門的作用類似於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
更多文章,請關注微信公眾號:AI公園