在之前的博文中,我們介紹了循環神經網絡的長程依賴問題及改進方案,可以參考:循環神經網絡 - 長程依賴問題及改進方案-CSDN博客
但是改進方案只是可以緩解梯度消失,并不能徹底解決梯度爆炸問題和記憶容量(Memory Capacity)問題。
長短期記憶網絡(Long Short-Term Memory Network,LSTM)是循環神經網絡的一個變體,可以有效地解決簡單循環神經網絡的梯度爆炸或消失問題。
在普通 RNN 中,由于每一步的隱藏狀態只通過簡單的遞歸更新,長時間以來傳遞的梯度可能會迅速消失或爆炸,導致模型無法捕捉長距離依賴。LSTM 通過引入記憶單元 c_t?和門控機制,將信息在時間步之間直接傳遞,且引入了“跳躍”連接(將 c_{t-1} 直接影響 ct 經過線性組合而非多次非線性變換),這樣就能更穩定地傳遞梯度信息,捕捉長程依賴。具體來說:
-
遺忘門 控制過去的記憶保留程度;
-
輸入門與候選記憶 決定如何加入新信息;
-
輸出門 決定如何輸出對后續步驟有用的信息。
這種設計有效減弱了反向傳播過程中梯度消失或爆炸的問題,使得 LSTM 能夠記住和利用長時間跨度中的關鍵信息,這正是許多語言模型、語音處理和其他序列數據任務中的核心需求。
本文,我們來認識長短期記憶網絡的相關概念,探究一下其解決梯度爆炸或消失的原理。
長短期記憶網絡(LSTM)的內部狀態主要指其“記憶細胞”(cell state,通常記為 c_t)以及與之相關的隱藏狀態(hidden state,通常記為 h_t)。這兩個狀態共同決定了 LSTM 如何存儲、傳遞和更新信息,使其能夠捕獲長程依賴。下面通過語言描述 LSTM 內部狀態的構成、更新機制及其關鍵作用。
1. 內部狀態的構成
-
記憶單元(Cell State c_t?)
記憶單元是 LSTM 的核心,它像一條傳送帶,沿著整個序列傳遞信息。其主要作用是保持長期信息,并且通過特定的門控機制有選擇地“遺忘”或者“保留”信息。由于這種傳遞過程主要依靠乘法操作(例如和遺忘門 f_t? 相乘),可以在一定程度上減緩梯度消失的問題。 -
隱藏狀態(Hidden State h_t?)
隱藏狀態可以被看作是當前時刻對外的輸出,也是在當前時間步經過非線性激活(通常是 tanh?)處理后的記憶狀態。它既包含了長期記憶 c_t?的信息,也反映了對當前輸入的即時響應。隱藏狀態經過輸出門 o_t?的調制之后,是最終傳遞給下一層或后續運算的信號。
2. 內部狀態的更新機制
LSTM 通過三個門來更新內部狀態,它們分別是:
-
遺忘門(Forget Gate)
遺忘門決定了保留上一時刻記憶單元 c_{t-1}? 中哪些信息。
數學表達:其中 σ 是 sigmoid 函數,其輸出在 [0,1] 之間。輸出值越接近 1,表示對應維度的信息越應該保留,反之則“遺忘”。
-
輸入門(Input Gate)
輸入門決定了當前輸入 x_t? 中哪些新信息以及通過候選記憶? 將加入到記憶單元中。
數學表達: -
記憶單元更新
最后,新的記憶單元 c_t?通過結合遺忘門與輸入門的作用得到更新:這里“⊙”表示逐元素相乘。這意味著,上一時刻的記憶經過遺忘門濾波后和新生成的信息按比例混合,從而構成當前的記憶單元。
-
輸出門(Output Gate)
輸出門決定了如何從記憶單元中提取信息生成當前的隱藏狀態:最終得到隱藏狀態:
3. 舉例說明
設想一個簡單的文本生成任務——例如生成一句話。假設模型需要捕獲長句子中前后字符之間的依賴關系。在處理輸入“今天天氣很好”時:
-
當模型接收到“今天”時,會在記憶單元 c_t? 中保存與“今天”相關的信息(比如時間概念)。
-
接下來,當輸入“天氣”時,遺忘門 f_t?控制是否保留“今天”的信息,同時輸入門 i_t? 選擇性地將與“天氣”相關的新特征加入記憶單元。
-
當進一步輸入“很好”時,記憶單元中的“今天”和“天氣”信息經由輸出門調制,影響最終隱藏狀態 h_t? 的計算,進而幫助模型生成連貫的輸出。
在這個過程中,整個句子中遠距離(“今天”與“很好”之間)的依賴通過記憶單元傳遞,LSTM 的三個門結構允許模型有選擇地更新和維持這些信息。盡管內部使用的激活函數(如 sigmoid 和 tanh?)本身很簡單,但通過逐層的線性變換與非線性激活的復合,LSTM 能夠捕捉和表達復雜的語義依賴關系,支持長程信息的有效傳遞。
4. 關鍵理解
-
記憶單元 c_t?是信息的長期存儲器,可以跨越多個時間步穩定傳遞關鍵信息。
-
門控機制(遺忘門、輸入門、輸出門)決定了信息如何在各個時間步之間選擇性地保留或更新。
-
隱藏狀態 h_t?則是經過記憶單元篩選和調制后的信息,供下一層或下一時間步使用。
5. 對于候選記憶的理解
在長短期記憶網絡(LSTM)中,“候選記憶”指的是在當前時間步下,根據輸入和前一隱藏狀態生成的一組新信息,用來在更新記憶單元時候選加入到長期記憶中的數據。它通常用符號 ? 表示,計算公式為:
這里,表示將前一時刻的隱藏狀態和當前輸入拼接在一起,經過一個線性變換(由權重矩陣 W_c? 和偏置 b_c 定義)后,再通過 tanh? 激活函數映射到區間 [?1,1] 內,就得到了“候選記憶”。
為什么需要候選記憶?
候選記憶的作用在于:
-
提供新信息的備選項:當前時間步的輸入常常攜帶有新的信息,候選記憶就是對這些新信息的一種初步加工和表示。但新信息不是全部都適合直接加入到長期記憶中。
-
由輸入門決定是否更新:在 LSTM 中,還有一個輸入門(Input Gate),其計算公式為:
輸入門 i_t?的值(介于0和1之間)將會與候選記憶逐元素相乘,形成對記憶單元的增量更新:
這意味著,對于候選記憶中的每個元素,如果輸入門對應的數值較大(接近1),那么該部分候選信息將被更多地寫入到長期記憶;如果較小(接近0),則該部分新信息基本被忽略。
舉例說明
假設你正利用 LSTM 處理一句話:"我愛自然語言處理"。我們來看一下某個時間步的情況:
-
前一時刻隱含狀態h_{t-1}
假設在處理到“愛”這個詞時,隱藏狀態已經捕捉到了前面“我愛”這部分的語義信息,即可以表示為 h_{t-1}?。 -
當前輸入 x_t
當前輸入為“自然語言處理”中某個字符或詞的表示,這個表示包含了與當前新信息相關的語義特征。 -
候選記憶計算
這里,0.8 可能表示當前輸入中對于“自然”這個概念的一個強烈信號,-0.3 表示某些信息的負面特征,而 0.4 表示另一個中等程度的特征。
-
輸入門的作用
同時,輸入門 i_t? 計算出的向量決定了候選記憶哪些部分真正被寫入記憶單元。如果 i_t? 計算得到:則實際更新記憶單元的增量就是逐元素相乘:
這表示,記憶單元在這一時刻將吸收主要來自候選記憶的 0.72 和 0.28 兩個分量,而將 -0.06 的新信息(可視為低權重或噪聲)幾乎忽略掉。
-
整體更新
最終,記憶單元 c_t?的更新會結合上一時刻保留的信息(由遺忘門控制)與這一時刻更新的信息:這樣,就構成了 LSTM 內部記憶狀態的動態更新。
-
候選記憶是對當前輸入與前一隱藏狀態進行線性組合和非線性映射后的“新信息”表示,它代表了當前時刻可以加入到長期記憶中的潛在內容。
-
輸入門決定最終哪些候選信息真正更新進記憶單元。
-
舉例中,通過具體向量的生成、輸入門的篩選、以及逐元素相乘,展示了候選記憶如何幫助 LSTM 有選擇地吸收新輸入的信息,從而逐步構建出對長程信息的有效記憶。
? ? ? ?這種設計使得 LSTM 能夠在動態更新中捕捉到句子、語音或其他序列數據中復雜、非線性的長期依賴關系,而候選記憶作為一種臨時的備選信息起到了關鍵作用。
即使網絡中的激活函數和門機制看似簡單,通過不斷的層級組合以及權重參數的學習,LSTM 能在整個序列上捕捉和表達復雜的長期依賴和非線性關系,這正是其在自然語言處理、語音識別、時間序列預測等任務中大放異彩的原因。
這樣的內部狀態設計正是 LSTM 能夠“記住”關鍵信息,同時對無用信息進行“忘記”,從而有效解決傳統 RNN 長程依賴問題的核心所在。