深度學習

循環神經網路(recurrent neural network)

/ rih-KUR-unt NUR-ul NET-wurk /

循環神經網路(簡稱 RNN),是一種專為「按順序讀東西」而造的網路——一個詞接一個詞、一個音符接一個音符、一天接一天。大多數網路把輸入當作一張凝固的快照。可是一句話、一段旋律,只有作為「序列」才講得通,因為前面出現過的東西,會給後面將要出現的東西染上色彩。RNN 應對的辦法,是一次只讀一步,並保留一份不斷更新的記憶,稱作「隱狀態」——這是一塊它每一步都改寫、再帶往下一步的小便箋,於是前面那些詞的含義,能夠左右它對後面詞的理解。

想像你手裡只攥著一張便利貼,朗讀一個句子。你讀出第一個詞,草草記下一句概要;讀下一個詞,更新便利貼,把剛學到的東西也揉進去;如此讀到句末。這張便利貼從不變大——只是每一步被重寫一遍——可讀到最後一個詞時,它已經攜帶了整句話被壓縮過的痕跡。這種循環式的更新——同一條規則在每一步上反覆施用——正是「循環」二字的含義。它讓一個不大的網路得以處理任意長度的序列,從三個詞到三千個詞。

RNN 曾驅動了第一波像樣的機器翻譯和語音辨識,但它有一個頑固的弱點。由於那份記憶每一步都被擠壓、重寫,靠前那些詞的影響往往會漸漸褪去——這就是「梯度消失」問題——所以一個樸素的 RNN 很難把相隔很遠的東西聯繫起來,比如一個代詞,和它指代的、十句話之前的那個名詞。這個侷限催生了帶「門」的變體,如 LSTM 與 GRU,並最終催生了 Transformer——後者一次讀入整個序列,已在大規模語言工作上大體取代了 RNN。

讀這句「我在法國長大,所以我能講一口流利的 ___。」要把空填成「法語」,網路得記得句首那個「法國」——而這恰恰是樸素 RNN 最難搭起的遠距離聯繫。

RNN 的全部用意——也是它的弱點——就在於把含義跨過空隙帶過去。

RNN 其實是一個小網路被反覆施用,每一步共用同一套權重——而不是一長串各不相同的層。它在序列任務上的舊王冠,已大體讓給了 Transformer,但「把記憶帶往下一步」這一核心思想,依然是奠基性的。

又稱
RNN循环神经网络循環神經網路递归神经网络