Menu

Temperature ב-LLM: מה היא עושה ואיך לכוון אותה

הטמפרטורה קובעת כמה אקראיות מודל שפה משתמש בה כשהוא בוחר כל מילה הבאה. ראו איך היא משנה את הסיכויים של כל מילה, מתי לקבוע אותה נמוכה או גבוהה, ובמה היא שונה מ-top_p.

כל פרומפט למטה ניתן לעריכה: שנו אותו, ואז פתחו אותו ב-ChatGPT, ב-Claude או באפליקציית AI אחרת.

טמפרטורה היא מספר שקובע כמה אקראיות מודל שפה משתמש בה כשהוא בוחר את המילה הבאה שלו. בטמפרטורה נמוכה המודל לוקח את המילה הסבירה ביותר כמעט בכל פעם, כך שהתשובות ממוקדות וחוזרות על עצמן. בטמפרטורה גבוהה הסיכויים מתפזרים, כך שהתשובות משתנות יותר ולפעמים סוטות מהנושא. הטמפרטורה משנה את האופן שבו המודל בוחר בין מילים שהוא כבר שוקל; היא לא משנה את מה שהמודל יודע.

איך מודל בוחר את המילה הבאה

מודל כותב טוקן אחד בכל פעם, כשטוקן הוא מילה או חלק ממילה (ראו טוקנים וחלון ההקשר). בכל שלב הוא נותן לכל טוקן באוצר המילים שלו ציון, שנקרא logit. פונקציה שנקראת softmax הופכת את הציונים האלה להסתברויות: כל ציון מועלה בחזקה אקספוננציאלית ואז מחולק בסכום של כולם, כך שציונים גבוהים יותר מקבלים חלק גדול יותר וכל החלקים מסתכמים ב-1. אחר כך המודל מגריל טוקן אחד לפי החלקים האלה.

הטמפרטורה נכנסת ממש לפני ה-softmax. כל ציון מחולק בטמפרטורה T:

probability(word) = exp(score / T) / sum of exp(score / T) over all candidates

כש-T קטן מ-1, הפערים בין הציונים גדלים, כך שהמוביל מתרחק עוד יותר. כש-T גדול מ-1, הפערים מצטמצמים, כך שהאפשרויות שמאחור מדביקות את הפער. ב-T = 1 מקבלים את ההסתברויות של המודל עצמו. ב-T = 0 החלוקה לא מוגדרת, ולכן ה-API מתייחסים לזה כ"תמיד לקחת את הטוקן המוביל", מה שנקרא greedy decoding (פענוח חמדני).

נסו בעצמכם: מחוון הטמפרטורה

ההדגמה למטה ממשיכה את המשפט "שפת התכנות האהובה עליי היא" עם שש מילים מועמדות. הציונים להמחשה בלבד, ונבחרו להדגמה הזו; מודל אמיתי נותן ציונים לאוצר מילים של עשרות אלפי טוקנים או יותר, ושם של שפה עשוי להתפצל לכמה טוקנים. המתמטיקה היא האמיתית: העמודות הן ה-softmax של הציונים האלה בטמפרטורה שתבחרו, וכפתור הדגימה מגריל מהן עשר מילים.

שפת התכנות האהובה עליי היא …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

ב-1.0, Python מקבלת בערך 46% ו-COBOL פחות מ-1%. גררו למטה ל-0.5 ו-Python עולה לבערך 67% בזמן ש-COBOL כמעט נעלמת. גררו למעלה ל-2.0 ו-Python יורדת לבערך 32% בזמן ש-COBOL מטפסת לבערך 4%, כך שבערך סבב אחד מכל שלושה של עשר דגימות יכלול אותה לפחות פעם אחת. שימו לב למה שלעולם לא קורה: סדר המילים נשאר זהה בכל הגדרה. הטמפרטורה לא יכולה להפוך את COBOL לסבירה יותר מ-Python; היא רק מרחיבה או מצמצמת את הפערים.

