學習目標:注意力對「誰靠近誰」一無所知——把 token 的順序打亂,注意力矩陣只是行列同時重排,數值一個都沒變。這是它的彈性,也是它必須另外餵位置編碼的原因。另外兩件事:1/√d 不是美觀用的(拿掉它,維度一大 softmax 就塌成 one-hot),以及 L²d 那一項什麼時候才真的主導

左=L 個 token 的內容(灰=原順序,可按「打亂順序」);右=L×L 的注意力矩陣(列=query,行=key)

可切換:(a) 縮放對熵 (b) 位置編碼的強度 (c) 兩項成本誰主導

d = 平均熵(本設定) = 均勻分布的熵 log L = 平均最大權重 = max|Attn(Px) − P·Attn(x)| = L²d ÷ L·d²(本設定) =

觀察:按「打亂順序」,右邊那張圖的行列一起重排,但每一個數值都還在——置換等變誤差是 10⁻¹⁶ 的量級,也就是浮點數的零。注意力完全不知道誰靠近誰。切到 (a):關掉「除以 √d」再把 d 拉到 1024,熵從 1.58 掉到 0.10、最大權重從 0.45 升到 0.96(每一列塌成一個亮點);打開縮放那條幾乎是水平的(2.17 → 2.13),最大權重只從 0.29 爬到 0.43。那個 √d 是讓 softmax 在維度變大時保持同樣溫度的東西,不是美觀。切到 (b):那條曲線是「注意力的 logit 裡,有多少變異是位置決定的」。強度 1 的時候位置只解釋掉 4.4%,要拉到 3.5 左右才過一半——這就是為什麼原尺度的正弦編碼常常「幾乎沒有用」:它不是沒寫進去,是被內容的變異蓋掉了。切到 (c):二次項只有在 L 超過 d 的時候才主導。