Jasonmel Online

一個小到能從頭到尾攤開檢查的 Transformer

整本字典,以及幾個值得問問看的句子

<bos> . the a an eats is has sees likes animal color cat dog cow bird bee pig fish bone grass seed pollen corn sky snow sun coal rose blue green white yellow black red alice bob carol dave emma frank

組成全部訓練句子的六種生成規則
句型生成模板抽樣比例
eatsthe <animal> eats <food> .15%
likesthe <animal> likes <food> .8%
colorthe <thing> is <color> .15%
kind[a | the] <animal> is an animal . (the only for pig)7%
sees<person> sees the <animal> .5%
list先放 1–2 組,再重複其中一組;例如 alice cow . bob dog . alice cow .50%

控制過的留題:pig 從未出現在任何 eats 句型裡,只透過「the pig likes corn .」看過 pig→corn。訓練也拿掉「a pig is an animal .」與固定抄寫題「frank bee . carol dog . carol dog .」,但保留「the pig is an animal .」。

此速度約 12 分鐘
步驟 1/35

1/35 · 先看結果 · 先看同一句話最後要走到哪裡。機率分布:「eats」後面最可能接 corn 94%, grass 2.6%, . 2.4%。

<bos>0the1pig2eats3「eats」後面接什麼——41 個字裡的前 12 名corn94%grass2.6%.2.4%snow0.14%bird0.12%sun0.10%sky0.08%coal0.06%rose0.04%emma0.04%pig0.02%bee0.01%
先看結果1/1

先看同一句話最後要走到哪裡

「the pig eats」下一個 token:corn

這一頁拆的是現代 LLM 常用的 decoder-only Transformer:它只反覆做一件事——看著一段文字,猜下一個 token。原始 Transformer 還包含 encoder 與 cross-attention;這裡聚焦 GPT 類模型的主幹。先不拆機器:輸入「the pig eats」,它選的是 corn,把握 94%。

接下來主線沿用這句話;少數另標出的對照實驗才會換句子。我們會把每個 token 變成一列 48 個數字,讓 attention 在列之間搬資訊,最後從「eats」那一列讀出下一個 token。畫面有時只放大一列,但模型始終保留完整的 4 × 48 句子矩陣。

這一頁用到的名詞,一句話一個
token
模型能讀寫的離散單位。這一頁一個英文單字就是一個 token;真實 tokenizer 常有數萬到十多萬項,可能切出短詞、詞片段、標點或單一字元。以英文為主學出的 tokenizer,處理同樣內容時中文常會用掉較多 token,但依 tokenizer 而異。模型先看到 token id,再用它查向量。
corpus 語料庫
專門整理好、準備拿來訓練模型的資料集合。原始網頁、書籍或程式碼經過授權判斷、解析、篩選、去重與配比後,才成為訓練語料。可以把原始資料想成剛買回來的食材,corpus 則是洗好、挑好並按比例備好的食材。
embedding 詞向量
一張表,每個 token 對應一串學來的數字。相似用法與角色常在向量幾何中形成結構,但單一詞向量不等於完整、固定的字義。
residual stream
貫穿整個模型的一條加總。每一層不是取代它,而是往同樣寬度的向量加上一筆修改;這條捷徑也替梯度保留較直接的回程,降低深層網路難以訓練的風險。
attention
每個位置對前面每個位置打一個分數,正規化成權重,再照權重把它們的資訊加權平均搬過來。它是模型裡唯一能讓位置之間交換資訊的機制。
Q、K、V
同一個向量乘上三張不同的矩陣。Query 是「我在找什麼」,Key 是「我是什麼」,Value 是「找到我的話要拿走什麼」。分數由 Q 和 K 決定,搬走的是 V。
因果遮罩 causal mask
每個位置只准看自己和前面。在這種 next-token 訓練裡若拿掉它,模型可以直接偷看右邊的答案,學到的就無法用在正常的自回歸生成。
多頭 multi-head
同一層裡跑好幾組 attention,各自在自己的子空間裡比對;結果接起來後經 W^O 投影,等價於每個 head 分別映射回 residual stream 再相加。多頭讓幾個子空間可以平行比對不同的東西;單一 head 也不是只會一招,它的行為隨輸入而變。
FFN(Feed-Forward Network)
每個位置各自通過一次的兩層小網路,中間先變寬再變窄。它不看別的位置。它是模型儲存與轉換知識的重要一塊,但知識並不只放在這裡——詞向量、attention 和 residual stream 的表示裡都有。
LayerNorm
把一個位置的向量重新置中、縮放,再用學來的 γ、β 調整各維度,讓每個 block 收到較可預期的尺度,通常能讓深層模型更穩定地訓練。
logits
softmax 之前的原始分數,每個 token 一個,可正可負。只看分數差:像排名差距,全體一起加 10 分也不會改變 softmax。
softmax
把一排分數變成一排加起來等於 1 的機率。差距越大,最高的那個越接近 1。
temperature 溫度
在 softmax 前把 logits 除以溫度 τ。τ < 1 會拉大差距,τ > 1 會抹平差距。數值與抽樣分布會改變,但正溫度不改 token 的排序,因此純 greedy decoding 仍選同一個 argmax;模型權重也不會改。
greedy decoding
每一步都直接選機率最高的 token,不做隨機抽樣。相同模型與 prompt 因而會得到相同續寫,但局部最佳不保證整段文字最佳。
交叉熵 cross-entropy
訓練用的分數:−log(模型給正確答案的機率)。答對且有把握代價接近 0,答錯又很有把握代價非常大。
nat
交叉熵的單位(用自然對數)。loss = 1.79 nats 大約等於「平均在 6 個選項裡亂猜」。
梯度 gradient
每個權重增加一點時,loss 會以多快的速度上升或下降。梯度指向上升最快的方向,optimizer 通常往反方向更新;四萬個權重就有四萬個梯度,可由一次 backward 一起算出來。
in-context learning
規則可以在權重裡,但這次的具體答案從當下輸入讀出。某個配對即使訓練中偶然出現過,也沒有被存成穩定事實;模型學到的是如何利用 prompt。
context window 上下文視窗
一次能處理的 token 數上限。這個玩具模型由 20 列位置表直接限制;使用 RoPE 等方法的真實模型未必有同一張表,上限還受訓練長度、attention 成本、記憶體與部署設定影響。視窗內容只屬於本次呼叫,推論不會改動權重。
KV cache
存下舊位置的 Key、Value 向量,生成下一個 token 時只算新位置,再讓新 Q 比對快取的 K。它精確省下重算,代價是記憶體隨 context 成長;不是資料庫的 key→value 對照表。
logit lens
把中途的 residual stream 通過 Final LayerNorm 與輸出矩陣,暫時讀成 token 機率。能觀察答案如何變化,但中間層沒被直接訓練成可這樣解讀。

空白鍵播放/暫停,← → 逐步。