序列模型與Transformer
多頭注意力(multi-head attention)
/ MUL-tee-hed uh-TEN-shun /
多頭注意力,是並排運行好幾路注意力計算、而非只算一路,然後把它們的結果縫合在一起。可以想像一個小委員會在讀同一句話:一位成員盯著誰對誰做了什麼,另一位留意動詞時態,第三位關注哪個形容詞屬於哪個名詞。每個「頭」都是一路獨立的注意力,有它自己學到的提問方式,各自透過不同的鏡片去看這句話。
為什麼要拆開?單一注意力必須把所有關係塞進一組權重,逼得它把本應彼此分明的模式平均掉。有了多個頭,每個頭就能專精於一種更狹窄的關係。模型先把每個詞投影成好幾組更小的查詢/鍵/值——每個頭一組——在各頭中分別運行注意力,再把輸出拼接起來,過一道線性層,把各頭的發現重新調和成單一表示。通過把每個頭做小,總計算量被控制在與一個大頭相當的水平。
實踐中,多頭注意力是一頭默默幹活的主力:它穩定地有幫助,也是每個 Transformer 的組成部分。但「第 3 號頭總是負責代詞」這種整潔的說法,多半是一廂情願的簡化。研究者檢視各頭時,有些確實顯出可解釋的角色,許多看起來彼此冗餘,還有相當一部分可以被剪掉而損失甚微。這些頭在整體上有用;給每個頭派一份乾淨的「人類工作」,更像講故事而非事實。
一個有 8 個頭的模型,把一個 512 維的詞向量切成八片各 64 維的小塊。每一片在句子上運行它自己的注意力,八份結果再拼接回 512 維,最後一道投影把它們調和起來。
一路大注意力被拆成幾路並行的小注意力,再重新合併。
頭越多並不自動越好。超過某個點,多出來的頭往往趨於冗餘,訓練後常可移除相當一部分而幾乎無影響——這說明模型是鬆散地分攤工作,而非給每個頭都派了不可替代的關鍵職責。
又稱
另見