תשובה אמיתית היא מאות בחירות כאלה ברצף, וכל בחירה הופכת לחלק מההקשר של הבאה. מילה חריגה אחת בהתחלה משנה את כל מה שבא אחריה, ובגלל זה תשובה בטמפרטורה גבוהה נסחפת הרבה יותר רחוק ממה שמילה בודדת בהדגמה הזו מרמזת.

מתי להשתמש בטמפרטורה נמוכה או גבוהה

משימהנקודת התחלהלמה
קוד, תיקוני באגים, SQLנמוכה, 0 עד 0.3בדרך כלל יש המשך אחד הכי טוב, ואתם רוצים את אותה תוצאה בכל הרצה
חילוץ, סיווג, JSON0כל שונות היא רעש, ותוכנה צריכה לקרוא את הפלט
הסברים, שאלות יומיומיותברירת המחדל של הספקברירות המחדל נבחרו לשימוש כללי
סיעור מוחות, שמות, רעיונות לסיפוריםברירת מחדל או מעט גבוהה יותראתם רוצים אפשרויות ששונות זו מזו

שתי אזהרות. ראשית, טמפרטורה נמוכה לא הופכת תשובה לנכונה. אם התשובה הסבירה ביותר של המודל שגויה, טמפרטורה 0 תיתן לכם את התשובה השגויה הזו בכל פעם, פשוט באופן עקבי; ראו הזיות של AI. שנית, ערכים גבוהים מאוד (הרבה מעל 1, ב-API שהסקאלה שלהם מגיעה ל-2) מפיקים לעיתים קרובות טקסט שמאבד את החוט או מפסיק להיות הגיוני, כי טוקנים לא סבירים נבחרים יותר ויותר.

לפעמים האקראיות היא העיקר. Self-consistency prompting מריץ בכוונה את אותה שאלת נימוק כמה פעמים בטמפרטורה שאינה אפס, ואז לוקח את התשובה שרוב ההרצות מסכימות עליה.

Temperature, top_p ו-top_k

עוד שתי הגדרות שולטות בדגימה, וה-API מציגים אותן לעיתים קרובות ליד הטמפרטורה.

top_p (nucleus sampling) משאיר רק את הטוקנים הסבירים ביותר שההסתברויות שלהם מסתכמות ב-p, ואז דוגם מביניהם. עם המספרים של ההדגמה בטמפרטורה 1: Python, JavaScript ו-Rust מסתכמות בערך ב-88%, והוספת C עוברת את ה-90%. אז עם top_p = 0.9 המודל דוגם רק מבין ארבע אלה; Haskell ו-COBOL לא יכולות להופיע לעולם. בניגוד לטמפרטורה, top_p מסתגל: כשהמודל בטוח, מעט טוקנים עוברים את הסף, וכשהוא לא בטוח, הרבה עוברים.

top_k משאיר מספר קבוע של הטוקנים הסבירים ביותר, למשל 40 המובילים. חלק מה-API מציעים אותו ואחרים לא.

ספקים ממליצים בדרך כלל לשנות את הטמפרטורה או את top_p, לא את שניהם, כי ההשפעות מצטברות בדרכים שקשה לחזות.

הגדרת הטמפרטורה ב-API

אפליקציות הצ'אט מסתירות את ההגדרה, אבל ה-API מקבלים אותה כפרמטר. הטווח תלוי בספק: ה-Chat Completions API של OpenAI מקבל 0 עד 2, וה-Messages API של Anthropic מקבל 0 עד 1. חלק ממודלי החשיבה מקבלים רק את ערך ברירת המחדל שלהם.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

למה אפליקציות צ'אט מסתירות אותה, ומה לעשות במקום

האפליקציות של ChatGPT, Claude ו-Gemini בוחרות בשבילכם את הגדרות הדגימה ולא מציגות מחוון. זה שומר על האפליקציות פשוטות, וברוב הבקשות, ניסוח מחדש של הפרומפט משנה את התשובה הרבה יותר מכל הגדרת דגימה.

