G4.2 5 分鐘閱讀 2026年10月

G4.2 一層 attention,怎麼接成 Transformer?

本篇重用1 篇

一次詢問,夠不夠?

上一篇證明了一層 attention 能依內容讀取資訊,同時跟著名單重排。但它只產生一份加權摘要。回到旅行群組:安排一趟行程時,我們可能同時想知道交通、吃飯與時間,混成一份平均未必足夠。

一個自然的做法是讓幾組不同的問題各自讀一次,再把得到的內容接起來。這就是 Vaswani 等人 [1] 使用的 multi-head attention。

不同 head,用不同的比較方式

第 rr 個 head 有自己的 WQ(r),WK(r),WV(r)W_Q^{(r)},W_K^{(r)},W_V^{(r)}:

Y(r)=Attn⁡(HWQ(r),HWK(r),HWV(r)).Y^{(r)}=\operatorname{Attn} (HW_Q^{(r)},HW_K^{(r)},HW_V^{(r)}).

它們在相同的點上產生不同 features,沿 feature 維度接起來,再做共享 projection:

MHA⁡(H)=[Y(1),…,Y(m)]WO.\operatorname{MHA}(H) =[Y^{(1)},\ldots,Y^{(m)}]W_O.

各 head 重排後都是 PY(r)PY^{(r)};concatenation 沒有混動 rows,WOW_O 也只作用在 feature 維度。因此 MHA⁡(PH)=PMHA⁡(H)\operatorname{MHA}(PH)=P\operatorname{MHA}(H)。

多份摘要是我們為了表示不同互動而加入的選擇,排列要求沒有規定 head 數量。各 head 也沒有被指定成「交通 head」或「餐廳 head」;這只是生活例子的對應,不是訓練保證。

讀完資訊,還要處理它

Attention 處理點與點之間的互動。讀完後,每個點還要把這些資訊轉成自己的新 feature。我們先選逐點處理:如果同一份 feature 換到另一列,處理規則不能因此改變,所以各 row 使用同一個函數。

選 MLP 來實現這個函數,就可以寫成:

FFN⁡(hi)=ReLU⁡(hiW1+b1)W2+b2.\operatorname{FFN}(h_i) =\operatorname{ReLU}(h_iW_1+b_1)W_2+b_2.

這是 position-wise feed-forward network:position-wise 指各 row 分別計算,不是每個 row 有不同參數。重排不改 FFN⁡\operatorname{FFN} 的規則,所以 FFN⁡(PH)=PFFN⁡(H)\operatorname{FFN}(PH)=P\operatorname{FFN}(H)。

接成 block,對稱還在嗎?

如果想保留原 feature,再加入新讀到的資訊,可以用 residual 相加。兩份 feature 必須有相同的維度與 action,才能沿用 G1.3 的相加規則。

若再選 normalization 調整 feature 的尺度,也不能讓它依列號使用不同算法。這裡用 LayerNorm:在同一 row 的 channels 中算平均與 variance,各 row 共用 affine parameters。因此 LN⁡(PH)=PLN⁡(H)\operatorname{LN}(PH)=P\operatorname{LN}(H)。

Symmetry 並沒有要求一定使用 residual 或 LayerNorm;我們選了這些操作,再檢查它們是否保留相同 action。採用 Vaswani 等人 [1] 的 post-norm 寫法,先忽略 dropout,block 就是

U=LN⁡(H+MHA⁡(H)),F(H)=LN⁡(U+FFN⁡(U)).U=\operatorname{LN}(H+\operatorname{MHA}(H)), \qquad F(H)=\operatorname{LN}(U+\operatorname{FFN}(U)).

先檢查第一段:

U′=LN⁡(PH+PMHA⁡(H))=PLN⁡(H+MHA⁡(H))=PU.U'=\operatorname{LN}(PH+P\operatorname{MHA}(H)) =P\operatorname{LN}(H+\operatorname{MHA}(H))=PU.

同樣代入第二段,就得到 F(PH)=PF(H)F(PH)=PF(H)。這是 G1.3 的 layer composition:每個操作遵守同一個 action,疊起來也遵守。

Attention 負責讀其他點,FFN 負責處理每個點讀到的內容;residual 與 normalization 把這兩種操作接成可堆疊的 Transformer block。 這裡先建立 encoder 的核心,不假設任務一定是文字生成。

補充Training 時的 dropout 要怎麼比較?

兩次 forward 若各自抽不同的 dropout mask,逐次輸出通常不會精確對齊。驗證 deterministic identity 時應用 eval mode;若要比較有 dropout 的兩次運算,須讓隨機 mask 也一起重排。獨立抽樣的 dropout 可以保留分布層級的 symmetry,但不是每次 realization 都相等。

Multi-head attention 讀取其他點,shared FFN 處理每個點;residual 與 row-wise LayerNorm 保留排列規則。
Multi-head attention 讀取其他點,shared FFN 處理每個點;residual 與 row-wise LayerNorm 保留排列規則。

課堂提問

把 FFN 改成「第一列用一組參數、第二列用另一組」,前面的證明還能用嗎?

先想一想,再展開看整理後的答案

不能。原證明使用各 row 相同的規則;同一個點換到另一列就換了模型,一般不再有 FFN⁡(PH)=PFFN⁡(H)\operatorname{FFN}(PH)=P\operatorname{FFN}(H)。

動手看一次

先比較一層 attention 的重排;完整 block 的程式測試在 G4.5。每加一個操作,都用相同的 output action 檢查,不把一層的保證直接當成整個模型的保證。

快速回顧一下

想一想Multi-head 在哪個維度 concatenate?

想一想Position-wise FFN 指什麼?

想一想這裡的 LayerNorm 沿哪裡計算?

參考文獻

  1. Vaswani 等人(2017),Attention Is All You Need