在前面幾天,我們介紹了全連接神經網路 (FCNN) 與卷積神經網路 (CNN)。這些架構在處理結構化數據或影像資料上非常成功,但若應用到「序列資料」時就顯得不足。例如:
這些資料都有一個共同特性:前後之間具有順序與依賴關係。傳統的神經網路會把輸入展平成固定維度向量,忽略了序列的時間結構,這時就需要 循環神經網路 (Recurrent Neural Network, RNN)。
假設我們要預測一句話的下一個單字:
“我今天心情很好,所以想去 ___”
在這個任務中,模型不僅要知道「今天心情很好」,還要能理解語境,才可能正確預測「散步」、「旅行」等合理詞彙。這就意味著模型需要「記憶」前文資訊。
RNN 的核心是一個「循環單元 (Recurrent Cell)」,其計算公式如下:
$$
h_t = \tanh(W_h h_{t-1} + W_x x_t + b)
$$
其中:
這個設計讓 RNN 可以把前一時刻的資訊「帶到下一個時刻」,實現序列建模。
RNN 看起來是「循環」的,但在數學運算中,我們可以把它展開成多層結構:
展開後的 RNN 就像一個「深層神經網路」,但每一層的參數 $W_h, W_x$ 是 共享的。
這種參數共享大幅降低了模型複雜度,讓 RNN 能處理可變長度的序列。
RNN 可以應用在不同任務,根據輸入輸出的對應方式,可分為:
RNN 的靈活性使它成為自然語言處理與序列建模的核心方法之一。
雖然 RNN 看似完美,但實際訓練時存在兩個嚴重問題:
特性 | RNN | CNN |
---|---|---|
擅長處理 | 序列資料 (文字、語音、時間序列) | 影像、局部特徵 |
輸入長度 | 可變長度 | 固定維度 |
參數共享 | 時間維度共享 | 空間維度共享 |
訓練挑戰 | 梯度消失/爆炸 | 計算量大,但穩定 |
改良方向 | LSTM、GRU、Transformer | ResNet、Inception |
循環神經網路 (RNN) 的核心貢獻在於 引入時間維度的參數共享,使得神經網路能處理可變長度的序列資料。它在 NLP 與語音任務中曾經大放異彩,但也因為梯度消失/爆炸等問題而逐漸被更先進的架構取代。
對初學者而言,RNN 是理解「深度學習如何處理序列資料」的第一步;對研究者而言,它是一個歷史性的里程碑,為後續的 LSTM、GRU、Transformer 奠定了基礎。
下一篇,我們將延伸至 LSTM (Long Short-Term Memory),看看它如何在 RNN 的基礎上解決長期依賴的問題。