一般的 RNN 每走一步都要把狀態乘上權重,走遠了就連乘到接近零,前面的訊息傳不過來。LSTM 另外拉一條 cell state,資訊在上面主要靠加法前進,只有遺忘門那一道乘法會動它。三個閘門各管一件事:遺忘門決定舊記憶留多少、輸入門決定新內容寫多少、輸出門決定這一步往外送多少。

原文網址:Understanding LSTMs

想像人在思考或閱讀文章時,並不是從零開始,而是會保留過去的記憶。RNN 就是為了解決這方面的問題而設計的:這一步的輸出會接回下一步的輸入,同一組權重反覆用在每個時間點上,過去的訊息就這樣一路帶著走。

每次訓練時,網路會保留過去的訊息並持續傳遞。而 LSTM 則是一種特殊的 RNN 形式。

長期依賴的問題

在許多情況下,我們需要更多的上下文訊息,但這些關鍵資訊可能距離當前時間點非常遙遠。句子短的時候不成問題,要填的詞就在前一兩個字裡面;但如果一句話開頭提到的人名,要到二三十個字之後才決定該用哪個代名詞,中間隔的每一步都得把那個訊息完整帶著走。

一般的 RNN 在處理這種長距離依賴時,容易產生梯度消失或梯度爆炸的問題。原因在傳遞的方式:每走一步,上一步的狀態都要乘上一組權重、再擠過一個 tanh,走一百步就是連乘一百次。那組數字只要略小於一,一百次之後就趨近於零,前面的訊息等於沒傳到;略大於一則是反過來爆掉。梯度往回傳的時候走的是同一條路,所以遠處的權重幾乎收不到修正。

三個閘門

LSTM 稱為「長短期記憶網路」(Long Short Term Memory networks),是一種特殊的 RNN 架構。

它換掉的是傳遞路徑本身。在原本那條每一步都要過權重和 tanh 的路線之外,LSTM 另外拉了一條 cell state,資料在上面主要靠加法前進。xLSTM 那篇論文回頭描述這個設計時,把它跟閘門並列成 LSTM 的兩個核心想法:「In the 1990s, the constant error carousel and gating were introduced as the central ideas of the Long Short-Term Memory (LSTM).」加法路徑不會像連乘那樣把訊號逐步磨掉,遠處的資訊因此有機會原封不動地傳到後面。

不同於傳統 RNN 在每個 Cell 裡只包含一個 tanh 層,LSTM 增加了:

  • input gate (輸入門)
  • output gate (輸出門)
  • forget gate (遺忘門)

這些閘門都是用來精準控制資料的操作。使用 sigmoid 激活函數可以看做是控制記憶與讀取資料量的多寡:0 代表不通過,1 代表全部通過。

跟著資料走一步會比較清楚。遺忘門是 cell state 上唯一的那道乘法,它讀進上一步的輸出和這一步的輸入,過一個 sigmoid,得到一串介於 0 和 1 的數字,再逐項乘上舊的 cell state。這串數字是 0 的位置,對應的舊記憶就整條清掉;是 1 的位置原封不動留著;中間的值就是留一部分下來。

輸入門用同樣的方式決定這一步算出來的新內容要寫多少進去:一個 sigmoid 給比例,一個 tanh 給候選內容,兩個相乘之後加到剛剛過完遺忘門的 cell state 上。到這裡新的 cell state 就成形了,整段過程只有遺忘門那一次乘法,其餘都是加法。

輸出門管的是另一件事。cell state 上面存著的東西不一定每一步都要往外送,輸出門決定這一步實際吐出多少給下一層,也就是下一個時間點會看到的那個輸出。所以在 LSTM 裡面,「記著」和「說出來」是分開的兩件事;一般 RNN 的狀態就是它的輸出。

詳細的數學推導可以參考原文。文中也介紹了 GRU,一種更為簡煉高效的 LSTM 變體:它把遺忘門和輸入門合成同一道,要留多少舊的就少寫多少新的,也不再把 cell state 和對外的輸出分開,參數因此少了一截。

在 TensorFlow 中,LSTM 已經封裝完善,呼叫即可使用。下圖是用 LSTM (紅虛線) 去學習黑線 (x*sin(x)) 的擬合結果:

figure_2

這個機制今天在哪裡

這篇筆記的日期是 2017 年 6 月 29 日,Transformer 的論文 6 月 12 日掛上 arXiv,摘要寫「We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.」完全不要 recurrence。

2024 年 5 月,LSTM 的原作者之一 Sepp Hochreiter 掛名發表了 xLSTM,把 LSTM 放大到十億級參數,再兜上現代 LLM 的訓練技術,摘要裡提到「the advent of the Transformer technology with parallelizable self-attention at its core marked the dawn of a new era, outpacing LSTMs at scale.」遞迴這條路目前沒有回到主流。