JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

打破循序瓶頸:推測解碼

自迴歸強迫每趟記憶體存取只出一個 token——但你可以猜好幾個,再用一趟存取一次驗證它們。巡覽推測解碼家族:草稿模型、自我起草的解碼頭、無草稿的 n-gram,以及訓練出的多 token 預測。

為何每趟一個 token 是大敵

回想那道牆:每個 decode 步讀取整個模型只為吐出一個 token,因此在小批次下,你每個 token 都付出一整趟記憶體掃描。但那趟記憶體掃描幾乎能以驗證一個 token 同樣的代價,驗證好幾個候選 token——額外的算術近乎免費,因為你受記憶體限制,而非算力限制。整個推測的想法就是利用這份餘裕:廉價地提出多個未來 token,再用一趟昂貴的存取確認它們。

自回归生成每次完整前向只产生一个 token——正是推测解码要攻克的串行瓶颈。

自回归循环示意图:每个生成的 token 作为输入回送,用于下一次前向。

先草稿再驗證:核心演算法

推測解碼(speculative decoding) 把大型目標模型與一個小而快的草稿模型配對。草稿模型自迴歸地提出短短一串,比方說四個 token;目標模型接著跑一次前向傳播,平行地為這四個位置評分。一條巧妙的接受規則保留目標模型本來也會產生的最長草稿前綴,並在第一個分歧處重新取樣。

\text{accept } x\sim q\ \text{ w.p. }\ \min\!\left(1,\frac{p(x)}{q(x)}\right),\qquad \text{else } x\sim\frac{\bigl(p(x)-q(x)\bigr)_+}{\sum_{x'}\bigl(p(x')-q(x')\bigr)_+}

推测采样以 min(1, p/q) 的概率接受每个草稿 token,拒绝时从残差分布重采样——使输出分布与目标模型完全一致。

難處在於取得好的草稿模型:它必須執行廉價、又能準確預測目標。從目標模型蒸餾出一個小模型(回想 知識蒸餾)是一條路,但獨立的草稿增加了記憶體與營運的複雜度。這份張力,正是接下來一切方法的動機。

自我起草:Medusa、EAGLE 與跳層

如果讓目標模型自己起草呢?Medusa 在目標模型上加裝數個額外的解碼,使它能從一個隱藏狀態,平行預測下一個 token 加上接續的幾個;這些頭產生的樹狀候選再一起驗證。EAGLE 更深一層,在特徵(隱藏狀態)層級而非 token 層級起草,使其猜測準確得多,達到家族中數一數二高的接受率。

第三種變體完全省去額外參數。自我推測解碼(self-speculative decoding)目標模型自身層的一個子集——一次提前退出的淺層傳遞——作為草稿,再以完整深度驗證。一組權重、沒有獨立模型、沒有要訓練的額外頭;草稿不過是模型用更便宜的方式運行。

無草稿:用 n-gram 平行化

前瞻解碼(lookahead decoding) 完全移除草稿模型。它跑一個平行的 Jacobi 式迭代,維持一個猜測未來 token 的視窗,同時從目前序列收集已驗證的 n-gram;每一步既精煉猜測又檢查它們,在沒有任何輔助網路的情況下打破嚴格的循序依賴。它純粹是演算法上的——當你無法或不想訓練或託管額外參數時格外吸引人。

多 token 預測,以及推測何時划算

最乾淨的解法,是從一開始就訓練模型向前預測。多 token 預測(multi-token prediction) 在預訓練期加入輔助目標,使每個位置預測接下來的好幾個 token,而非只有一個。這既改善模型本身,又在推論期提供現成的高品質草稿頭——隨訓練免費附帶的自我推測。數個前沿模型如今都內建這樣的解碼頭。

\mathbb{E}[\#\text{tokens per target pass}]=\frac{1-\alpha^{\,\gamma+1}}{1-\alpha}

给定接受率 α 与 γ 个草稿 token,每次目标前向的期望产出 token 数——接受率越高加速越大,这解释了为何推测在可预测文本上收益最大。