模型層 開放閱讀

Greedy Decoding

Greedy Decoding

概念 ID
greedy-decoding
更新時間
2026-05-29
來源數量
待補

Greedy Decoding

3 秒看懂

Greedy Decoding(貪心解碼)是自迴歸語言模型在每一步都選擇當前機率最高的詞元(token)作為輸出的解碼策略。它的優點是簡單、速度快且確定性高,但會因缺乏前瞻性而陷入區域性最優,導致生成文本重複、單調,整體質量通常低於波束搜尋或精心設計的取樣策略。

3 分鐘產業解釋

在 Transformer 自迴歸解碼(如 GPT 系列)中,模型每次輸出一個條件機率分佈,貪心解碼直接取 argmax 作為下一個 token,然後拼接進上下文再預測後續 token,迴圈至終止。該策略的計算開銷是所有策略中最小的:沒有額外的 Top‑k 篩選、溫度縮放之後的取樣,也不需要像波束搜尋那樣維護多條假設路徑並反覆打分對比。這在產業中有兩個極端應用場景:

  • 低延遲硬即時場景:如自動語音識別的流式轉錄、邊緣裝置的鍵盤輸入建議,時延要求超過生成質量,貪心解碼的確定性執行路徑對硬體友好,便於在 NPU/GPU 上做運算元融合和 KV 快取最佳化。
  • 確定性任務的基線:在機器翻譯、程式碼補全等任務中,如果模型已經通過大規模訓練具備了較強的序列確定性,貪心解碼所得輸出與波束搜尋差異很小,且避免波束因長度懲罰不當導致的過短/過長問題。

產業裡,大部分部署在雲端端的對話模型(ChatGPT、Claude)實際採用取樣(temperature + top‑p/top‑k)以達到多樣性和類人化,但貪心解碼依然是衡量生成任務“上限”和測試模型是否發生嚴重退化(如重複迴圈)的工具。

15 分鐘專家深入

核心機制與決策鏈條

設自迴歸模型在時間步 t 接收字首序列 x_{<t},輸出下一個 token x_t 的條件機率分佈為: P(x_t | x_{<t}) = softmax(h_t · W) 其中 h_t 為最後一層隱狀態,W 為輸出投影矩陣(詞彙表大小 |V|)。貪心解碼選擇: x_t = argmax_{v∈V} P(v | x_{<t}) 然後將 x_t 拼接到序列中進入 t+1 步。整個過程不涉及隨機取樣,也無多於一個候選的搜尋樹。

為什麼貪心解碼在理論上不保證全域性最優

語言生成可以被視為求解最優序列 X* = argmax_{X} P(X),由於解空間呈指數級,直接搜尋不可行。貪心解碼在每一步都做最優選擇,相當於假設: argmax_{X} ∏ P(x_t | x_{<t}) = ∏ argmax_{x_t} P(x_t | x_{<t}) 這隻有在每一步的選擇與未來選擇完全無關時才成立,但自然語言具有長距離依存,區域性最優往往導致後續高機率路徑被鎖死。

典型表現:

  • 重複退化:模型一旦輸出某個高頻承接短語(如 “as we all know”),後續分佈變得尖銳,argmax 反覆選中相同 n‑gram,進入迴圈。
  • 確定性碰撞:在沒有外部擾動(如溫度調節)下,同一輸入永遠生成相同輸出,無法支援“創意生成”。

與取樣、波束搜尋的對立與互補

維度貪心解碼波束搜尋 (Beam Search)取樣 (Samping)
搜尋寬度1k (典型 4~10)1(逐次取樣)
多樣性極低低(長度懲罰下仍趨同)高(受溫度/top‑p控制)
計算複雜度O(V× L) / 序列
確定性完全確定完全確定隨機
典型任務機器翻譯基線,快速驗證機器翻譯,總結(權衡質量)開放式對話,故事生成

近年研究(如 Holtzman et al. 2020)指出,人類文本並不總在機率峰值,純最大化機率的解碼方式往往產生“機器味”文本。因此,產業主流已從貪心/波束轉向取樣策略,僅在需要可復現、低方差輸出時保留確定性解碼。

實現細節

