
—
深度學習 - 循環神經網路 (RNN):以股票預測為例
傳統神經網路是健忘的,但 RNN 透過「隱藏狀態」賦予了 AI 處理時間序列的能力。今天我們將透過模擬股價預測,揭開 RNN 記憶的秘密。
WRITTEN BY

- Name
- Harry Chang
RNN:時間序列的數位記憶
在之前的章節中,我們學會了如何處理圖片。但如果資料是「有先後順序」的,例如股票價格、一段對話、或者是你正在讀的這篇文章,該怎麼辦?這就是 RNN (Recurrent Neural Network, 循環神經網路) 大顯身手的時候。
神經網路的記憶覺醒
在 1980 年代,神經網路 (MLP) 只能處理「當下」的輸入,對於「時間序列」束手無策。直到 John Hopfield (1982) 和 Jordan/Elman (1990) 等人引入了 「循環 (Recurrent)」 的概念,讓神經網路有了 「記憶」。這讓 AI 終於能看懂句子、聽懂語音,甚至開始嘗試預測股票。
1. 資料集來源
資料集來源:模擬股價資料 (Simulated Stock Data)
備註:真實股價受太多外部因素影響,為了單純學習 RNN 原理,我們產生一個包含 「正弦波 + 趨勢 + 雜訊」 的模擬資料。
資料集特色:
- 趨勢 (Trend):股價長期緩步上漲。
- 週期 (Cycle):有規律的波浪起伏。
- 任務:根據 過去 20 天 的價格,預測 明天 的價格。
圖解:我們的模擬股價數據,結合了長期增長與短期波動。2. 原理:為什麼 MLP 不能預測股票?
2.1 核心概念:健忘 vs. 記憶
- MLP (健忘):它把每一天的價格都當作獨立事件。它不知道「昨天漲了」,也不知道「前天跌了」。
- RNN (有記憶):它有一個 「隱藏狀態 (Hidden State)」,就像是一個 「筆記本」。
- 當它看到今天的價格時,會參考「筆記本」裡記下的昨天資訊。
- 看完後,它會更新「筆記本」,傳給明天。
2.2 圖解:RNN 的時間旅行

- 核心公式:
H_t = tanh(W * X_t + U * H_{t-1} + b)- (藍色箭頭):處理 今天的輸入 ()。
- (綠色箭頭):傳遞 昨天的記憶 ()。這就是 Loop!
- 意義:今天的記憶 () 是由「當下發生的事」和「過去的經驗」混合而成的。
3. 實戰:建立 RNN 模型進行預測
我們使用 TensorFlow / Keras 建立一個 SimpleRNN 模型:
# 關鍵程式碼:建立 SimpleRNN 模型
from tensorflow.keras.layers import SimpleRNN, Dense
model = Sequential([
# SimpleRNN 層
# units=32: 32 個記憶單元 (筆記本的大小)
# input_shape=(20, 1): 回看過去 20 天,每天 1 個價格
SimpleRNN(32, input_shape=(20, 1), activation='tanh'),
# 輸出層
Dense(1) # 預測 1 個數值 (明天的價格)
])
4. 模型評估與視覺化
預測結果展示

- 觀察:
- 綠線 (Train):模型在訓練集上的表現,幾乎完美貼合。
- 紅線 (Test):模型在沒看過的測試集上的表現。
- RNN 成功抓住了 「週期性」 和 「趨勢」。它知道「漲久了會跌,跌久了會漲」。
5. 優缺點
5.1 優點
- 處理 序列資料 (Sequential Data) 的首選。
- 參數相對少,適合處理短序列。
5.2 缺點:金魚腦與梯度消失 (Vanishing Gradient)
- 問題:SimpleRNN 的記憶力很短。如果是 很長 的序列 (例如 100 天前發生的事),RNN 傳到後面就會 忘記 了。
- 數學原因 (梯度消失):
- 在反向傳播時,權重會不斷相乘。如果權重小於 1,乘了 100 次之後,梯度就會變得趨近於零,模型就學不動了。
- 比喻:就像玩「傳話遊戲」,第一個人說的話,傳到第 100 個人時,已經完全走樣了。
6. RNN 還能做什麼?(多樣化應用場景)
如果你覺得 RNN 只能預測簡單的股價波浪,那你就太小看它了。事實上,只要資料具有 「順序性」 或 「上下文關係」,都是 RNN 的守備範圍:
- 自然語言處理 (NLP):
- 情感分析:判斷一段文字是「好評」還是「負評」。RNN 會看完整個句子才下結論,而不是只看關鍵字。
- 機器翻譯:將英文句子(序列)翻譯成中文句子(另一個序列)。
- 語音辨識:將你說的話(聲波序列)轉換成文字。這也是 Siri 或 Google Assistant 的核心技術之一。
- 異常檢測 (Anomaly Detection):
- 監控伺服器的流量。如果流量出現了與過去「週期性」不符的突發狀況,RNN 能立刻報警。
- 自動作曲:給模型一段旋律,讓它根據前幾個音符預測下一個音符,從而創作出整首曲子。
雖然本章的 SimpleRNN 記憶力較短,但它開啟了 AI 處理「動態世界」的大門。
7. 總結
我們學習了 RNN (循環神經網路):
- 它引入了 「時間」 的維度。
- 透過 Hidden State (記憶),它能串聯上下文資訊。
- 它是處理語音、翻譯、時間序列資料的基石。
但普通的 SimpleRNN 記憶力有限。下一章我們將引入 LSTM (長短期記憶網路),它是 RNN 的進化版,專門用來解決「金魚腦」問題,能記住超長期的資訊!