大型語言模型很會裝。

畫面上看起來像一個人在回訊息:一句一句、有語氣、有停頓,偶爾還會很有自信地講錯。可是把外殼拆掉,裡面其實沒有一個小人在讀文章、思考、再打字。裡面是一條很機械的流水線。

文字先被切成 token。Token 變成數字 ID。數字 ID 查表變成向量。向量被加上位置感。接著一層一層 Transformer 區塊反覆加工:注意力機制讓 token 互相看,FFN 讓每個 token 自己消化,殘差流把中間結果一路累積,正規化防止數字爆炸。最後,模型不是輸出「答案」,而是輸出「下一個 token 可能是誰」的分數。

聽起來冷冰冰,對吧?

但這就是最有趣的地方:一個看起來像聊天的東西,底層其實只是在重複做「下一個字最可能是什麼」。魔法不是某個單一零件,而是這些零件疊到夠大、資料餵到夠多、訓練跑到夠久以後,行為開始像理解。

今天這篇不是要把 Transformer 的數學全部推完。那會變成期末考複習講義,讀者看三段就開始想滑 短影音。今天的目標比較務實:看懂 LLM 模型卡 或 Transformer 論文時,至少知道那些零件名稱在講哪一層。

先看全景。

`Transformer` 架構 LLM 的核心流水線


🏰 第 0 層:Token — 模型讀的不是文字,是編號

⚔️ Level 0 / 7 LLM 內部機制
0% 完成

第一個殘酷事實:LLM 不直接讀文字。

人類看到 strawberry,腦中會浮出草莓、紅色、甜味、冰淇淋。模型看到的第一步不是這些東西,而是一串整數。這個轉換過程叫 斷詞

Token 可以先想成「模型世界裡的最小文字積木」。它不一定是一個字,也不一定是一個完整單字。英文的 running 可能被切成 running。中文也可能被切成字、詞、或更奇怪的片段。每個 token 都會對應到一個固定編號,叫 詞元編號

這也是為什麼早期模型常常數錯 strawberry 裡有幾個 r。人類按字母數,模型看到的可能是幾個 子詞詞元。它不是在字母層級工作,所以要求它逐字母數數,就像要求收銀機只看條碼猜商品包裝上有幾個紅色字母。不是不可能,但不是它原生擅長的介面。

斷詞的取捨會直接影響成本。文字被切得越少 token,推論越便宜;切得越碎,模型需要處理的步數越多。不同模型家族用不同斷詞器,帳單、上下文視窗實際可用量、多語言表現,都會被這一步影響。

Mogu 認真說:

這也是 prompt engineering 裡很多怪現象的底層原因。人類覺得「只是多打一點字」,模型看到的是「多了幾百個 token 要進注意力機制」。帳單不是按人類的字數算,是按模型世界的積木數算。這也是為什麼換斷詞器會讓舊 prompt 的成本突然浮動,像換了一把量尺以後發現家裡牆壁變長了。牆沒變,是量法變了。

小測驗

Tokenization 這一步主要在做什麼?


🏰 第 1 層:嵌入向量 — 條碼要先查表,才會變成意思

⚔️ Level 1 / 7 LLM 內部機制
14% 完成

Token ID 本身沒有意義。

1024 只是一個數字。它不比 1025 更聰明,也不自帶「貓」「程式」「晚餐」的概念。模型要先拿這個 ID 去查一張巨大表格:嵌入矩陣

嵌入矩陣可以想成「每個 token 的向量字典」。每一列對應一個 token,每一列是一串很長的數字。7B 級模型常見隱藏維度可能是 4096,意思是每個 token 會被換成 4096 個數字組成的向量。

向量 不用想太玄。先想成一張超長的角色能力表:甜度、技術感、名詞感、動詞感、跟 Python 相關的程度、跟法國相關的程度。真實模型裡不是人類手刻這些欄位,但訓練會讓向量空間自然長出語意結構。

常聽到的 king - man + woman ≈ queen,就是 嵌入空間有語意幾何的經典例子。沒有人硬把「國王減男性加女性等於女王」寫進規則裡;模型只是為了預測文字,被迫把語意關係壓進向量位置。

但這裡還缺一件事。

同一個 token 的嵌入,不知道它站在句子的哪裡。dog 出現在第一個位置,和 dog 出現在第十個位置,查到的是同一列向量。可是語言順序很重要。「狗咬人」跟「人咬狗」完全不是同一件事,雖然 token 集合很像。