אז באפליקציית צ'אט, הפרומפט הוא הבקרה שלכם. בקשה לתשובה אחת תיתן משהו קרוב לבחירה הראשונה של המודל. בקשה להרבה תשובות ששונות זו מזו תיתן גיוון בכל טמפרטורה, כי עכשיו יש למודל סיבה להימנע מהבחירה הראשונה שלו. עברו בין הלשוניות ושנו את המוצר כדי לראות את ההבדל.

Fill in
הצע שם לאפליקציה למעקב אחרי הרגלים.
Try it
Example replyReplies vary between models and runs.

Streakly. הוא קצר, קל לזכור ומרמז על הרצפים היומיים שגורמים לאנשים לחזור.

כפתור היצירה מחדש באפליקציית צ'אט דוגם תשובה חדשה מאותו פרומפט, וזו דרך מהירה לראות כמה התשובות משתנות. אם הן משתנות יותר ממה שאתם רוצים, הפתרון הוא בדרך כלל פרומפט ספציפי יותר: משימה מדויקת מצמצמת את טווח התשובות הטובות, וזה הופך את ההרצות לדומות יותר. המדריך לכתיבת פרומפטים מסביר מה להוסיף.

שאלות נפוצות

מה זו טמפרטורה ב-LLM?

טמפרטורה היא הגדרת דגימה שקובעת כמה אקראית הבחירה של כל טוקן הבא. המודל נותן ציון לכל טוקן אפשרי, והציונים מחולקים בטמפרטורה לפני שהם הופכים להסתברויות. ערכים נמוכים נותנים לבחירה המובילה לשלוט; ערכים גבוהים משטחים את הסיכויים, כך שטוקנים פחות סבירים נבחרים לעיתים קרובות יותר.

באיזו טמפרטורה להשתמש לכתיבת קוד?

ערך נמוך, איפשהו בין 0 ל-0.3, הוא נקודת התחלה נפוצה לקוד, לחילוץ נתונים ולכל משימה עם תשובה נכונה אחת, כי אתם רוצים את ההמשך הסביר ביותר ותוצאות שחוזרות על עצמן. העלו אותה כשאתם רוצים גיוון, למשל סיעור מוחות על שמות או עיצובים חלופיים. חלק ממודלי החשיבה מקבלים רק את ערך ברירת המחדל שלהם, אז בדקו את התיעוד של הספק שלכם.

מה ההבדל בין temperature ל-top_p?

הטמפרטורה משנה את הצורה של כל התפלגות ההסתברויות. top_p, שנקרא גם nucleus sampling, חותך אותה: המודל דוגם רק מתוך הקבוצה הקטנה ביותר של טוקנים שההסתברויות שלהם מסתכמות ב-p, כך ש-top_p = 0.9 מוריד את הזנב הארוך של טוקנים לא סבירים. ספקים ממליצים בדרך כלל לכוון אחד מהשניים ולהשאיר את השני בברירת המחדל.

האם טמפרטורה 0 הופכת את הפלט לדטרמיניסטי?

כמעט, אבל לא לגמרי. ב-0 המודל לוקח את הטוקן הסביר ביותר בכל שלב, כך שהרצות חוזרות בדרך כלל זהות או קרובות מאוד. הבדלים מספריים קטנים בשרתים של הספק עדיין יכולים לשנות טוקן מדי פעם, וברגע שטוקן אחד שונה, שאר התשובה יכולה ללכת בדרך אחרת.

אפשר לשנות את הטמפרטורה ב-ChatGPT או ב-Claude?

לא באפליקציות הצ'אט: הן בוחרות בשבילכם את הגדרות הדגימה ולא מציגות שום בקרה של טמפרטורה. אפשר לקבוע אותה דרך ה-API ובכלים למפתחים כמו ה-Playground של OpenAI, ה-Anthropic Console ו-Google AI Studio. באפליקציית צ'אט, בקשו גיוון או עקביות בתוך הפרומפט עצמו.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל