視覺 Transformer

縮放點積注意力(scaled dot-product attention)

縮放點積注意力是每個 Transformer 核心處那組精確的算術。它替每個詞元回答一個問題:給定我的查詢,我該從其他每個詞元的值裡拿多少?這個配方有三步——量相似度、把相似度變成類機率的權重、取加權和——外加一個雖小卻不可或缺的修正因子,也就是縮放,它讓整件事保持可訓練。

第一步:相似度用點積來量。一個詞元的查詢向量與每個詞元的鍵向量做乘法(內積);點積愈大代表兩向量方向愈相近,也就是相關性愈高。把所有查詢與鍵分別疊成矩陣 Q 與 K,一次算出所有分數就是矩陣乘積 Q 乘以 K 的轉置。第二步:每一列分數通過一個 softmax,它把分數取指數再正規化,變成非負、加總為一的權重——一種對詞元的軟性選擇。第三步:這些權重去乘值矩陣 V,替每個詞元產出所有值的加權平均。寫成一行:Attention(Q,K,V) = softmax(QKᵀ / √d_k) · V。

除以 √d_k 就是「縮放」的部分,而它並非裝飾。當鍵維度 d_k 很大時,隨機查詢/鍵向量的點積,其變異數與 d_k 成正比,數值因此變大;把很大的數餵進 softmax 會把它推向近乎 one-hot 的區制,其梯度幾乎為零,學習就停擺。把每個分數除以 d_k 的平方根,可把變異數正規化回大約為一的量級,讓 softmax 維持在有反應的範圍。就是這一個因子,讓很深的注意力堆疊能穩定訓練。

主要成本落在 QKᵀ 以及把權重套用到 V 這兩處:對長度為 N、寬度為 d 的序列,兩者都是 O(N² · d),而那張 N x N 的分數矩陣也是 O(N²) 的記憶體。對高解析度影像 N 很大,因此這個二次方項就是瓶頸,催生了視窗注意力(Swin)、線性注意力近似,以及像 FlashAttention 這種「察覺 IO」的精確核——它避免把整張分數矩陣具體展開到記憶體。

當 d_k = 64、查詢/鍵的元素為單位變異數時,原始分數的標準差約為 8;除以 √64 = 8 後把它們拉回大約單位量級,讓 softmax 的梯度保持健康。

又称
scaled dot product attention縮放點積注意力softmax attention