所以接下來要把「位置」放進來。

小測驗

嵌入矩陣的角色最接近哪一個?


🏰 第 2 層:位置 — 同一個字,站不同位置就不是同一回事

⚔️ Level 2 / 7 LLM 內部機制
29% 完成

Transformer 的 注意力機制 本身不天然知道順序。

如果只丟一堆 token 嵌入進去,模型看到的是一包向量,不是有順序的一句話。可是語言不是超市購物籃。雞蛋、牛奶、吐司順序換了沒差;「工程師修好了 bug」和「bug 修好了工程師」順序一換,世界觀直接崩壞。

早期 Transformer位置編碼:每個位置有一組數字,直接加到 token 嵌入裡。位置 1 加一種波形,位置 2 加另一種波形。這樣同一個 token 放在不同位置,進模型時就會變成不同向量。

現代 LLM 常見的是 RoPE(旋轉位置嵌入)。這個名字很嚇人,但直覺可以很簡單:不要把位置資訊硬塞進 token 本身,而是在注意力機制比對 QueryKey 的時候,根據位置把向量旋轉一下。

RoPE 的好處是比較自然地表達相對位置。注意力機制在意的常常不是「這是第 500 個 token」,而是「這個 token 跟那個 token 距離多遠」。這也是為什麼 RoPE 會出現在 LLaMA、Mistral、Gemma、Qwen 這些現代開放權重模型家族裡。

但位置資訊不是萬靈丹。長 context 裡常見的 中段遺失 問題,意思是模型比較容易用到開頭和結尾,埋在中間的資訊比較容易被忽略。長上下文不是大法師的無限記憶宮殿,比較像塞到爆的冰箱:東西都在裡面,但每次找蛋不一定找得到。

Mogu 畫重點:

這一層很直接連回 prompt 寫法。重要資訊放開頭或結尾,通常比埋在中間可靠,不是玄學,是模型使用長上下文的行為真的有偏差。很多 prompt 技巧看起來像民俗療法,底層其實是架構的副作用。

小測驗

`RoPE` 的核心直覺是什麼?


🏰 第 3 層:注意力機制 — Token 之間開始互相看

⚔️ Level 3 / 7 LLM 內部機制
43% 完成

前面三步處理的是「每個 token 自己是誰、站在哪裡」。接下來才是 Transformer 最有名的部分:注意力機制

注意力機制的任務很單純:每個 token 要決定,前面哪些 token 對現在這一步最重要。

這裡有三個角色:QueryKeyValue,簡稱 Q、K、V。

Query 是「正在找什麼」。Key 是「身上掛著什麼標籤」。Value 是「如果被選中,要帶走什麼資訊」。

數學上,Query 會和 Key 做點積,得到相似度分數。分數再經過 softmax,變成加總為 1 的權重。權重越高,對應的 Value 對目前 token 的影響越大。

GPT 風格的純解碼器模型還有一個限制:因果遮罩。生成第 5 個 token 時,只能看第 1 到第 5 個 token,不能偷看第 6 個。因為第 6 個還沒生成。這就是為什麼語言模型是左到右一個 token 一個 token 長出來。

這裡也是 KV 快取出現的地方。生成新 token 時,前面 token 的 KeyValue 不需要每次重算,可以先存起來。這個快取讓生成快很多,但長 context 也會讓快取變大,吃掉很多記憶體。

Mogu 吐槽時間:

KV 快取是很多推論成本問題的核心。長 prompt 貴,不只是因為讀很多字,而是因為模型要保留很多過去 token 的 K/V 狀態,後面每生一個 token 都要拿來比對。這就像會議逐字稿越長,秘書要帶在身上的資料夾越厚。不是不能帶,是每走一步都比較重。

小測驗

在 Q/K/V 裡,哪一個最像「如果匹配成功,就真正被複製過去的資訊」?


🏰 第 4 層:多頭注意力 與 GQA — 一雙眼睛不夠,那就開很多雙

⚔️ Level 4 / 7 LLM 內部機制
57% 完成

一個 注意力機制 頭 只是一種看世界的方式。

語言裡同時存在很多關係:主詞和動詞、代名詞和人名、句子裡的引用、前後文的格式規律、程式碼裡變數和型別的關係。只用一個視角看,太窄。

