Transformer 自注意力

一個字的意思,是它挑著看的其他字,混出來的。

1先動手玩

從注意力圖看每個字注意誰

選到的字(q,橫列) 被看的字(k,直行) 越亮=注意力越多(w)

每一列合計為 1。滑過格子可看「誰看誰」。

① 選一列

點一個字,圖上會框出它「看出去」的整列。

② 讀最亮格

從「it」看出去,最亮的是「cat」(0.83)。

③ 看分配變化

調高 T,注意力會從集中變平均;每列總和仍是 1。

像在吵雜的房間聽人講話:你自動把注意力多分給重要的聲音——每個字也這樣挑著「聽」其他字。

在一個句子裡,每個字都在偷偷決定:其他的字,各要看多重。看得越重的,就越多地混進它自己新的意思裡——這個手工例子把「it」對「cat」的權重設得較高,方便看懂加權混合;它不能證明真實模型如何判定代名詞指向。

這一頁只想讓你看見一件事:一個字更新後的意思,是它對句子裡每個字分配的注意力、加權混合出來的。

互動只拆開「一顆注意力頭、一個固定句子」這件事,用的 Q/K/V 是為了看得清楚而手挑的固定數字,不是訓練出來的。多頭、位置編碼、前饋層、堆疊與訓練,在下面「拉遠看」一段補齊位置。

2觀察

先讓畫面回答

  1. 點「it」:七格裡哪一格最亮?它其實在看句子裡的哪個字?
  2. 再點「scared」和「hid」:它們最亮的那一格是不是都落在同一個字上?(那個字被幾個字盯著)
  3. 看每一列:不管選哪個字,一整列的亮度加起來都一樣多——注意力被分給七個字,總和不變。
  4. 拉 T:把注意力從「死盯一個」慢慢拉成「平均看每一個」。總和有變嗎?

3拉遠看

你剛玩的,是整座 Transformer 的哪一塊?

文字 → 向量 +位置 多頭自注意力 前饋層 × N 層 下一個字 的機率 ↑ 你剛剛玩的就在這格裡(它的其中一顆頭)

這是文字生成用途的簡圖,省略殘差連接、正規化與遮罩等步驟;互動熱圖讓七個位置彼此可見,並未模擬只能看前文的生成遮罩。

4哪裡用得到

你大概每天都在用它

5寫成式子

剛剛的「多重要」,寫成三行

玩過了?打開來看

scoreij = (qi · kj) / √d

wij = softmaxj(scoreij) = exp(scoreij) / Σk exp(scoreik)

outputi = Σj wij · vj

把游標移到算式的符號上(手機點一下),看它對應畫面上的哪個東西。

上式對應 T = 1。調整教學旋鈕時,實際計算為 wij = softmaxj(scoreij / T);T 越高,分配越接近平均。本頁 d = 4、√d = 2 固定不變。

長條的寬度顯示權重 w,不是輸出向量的分量;輸出還要把各個值向量 v 乘上權重後相加。

qi
你點的字在找什麼(teal,對應你選的字和熱圖裡它那一橫列)。
kj
token j 提供/代表什麼(amber,熱圖上緣被看的七個字)。
scoreij
qi·kj/√d,還沒正規化的原始比對分數(選中那列七格的原始強度)。
√d
縮放係數=2,讓 softmax 不要太快飽和;T 是另外加入的教學旋鈕。本頁 d = 4 固定;若選 d = 64,則 √d = 8,並非所有模型都使用這個維度。
softmax
把一整列七個分數壓成加起來剛好=1 的比例——就是下面那條長條被剛好填滿。
wij
amber,熱圖裡的一格、或長條裡的一段;看得越重就越大,每一列的和=1。
vj
token j 傳出去的內容;這個 demo 用 v=k 簡化,真實模型會學一個獨立的 W_V。
outputi
混合完的新向量:以 it 為例,output ≈ 0.83·vcat + 0.07·vit + …,在本頁手工定義的 ENTITY 軸上較大。這只描述本例的數字,不表示 attention 已證明 it 的身分。

拿掉 √d 的縮放,T = 1 時,it→cat 的注意力權重會從 0.83 衝到 0.99:差距被放大,softmax 幾乎整個押在同一格上(飽和)。√d 就是用來擋住這件事。

來源與範圍

Vaswani 等:Attention Is All You Need(§3、式 1–3)

互動是指定條件下的教學模型;圖像幫助觀察,不能取代公式的適用條件。