iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
AI & Data

咖狗報到-30天玩轉Kaggle競賽系列 第 17

一起來參加Kaggle競賽-提升實戰經驗17(長短期記憶 Long Short-Term Memory,LSTM)

  • 分享至 

  • xImage
  •  

昨天我們聊了 Pooling 策略,像是 mean pooling、max pooling,這些方法可以把一個句子壓縮成固定長度的向量。但是這些方法還有一個致命的缺點:它們完全不考慮 詞序 (order)

舉例來說:

  • 「我愛你」 vs. 「你愛我」
    mean pooling 之後,兩句話的向量幾乎會一模一樣,因為平均起來就是同一組詞!
    這樣我們的模型就會「搞不清楚誰愛誰」。

1. 為什麼需要 LSTM?

在處理自然語言時,我們常常需要考慮 上下文的順序
傳統的 RNN (Recurrent Neural Network) 就是為了這件事設計的:

  • 每一次看到一個詞,就把它的資訊傳遞到下一個時間步長 (time step)。
  • 理論上,它可以「記住」前面的所有資訊,做到序列建模。

但實際上,RNN 有兩個大問題:

  1. 梯度消失 (vanishing gradient)

  2. 梯度爆炸 (exploding gradient)


1.1為什麼會有 梯度消失 (vanishing gradient)

在 RNN / LSTM 這種「時間序列模型」裡,我們在做 反向傳播 (backpropagation through time, BPTT) 的時候,梯度要一路往前傳。

簡化公式長這樣:

反向傳播

換句話說,每一步的梯度都要乘上一個數字(其實是一個權重矩陣的導數)。


生活例子

這就像你要把一件事情「小聲地傳過 20 個人」,每個人都小聲一點 (0.9 倍),到最後一個人,聲音已經聽不到了。

這就是 梯度消失


會造成什麼問題?

  1. 學不到長期依賴

    • 模型只會記得最近幾步的資訊。
    • 例如一段長文,模型可能只能抓到最後幾個字的訊息。
  2. 收斂很慢

    • 因為梯度太小,參數更新幾乎沒動。

1.2 為什麼會有 梯度爆炸 (exploding gradient)

跟前面一樣,在 RNN / LSTM 這類「要把訊號往時間軸一直傳遞」的模型裡,我們在做反向傳播 (backpropagation through time, BPTT) 的時候,梯度會一路往前傳。所以每一次反向傳播,梯度都要乘上一個權重矩陣的導數。如果這個矩陣的「特徵值」大於 1,那梯度每乘一次就會被放大!


生活例子:

我們再來舉一個生活例子,想像你在考英文聽力。你手上拿著麥克風,並把它對著喇叭,一開始你反映聽不到 → 考官就把音量調大。結果聲音傳到麥克風 → 又被放大 → 再傳到喇叭 → 又被放大,聲音就這樣不斷被倍數放大,最後整個音響系統「爆音」。


會造成什麼問題?

  1. 參數更新太大,模型訓練「亂跳」,學不到東西。
  2. 數值發散,權重變成無窮大,最後整個模型崩壞。

也因為這兩個問題,這時候,LSTM (Long Short-Term Memory) 就站出來了。


2. LSTM 的核心概念

LSTM 的厲害之處在於它多了「門控機制 (gates)」,可以決定「什麼資訊要記住、什麼要忘掉」。
主要有三個 gate:

  1. Forget Gate (遺忘門)

    • 決定要把過去的哪些資訊丟掉
    • 公式:Forget Gate
  2. Input Gate (輸入門)

    • 決定要把現在輸入的哪些資訊加進記憶
    • 公式:Input Gate
  3. Output Gate (輸出門)

    • 決定要把記憶中的哪些部分輸出
    • 公式:Output Gate

同時,它會維護一個 Cell State (細胞狀態),像一條「記憶高速公路」,資訊可以長距離傳遞,不容易消失。


3. LSTM 與我們的語意分類任務

在我們的比賽裡,我們希望模型不只是看「詞袋」(Bag-of-Words),而是要能理解「詞序」帶來的差異。

  • 如果用 Word2Vec/GloVe/FastText 搭配 pooling,模型看不到順序。

  • 但如果我們把句子轉成詞向量序列,再丟進 LSTM,模型就可以:

    1. 一個字一個字讀進去
    2. 把前後的關係記錄下來
    3. 在最後輸出一個向量來做分類

這樣,模型就能理解「我愛你」和「你愛我」的差別!


4. 明天的計畫

  1. 先把句子轉成詞向量序列(用GloVe)
  2. 建立一個簡單的 LSTM 模型
    • Embedding → LSTM → Dense Layer → Sigmoid/Softmax
  3. 跑一個 baseline,看看 Accuracy 能不能比 XGBoost 提升。
  4. 記錄實驗過程,之後再跟 Transformer 做比較!

上一篇
一起來參加Kaggle競賽-提升實戰經驗16(Pooling 大亂鬥:平均?最大?還是兩個都要?)
系列文
咖狗報到-30天玩轉Kaggle競賽17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言