---
# System prepended metadata

title: LLM 的推理策略 - Temperature、top-k、top-p
tags: [LLM]

---

## 介紹 Temperature、Top-K 和 Top-P
在自然語言處理（NLP）領域，大型語言模型（LLM, Large Language Models）透過機率計算來選擇下一個最適合的文字，以生成符合語境的輸出，這些模型基於深度學習架構，特別是 Transformer 模型，透過大量文本數據的訓練，學會語言結構與語義關聯。
![image](https://hackmd.io/_uploads/rJGmxjCiJl.png)
然而，為了讓模型的輸出更具變化性和可控性，研究者引入了一些調控機制，例如 Temperature、Top-K 和 Top-P，這些方法影響模型如何從可能的詞彙集合中選擇下一個字詞，使輸出更具靈活性與自然性，而上圖主要展示的是模型直接選擇具有最高機率的字詞，此作法也稱為「Greedy decoding」，但是單純依據最高機率選擇下一個詞彙可能導致生成的文字過於單調或缺乏創意。

## Temperature
Temperature 是一種直接影響語言模型隨機性的參數。當模型計算每個可能的下一個字的機率時，這些機率可以透過 Temperature 參數進行調整，可以從下圖看出在做 Softmax 時，會將 Temperature 參數作為預測值 $y_i$ 的分母項，進而影響機率分布的平滑度。

![image](https://hackmd.io/_uploads/rk6mEhRsyx.png =100%x)

### Temperature 數值大小
當 Temperature 值較高（大於 1 或更大）時，機率分佈會變得更加平坦，意味著較低機率的單字也有較高的機會被選中，這使得生成的文本更加多樣，但同時也可能導致較多無關或不合理的詞語出現。相反地，當 Temperature 值較低（小於 1 或更小）時，機率較高的單字會更加突出，導致模型更傾向於選擇那些機率最高的詞，輸出的結果會更加可預測，但可能顯得死板或缺乏創意。當 Temperature 設為 1.0 時，則表示模型維持原始的機率分佈，不對其進行額外調整。

![image](https://hackmd.io/_uploads/ryYVSn0oJl.png)


## Top-K
Top-K 取樣（Top-K Sampling）是一種限制語言模型選擇範圍的方法，透過只考慮機率最高的 K 個單字，確保生成結果不會過於隨機，當模型計算出所有可能的單字及其對應機率後，它會將機率由高到低排序，並僅保留前 K 個單字，然後從這個限制範圍內進行隨機抽取。

例如，假設語言模型在某個步驟中預測下一個字時，有 50,000 個可能的選項，而其中 K 設為 10，那麼模型只會從機率最高的前 10 個字當中選擇，而忽略其餘的 49,990 個選項，這樣可以防止模型選擇過於罕見或不符合語境的字詞，從而提升文本的流暢性和可讀性。然而，K 值的選擇至關重要，如果 K 太小（如 3），可能會讓模型的輸出過於保守，缺乏變化；如果 K 太大（如 100），則可能會讓模型輸出較不連貫或不合語境的內容。

## Top-P
與 Top-K 不同，Top-P 取樣（Top-P Sampling），也稱為「核取樣」（Nucleus Sampling），採用累積機率的方法來決定候選字詞的範圍，而非僅根據固定數量的 K 個單字來限制選擇範圍。這種方法會根據所有可能的字詞的機率分布，累積最前面的一部分機率總和，直到達到 P（又稱 nucleus probability）的閾值，然後從這些字詞中進行隨機選擇。

舉例來說，假設 P 設為 0.9，模型會從機率由高到低排序的單字中，累積機率值，直到總和達到 90%。在這個範圍內的單字將成為最終的候選單字，而機率最低的部分則會被忽略。這種方式能夠根據當下語境的機率分布自適應地決定選擇範圍，使得模型在不同情境下能夠展現不同程度的創造性與保守性。例如，在某些語境中，較少數的單字可能就能涵蓋 90% 的機率，這時候模型的選擇範圍較小，使輸出更具確定性；但在其他語境中，可能需要較多單字才能達到 90% 的機率總和，使輸出更具多樣性。

![image](https://hackmd.io/_uploads/SykyJoRoJe.png)

## Temperature、Top-K 和 Top-P 的比較與應用
Temperature、Top-K 和 Top-P 這三種機制都可以控制語言模型的生成方式，但它們的作用方式有所不同。
1. Temperature：
直接影響機率分布的平滑度，適合用來調節輸出的隨機性與創意性。
2. Top-K：
限制了可能選擇的單字數量，使得輸出更加受控，但可能會忽略某些重要但機率較低的單字。
3. Top-P：
根據機率總和來確定選擇範圍，使得模型能夠動態適應不同的語境需求，提供更加靈活的選擇方式。

在應用上，不同的場景可能需要不同的參數設定。例如，在技術文件或數據生成時，通常會選擇較低的 Temperature（如 0.2 到 0.5）並結合較小的 Top-K（如 10），確保輸出的內容精確且符合邏輯。而在創意寫作或詩歌生成時，則可能會提高 Temperature（如 1.0 到 1.5），並結合較高的 Top-P（如 0.9），讓文本更具變化性與創意。此外，某些應用甚至會混合使用 Top-K 和 Top-P，透過設定一個較大的 K 值（如 50），再透過 Top-P 來進一步篩選，使模型的選擇範圍更加靈活。
