
注意力機制到底在算什麼?
用通俗說法說明 Query、Key、Value、因果掩碼、多頭注意力、歸納頭,以及長提示詞為何昂貴。
文字變成 token、並帶上位置相關的向量之後,Transformer 每一層的核心只做一件事:讓每個 token 查看它被允許看到的其他 token,再決定哪些對「接下來要說什麼」真正重要。這個機制就是注意力——也是 Transformer 得名的部分。
每個 token 的三個角色:Q、K、V
每個 token 會被變換成三個新向量:Query、Key 與 Value。可以這樣理解:Query 在問「我在找什麼」,Key 在答「我能提供什麼」,Value 則攜帶匹配成功時真正被傳遞的資訊。產生 Q、K、V 的投影矩陣是訓練學出來的,所以模型會自己摸索每個 token 該找什麼、該提供什麼。
匹配靠相似度打分完成:每個 Query 與它能看到的 Key 比較,再把分數變成總和為一的權重。分數高的權重大,分數低的幾乎消失。某個 token 的新表示,就是各 Value 向量的加權混合——資訊從「重要」的那些 token 被拉了過來。
以這句為例:The cat that I saw yesterday was sleeping(那隻我昨天看到的貓正在睡覺)。模型處理到 was 時,需要搞清楚到底是什麼在睡覺。注意力可以隔著好幾個詞,仍把高權重給 cat——因為訓練讓 was 這類動詞去找「像主語」的 Key,而 cat 剛好產生對得上的訊號。
因果掩碼:不能偷看未來
像 GPT 這類自回歸語言模型是從左到右生成文字。位置 5 的 token 可以注意位置 1 到 5,絕對不能看 6、7、8——那些位置的 token 還沒生成。因果掩碼的做法很直接:把未來 token 的匹配分數壓到極低,經過 softmax 之後權重實際為零。
多個頭,不是固定切塊
語言裏同時發生太多種關係:主謂一致、代詞指代、跨句引用、局部短語結構。多頭注意力就是並行跑多次注意力。這裏要糾正一個常見誤解:每個頭拿到的,不是原始向量的固定切片。每個頭有自己學出來的投影,把完整向量映射到更小的 Q/K/V 空間。各頭跑完後,輸出拼接起來,再經一個學出來的線性層混回完整尺寸。
沒有人指定每個頭該幹什麼,特化卻常在訓練中湧現。研究者發現過追蹤語法、分辨代詞、跟隨位置模式的頭;Anthropic 的可解釋性研究還指出「歸納頭」(induction heads):第二次看到 A 時,回頭看上次 A 後面跟了什麼,再照抄——這是目前對上下文學習最清晰的機制之一。
長提示詞為何昂貴,以及 GQA
在完整注意力裏,每個 token 要和所有可見 token 比較。提示詞長度翻倍,計算量大約翻四倍。這正是 FlashAttention、稀疏注意力等效率研究的動機。推理時,模型還會保留過去的 Key 與 Value(KV 緩存),以免每一步重算整個前綴——長上下文時,這也是主要記憶體開銷來源。
分組查詢注意力(GQA)是實務上的回應:多組查詢頭共享較少的鍵值頭。LLaMA-2 70B、Mistral 7B 等模型採用此設計,精度幾乎不損,記憶體與推理成本卻能下降。注意力不是單一魔法,而是「token 能交換什麼」與「算得起多少」之間的一整組取捨。