跳至主要內容
ESC
Study Jam:GenAI 開發者實戰 — 第 21/29 篇

注意力機制

注意力機制

課程概述

注意力機制(Attention)是 Transformer 最重要的積木之一。它做的事沒有「真的理解」那麼玄:模型會替每個 Token 算出該參考哪些位置,再把相關資訊加權整理回來。這堂課會從這個直覺出發,把 Query、Key、Value 和縮放公式一步步拆開,也會補上 Attention 擅長與不擅長的地方。

Attention QKV 運作:Token 表示投影成 Query、Key、Value,Query 與所有 Key 的相似度經縮放與 Softmax 形成權重,再加權彙整 Value;多個 Head 平行學不同關係,因果遮罩阻擋生成時看見未來 Token

Query 表示「這個位置想找什麼」、Key 表示「每個位置有哪些線索」,Value 則是最後要彙整的內容。這套比喻很好記,但 Q、K、V 實際上都是模型從輸入向量學出來的投影,不是人工指定的標籤。

你將學到

  • 解釋傳統 RNN/LSTM 的序列處理限制與 Attention 的解決方案
  • 描述 Scaled Dot-Product Attention 的 Query-Key-Value 機制
  • 理解 Multi-Head Attention 如何捕捉多面向的語義關係
  • 區分 Self-Attention 與 Cross-Attention 的應用場景

核心概念

為什麼會需要 Attention?

早期沒有 Attention 的 RNN Encoder-Decoder,常把整段來源資訊濃縮到固定大小的狀態,再交給 Decoder。句子一長,前面的細節就很容易在傳遞過程中變淡;循環結構還得照順序算,訓練也不容易平行化。Attention 讓每個查詢位置直接參考來源的多個位置,不必只靠最後一個狀態。不過標準 Self-Attention 需要建立位置兩兩之間的分數矩陣,序列越長,記憶體與運算成本也會快速增加。

Query-Key-Value 的直覺解釋

可以把 Attention 想成在圖書館找資料。Query(查詢)是「我現在需要什麼」,Key(鍵)像每份資料的索引線索,Value(值)則是要帶回來的內容。模型拿一個 Query 跟所有 Key 比對,算出相對權重,再依權重混合 Value。寫成數學就是 Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V。重點是「依目前需求動態取資料」,而不是永遠把整段內容壓成同一個摘要。

Scaled Dot-Product Attention

先算 Q 和 K 的內積,再除以 sqrt(d_k),也就是每個 Key 向量維度的平方根。這個縮放能避免維度變大時分數幅度跟著膨脹,讓 Softmax 不至於太早集中在少數位置。若是自迴歸生成,還要先套上因果遮罩,擋住尚未生成的未來 Token;Softmax 之後得到每個位置的權重,最後才用這些權重彙整 V。

Multi-Head Attention

Multi-Head Attention 會把 Q、K、V 投影到多組較小的子空間,各自計算 Attention,再把輸出串接並投影回模型維度。不同 Head 因此有機會學到不同模式,但不能直接認定某一個 Head 就固定負責語法、另一個專門做指代;這類解讀要靠實驗驗證。Head 也不是越多越好,總維度、每個 Head 的維度、資料量和運算預算都會互相影響。

Self-Attention vs Cross-Attention

Self-Attention 的 Q、K、V 來自同一組序列表徵,讓每個位置整理同一序列裡的上下文。Cross-Attention 則讓 Q 來自目前正在處理的序列,K、V 來自另一組表徵。以翻譯模型來說,Decoder 目前的位置會用 Query 去讀取 Encoder 保留下來的來源語句表徵,兩端就是這樣接起來的。

對每一個 Query,模型都會重新計算一組權重。因果模型還會先遮住未來位置;Multi-Head 則是平行做多組相同流程,再把結果合併。

實作重點

  • 用 NumPy 手動實作一次 Scaled Dot-Product Attention,逐步檢查矩陣形狀與權重總和
  • 在 TensorFlow/Keras 中用 tf.keras.layers.MultiHeadAttention 建構一個簡單的 Attention 層
  • 視覺化 Attention 權重矩陣,觀察不同輸入與遮罩如何改變權重分布
  • 比較不同 Head 數量時固定總模型維度,避免把參數量增加誤當成 Head 本身的效果

Lab 導讀

Lab 連結Attention Mechanism — Google Cloud Skills Boost

這個 Lab 以理論和圖解為主,也是整個系列裡數學比較密的一段。第一次看時不用急著背矩陣公式,先確認三件事:Query 在找什麼、權重怎麼來、Value 怎麼被加總。接著拿一個只有三個 Token 的小例子手算,通常會比重看好幾次公式更有感。

延伸學習

Study Jam:GenAI 開發者實戰 — 21/29 完成 查看系列全覽 →

留言討論

徽章解鎖!