七臺河新聞頭條最新消息網(wǎng)站優(yōu)化排名易下拉穩(wěn)定
RNN無法處理長距離依賴問題,通俗點就是不能處理一些較長的序列數(shù)據(jù),那么今天就來介紹一下兩個能處理長距離依賴問題地RNN變種結(jié)構(gòu),LSTM和GRU。
1. LSTM(Long short-term memory)
1.1 LSTM結(jié)構(gòu)
上左圖是普通RNN結(jié)構(gòu)圖,上右圖是LSTM結(jié)構(gòu)圖。
從圖中我們可以看出,普通的RNN在隱藏層中只傳遞一個狀態(tài)值h,而LSTM不僅傳遞h,還新增了一個狀態(tài)值C,每一層隱藏層中的每一個神經(jīng)元都接收上一時刻傳遞的h{t-1}和c{t-1},經(jīng)過計算得到h{t}和c{t}再傳入下一時刻。
那么接下來咱們就來看看狀態(tài)c和h究竟在LSTM的隱藏層中做了哪些計算又是怎么傳遞地。
上圖是LSTM的某一隱藏層的局部結(jié)構(gòu),三個矩形為{t-1},{t},{t+1}三個時刻的神經(jīng)元,中間顯示的是t時刻神經(jīng)元的內(nèi)部結(jié)構(gòu)圖。說實話只是單單看圖的話,反正我當(dāng)時是一臉懵逼,這都是些啥?不過不要慌,接下來咱們一步一步慢慢說明。
首先LSTM是由三個門來控制信息傳遞狀態(tài)地,分別是紅色方框?qū)?yīng)的”忘記門“,綠色方框?qū)?yīng)的”輸入門“,和紫色方框?qū)?yīng)的”輸出門“。這三個門中一共包含3個sigmoid函數(shù)和2個tanh函數(shù)。使用sigmoid函數(shù)的原因是sigmoid函數(shù)能夠?qū)⑤斎胗成涞絒0,1]空間中,那么咱們就可以根據(jù)映射之后的概率對于上一時刻傳遞的信息進(jìn)行有選擇的去除,保留和輸出。比如sigmoid函數(shù)的值為1也就是門的全開狀態(tài),則代表所有的信息都被保留,如果sigmoid函數(shù)為0也就是門的全閉狀態(tài),則代表所有的信息都不被保留。使用tanh函數(shù)是為了對數(shù)據(jù)進(jìn)行處理,映射到[-1,1]的空間,當(dāng)然也可以使用其他的激活函數(shù),比如ReLU,至于效果誰好誰壞,我沒有深究過,有研究表明在LSTM層數(shù)比較少的時候使用tanh比ReLU效果好。知道了這些之后,接下來咱們就來將這三個門一步一步拆解來講講具體這三個門中怎么計算。
忘記門:
上圖就是”忘記門“的結(jié)構(gòu),以及計算公式。說白了就是把t-1時刻傳入的h{t-1}與t時刻的輸入Xt進(jìn)行拼接,然后通過權(quán)值矩陣Wf轉(zhuǎn)換后,加上偏置bf,再由sigmoid函數(shù)映射到[0,1]空間中。就形成了這個”忘記門“。
然后通過”忘記門“ft對于上一時刻傳入的C{t-1}進(jìn)行有選擇的忘記,將C{t-1}與ft進(jìn)行點乘,得到去除一些信息后的”忘記門的輸出“
輸入門:
上圖是”輸入門“的結(jié)構(gòu),與”忘記門“類似,首先把t-1時刻傳入的h{t-1}與t時刻的輸入Xt進(jìn)行拼接,然后通過權(quán)值矩陣Wi轉(zhuǎn)換后,加上偏置bi,再由sigmoid函數(shù)映射到[0,1]空間中形成了這個”輸出門“。然后得到輸入數(shù)據(jù),輸入數(shù)據(jù)是把t-1時刻傳入的h{t-1}與t時刻的輸入Xt進(jìn)行拼接,然后通過權(quán)值矩陣WC轉(zhuǎn)換后,加上偏置bC,再有激活函數(shù)tanh映射到[-1,1]空間,得到輸入數(shù)據(jù)Ct’。然后將"輸入門"it與Ct’進(jìn)行點乘,就能得到"輸入門"的輸出了。
得到Ct:
然后將”忘記門“的輸出值與”輸入門“的輸出值加起來,就得到了t時刻的Ct值。
Ct中保留了t-1傳入的部分信息和t時刻傳入的經(jīng)過篩選后的信息。得到了Ct,那咱們就只剩下計算t時刻的ht了,計算ht由”輸出門“來完成。
輸出門:
可以看到上圖中的”輸出門“的結(jié)構(gòu)和計算公式,把t-1時刻傳入的h{t-1}與t時刻的輸入Xt進(jìn)行拼接,然后通過權(quán)值矩陣Wo轉(zhuǎn)換后,加上偏置bo,再由sigmoid函數(shù)映射到[0,1]空間中形成了這個”輸出門“。
然后將上一步計算得到的Ct經(jīng)過tanh函數(shù)縮放,映射到[-1,1]空間中,再與”輸出門“點乘,就能得到輸出門的輸出值ht了。
這樣咱們就計算出來t時刻的所有輸出值,ht和Ct,然后ht和Ct又可以傳入到下一時刻來進(jìn)行循環(huán)操作了。
計算t時刻的輸出yt:
1.2?LSTM 為什么能解決RNN的梯度消失問題?
好了,雖然上面說了那么多,可能小伙伴們也知道了LSTM的結(jié)構(gòu),但是我還是不明白啊,為什么這樣的LSTM結(jié)構(gòu)就能夠緩解RNN中的梯度消失呢?(注意這里是緩解,并不是完美解決,LSTM層數(shù)過深時也還是有可能發(fā)生梯度消失問題)
先來回顧一下RNN導(dǎo)致梯度消失的原因,正是因為tanh和sigmoid函數(shù)的導(dǎo)數(shù)均小于1,一系列小于1的數(shù)連乘,連乘的數(shù)一多,連乘的結(jié)果就有很大概率為0,那么參數(shù)便不能進(jìn)行更新了。
咱們類比到LSTM中:
為什么會是上述偏導(dǎo)連乘,其實可以通過數(shù)學(xué)公式推導(dǎo),但是推導(dǎo)過程比較復(fù)雜,因為LSTM的參數(shù)太多了。
代入Ct中:
上面的公式看上去嚇人,但仔細(xì)一看,后面的部分跟C{t-1}一點關(guān)系都沒有,Ct對C{t-1}求偏導(dǎo)的話,后半邊直接為0.
Ct對C{t-1}求偏導(dǎo)結(jié)果為:
上面的值地范圍在0~1之間,但是在實際參數(shù)更新的過程中,可以通過控制bf較大,使得該值接近于1。這樣即使在多次連乘的情況下,梯度也不會消失。
但是咱們回過頭來再看看RNN:
雖然RNN也可以通過調(diào)整Ws來使得連乘接近于1,但是RNN是通過乘以Ws來調(diào)節(jié),大家知道乘法數(shù)值變化較快,比較敏感,參數(shù)很難調(diào),一不小心就超過了上界發(fā)生梯度爆炸,達(dá)不到下界不發(fā)生梯度消失。而LSTM是通過加上bf來調(diào)節(jié),來降低梯度消失的風(fēng)險,調(diào)節(jié)起來更容易,相對于RNN較好。所以之前也只是說了LSTM能相對于RNN緩解梯度消失的問題,并不能完全消除。
1.3 LSTM問題
OK,看到這,相信你對于LSTM的結(jié)構(gòu)也已經(jīng)有了清楚的認(rèn)識。你有沒有發(fā)現(xiàn)LSTM需要訓(xùn)練的參數(shù)好像有點多,Wf,Wi,Wo,Wc,bf,bi,bo,bc,V,9個參數(shù)。這是LSTM的優(yōu)點也是缺點,優(yōu)點是有更多的參數(shù)對于模型進(jìn)行調(diào)節(jié),結(jié)果更加精確,缺點是,參數(shù)太多了。
2. GRU(Gate Recurrent Unit)
GRU是一種也能達(dá)到LSTM相當(dāng)效果,但是參數(shù)更少,相對更容易訓(xùn)練的算法,能夠很大程度上提升訓(xùn)練效率,接下來咱們就來看看GRU的結(jié)構(gòu)吧!
2.1 GRU結(jié)構(gòu)
上圖是GRU的整體結(jié)構(gòu)圖,發(fā)現(xiàn)跟普通的RNN沒有區(qū)別,也就只有一條狀態(tài)傳遞的通道,ht。那么接下來看看GRU中隱藏層的內(nèi)部結(jié)構(gòu),到底是如何傳遞信息地。
上圖就是GRU隱藏層的內(nèi)部結(jié)構(gòu),先不要慌,雖然看上去很復(fù)雜,但是原理跟LSTM差不多,我來一步一步講解。
LSTM有”忘記門“,”輸入門“,”輸出門“三個門來控制信息傳遞,GRU只有兩個,一個是上圖中的reset 重置門,一個是update 更新門。
reset 重置門:
rt就是”重置門“,計算公式還是跟LSTM一樣,只是處理數(shù)據(jù)的方式不同,得到”重置門“rt后,將rt與上一時刻傳入的h{t-1}進(jìn)行點乘,得到重置之后的數(shù)據(jù)。
然后將得到的h{t-1}‘與Xt進(jìn)行拼接。
這里的h’包含了輸入信息Xt,和經(jīng)過選擇后的上一時刻的重要信息h{t-1}’,這樣就達(dá)到了記憶當(dāng)前狀態(tài)信息的目的。
update 更新門:
Zt就是”更新門“,那么咱們來看看”更新門“是如何同時進(jìn)行遺忘和記憶地。
先來看具體公式:
可以看到,這里的遺忘 z 和(1-z) 是聯(lián)動的。也就是說,對于傳遞進(jìn)來的維度信息,我們會進(jìn)行選擇性遺忘,則遺忘了多少權(quán)重 (z ),我們就會使用包含當(dāng)前輸入的 h’ 中所對應(yīng)的權(quán)重進(jìn)行彌補 (1-z) 。以保持一種”恒定“狀態(tài)。
GRU只有兩個門,相應(yīng)地參數(shù)也就比LSTM要少,效率要高,但是結(jié)果并沒有多大的區(qū)別。
原文鏈接:https://blog.csdn.net/Tink1995/article/details/104881633