lstm原理_通俗易懂的方式介绍LSTMGRU(动图)
本文內容主要翻譯自:Illustrated Guide to LSTM’s and GRU’s: A step by step explanation
本文首先從直覺上了解一下LSTM和GRU;然后再介紹LSTM和GRU的內部機制。
短期記憶問題
RNN網絡會受到短期記憶問題的影響。如果一個輸入序列足夠長,那么RNN很難將早期的信息傳送到之后的時間步上。如果你正在嘗試處理一段文字來進行預測,RNN可能會丟失掉起始部分的重要信息。
在反向傳播過程中,RNN網絡會遇到梯度消失問題。反向傳播過程中計算的梯度用于對權重參數進行更新。梯度消失問題是指梯度隨著時間的推移而逐漸減小[或者說由于鏈式的法則,梯度值從后往前越來越小],如果梯度值變得非常小,那么權重參數就不再更新。
所在RNN網絡中,獲得小梯度的網絡層將終止學習過程,通常這些網絡層為模型的前幾層。因為這些網絡層停止學習,RNN可能會忘記在長序列中看到的信息,因此具有短期記憶。
解決方法:LSTM & GRU
LSTM和GRU的提出是為了解決傳統RNN遇到的短期記憶問題,它們內部具有稱為“門”的機制,可以調節信息的流動。
這些“門”可以通過學習知道輸入數據序列中那部分是重要的需要保留,那部分可以丟棄。通過這樣的“門”,相關信息可以沿序列的長鏈傳遞下去從而進行預測。幾乎所有基于遞歸神經網絡的技術成果都是通過這兩個網絡實現的。LSTM和GRU可以用于語音識別、語音合成以及文本生成,甚至可以用它們來為視頻生成字幕。
下面,我們通過圖示對這兩種網絡進行介紹,在介紹過程中會避免大量的數學計算;通過圖示,我們能對這兩種網絡的內部機制有清晰的了解。
本質
我們先開始做一個小實驗。假設你想要在網上買一份麥片,首先你會閱讀購買用戶的商品評價進而決定是否購買。
當你閱讀上述評論時,大腦會下意識地只記住那些關鍵詞,如“amazing","perfectly balanced breakfast",對”this“,”gave“,”all“,”should“等詞并不會太過關注。如果你朋友第二天問題評論的內容,你可能不會一字不差地記住評論內容,可能只記得關鍵信息,像”will definitely be buying again“.而不記得其他詞匯。
這基本上就像是LSTM和GRU所做的事情,它們可以學習只保留相關信息來進行預測,并忘記不相關的數據信息。在這個例子中,你記得的詞匯信息可以幫助你判斷這個商品是否值得購買。
RNN回顧
為了了解LSTM和GRU的實現原理,我們先回顧一下RNN。RNN的工作原理:首先將單詞轉換成機器能理解的向量形式,然后將向量依次送到網絡中進行處理。
在處理過程中,RNN網絡將前一個時間步的隱藏狀態傳送到當前時間步。RNN的隱藏狀態的作用類似于神經網絡的"記憶",保存著它處理過的從起始到當前位置的所有數據信息。
讓我們聚焦到RNN的單個單元來看一下隱藏狀態是如何計算的。首先,將輸入數據和前一個隱藏狀態聚合,形成一個向量。這個向量擁有當前輸入和以前所有的輸入信息。這個聚合向量通過一個tanh激活函數,其輸出結果即為新的隱藏狀態,或者說網絡的“記憶”。
Tanh激活函數
tanh激活函數用于幫助調節流經網絡的值。tanh網絡將輸出結果的取值范圍限制到(-1, 1).
當向量流過神經網絡時,由于各種數學運算,它會經歷許多變換。我們假設變化過程為:一個值連續乘以3.通過下面的gif,你可以看到某些值如何爆炸并成為天文數字,從而導致其他值顯得微不足道。
tanh激活函數能夠將數據的輸出范圍壓縮到-1到1之間,從而達到調整神經網絡輸出結果的目的。你可以通過下圖看到相同的輸入數據經過tanh激活函數后的數據變化過程。
這就是RNN的計算過程。RNN的內部計算很少,在恰當的情境下工作效果非常好(如處理短文本序列)。RNN使用的計算資源比它的變體LSTM和GRU都少。
LSTM
LSTM和RNN具有類似的數據控制流,它在前向傳播時處理流經單元的數據。兩者的不同之處在于LSTM的內部數據操作不同。
這些操作可以保證LSTM對信息的保留和丟棄。下面我們逐步介紹LSTM單元的內部操作。
核心概念
LSTM的核心概念在于細胞狀態以及各種門。細胞狀態充當信息傳輸公路,它將相關信息沿著序列鏈進行傳遞,你可以將它看做是網絡模型的“記憶”。理論上,細胞狀態可以在整個序列處理過程中攜帶相關信息。因此,盡管是早期的信息也能被攜帶到之后的時間步的細胞中,進而能減緩短期記憶的問題。隨著細胞狀態的變化,信息通過“門”機制添加或刪除到細胞狀態中。“門”是一種神經網絡,可以決定哪部分信息添加到細胞狀態中。這些“門”可以通過學習知道在訓練過程中哪些信息需要保留哪些信息需要忘記。
Sigmoid
“門”結構中包含sigmoid激活函數。Sigmoid激活函數和tanh激活函數類似:tanh激活函數將數據的輸出范圍限制到(-1, 1), sigmoid則將范圍限制到(0,1)。這有助于更新和忘記信息,因為任何數字乘以0得0,進而實現信息的“忘記”;任何數字乘以1得原數字,進而實現信息的“保留”。神經網絡可以學習指導哪部分數據不重要可以忘記,哪些數據重要需要保留。
下面我們看看LSTM中各種門結構。LSTM包括三種用于控制信息流動的門結構,分別是:忘記門、輸入門和輸出門。
忘記門
忘記門用于決定信息的保留或丟失。前一個神經元的隱藏狀態和當前輸入傳遞到sigmoid函數中。輸出結果在0至1之間。越接近0表示信息需要被丟棄(忘記),越接近1表示信息需要保留。
輸入門
輸入門用于更新細胞狀態。首先,我們將前一個神經元的隱藏狀態和當前輸入傳送帶sigmoid函數中。sigmoid將輸出調整到0~1之間,0表示信息不重要,1表示信息重要。此外,將隱藏狀態和當前輸入傳送到tanh函數中得到一個候選狀態。然后,將候選狀態和sigmoid計算結果進行相乘。sigmoid計算結果用于決定tanh的輸出結果哪部分是重要的需要保存。
細胞狀態
至此,我們有了充足的信息可以用來更新細胞狀態。首先,細胞狀態和忘記向量逐元素相乘,如果和一個接近0的值進行相乘,則有可能丟棄細胞狀態中元素的值;然后將這個值與輸入門的輸出結果進行逐元素相加,將神經網絡發現的相關信息添加到細胞狀態中。這樣,我們就完成了細胞狀態的更新。
輸出門
輸出門可以用于確定下一個隱藏狀態的值。隱藏狀態包含先前的輸入信息,同時也可以用于做預測。首先,我們將前一個神經元的隱藏狀態和當前輸入傳送到sigmoid函數中;然后我們將更新后的細胞狀態送到tanh激活函數中;最后將tanh函數的輸出與sigmoid函數的輸出進行相乘,進而確定隱藏狀態攜帶的信息,這個計算結果就是新的隱藏狀態值。最后,將新的細胞狀態和隱藏狀態傳送到下一個時間步的神經元中。
讓我們來回顧一下,忘記門決定先前時間步的信息哪些信息的相關的需要保留。輸入門決定當前時間步開始需要添加的相關信息。輸出門決定下一個隱藏狀態應該是什么。
運算偽代碼
LSTM網絡的控制流就是幾個張量計算以及一個for循環。你可以使用隱藏狀態做預測。通過這些機制,LSTM在序列處理過程中可以決定哪部分信息需要忘記,哪些數據需要遺忘。
GRU
了解了LSTM的工作原理,我們來簡單介紹一個GRU。GRU是RNN的一個新變體,工作原理和LSTM很相似。GRU沒有細胞狀態,只有一個隱藏狀態用于傳送信息。它只有兩個門結構:重置門和更新門。
更新門
更新門和LSTM中的遺忘門和輸入門功能類似。它可以決定哪部分信息需要遺忘哪些信息需要被添加。
重置門
重置門用于決定先前的信息哪些部分需要遺忘。
GRU內部的張量計算更少,因此GRU的訓練速度比LSTM更快。但是很難確定兩者之間孰優孰劣。研究者和算法工程師通常會都嘗試一下,然后決定到底是用哪一個。
總結
RNN 用于處理序列數據來進行預測,但容易受到短期記憶的制約。LSTM 和 GRU 采用門結構來克服短期記憶的影響。門結構是一種神經網絡,可以調節流經序列鏈的信息流。LSTM和GRU可以用于語音識別,語音合成,自然語言理解等任務中。
關注公眾號,一起交流成長~
總結
以上是生活随笔為你收集整理的lstm原理_通俗易懂的方式介绍LSTMGRU(动图)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python求回文_python实现求最
- 下一篇: webservice 函数2007不可以