一句話,如何變成
下一句話?
Transformer 透過注意力整合上下文。沿著「小貓 因為 累了 所以 牠 睡了」,看一個 token 的表示如何改變。
不必先會線性代數先把 token 變成向量
token 是模型讀取的文字單位,可能是字、詞或詞的一部分。這裡為方便閱讀,手動把例句分成六個單位。向量是一串數字,讓模型可以計算。
藍:文字向量;綠:位置向量,接在藍色箭頭的尖端;金:相加後的輸入 x。換位置後,虛線是原位置的 x。
這裡只用 2 維示範。數值由教學者設定;每個維度不必對應可命名的語意。
試試看:把「小貓」移到後面
文字相同,位置改變,模型收到的向量也會改變。
先點選一個 token,再切換它的位置。
想看公式與維度
L 是最大位置數;文字向量和位置向量都是 d 維,才能相加。這裡沿用教材的 learned absolute position 範例;Transformer 也有其他位置編碼方法。
每個 token,該讀取誰的資訊?
點選一個查詢 token。注意力先比較它的 Query 與各 token 的 Key,再把分數轉成權重,最後加權合併 Value。這是資訊整合,不等於模型已解決指代關係。
Query 與 Key:點積看方向與長度
② 起,虛線把每個 k 投影到 q 的方向上。垂足離原點越遠,q·k 越大;除以 √d_k 只是等比例縮小,不改變排序。灰色虛線是被遮罩的未來 token。
Value:依權重縮短,頭尾相接
淡色是各 token 的 Value。④ 時每個 v 乘上權重、依序頭尾相接,終點就是輸出 a。權重總和為 1,所以 a 落在這些 Value 圍成的範圍內。灰色是被遮罩的未來 token,不參與合併。
Q、K、V 到底怎麼算?
Query:拿什麼去比。 Key:提供什麼來比。 Value:被取用的資訊。 三者都是向量,並不是人寫的問題與答案。
頭 A、B 使用不同的教學用 Q/K/V;真正模型的投影矩陣由訓練學得。多頭輸出先串接,再乘 ;每個頭不保證有固定的語法或語意分工。
訓練時,也不能偷看下一個 token
一橫列是一個 Query,一直行是一個 Key。因果遮罩保留自己與之前的位置,遮住右上角的未來位置。
每一橫列的權重總和 = 1(見「合計」直行)。切換遮罩時,布幕蓋住未來的位置,同一橫列的權重重新分配;灰格權重 = 0。
第 5 橫列:「牠」可以讀取哪些位置?
把所有 token 放進矩陣 X,就能一次算出所有位置的注意力。平行計算不等於可以讀取未來。
無遮罩的雙向注意力可用於編碼器;這份教程的文字生成器需要因果遮罩。
標準完整注意力有 N × N 個分數;序列長度加倍,分數數量約變四倍。
交換資訊,再加工自己的表示
注意力在 token 之間傳遞資訊;前饋網路(FFN)則對每個位置各自做非線性轉換。殘差連接把新的結果加回原本的表示。
逐步跟著一個向量走
殘差:在原來的向量上加註
每個 token 帶著自己的向量往上走,這條路徑叫殘差流(residual stream)。可以想成同一份筆記:注意力和 FFN 不把整頁擦掉重寫,而是把這一層算出來的改變量加回去。
圖上左邊繞過去的線是原來的向量;中間先做 LayerNorm,再做注意力或 FFN,得到改變量。兩邊在 ⊕ 相加。改變量接近 0 時,筆記幾乎不動,前面寫下的內容還在。很多個 block 疊起來,才是 Transformer 的主體。
LayerNorm:先把這一條向量的尺度拉齊
計算範圍是同一個 token 的各個維度。做法像 z 分數:減去這串數字的平均,再除以標準差,平均就約為 0、散開程度約為 1。之後還有可學習的縮放與偏移,模型可以再把尺度調回來。
注意力和 FFN 會把有些數字放得很大。先拉齊,下一步才不會被少數特別大的數字主導。標準差的分母是維度個數 d;統計課的樣本標準差則除以 d − 1。
例如 [2, 4, 6, 8]:平均是 5,標準差約 2.24,拉齊後約 [−1.34, −0.45, 0.45, 1.34]。這一步先不計入可學習的縮放與偏移。
教材中的 Pre-LN block 公式
MHA = Multi-head attention;LN = LayerNorm。
上面的數字例先不含可學習的縮放與偏移。這份教程用的是 Pre-LN:先 LayerNorm,再做注意力或 FFN,最後加回殘差。其他架構可能把 LayerNorm 放在不同位置。
下一個 token,從機率分布中選
最後一個位置的表示經線性層轉成 logits(分數),softmax 再轉成詞彙表上的機率。調整溫度,觀察分布如何變尖或變平。
上下文:小貓 因為 累了 所以 牠
z 是 logit(分數),T 是溫度。小型教學詞彙表與固定分數;此處實際計算 softmax,並非呼叫語言模型。
先選擇,再把結果接回上下文
抽樣=在 0 到 1 之間隨機取一個數 r,指針落在哪一段就選哪個 token;每段的寬度就是它的機率。
目前等待選擇下一個 token。
真正的生成會重新計算新上下文的下一個分布,再重複這個循環,直到結束 token 或長度限制。
真實下一個 token,就是訓練答案
訓練時,從文本本身取得下一個 token 作為標籤,不必逐句人工標註。模型若給真實 token 很低的機率,損失就高。
Teacher forcing:輸入與答案錯開一格
在「牠」的位置,答案是「睡了」。就算模型猜成「跑了」,下一個訓練位置仍使用文本中的「睡了」。因果遮罩讓所有位置可以在一次前向計算中訓練。
生成時則使用模型自己選出的 token,作為後續上下文。
試著提高正確答案的機率
曲線是 −ln p:p 接近 0 時損失急遽上升;p 接近 1 時趨近 0。
滑桿展示機率與損失的關係;不會更新模型參數。真正訓練用反向傳播與最佳化器更新權重。
整個測試集的 perplexity(困惑度)
在相同測試資料、tokenizer 與評估設定下,PPL 較低代表下一個 token 的預測較好;不能直接代表回答更正確、更公平或更省能源。預訓練後也可再微調以適應領域或任務。
用三個問題,串起整個流程
文字 → token → 向量與位置 → 多層 block → logits → 機率 → 選下一個 token。
回到教材:章節地圖與改編說明
來源:你提供的 transformer_aug26.pdf,共 95 頁。教程依照其 decoder 語言模型主線重新編排;未複製原投影片圖像。
- 注意力與 Q/K/V:第 6–25 頁。
- Block、殘差與 LayerNorm:第 27–35 頁。
- 矩陣計算與因果遮罩:第 37–46 頁。
- 輸入位置與輸出 head:第 49–56 頁。
- 生成、抽樣與溫度:第 59–77 頁。
- 自監督訓練與 teacher forcing:第 80–84 頁。
- 困惑度及其他評估面向:第 89–95 頁。
改編時修正位置矩陣維度,並把「不用 greedy」改為不同選擇策略的比較。實際 token 切分、向量與注意力頭的行為會依模型而異;本教程所有數值均為教學示例。