AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
32/100 第四週:📌 循環神經網路 RNN
32.隱藏狀態與時間步演算 🧭 記住過去的記憶!
_______________________________________
✅ 概念導入:RNN 是記憶力超強的筆記助理
想像一下你正在閱讀一段話:
「這部電影太精彩了,我從頭到尾都⋯」
此時,你猜下一個字是什麼?是不是腦中浮現:「笑」、「興奮」、「喜歡」……
✅ 為什麼你能這樣預測?因為你「記得」前面的字!
這就是 RNN 的核心能力:每一步不只是處理當下,還保有來自「過去的記憶」!
________________________________________
🧠 RNN 的「時間步」概念是什麼?
RNN 會一步步地讀入序列資料(例如文字、語音、股價),每讀一格(如一個字),就是一個 時間步(timestep)。
而每個時間步會產生一個稱為「隱藏狀態(hidden state)h_t」的記憶,它會傳給下一步繼續參考。
________________________________________
🔁 時間步演算流程圖解:
x1 → [RNN Cell] → h1 →
x2 → [RNN Cell] → h2 →
x3 → [RNN Cell] → h3 → … → Output
每個時間步都有:
• x_t:當下輸入
• h_t:當下記憶狀態(由 h_{t-1} 演化而來)
________________________________________
🧩 RNN 核心公式(理解即可,會背不重要)
ht=tanh(WxXt+WhHt−1+b)
這意思是什麼?
👉 目前的記憶 h_t 是「當前輸入 x_t」和「前一個記憶 h_{t-1}」加權相加後,通過 tanh 非線性壓縮,變成新的記憶。
________________________________________
📦 實際例子:句子情感預測
輸入句子:
「我今天真的很想哭。」
模型逐字讀入:
我 → 今天 → 真的 → 很想 → 哭
• 每讀一個字,就更新一次 h_t
• 到最後一字「哭」時,h_t 已經包含了「我今天真的很想哭」的整體語意
• 最後輸出 y_t → 情感分數(負面 0.91)
________________________________________
🧠 隱藏狀態 h_t 的意義是什麼?
你可以把它想像成「摘要記憶筆記」:
• 每個時間步都記下一些當下的重要資訊
• 又不會把過去的完全丟掉
• 幫助模型「做出上下文有關的決策」
________________________________________
⚙️ TensorFlow / Keras 模型結構範例:
python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense, Embedding
model = Sequential([
Embedding(input_dim=5000, output_dim=64), # 將詞轉為向量
SimpleRNN(128, return_sequences=False), # 保留最後時間步的隱藏狀態
Dense(1, activation='sigmoid') # 二分類:正面或負面情緒
])
________________________________________
🔄 return_sequences:要不要每步都輸出?
在 RNN 模型中,return_sequences 參數決定輸出的格式。當設定為 False 時,模型只輸出最後一個時間步的隱藏狀態,適用於整體輸入序列只需一個輸出結果的任務,如文本分類或情感分析;而設定為 True 時,模型會輸出每個時間步對應的隱藏狀態序列,適合需要逐步輸出的序列對序列任務,如機器翻譯、字幕生成或時間序列預測等。這個設定對模型結構和下游任務的設計具有關鍵影響。
________________________________________
🎯 小結與啟示:
✅ 每一個時間步(t)都會更新「當下記憶」:h_t
✅ h_t 同時受到「當前輸入 x_t」與「前一步記憶 h_{t-1}」的影響
✅ 隱藏狀態就像你讀文章時的理解筆記,愈寫愈豐富
✅ RNN 擅長時間性資料,特別適合「一句話、一段音樂、一條趨勢」這種要記得上下文的任務