實際推論架構中,貪心解碼並不顯式計算整個 softmax,而是重用 top‑1 索引查詢,結合 KV 快取,每一步只推一個 token 的編碼,使首 token 延遲與後續 token 延遲的差距體現模組的訪存和計算比。針對特定硬體(如 NVIDIA TensorRT, Apple Neural Engine),有高度最佳化的 greedy_search 運算元,直接返回 argmax(logits) 而不保留機率值。

技術原理

(最深,講機制+關鍵引數,可 ASCII 圖但用程式碼塊包)

序列機率分解

自迴歸語言模型將聯合機率分解為條件機率之積: P(x_1, x_2, ..., x_L) = ∏_{t=1}^{L} P(x_t | x_{<t}) 貪心解碼的目標是近似求解 argmax_X P(X),其迭代過程如下:

輸入: prompt_ids=[s], max_len, eos_token_id
輸出: output_ids

t = len(s)
while t < max_len:
    logits = model.forward(context)   # shape: [1, |V|]
    next_id = argmax(logits)          # 僅取最高值
    if next_id == eos_token_id: break
    output_ids.append(next_id)
    context = concat(context, next_id)
    t += 1

每一步 argmax(logits) 相當於以 Diract delta 分佈作為下一步的輸入分佈,它完全不向後繼步傳遞任何機率質量,資訊坍縮為單一確定性值。

為什麼重複迴圈會發生

在數值上,語言模型對於已經生成的片語會給出極高的延續機率。假設某步 top‑1 對映到 token “that”,且條件機率 P("that"|... that) ≈ 0.95,貪心解碼將永遠選擇 “that” → “that” → “that”…,直到達最大長度或人工截斷。這是“確定性導致退化”的典型案例。波束搜尋通過保留寬度 k,能部分繞過這種區域性峰值,而取樣則通過注入隨機性直接跳出。

數學上的形式化對比

  • 貪心解碼:x_t = argmax_{x_t} P(x_t|x_{<t})
  • 波束搜尋:維護 k 個部分序列,在每個時間步擴充套件 k×|V| 個候選,取 beam‑score 最高 k 個繼續。beam‑score 通常為 Σ log P(x_t)/len 或加長度懲罰。
  • Top‑k 取樣:從機率最高的 k 個 token 中歸一化後取樣。
  • Top‑p (nucleus) 取樣:累積機率質量達到閾值 p 的最小集合中取樣。

貪心可以看作是 temperature→0 的 softmax 極限 argmax,但實踐中直接 argmax 更快避免數值問題。

示例(ASCII 示意圖)

程式碼塊中展示兩個時間步的機率與選擇:

Time step 1: model(logits) → softmax → probs
   "the":     0.45  ← argmax
   "a":       0.30
   "an":      0.12
   ...
Chosen token: "the"
Input for step 2: [..., "the"]
Time step 2: model(logits) → softmax → probs
   "the":     0.61  ← argmax (重複退化)
   "same":    0.18
   ...
Chosen token: "the" → 進入迴圈

技術演進史

  • 統計語言模型時代(2000–2013):N‑gram 模型結合貪心解碼作為最基礎的解碼方式,沒有有效前瞻手段。同時期,機器翻譯已經引入基於動態規劃的棧搜尋解碼,但純語言生成(如拼寫糾錯)多用貪心。
  • RNN/LSTM 序列到序列(2014–2017):Sutskever et al. (2014) 的 Seq2Seq 模型中採用了波束搜尋作為翻譯任務的標準解碼,但貪心解碼因其簡單仍被用作訓練時的快速評估基線。此時期開始注意到貪心解碼在開放生成中的重複問題,但缺乏系統性解決方案。
  • Transformer 及自迴歸大規模預訓練(2017–2019):GPT (Radford et al. 2018) 原始論文中使用的是貪心解碼作為生成示例;後續 GPT‑2 展示了使用溫度+top‑k 取樣能極大改善文本質量,讓社群意識到純粹最大化機率策略與人類文本統計特性(分佈不均勻但存在長尾)之間的錯配。
  • 2020 至今:OpenAI、Google 等巨頭在對話產品中全面轉向取樣(結合 RLHF 模型改寫了獎勵模型,但解碼端幾乎全部使用取樣),貪心解碼退居至需要絕對確定性、可審計的工業應用(如法律文本格式化、結構化資料轉文字)以及程式碼生成的部分場景。學術上,針對貪心解碼的改進研究集中於“截斷式貪心+重排”或“最小波束擴充套件”(僅當分佈平坦時鬆弛)。當前,貪心解碼更多被視為教學工具和極端低延遲推論的代表。

