Skip to content

不要讓大型語言模型猜數字?AI 沒有隨機性?

最近在 reddit 上看到一個很有趣的現象,當你叫大語言模型 (LLM) 隨機估計一個數字,不論是那個模型,它們總會回某幾個數。

你可以問問 ChatGPT、Claude、Gemini 等不同模型:「在 1 到 50 之間隨機選一個數字。」

如果你多試幾次,你可能會驚訝地發現,某些數字出現的頻率異常地高,特別是「27」、「37」、「42」等,這顯然並非偶然。這個現象揭示了 LLM 的一個弱點:它們是強大的預測引擎,但不能生成隨機數。

為何 LLM 在「猜數字」時會表現出這種偏好?了解這局限,有助我們在實際應中連接 LLM 時避免很多問題。

🤔 實驗:猜一個數字

我詢問不同的 LLM,看看它們能否生成不同數字。同一問題分別詢問三次,每次提問都是個新對話,以消除歷史記錄的影響。看看實驗結果。

問題 1:"在 1 到 50 之間隨機選一個數字"

LLM回應
ChatGPT27, 37, 34
Gemini27, 27, 27
Deepseek42, 42, 27
Qwen27, 27, 27

問題 2:"generate a random number between 0 and 50"

LLM回應
ChatGPT27, 27, 17
Gemini37, 37, 37
Deepseek27, 27, 37
Qwen27, 27, 27

問題 3:"Guess a number between 0 and 50, no explaination."

模型回應
ChatGPT27, 27, 27
Gemini27, 27, 27
Deepseek27, 27, 27
Qwen23, 27, 27

雖然不是每次都會得到完全相同的數字,但明顯某些數字的出現的概率遠高於其他數字。這背後的原因,與 LLM 的運作原理有關。

🧐 為何 LLM 的「隨機」並不隨機?

LLM 總是生成某幾個數,是因為它們學習了人類偏好。LLM 的核心任務並不是「思考」或「創造」,而是「預測」。它根據你輸入的文字,預測下一個最有可能出現的詞元 (token)。 預測過程受其訓練數據和模型架構的影響,從而導致其「隨機」選擇出現偏差。因為有些數字在人類回答中統計上更常見,所以有更大機會選中這些數字。

訓練數據中的統計偏差

LLM 使用大量公開的人類生成文本(互聯網、書籍、學術文章)上進行訓練的。由於優質文本稀缺,不同的 LLM 都會選用相同的公開文本訓練,它們的知識和行為模式都基於這些數據中的統計規律。某些數字可能因各種原因,出現的頻率特別高。訓練後,生成某些數字 (token) 的權重,比其他數字要高,因而總會選擇最有可能的那幾個數。這是一種數據偏見現象。

⚠️ 依賴 LLM 產生隨機數的風險

理解 LLM 的局限性後,我們應當避免在實際應用中,依賴它們來產生出來的隨機數。例如:

  • Cryptography (加密學):生成加密密鑰、初始化向量 (IVs) 或 nonce 時,必須使用不可預測的隨機數。如果攻擊者可以預測你生成的「隨機數」,整個加密系統將形同虛設。
  • 遊戲開發 (Game Development):遊戲中的抽卡等活動,都需要公平的隨機性來保證遊戲體驗。如果出現偏差,很可能會影響遊戲體驗,也可能有法律風險。

✅ 正確的替代方案

當應用需要隨機數時,正確的做法是使用程式語言內置的標準庫。這些專門設計的偽隨機數生成器 (PRNG) 能夠提供統計上更可靠的隨機性,足以滿足絕大多數應用場景的需求。

🎯 總結:為任務選擇合適的工具

大型語言模型並非萬能,猜數字問題展示了 LLM 的局限性。

請記住以下幾點:

  1. LLM 是預測模型:它生成的是統計上最可能的文本,而非數學上公正的隨機數。
  2. 結果受數據偏見影響:某些數字因其文化或統計上的顯著性,而在 LLM 的回應中更為常見。
  3. 切勿用於嚴肅場景:在任何需要真正隨機性的地方(如加密、遊戲、模擬),絕對不要依靠 LLM 的隨機性。

📚 參考資料

KF Software House