🍸 Lecture 03.2: LLM 採樣溫度與靈感調酒師:Temperature、Top-P/Top-K 如何控制 AI 的創造力與精確度
NOTE
作者資訊 (Author Info)
- 姓名 (Name): mingo 謝明翰
- 電子信箱 (Email): mhhsei@mail.batol.net
在前面的章節中,我們了解了大型語言模型(LLM)本質上是一個「預測下一個字」的超強機率引擎。然而,你是否有過這樣的疑問:
- 為什麼有時候請 AI 寫程式碼,它給出的答案高度精確、一字不差?
- 為什麼有時候請 AI 寫詩或腦力激盪,它又能給出文采飛揚、意想不到的創意句型?
- 為什麼同一句 Prompt,每次發送時 AI 給出的回答有時會微微不同?
答案,就藏在 LLM 的採樣控制參數(Sampling Parameters) 之中!這堂課,我們將用最生動的「靈感調酒師」比喻,拆解 Temperature(溫度)、Top-P 與 Top-K 如何掌控 AI 的發散度與創造力!
🍹 第一幕:靈感調酒師與機率骰子
當 LLM 根據上下文計算出下一個候選字的機率時,它會得到一份「候選字詞機率排行榜」。例如:
- 「機率第 1 名」:
蘋果 (機率 65%)
- 「機率第 2 名」:
香蕉 (機率 20%)
- 「機率第 3 名」:
水蜜桃 (機率 10%)
- 「機率第 4 名」:
飛彈 (機率 0.1%)
如果 AI 每次都嚴格挑選第 1 名,那它的回答就會變成死板的機械式重複。為了讓 AI 具備靈活性與創造力,工程師設計了「Temperature(溫度參數)」這個調酒旋鈕!
🌡️ 第二幕:Temperature (溫度) 的三種白話境界
Temperature 是一個從 0.0 到 1.0(甚至 2.0)的數值。它決定了 AI 在擲機率骰子時,要有多「大膽」或有多「保守」:
1. 🧊 冰鎮模式 (Temperature = 0.0) —— 絕對嚴肅的法官
- 運作機制:將所有候補字的機率壓平,100% 只選最高機率的第一名(學名為 Greedy Decoding / 貪婪解碼)。
- 行為表現:完全沒有隨機性,每次輸入相同的提示詞,產出的回答毫無差別。
- 最佳應用場景:
- 寫 Python / C++ 程式碼或 NVDA 外掛語法。
- 數學計算與邏輯推論。
- 抽取文件中的 JSON 格式數據。
🍷 溫和調酒模式 (Temperature = 0.7) —— 穩重的資深作家
- 運作機制:依照機率比例進行採樣,大部分時候選擇前幾名,但偶爾允許挑選機率第 2 或第 3 名的詞彙。
- 行為表現:回答自然流暢、具備適度的人情味與變化,同時保持邏輯嚴謹。
- 最佳應用場景:
- 一般日常對話與問題解答。
- 寫信、撰寫教學講義與文章。
狂熱烈酒模式 (Temperature = 1.2+) —— 微醺的抽象藝術家
- 運作機制:把所有候選字的機率拉近,原本只有 1% 機率的冷門詞彙被大幅拉高被選中的機會。
- 行為表現:思想天馬行空、文采極具衝擊力,但也非常容易引發「胡說八道(幻覺)」或文理不通。
- 最佳應用場景:
- 詩歌創作、科幻小說寫作。
- 品牌命名與創意發想黑客松。
🎯 第三幕:雙重安全保險:Top-P 與 Top-K
除了 Temperature 之外,為了防止 AI 在發揮創意時「選到機率極低的外星詞彙(如上述的『飛彈』)」,工程師還加上了兩道篩選防線:
🔍 1. Top-K (數量篩選)
- 白話解釋:「只保留前 K 個最有可能的候選字,其餘通通扔掉!」
- 範例:若設定
Top-K = 40,AI 擲骰子時只會在機率前 40 名的字詞中隨機挑選,徹底摒除倒數的名詞。
📊 2. Top-P / Nucleus Sampling (累積機率篩選)
- 白話解釋:「從機率最高的字開始累加,直到累積機率達到 P% 為止,只在這群字中挑選!」
- 範例:若設定
Top-P = 0.9,AI 會從第 1 名開始把機率相加(65% + 20% + 10% = 95% 達到 90% 門檻),剩下的第 4 名(0.1%)直接被剔除。
🛠️ 第四幕:大導演實戰指引:如何在 Prompt 與開發中控制溫度
當你扮演 Vibe Coding 大導演指示 AI 幫你寫程式或分析時,請記住這個黃金原則:
IMPORTANT
大導演的溫度控制法則:
- 指示 AI 寫程式碼 / 修復 Bug 時:在心中或 Prompt 提示「請保持嚴謹與確切,不要添加無關的創意」。在 API 開發時將 Temperature 設為
0.0。
- 指示 AI 進行無障礙體驗設計與故事發想時:可以將 Temperature 設為
0.7 ~ 0.8,讓 AI 提出更多意想不到的暖心提案。
掌握了 Temperature、Top-P 與 Top-K,你就握有了掌控 AI 靈魂發散度的調音盤!
👉 下一堂課:Lecture 03.3 文字生成機率與 Token 選字學
👉 回課程大綱:學習地圖
🔥 專家級深度思考與實戰挑戰 (Expert Challenge)
❓ 挑戰 1:Temperature 0.0 在併行 GPU 運算中的「非確定性 (Non-Determinism)」解密
- 【問題】:既然理論上 Temperature = 0.0 是貪婪解碼(Greedy Decoding,100% 挑選機率第一名的字),為什麼在實務調用 API 時,即使 Temperature 設為 0.0,連續發送相同請求 10 次,產出的程式碼依然可能出現微小的字元差異?
- 【鑑別點說明】:測試學員是否明白硬體層面(GPU 浮點數矩陣相加順序)對 AI 輸出的物理影響。
- 【專家級解答與深度剖析】:
在多線程 GPU(如 CUDA 核心)中,為了追求極致的並行計算速度,萬千個核心執行浮點數加法(GEMM 運算)的順序是動態且隨機的。由於電腦浮點數(Floating Point)不滿足結合律(即 $(a+b)+c
eq a+(b+c)$),微小的末位捨入誤差(Round-off Error)會導致 logits 計算結果出現 $10^{-7}$ 級別的微小波動。當前兩名候選字的機率極度接近時,這個微小的浮點數波動就會改變第一名的歸屬,從而引發連鎖反應,導致輸出不一致。
❓ 挑戰 2:Top-P (Nucleus Sampling) 與 Top-K 在寫程式時的組合災難
- 【問題】:如果一位開發者同時將 Temperature 設為 1.5、Top-K 設為 100、Top-P 設為 0.95 來指示 AI 寫 Python NVDA 外掛,會引發什麼致命的語法災難?如何調校這組參數?
- 【鑑別點說明】:考驗學員對採樣參數組合影響(Combined Sampling Dynamics)的實戰調校經驗。
- 【專家級解答與深度剖析】:
高 Temperature (1.5) 將原本低機率的字詞機率大幅拉高,而 Top-P (0.95) 與 Top-K (100) 又放開了極寬的候選字水閘。這種組合會導致模型在寫程式時,選擇不符合 Python 語法的括號、錯置的變數名稱或不存在的 API 函數(如將 wx.CallAfter 寫成 wx.CallMagic)。寫程式的黃金法則:Temperature 應設為 0.0~0.2,Top-P 設為 0.1~0.4,將隨機性降至最低。