技術路線對比(量化表)

策略搜尋寬度每一步決策準則輸出確定性計算複雜度(每 token)典型輸出長度控制代表應用
貪心解碼1argmax 機率完全確定O(V)
波束搜尋k (通常 4~10)保留 beam‑score 前 k 個部分序列確定(相同超參下可復現)O(k·V)
Top‑k 取樣截斷至 k從 k 個最高機率中取樣隨機(受溫度影響更大)O(Vlog k) 或近似
Top‑p (nucleus)動態,累積機率>p從動態截斷集中取樣隨機O(V) 排序
溫度取樣全詞表溫度調節後全詞表取樣隨機O(V)

說明:Beam search 仍為確定性計算,但在實際工具中常與長度懲罰、早停等組合,不同硬體/實現可能導致微小差異;取樣類策略在不設定隨機種子時每次生成不同。貪心解碼是以上所有策略的極端特例(溫度→0,k=1,p=1且取樣時間步僅取argmax)。

上下游

上游:語言模型與分詞器

  • 模型:任何自迴歸 decoder‑only(GPT 系列,LLaMA,PaLM)或 encoder‑decoder 的 decoder 部分(T5, BART)都內建輸出投影層給出 logits 或 probs,貪心解碼直接在其上應用 argmax。模型訓練質量(損失、校準)決定了貪心解碼輸出的上限。模型校準不佳時,高置信度 token 很可能並非真正正確 token。
  • 分詞器:token 粒度(BPE vs. WordPiece vs. SentencePiece unigram)影響 argmax 的空間。例如,在 BPE 中,“amazing” 可能是一個 token,而另一模型可能拆成 “amaz”+“ing”。貪心解碼對 token 選擇敏感:一個錯誤的 token 選擇會級聯影響整個後續序列,尤其在多義詞匹配上出錯機率高。

下游:生成任務與使用者體驗

  • 嵌入式即時系統:汽車語音指令、智慧家居控制——使用者期望毫秒級響應,容錯率相對高,貪心解碼幾乎是唯一可行的方案(常聯合小模型<100M 引數)。
  • 開發者工具:GitHub Copilot 等程式碼補全系統,在特定場景(如只剩一個合法續寫)下啟用貪心解碼以避擴音示變化導致的不確定性,提升開發者信任感。
  • 聊天機器人代理:一般不直接面向終端使用者,但在內部測試模型是否收斂、驗證提示詞穩定性時,貪心解碼是最基礎的“確定性錨點”。
  • 審計與監管:銀行對賬單生成、醫療報告模板填充等場景,要求輸出嚴格可復現,貪心解碼提供該屬性。

關鍵指標

  • 生成速度 (tokens/s):貪心解碼在同等硬體上通常比 top‑p 取樣快 1.5–2 倍(因省去取樣累積分佈計算和隨機數生成),比同波束寬度 beam search 快約 k 倍。具體數字因 engine 實現而異,[未充分揭露標準化基準]。
  • 重複率 (distinct‑n / repetition rate):貪心解碼的 2‑gram/3‑gram 重複率顯著高於取樣策略,在開放式文本生成任務中常 > 30%,表現為“多義退化”。
  • 困惑度 (PPL):在某些條件下貪心解碼輸出序列的 PPL 並非最低,因為 PPL 度量的是整句機率乘積,區域性最大化未必使 PPL 最小化。波束搜尋通常能給出更低的 PPL。
  • 輸出確定性方差:貪心解碼方差恆為 0(同輸入→同輸出),而取樣方差(用多個 seed 測)反映模型機率分佈的不確定性,有益於探測模型幻覺現象。

供需與市場資料

