同一個 token,為什麼換了前文,預測就不同?
上一章看到:「各」的 token 編號 (Token ID) 用來查表,取得嵌入向量 (Embedding Vector) [1, 0]。只要嵌入表 (Embedding Table) 沒改,不論前面寫了什麼,「各」一開始查到的都是這一串數值。
可是,寫「歡迎各……」時,後面可能接「位」;寫「分工後,各……」時,後面可能接「自」。既然「各」查到的向量一樣,前文是從哪裡加入計算的?
關鍵在查表之後:模型 (Model) 還會讓這個位置的向量,與前面位置提供的數值一起運算。 用來算下一個 token 分數的,不必是查表時那個原封不動的 [1, 0]。
先把兩件事分開
| 哪一份數值? | 從哪裡來? | 換前文時會怎樣? |
|---|---|---|
| 「各」的初始向量 | 用它的編號查表 | 仍是 [1, 0] |
| 這次處理前文後的向量 | 把各位置提供的數值一起計算 | 可以不同 |
後面算出的向量變了,不表示嵌入表被改寫。 表裡存的是起點;這次運算另外產生中間結果。
讓前文的數值加入:按份量相乘、再相加
先用一種具體機制來看:注意力 (Attention) 會計算各位置參與混合的份量,再把它們提供的向量按份量相乘、相加。它讓同一序列中的位置交換資訊;這種形式稱為自注意力 (Self-Attention)。
| 位置 | 歡迎的情境 | 分工的情境 |
|---|---|---|
| 前文提供的向量 | 「歡迎」[2, 0] | 「分工」[0, 2] |
| 目前「各」的向量 | [1, 0] | [1, 0] |
本例用固定規則計算份量:把「各」的兩個數值相加,得到 1;把每個位置的兩個數值相加,再與這個 1 相乘,得到前文 2、「各」1 的配對分數。Softmax 再把它們轉成總和為 1 的份量,約是前文 73.1%、「各」26.9%。實驗裡可以展開完整計算。
這些規則也是為教學選的。真實模型使用可由訓練 (Training) 調整的參數 (Parameter) 計算配對,沒有「前文永遠占 73.1%」的規則。
現在只看混合這一步,先用「歡迎」的情境:
| 哪一份數值? | 取多少? | 貢獻的數值(約) |
|---|---|---|
| 「歡迎」[2, 0] | 73.1% | [1.462, 0] |
| 「各」[1, 0] | 26.9% | [0.269, 0] |
| 相加 | [1.731, 0] |
「各」仍從表裡取得 [1, 0];混合後,這個位置另外算出 [1.731, 0]。 前文就是透過這次計算,進入後續的運算材料。
只換前文,結果還會一樣嗎?
先猜:把前文「歡迎」換成「分工」,保留「各」的 [1, 0] 與所有計算規則,合成的向量和候選分數還會相同嗎?
先選「歡迎」,看「各」的初始向量與合成向量,再換成「分工」。在「分數」面板同時比較兩種前文的結果;最後選「只看『各』」,觀察換前文還有沒有作用。這是本章專屬練習,全在瀏覽器本機計算。
換成「分工」後,它提供的是 [0, 2]。配對分數仍是 2,所以本例的混合份量恰好相同;份量一樣,也能因為提供的數值不同,而合成不同向量。
| 前文 | 「各」初始向量 | 本次合成的向量(約) |
|---|---|---|
| 歡迎 | [1, 0] | [1.731, 0] |
| 分工 | [1, 0] | [0.269, 1.462] |
再沿用上一章的權重 (Weight):第一個數值乘 2 得到「位」的分數,第二個數值乘 2 得到「自」的分數。
| 候選 | 歡迎的情境 | 分工的情境 |
|---|---|---|
| 位 | 3.462 | 0.538 |
| 自 | 0 | 2.924 |
分數較高的候選改變了。這次沒有更新任何參數;改的是輸入中的前文,因而改變了這次算出的中間向量。
「各」查表得到 [1, 0] ─┐
├→ 按份量混合 → 本次向量 → 候選分數
前文查表得到的向量 ───┘
反過來:前文沒有加入計算,會怎樣?
在練習中選「只看『各』」。這會刻意讓前文的份量變成 0、「各」變成 100%,作為比較用的反例。
不論選「歡迎」還是「分工」,合成的都是 [1, 0],因此「位」都是 2 分、「自」都是 0 分。前文只是出現在畫面上還不夠;它提供的數值必須實際參與運算,才有機會影響結果。
這是不是模型剛剛重新學了一次?
不是。本例只做推論 (Inference):用固定參數處理不同輸入。嵌入表、配對規則與計分權重都沒改,也沒有計算損失 (Loss) 或更新參數。
要區分三種數值:查表的初始向量、注意力混合後的向量、候選分數。 混合份量的百分比不是下一個 token 的機率 (Probability);候選分數還需要其他步驟才能成為機率。
真實 Transformer 還會結合多組注意力與其他運算,並疊成多層。本章只拆一個混合步驟,不能把某個位置份量較高,當成模型理解或推理過程的完整證明。在逐步生成時,這個位置只能使用已提供的前文與目前位置,不能讀到還沒生成的後文。
接下來的上下文 (Context) 容量章,會再看一次能提供多少內容;訓練章則回頭拆開:參數要怎麼調整。
參考:Attention Is All You Need:§3.2 注意力與加權相加、§3.1 後文遮罩(2026-09-28 查核)。練習只計算末位置的一組注意力:查詢 (Query) 與鍵 (Key) 為一維,縮放因子為 1;值 (Value) 保留兩維,略去其他運算與層,並非完整 Transformer。