所以 Transformer多頭注意力:同一層裡平行跑很多個 注意力機制 頭。每個 頭 有自己的 Q/K/V 投影,學會看不同關係。最後再把這些 頭 的輸出合起來,丟回同一條 殘差流。

這裡有一個常見誤解:每個 頭 不是「拿原始向量的一小段固定切片」。比較準確的說法是:每個 頭 都有自己的 學出來的投影,把完整 詞元向量 投影到自己的小空間。

現代模型還常用 GQA(分組查詢注意力)。它的動機很實際:KV 快取很貴。

傳統多頭注意力裡,每個查詢頭都有自己的 Key/Value 頭。GQA 讓多個查詢頭共用比較少組 Key/Value。效果像保留很多種提問視角,但減少需要存的資料夾數量。LLaMA-2 70B、Mistral 7B 這類模型都採用過這種設計。

這不是華麗理論,是推論工程。模型要跑得快、長 context 要扛得住,KV 快取記憶體壓力就得降下來。

Mogu 內心戲:

這是讀模型卡時很值得注意的地方。看到 GQA,不要只想「架構名詞 +1」。它其實在講一個 production 問題:長上下文生成時,記憶體快被 KV 快取吃爆,所以架構要幫推論省錢。很多模型設計不是為了論文好看,是為了資料中心帳單不要好看得太恐怖。

小測驗

GQA 主要想改善哪個實務問題?


🏰 第 5 層:FFN、SwiGLUMoE — 模型的知識倉庫不只在 注意力機制

⚔️ Level 5 / 7 LLM 內部機制
71% 完成

注意力機制 很有名,所以很多人以為 Transformer 的靈魂都在 注意力機制。

其實每個 Transformer 層裡還有另一個重量級零件:前饋網路(FFN)

注意力機制負責 token 之間互相交換資訊。FFN 則是每個 token 自己單獨加工。它通常做三件事:先把向量展開到更大的維度,經過非線性,再壓回原本大小。

非線性 是關鍵。沒有它,兩層線性層疊起來還是等於一層線性層,再疊一百層也只是比較會浪費電的一層。非線性讓模型可以表達彎曲、分段、條件式的關係。

現代 LLM 常見的 FFN 啟動函數不是早期 ReLU,而是 GELU、SwiGLU 這些變體。細節先不用死背,重點是:FFN 不是 注意力機制 的配角,它吃掉大量參數,也承載很多模型學到的語意和事實結構。

可解釋性研究裡常看到某些 FFN 神經元 對特定概念很敏感,例如地名、語法、程式語言、某些事實關聯。ROME 這類 模型編輯 方法甚至可以對特定 FFN 權重 做低秩修改,讓模型某些事實關聯改變。這表示模型的「知道」不是一個資料庫欄位,而是分散在權重和啟動值裡的結構。

大型模型還有另一個方向:MoE(專家混合)。密集 FFN 是每個 token 都跑同一套 FFN。MoE 則是準備多個專家,每個 token 只啟動其中幾個。總參數量可以變大,但每個 token 實際跑的運算量不會同比例變大。

這就像公司有 100 個專家,但每個案子只叫 2 個相關的人進會議室。公司總知識很多,單次開會成本不一定爆炸。

Mogu 插嘴:

MoE 的直覺很容易被總參數量騙。看到「8x7B」不要直接以為每個 token 都跑 56B。比較像一間有很多部門的公司,不是每封信都全公司逐字審稿。Router 會決定哪些專家上場。當然路由器本身也可能出事,像專案經理把資料庫問題丟給設計部門,那就精彩了。

小測驗

FFN 在 `Transformer` 層裡主要做什麼?


🏰 第 6 層:殘差流 與 RMSNorm — 深到幾十層還能訓練的原因

⚔️ Level 6 / 7 LLM 內部機制
86% 完成

Transformer 層一層一層疊上去,問題馬上出現:如果每層都直接覆蓋前一層資訊,訓練會很難穩定。梯度可能消失,數字可能爆炸,模型深一點就開始發瘋。

所以 Transformer殘差連接

意思是每個子區塊的輸出不會直接取代原本向量,而是加回去。舊向量保留,新資訊疊上去。這條一路累積的通道常被叫做 殘差流

但一直加東西會有另一個問題:數字可能越加越大,或分布越來越怪。這時候需要 層正規化 或現代模型常見的 RMSNorm

正規化的任務很務實:把每個詞元向量的數值拉回穩定範圍。沒有它,深層模型很容易訓練不穩。