由於貪心解碼是一種演算法策略而非獨立產品,市場無直接統計。間接來看,驅動貪心解碼需求的因子有:

  • 邊緣 AI 晶片與 NPU 滲透率:到 2025 年,配備專用 NPU 的手機、PC 數量預估超 10 億臺(參照 Counterpoint Research 報告;但未針對此概念給出精確數字)。這些裝置執行小語言模型時,極可能預設使用貪心或溫度極低的近似貪心策略,以在 <10ms 延遲內完成 next‑token 預測。
  • 即時語音與翻譯市場:據估算,即時翻譯應用終端推論延遲要求常 ≤100ms,波束搜尋很難達標,因此多數輕量級翻譯引擎內部利用貪心或受限波束(k=2)。但具體份額無公開拆解。

供給端主要為推論架構(ONNX Runtime,TensorRT,llama.cpp)和雲端服務推論 API(如 OpenAI API 提供 temperature=0 的確定性輸出)。在 API 市場中,temperature=0 呼叫量與取樣呼叫量之比約 1:9(基於部分非正式社群統計,[無官方揭露]),貪心解碼在需要確定性輸出、單元測試或結構化 JSON 生成時用量穩定。

代表公司與資本對映

  • NVIDIA:TensorRT‑LLM 中提供高效 greedy_search 實現,大幅減少 beam search 的計算量。其資料中心 GPU 與 Drive 平台都在利用確定性解碼最佳化自動駕駛等業務的即時性。
  • Apple:Core ML 與 Apple Neural Engine 內建對 Transformer 自迴歸貪心解碼的支援,用於 Siri 語音識別、鍵盤自動更正等本地處理,保障隱私與延遲。資本對映:Apple自研晶片的 AI 專用算力擴張直接受益於確定性解碼的大量本地需求。
  • Meta:LLaMA 模型開源帶動社群在 llama.cpp 等工具中廣泛部署貪心與取樣策略。Meta 本身無直接資本對映,但開源模型生態推動高通、聯發科等移動晶片廠商加速適配。
  • Google:Tensor Processing Unit (TPU v5) 支援各類解碼策略硬體融合。Google Cloud Vertex AI 提供溫度=0 的確定性推論,用於企業級審計場景。其翻譯服務依然大量使用 beam search,但輕量級模型嘗試貪心 + 重排。

資本對映方向:關注推論晶片(尤其是邊緣 NPU)和推論最佳化軟體棧,貪心解碼作為最小計算預算策略,是這些硬體必須吃透的核心基本操作,單位算力內生成吞吐量越高,其硬體方案越有競爭力。

投資邏輯

  1. 確定性生成是剛性需求:在金融報告、醫療文書、法律檔案等不可變形的場景,監管方要求演算法輸出可復現、可解釋,貪心解碼 (temperature=0) 是技術合規性的基礎配置。提供此類 API 的 MaaS(Model as a Service)廠商會鎖定價格不敏感的 B 端客戶。
  2. 邊緣推論晶片的核心負載:與追求多樣性的雲端端大型模型不同,邊緣裝置(手錶、耳機、IoT 感測器)絕大多數生成任務為資訊提取和簡單指令控制,貪心解碼是主要執行模式。因此,能極低功耗執行 greedy_search 的 NPU IP 提供商(如 ARM Ethos‑U、SiFive Intelligence)以及整合上述 IP 的終端 SoC 原廠(高通、聯發科、瑞芯微等)有望持續獲益。
  3. 低延遲推論基礎設施:在有即時性的線上服務中,若能將部分請求用貪心解碼替代波束搜尋,可成倍降低服務延遲與 GPU 佔用,釋放更多算力用於更復雜的任務。因此,能基於請求動態選取解碼策略(依據 prompt 型別、長度限制等)的推論排程系統,是評估推論基礎設施產品成熟度的重要維度;相關創業公司與大雲端廠商的內建功能均在此方向上版面配置。
  4. 風險:生成式 AI 主流敘事聚焦開放文本的多樣性和創新性,貪心解碼在消費者市場的曝光度低,純依賴它的初創可能缺乏想像力估值;此外,如果模型能力足夠強,波束與貪心輸出差距極小,會導致貪心解碼的技術護城河狹窄。

常見誤讀糾偏(≥2)

誤讀 1:“貪心解碼生成質量總是最差,所有任務都該用取樣”

