摘要:作為解決方案的和和是解決短時(shí)記憶問(wèn)題的解決方案,它們具有稱(chēng)為門(mén)的內(nèi)部機(jī)制,可以調(diào)節(jié)信息流。隨后,它可以沿著長(zhǎng)鏈序列傳遞相關(guān)信息以進(jìn)行預(yù)測(cè),幾乎所有基于遞歸神經(jīng)網(wǎng)絡(luò)的技術(shù)成果都是通過(guò)這兩個(gè)網(wǎng)絡(luò)實(shí)現(xiàn)的。和采用門(mén)結(jié)構(gòu)來(lái)克服短時(shí)記憶的影響。
短時(shí)記憶
RNN 會(huì)受到短時(shí)記憶的影響。如果一條序列足夠長(zhǎng),那它們將很難將信息從較早的時(shí)間步傳送到后面的時(shí)間步。 因此,如果你正在嘗試處理一段文本進(jìn)行預(yù)測(cè),RNN 可能從一開(kāi)始就會(huì)遺漏重要信息。
在反向傳播期間,RNN 會(huì)面臨梯度消失的問(wèn)題。 梯度是用于更新神經(jīng)網(wǎng)絡(luò)的權(quán)重值,消失的梯度問(wèn)題是當(dāng)梯度隨著時(shí)間的推移傳播時(shí)梯度下降,如果梯度值變得非常小,就不會(huì)繼續(xù)學(xué)習(xí)。
梯度更新規(guī)則
因此,在遞歸神經(jīng)網(wǎng)絡(luò)中,獲得小梯度更新的層會(huì)停止學(xué)習(xí)—— 那些通常是較早的層。 由于這些層不學(xué)習(xí),RNN 可以忘記它在較長(zhǎng)序列中看到的內(nèi)容,因此具有短時(shí)記憶。
作為解決方案的 LSTM 和 GRU
LSTM 和 GRU 是解決短時(shí)記憶問(wèn)題的解決方案,它們具有稱(chēng)為“門(mén)”的內(nèi)部機(jī)制,可以調(diào)節(jié)信息流。
這些“門(mén)”可以知道序列中哪些重要的數(shù)據(jù)是需要保留,而哪些是要?jiǎng)h除的。 隨后,它可以沿著長(zhǎng)鏈序列傳遞相關(guān)信息以進(jìn)行預(yù)測(cè),幾乎所有基于遞歸神經(jīng)網(wǎng)絡(luò)的技術(shù)成果都是通過(guò)這兩個(gè)網(wǎng)絡(luò)實(shí)現(xiàn)的。
LSTM 和 GRU 可以在語(yǔ)音識(shí)別、語(yǔ)音合成和文本生成中找到,你甚至可以用它們?yōu)橐曨l生成字幕。對(duì) LSTM 和 GRU 擅長(zhǎng)處理長(zhǎng)序列的原因,到這篇文章結(jié)束時(shí)你應(yīng)該會(huì)有充分了解。?
下面我將通過(guò)直觀解釋和插圖進(jìn)行闡述,并避免盡可能多的數(shù)學(xué)運(yùn)算。
本質(zhì)
讓我們從一個(gè)有趣的小實(shí)驗(yàn)開(kāi)始吧。當(dāng)你想在網(wǎng)上購(gòu)買(mǎi)生活用品時(shí),一般都會(huì)查看一下此前已購(gòu)買(mǎi)該商品用戶(hù)的評(píng)價(jià)。
當(dāng)你瀏覽評(píng)論時(shí),你的大腦下意識(shí)地只會(huì)記住重要的關(guān)鍵詞,比如“amazing”和“awsome”這樣的詞匯,而不太會(huì)關(guān)心“this”、“give”、“all”、“should”等字樣。如果朋友第二天問(wèn)你用戶(hù)評(píng)價(jià)都說(shuō)了什么,那你可能不會(huì)一字不漏地記住它,而是會(huì)說(shuō)出但大腦里記得的主要觀點(diǎn),比如“下次肯定還會(huì)來(lái)買(mǎi)”,那其他一些無(wú)關(guān)緊要的內(nèi)容自然會(huì)從記憶中逐漸消失。
而這基本上就像是 LSTM 或 GRU 所做的那樣,它們可以學(xué)習(xí)只保留相關(guān)信息來(lái)進(jìn)行預(yù)測(cè),并忘記不相關(guān)的數(shù)據(jù)。
RNN 述評(píng)
為了了解 LSTM 或 GRU 如何實(shí)現(xiàn)這一點(diǎn),讓我們回顧一下遞歸神經(jīng)網(wǎng)絡(luò)。 RNN 的工作原理如下;第一個(gè)詞被轉(zhuǎn)換成了機(jī)器可讀的向量,然后 RNN 逐個(gè)處理向量序列。
?逐一處理矢量序列
處理時(shí),RNN 將先前隱藏狀態(tài)傳遞給序列的下一步。 而隱藏狀態(tài)充當(dāng)了神經(jīng)網(wǎng)絡(luò)記憶,它包含相關(guān)網(wǎng)絡(luò)之前所見(jiàn)過(guò)的數(shù)據(jù)的信息。
將隱藏狀態(tài)傳遞給下一個(gè)時(shí)間步
讓我們看看 RNN 的一個(gè)細(xì)胞,了解一下它如何計(jì)算隱藏狀態(tài)。 首先,將輸入和先前隱藏狀態(tài)組合成向量, 該向量包含當(dāng)前輸入和先前輸入的信息。 向量經(jīng)過(guò)激活函數(shù) tanh之后,輸出的是新的隱藏狀態(tài)或網(wǎng)絡(luò)記憶。
? ? ? ?
RNN 細(xì)胞
激活函數(shù) Tanh
激活函數(shù) Tanh 用于幫助調(diào)節(jié)流經(jīng)網(wǎng)絡(luò)的值。 tanh 函數(shù)將數(shù)值始終限制在 -1 和 1 之間。
當(dāng)向量流經(jīng)神經(jīng)網(wǎng)絡(luò)時(shí),由于有各種數(shù)學(xué)運(yùn)算的緣故,它經(jīng)歷了許多變換。 因此想象讓一個(gè)值繼續(xù)乘以 3,你可以想到一些值是如何變成天文數(shù)字的,這讓其他值看起來(lái)微不足道。
沒(méi)有 tanh 函數(shù)的向量轉(zhuǎn)換
tanh 函數(shù)確保值保持在 -1~1 之間,從而調(diào)節(jié)了神經(jīng)網(wǎng)絡(luò)的輸出。 你可以看到上面的相同值是如何保持在 tanh 函數(shù)所允許的邊界之間的。
有 tanh 函數(shù)的向量轉(zhuǎn)換
這是一個(gè) RNN。 它內(nèi)部的操作很少,但在適當(dāng)?shù)那樾蜗拢ㄈ缍绦蛄校┻\(yùn)作的很好。 RNN 使用的計(jì)算資源比它的演化變體 LSTM 和 GRU 要少得多。
LSTM
LSTM 的控制流程與 RNN 相似,它們都是在前向傳播的過(guò)程中處理流經(jīng)細(xì)胞的數(shù)據(jù),不同之處在于 LSTM 中細(xì)胞的結(jié)構(gòu)和運(yùn)算有所變化。
LSTM 的細(xì)胞結(jié)構(gòu)和運(yùn)算
這一系列運(yùn)算操作使得 LSTM具有能選擇保存信息或遺忘信息的功能。咋一看這些運(yùn)算操作時(shí)可能有點(diǎn)復(fù)雜,但沒(méi)關(guān)系下面將帶你一步步了解這些運(yùn)算操作。
核心概念
LSTM 的核心概念在于細(xì)胞狀態(tài)以及“門(mén)”結(jié)構(gòu)。細(xì)胞狀態(tài)相當(dāng)于信息傳輸?shù)穆窂剑屝畔⒛茉谛蛄羞B中傳遞下去。你可以將其看作網(wǎng)絡(luò)的“記憶”。理論上講,細(xì)胞狀態(tài)能夠?qū)⑿蛄刑幚磉^(guò)程中的相關(guān)信息一直傳遞下去。
因此,即使是較早時(shí)間步長(zhǎng)的信息也能攜帶到較后時(shí)間步長(zhǎng)的細(xì)胞中來(lái),這克服了短時(shí)記憶的影響。信息的添加和移除我們通過(guò)“門(mén)”結(jié)構(gòu)來(lái)實(shí)現(xiàn),“門(mén)”結(jié)構(gòu)在訓(xùn)練過(guò)程中會(huì)去學(xué)習(xí)該保存或遺忘哪些信息。
Sigmoid
門(mén)結(jié)構(gòu)中包含著 sigmoid 激活函數(shù)。Sigmoid 激活函數(shù)與 tanh 函數(shù)類(lèi)似,不同之處在于 sigmoid 是把值壓縮到 0~1 之間而不是 -1~1 之間。這樣的設(shè)置有助于更新或忘記信息,因?yàn)槿魏螖?shù)乘以 0 都得 0,這部分信息就會(huì)剔除掉。同樣的,任何數(shù)乘以 1 都得到它本身,這部分信息就會(huì)完美地保存下來(lái)。這樣網(wǎng)絡(luò)就能了解哪些數(shù)據(jù)是需要遺忘,哪些數(shù)據(jù)是需要保存。
Sigmoid 將值壓縮到 0~1 之間
接下來(lái)了解一下門(mén)結(jié)構(gòu)的功能。LSTM 有三種類(lèi)型的門(mén)結(jié)構(gòu):遺忘門(mén)、輸入門(mén)和輸出門(mén)。
遺忘門(mén)
遺忘門(mén)的功能是決定應(yīng)丟棄或保留哪些信息。來(lái)自前一個(gè)隱藏狀態(tài)的信息和當(dāng)前輸入的信息同時(shí)傳遞到 sigmoid 函數(shù)中去,輸出值介于 0 和 1 之間,越接近 0 意味著越應(yīng)該丟棄,越接近 1 意味著越應(yīng)該保留。
遺忘門(mén)的運(yùn)算過(guò)程
輸入門(mén)
輸入門(mén)用于更新細(xì)胞狀態(tài)。首先將前一層隱藏狀態(tài)的信息和當(dāng)前輸入的信息傳遞到 sigmoid 函數(shù)中去。將值調(diào)整到 0~1 之間來(lái)決定要更新哪些信息。0 表示不重要,1 表示重要。
其次還要將前一層隱藏狀態(tài)的信息和當(dāng)前輸入的信息傳遞到 tanh 函數(shù)中去,創(chuàng)造一個(gè)新的侯選值向量。最后將 sigmoid 的輸出值與 tanh 的輸出值相乘,sigmoid 的輸出值將決定 tanh 的輸出值中哪些信息是重要且需要保留下來(lái)的。
輸入門(mén)的運(yùn)算過(guò)程
細(xì)胞狀態(tài)
下一步,就是計(jì)算細(xì)胞狀態(tài)。首先前一層的細(xì)胞狀態(tài)與遺忘向量逐點(diǎn)相乘。如果它乘以接近 0 的值,意味著在新的細(xì)胞狀態(tài)中,這些信息是需要丟棄掉的。然后再將該值與輸入門(mén)的輸出值逐點(diǎn)相加,將神經(jīng)網(wǎng)絡(luò)發(fā)現(xiàn)的新信息更新到細(xì)胞狀態(tài)中去。至此,就得到了更新后的細(xì)胞狀態(tài)。
細(xì)胞狀態(tài)的計(jì)算
輸出門(mén)
輸出門(mén)用來(lái)確定下一個(gè)隱藏狀態(tài)的值,隱藏狀態(tài)包含了先前輸入的信息。首先,我們將前一個(gè)隱藏狀態(tài)和當(dāng)前輸入傳遞到 sigmoid 函數(shù)中,然后將新得到的細(xì)胞狀態(tài)傳遞給 tanh 函數(shù)。
最后將 tanh 的輸出與 sigmoid 的輸出相乘,以確定隱藏狀態(tài)應(yīng)攜帶的信息。再將隱藏狀態(tài)作為當(dāng)前細(xì)胞的輸出,把新的細(xì)胞狀態(tài)和新的隱藏狀態(tài)傳遞到下一個(gè)時(shí)間步長(zhǎng)中去。
?輸出門(mén)的運(yùn)算過(guò)程
讓我們?cè)偈崂硪幌?。遺忘門(mén)確定前一個(gè)步長(zhǎng)中哪些相關(guān)的信息需要被保留;輸入門(mén)確定當(dāng)前輸入中哪些信息是重要的,需要被添加的;輸出門(mén)確定下一個(gè)隱藏狀態(tài)應(yīng)該是什么。
代碼示例
對(duì)于那些懶得看文字的人來(lái)說(shuō),代碼也許更好理解,下面給出一個(gè)用 python 寫(xiě)的示例。
python 寫(xiě)的偽代碼
1.首先,我們將先前的隱藏狀態(tài)和當(dāng)前的輸入連接起來(lái),這里將它稱(chēng)為 combine;
2.其次將 combine 丟到遺忘層中,用于刪除不相關(guān)的數(shù)據(jù);
3.再用 combine 創(chuàng)建一個(gè)候選層,候選層中包含著可能要添加到細(xì)胞狀態(tài)中的值;
4.combine 同樣要丟到輸入層中,該層決定了候選層中哪些數(shù)據(jù)需要添加到新的細(xì)胞狀態(tài)中;
5.接下來(lái)細(xì)胞狀態(tài)再根據(jù)遺忘層、候選層、輸入層以及先前細(xì)胞狀態(tài)的向量來(lái)計(jì)算;
6.再計(jì)算當(dāng)前細(xì)胞的輸出;
7.最后將輸出與新的細(xì)胞狀態(tài)逐點(diǎn)相乘以得到新的隱藏狀態(tài)。
是的,LSTM 網(wǎng)絡(luò)的控制流程就是幾個(gè)張量和一個(gè) for 循環(huán)。你還可以使用隱藏狀態(tài)進(jìn)行預(yù)測(cè)。結(jié)合這些機(jī)制,LSTM 能夠在序列處理中確定哪些信息需要記憶,哪些信息需要遺忘。
GRU
知道了 LSTM 的工作原理之后,來(lái)了解一下 GRU。GRU 是新一代的循環(huán)神經(jīng)網(wǎng)絡(luò),與 LSTM 非常相似。與 LSTM 相比,GRU 去除掉了細(xì)胞狀態(tài),使用隱藏狀態(tài)來(lái)進(jìn)行信息的傳遞。它只包含兩個(gè)門(mén):更新門(mén)和重置門(mén)。
GRU 的細(xì)胞結(jié)構(gòu)和門(mén)結(jié)構(gòu)
更新門(mén)
更新門(mén)的作用類(lèi)似于 LSTM 中的遺忘門(mén)和輸入門(mén)。它決定了要忘記哪些信息以及哪些新信息需要被添加。
重置門(mén)
重置門(mén)用于決定遺忘先前信息的程度。
這就是 GRU。GRU 的張量運(yùn)算較少,因此它比 LSTM 的訓(xùn)練更快一下。很難去判定這兩者到底誰(shuí)更好,研究人員通常會(huì)兩者都試一下,然后選擇最合適的。
結(jié)語(yǔ)
總而言之,RNN 適用于處理序列數(shù)據(jù)用于預(yù)測(cè),但卻受到短時(shí)記憶的制約。LSTM 和 GRU 采用門(mén)結(jié)構(gòu)來(lái)克服短時(shí)記憶的影響。門(mén)結(jié)構(gòu)可以調(diào)節(jié)流經(jīng)序列鏈的信息流。LSTM 和 GRU 被廣泛地應(yīng)用到語(yǔ)音識(shí)別、語(yǔ)音合成和自然語(yǔ)言處理等。
原文鏈接:https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
聲明:文章收集于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系小編及時(shí)處理,謝謝!
歡迎加入本站公開(kāi)興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/4821.html
摘要:前饋網(wǎng)絡(luò)的反向傳播從最后的誤差開(kāi)始,經(jīng)每個(gè)隱藏層的輸出權(quán)重和輸入反向移動(dòng),將一定比例的誤差分配給每個(gè)權(quán)重,方法是計(jì)算權(quán)重與誤差的偏導(dǎo)數(shù),即兩者變化速度的比例。隨后,梯度下降的學(xué)習(xí)算法會(huì)用這些偏導(dǎo)數(shù)對(duì)權(quán)重進(jìn)行上下調(diào)整以減少誤差。 目錄前饋網(wǎng)絡(luò)遞歸網(wǎng)絡(luò)沿時(shí)間反向傳播梯度消失與梯度膨脹長(zhǎng)短期記憶單元(LSTM)涵蓋多種時(shí)間尺度本文旨在幫助神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)者了解遞歸網(wǎng)絡(luò)的運(yùn)作方式,以及一種主要的遞歸網(wǎng)絡(luò)...
摘要:有能力對(duì)元胞狀態(tài)添加或者刪除信息,這種能力通過(guò)一種叫門(mén)的結(jié)構(gòu)來(lái)控制。一個(gè)有個(gè)這種門(mén),來(lái)保護(hù)和控制元胞狀態(tài)。輸出將會(huì)基于目前的元胞狀態(tài),并且會(huì)加入一些過(guò)濾。同時(shí)也將元胞狀態(tài)和隱狀態(tài)合并,同時(shí)引入其他的一些變化。 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)人們的每次思考并不都是從零開(kāi)始的。比如說(shuō)你在閱讀這篇文章時(shí),你基于對(duì)前面的文字的理解來(lái)理解你目前閱讀到的文字,而不是每讀到一個(gè)文字時(shí),都拋棄掉前面的思考,從頭開(kāi)始...
摘要:介紹本文我們將使用網(wǎng)絡(luò)來(lái)學(xué)習(xí)莎士比亞小說(shuō),模型通過(guò)學(xué)習(xí)可以生成與小說(shuō)風(fēng)格相似的文本,如圖所示雖然有些句子并沒(méi)有實(shí)際的意思目前我們的模型是基于概率,并不是理解語(yǔ)義,但是大多數(shù)單詞都是有效的,文本結(jié)構(gòu)也與我們訓(xùn)練的文本相似。 介紹 本文我們將使用GRU網(wǎng)絡(luò)來(lái)學(xué)習(xí)莎士比亞小說(shuō),模型通過(guò)學(xué)習(xí)可以生成與小說(shuō)風(fēng)格相似的文本,如圖所示:showImg(https://segmentfault.com...
閱讀 1625·2023-04-26 02:43
閱讀 3052·2021-11-11 16:54
閱讀 1365·2021-09-23 11:54
閱讀 1186·2021-09-23 11:22
閱讀 2379·2021-08-23 09:45
閱讀 859·2019-08-30 15:54
閱讀 3109·2019-08-30 15:53
閱讀 3198·2019-08-30 15:53