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