正解:在高度結構化的任務中(例如程式碼補全,如果高置信度 token 確實正確,貪心解碼準確率與波束搜尋持平,且不會引入隨機取樣導致的語法錯誤)。同樣,在許多分類式生成任務(輸入提示 → 固定類別標籤)中,模型輸出分佈極其尖銳,argmax 即可保證質量,取樣反而會產生噪聲。因此,不能一概而論,應根據任務分佈熵和下游需求選定。

誤讀 2:“貪心解碼就是始終輸出機率最高的句子”

正解:貪心解碼輸出的是 近似 機率最高的序列,但由於其每一步都區域性決策,最終生成的完整句子機率很可能遠低於某個平均機率較低但因後續強依賴而整體更優的路徑。這類似於爬山演算法與動態規劃求解最優路徑的區別。貪心解碼找到的是區域性峰值序列,並不保證全域性機率最大。若需要全域性最優解,理論上必須用波束搜尋或窮舉,但計算不可行。

誤讀 3(額外):“設定 temperature=0 就是貪心解碼”

正解:在多數推論 API 實現中,temperature=0 會在 softmax 前除以一個極小的溫度,導致分佈中最大值趨向 1,其餘趨向 0,然後取 argmax,效果與直接 argmax 等價。但極少數實現會加 epsilon 平滑避免數值下溢,嚴格說略有差異。即便如此,行為上等同於貪心。但要注意,如果同時設定了 top‑k 和 temperature=0,行為由庫的規則決定:通常是先溫度縮放再 argmax,top‑k 可能被忽略。程式設計時應查閱文件。

學習路徑

  1. 基礎必讀
    • 《Speech and Language Processing》Dan Jurafsky & James H. Martin (第三版 draft),第 10 章與第 12 章,介紹 N‑gram 與神經語言模型解碼。
    • 《Deep Learning》Ian Goodfellow, Yoshua Bengio, Aaron Courville,第 12.4.3 節 (Beam Search),以對比方式理解貪心。
  2. 經典論文
    • “Attention Is All You Need” (Vaswani et al., 2017):Transformer 架構原始論文,其中推斷部分預設使用波束搜尋,但也提到貪心作為基線。
    • “The Curious Case of Neural Text Degeneration” (Holtzman et al., 2020):深刻分析了最大化機率解碼(貪心/波束)如何導致文本退化,引入 nucleus 取樣,是理解為什麼要超越貪心的必讀文獻。
    • “Language Models are Unsupervised Multitask Learners” (Radford et al., 2019) GPT‑2 論文中體驗使用 top‑k 取樣的生成效果。
  3. 動手實踐
    • Hugging Face Transformers 庫中,model.generate(do_sample=False, num_beams=1) 即為貪心解碼。可在 Colab 上載入 GPT‑2 比較貪心與 do_sample=True, top_p=0.9 的輸出差異。
    • 使用 transformers.GenerationConfig 調整引數,觀察 temperature 設為 0.01 時與貪心輸出的細微區別。
  4. 進階
    • 閱讀 inferent 和 vLLM 的貪心解碼核心實現,理解 KV 快取與記憶體管理。
    • 研究對比損失與解碼策略的耦合:有些研究建議在訓練時就用與推論時一致的解碼策略進行微調,以緩解貪心退化。

一句話總結

貪心解碼是生成式 AI 的“經濟檔”:計算開銷最低、確定性最強,但犧牲了文本多樣性和全域性最優性,在即時、結構化、可審計場景中不可替代。

延伸閱讀與來源

(因檢索條件有限,以下為公認高質量知識源,建議讀者直接查詢驗證)

  • Transformer 原文:Vaswani A. et al., “Attention is all you need”, NeurIPS 2017.
  • 文本退化分析:Holtzman A. et al., “The Curious Case of Neural Text Degeneration”, ICLR 2020.
  • Hugging Face 課程:Hugging Face NLP Course, Chapter 5: “How to generate text” — 包括貪心、波束、取樣的視覺化與程式碼。
  • 線上演示:使用 huggingface.co/spaces 上的文本生成 demo,切換解碼策略觀察效果,如 gpt2-large 空間。
  • Stanford CS224N 自然語言處理課程:2019–2021 期關於生成解碼的課件,提供原理概述和實驗比較。
source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型