GRU(閘門循環單元,Gated Recurrent Unit),也是一種循環神經網絡(RNN)的變種,目標也是為了解決RNN中的梯度消失問題,讓模型擁有更好的長期依賴性建模。
閘門循環單元可以被視為對LSTM(長短期記憶網絡)的簡化版本或改進版本。它是由LSTM經過一些改變而產生的,以減少參數數量並簡化模型結構,同時保持對長期相依性的有效建模。
GRU引入了更新門,控制哪些信息應該被更新到隱藏狀態(記憶)中。更新門經過一些線性或非線性的計算,再由更新門的函數輸出一個值,輸出值範圍在0到1之間,表示保留先前的信息和添加新信息的程度。
重置門控制哪些先前的信息應該被忽略。類似於更新門,重置門也是經過一些線性或非線性的計算,再由重置門的函數輸出一個值,輸出值也在0到1之間表示遺忘先前的信息的程度。
在下一個階段基於更新門和重置門的輸出,對信息進行一個更新(也就是同時進行了遺忘和保持記憶),這個動作會在更新門直接完成,與LSTM不同,無須再多個閥門運作。
圖片來源: 連結
總結來說,GRU是在RNN的基礎、LSTM的構想上進行了改進簡化,提供一個更輕便但同樣有效的循環神經網絡。GRU相比LSTM少了很多參數,直接少了一個閥門,且沒有像LSTM一樣需要同時儲存兩個狀態(細胞狀態、隱藏狀態),大幅縮減了計算成本和提高了效率。
題外話: 其實在學習這部分的時候本人一直在思考一個問題,也就是乍看之下更新門和重置門目標功能不同,但仔細思考感覺又重疊了很多?這樣講好了,更新門計算後有結果了,那將這些輸出結果反過來看不就變成了重置門想要的結果嗎?講簡單白話一點,既然更新門能決定哪些信息比較重要,需要留下來,那剩下不需要的信息直接丟掉就好了啊,而且在進行記憶信息的更新整合也是在更新門完成的,為何不直接只留下更新門就好?
不過經過我在網路的查詢,兩個門著重的目標點好像還是有所不同,還有GRU這種雙門結構能夠使其更靈活,能夠在更多情況下適應序列數據的複雜特性。