早期 Transformer 常用 post-正規化,也就是子區塊跑完再正規化。現代 GPT、LLaMA、Mistral 等模型常見 pre-正規化,先正規化再進子區塊,訓練深層模型比較穩。RMSNorm 則是更簡化、更便宜的正規化變體,省掉均值置中,保留重新縮放向量大小的核心功能。

這一層聽起來不華麗,但很重要。沒有殘差連接和正規化,前面那些注意力機制、FFN、MoE 都很難穩定堆到幾十層、上百層。

Mogu 碎碎念:

很多系統設計也是這樣。外面看起來最酷的是 agent、瀏覽器、tool use,真正讓系統不爆炸的常常是檢查點、重試、速率限制、健康檢查。殘差連接和正規化就是 Transformer 裡的基礎設施。平常沒人鼓掌,壞掉時全場尖叫。

小測驗

殘差連接的核心作用是什麼?


🎯 魔王關:下一詞元迴圈 — 一整段文字就是一直猜下一格

⚔️ Level 7 / 7 LLM 內部機制
100% 完成

所有 Transformer 區塊跑完後,模型會拿最後一個 token 的最終向量,轉成詞彙表裡每個 token 的分數。這些原始分數叫 原始分數

原始分數還不是機率。它們會經過 softmax,變成一個機率分布:下一個 token 可能是逗號、可能是「的」、可能是 function,每個候選都有一個分數。

接著 解碼設定會決定怎麼選。

溫度 會控制分布有多尖銳。低溫比較保守,高溫比較發散。top-k 只從前 k 個候選裡選。top-p 則從累積機率達到 p 的候選集合裡選。這就是為什麼同一個模型可以在某些設定下像嚴謹工程師,在另一些設定下像半夜三點靈感爆棚的寫作者。

選出下一個 token 後,這個 token 會被接到序列後面。模型再跑一次,產生下一個 token。然後再跑一次。再一次。直到遇到結束詞元或長度限制。

一整段回答,就是這個迴圈重複很多次。

下一詞元 生成迴圈

基礎模型的核心訓練目標也是這件事:預測下一個 token。它不是直接被訓練成「誠實」「會聊天」「會寫 code」。那些能力來自大量下一詞元預訓練之後,再加上指令微調、偏好最佳化、安全訓練、工具框架等後處理。

最後再補一個 production 技巧:推測式解碼

直覺是先找一個小模型快速猜好幾個 token,再讓大模型一次驗證。如果小模型猜得符合大模型分布,就整批接受;猜錯再退回大模型。做對時,輸出分布可以保持等價,但速度變快。

這像讓實習生先草擬三句,資深工程師一次審三句。草稿合理就直接過,不合理再重寫。重點不是實習生比較聰明,而是資深工程師不用每個字都從零開始。

Mogu 想補充:

這也是 LLM 最容易讓人誤會的地方。表面上它像在「想完再回答」,底層卻是一格一格長出來。當然,現代 reasoning model 會用更多隱藏推理、工具呼叫、規劃框架 包住這個迴圈,但核心生成仍然離不開 逐詞元。外面穿西裝,裡面還是流水線。

結語

現在把整條路串起來:

文字先被斷詞器切成詞元編號。ID 查嵌入矩陣變成向量。位置資訊讓模型知道順序。注意力機制讓 token 彼此交換訊息。多頭注意力和 GQA 讓這個交換同時有多種視角,而且比較省 KV 快取。FFN 讓每個 token 自己加工,也承載大量學到的結構。殘差流把一路上的資訊累積起來,RMSNorm 讓數字保持穩定。最後原始分數變成下一個 token 的機率,生成迴圈一格一格往前走。

這就是 Transformer 架構 LLM 的基本骨架。

下次看到 模型卡 寫 RoPE、GQA、SwiGLURMSNormMoE,不必把它們當成一串咒語。它們只是這條流水線上的零件:有的負責位置,有的負責省記憶體,有的負責非線性加工,有的負責讓深層模型不要爆炸。

LLM 看起來像一顆會思考的大腦,但工程上更像一座巨大工廠。每個 token 都被送進輸送帶,經過一站又一站,最後吐出下一個 token。

魔法感還在,只是現在知道機房在哪裡了。

(⁠๑⁠•⁠̀⁠ㅂ⁠•⁠́⁠)⁠و⁠✧

延伸閱讀