دمای مدل (Temperature)، Top-P و Top-K: چطور خلاقیت و دقت خروجی LLM را کنترل کنیم؟

منتشر شده در 1405/05/24 | بازدید : 5 بار | زمان مطالعه : 15 دقیقه

دنیای مدل‌های زبانی بزرگ (LLM) پر از اصطلاحات فنی، علمی و پیچیده‌ای است که در نگاه اول ممکن است برای توسعه‌دهندگان و علاقه‌مندان تازه‌کار سنگین و مبهم به نظر برسد. اما اگر بخواهیم سیستم‌های مبتنی بر هوش مصنوعی را به شکلی کارآمد طراحی، بهینه‌سازی و راه‌اندازی کنیم، ناگزیر هستیم مفاهیم عمیق و پایه‌ای ساختار داخلی آن‌ها را به درستی بشناسیم. در این میان، پس از درک نحوه پردازش توکن‌ها و نحوه تخصیص وزن‌ها توسط پارامترها، نوبت به فرآیند رمزگشایی یا دکودینگ (Decoding) می‌رسد. در واقع، مدل‌های زبانی متون را از جایی کپی نمی‌کنند، بلکه بر اساس توزیع احتمالات، کلمه بعدی را حدس می‌زنند. در گذشته، استراتژی‌های ساده‌ای برای دکودینگ استفاده می‌شد، اما امروز در سال ۲۰۲۶، توسعه‌دهندگان و مهندسان هوش مصنوعی با استفاده از پارامترهای پیشرفته تلاش می‌کنند تا تعادلی دقیق بین نوآوری متنی و حقیقت علمی برقرار سازند. برای تنظیم و هدایت این فرآیند پیش‌بینی، سه پارامتر بسیار کلیدی وجود دارند: دمای مدل (Temperature)، Top-P (Nucleus Sampling) و Top-K.

این سه مفهوم در کنار هم، پیچ‌های تنظیم خلاقیت و دقت مدل زبانی را تشکیل می‌دهند. اگر بخواهیم یک تشبیه برای درک بهتر به کار ببریم، این پارامترها مانند فیلترها و دماسنج‌هایی هستند که اجازه می‌دهند خروجی هوش مصنوعی را در طیفی بین «دقت محض و قطعیت کامل» تا «خلاقیت نامحدود و تنوع بالا» تنظیم کنیم. در این مقاله تخصصی، عمیق و تحلیلی، قصد داریم این سه پایه اساسی کنترل تولید متن در هوش مصنوعی را با زبانی ساده، ریاضیاتی و کاربردی بررسی کنیم تا بتوانید قبل از کار با هر مدل زبانی، چیدمان بهتری برای معماری سیستم خود داشته باشید. همچنین اگر می‌خواهید با مفاهیم ساختاری دیگر هوش مصنوعی آشنا شوید، پیشنهاد می‌کنیم مقالات قبلی ما یعنی LLM چیست و چطور کار می‌کند؟ و پارامتر، توکن و پنجره‌ی زمینه (Context Window) را مطالعه فرمایید. تسلط بر این ابزارها به شما کمک می‌کند تا از رفتارهای تصادفی مدل جلوگیری کرده و برنامه‌هایی با خروجی پایدارتر توسعه دهید.

زیر هود ترنسفورمر: لوجیت‌ها و توزیع احتمال توکن‌ها بر روی دایره واژگان

پیش از آنکه به سراغ سه متغیر اصلی برویم، باید بدانیم در لحظه تولید متن چه اتفاقی در شبکه‌های عصبی می‌افتد. وقتی متنی را به عنوان پرامپت به مدل ارسال می‌کنید، مدل پس از پردازش ریاضی، یک امتیاز خام به نام لوجیت (Logit) به تمام واژه‌ها یا توکن‌های موجود در دایره واژگان خود اختصاص می‌دهد. دایره واژگان یا Vocabulary مدل‌های بزرگ امروزی معمولاً شامل ۱۰۰,۰۰۰ تا بیش از ۲۵۶,۰۰۰ توکن مختلف است. لوجیت‌ها در واقع خروجی‌های خطی لایه نهایی شبکه عصبی هستند و مقادیری نامحدود (مثبت یا منفی) دارند. هرچه امتیاز خام یک توکن بیشتر باشد، نشان‌دهنده تمایل بیشتر مدل به انتخاب آن است. سپس تابع ریاضیاتی سافت‌مکس (Softmax) این امتیازات خام را به یک توزیع احتمالاتی بین ۰ تا ۱ تبدیل می‌کند که مجموع کل آن‌ها دقیقاً برابر با ۱.۰ است. از این مرحله به بعد، سه پارامتر کنترل خروجی وارد میدان می‌شوند تا مشخص کنند ما چطور باید از میان این احتمالات، توکن نهایی را انتخاب کنیم. اگر مایل هستید مقایسه‌ای بین توانایی مدل‌های مختلف در پاسخ‌دهی عمیق داشته باشید، حتماً مقاله مقایسه‌ی جامع مدل‌های زبانی بزرگ ۲۰۲۶: Claude، GPT، Gemini و Llama در یک نگاه را در وبلاگ ما مطالعه کنید.

۱. دمای مدل (Temperature): پیچ تنظیم حرارت و خلاقیت هوش مصنوعی

دمای مدل یا Temperature اولین و آشناترین ابزار برای تنظیم خروجی مدل‌های زبانی است. از نظر ریاضی، Temperature فرمول محاسبه سافت‌مکس را تغییر می‌دهد. به طوری که لوجیت‌های خام پیش از ورود به سافت‌مکس، بر عدد دما (T) تقسیم می‌شوند. این تقسیم ساده، تاثیر شگرفی روی توزیع احتمالات می‌گذارد. فرمول سافت‌مکس به همراه پارامتر دما به صورت زیر تعریف می‌شود:

q_i = exp(z_i / T) / sum_j(exp(z_j / T))

که در آن z_i لوجیت مربوط به توکن i و T همان پارامتر دما است. با توجه به این فرمول ریاضی، ما می‌توانیم دو حد نهایی را برای این رفتار متصور شویم:

  • وقتی دما به سمت صفر میل می‌کند (T -> 0): تقسیم لوجیت‌ها بر یک عدد بسیار کوچک، تفاوت بین لوجیت‌ها را تا حد بی‌نهایت تشدید می‌کند. یعنی توکن پیش‌فرض با بالاترین احتمال، به شدت غالب می‌شود و شانس بقیه گزینه‌ها به صفر می‌رسد. در این حالت مدل به صورت حریصانه (Greedy Search) عمل کرده و خروجی کاملاً قطعی و تکرارپذیر تولید می‌کند. این حالت برای کارهایی مثل برنامه‌نویسی، تولید کدهای وب‌سایت، حل مسائل علمی و سیستم‌های بازیابی اطلاعات (RAG) ایده‌آل است.
  • وقتی دما به سمت بی‌نهایت میل می‌کند (T -> infinity): تقسیم لوجیت‌ها بر یک عدد بسیار بزرگ، تفاوت‌های آن‌ها را از بین می‌برد و همه لوجیت‌ها به عدد صفر نزدیک می‌شوند. در این حالت، خروجی تابع سافت‌مکس به یک توزیع یکنواخت (Uniform Distribution) تبدیل می‌شود. یعنی تمام توکن‌های دایره واژگان مدل، شانس برابری برای انتخاب پیدا می‌کنند که نتیجه آن تولید کلمات کاملاً تصادفی، بی‌ربط و بی‌معنی (نویز مطلق) خواهد بود.
  • محدوده میانی (بین ۰.۷ تا ۱.۰): در این بازه، مدل با حفظ چارچوب‌های گرامری و منطقی، توکن‌های متنوع‌تری را انتخاب می‌کند که منجر به خروجی‌های بسیار طبیعی، روان و خلاقانه برای تولید محتوا و ایده‌پردازی می‌شود.

توزیع احتمال توکن‌ها و تاثیر پارامترهای تولید

۲. نمونه‌برداری هسته‌ای (Top-P): فیلتر پویای احتمالات و حذف دم بلند توزیع

پارامتر Top-P که به آن نمونه‌برداری هسته (Nucleus Sampling) نیز می‌گویند و در سال ۲۰۱۹ معرفی شد، رویکرد متفاوتی را دنبال می‌کند. به جای تغییر دادن ارزش احتمالات کلمات (کاری که دما انجام می‌دهد)، Top-P کلمات کاندید را بر اساس احتمال انباشته یا cumulative probability فیلتر می‌کند. به زبان ساده، وقتی مقدار Top-P را روی ۰.۹ تنظیم می‌کنید، مدل ابتدا کلمات را از بیشترین احتمال به کمترین احتمال مرتب می‌کند و سپس تنها کلماتی را در سبد انتخاب خود نگه می‌دارد که مجموع احتمالات آن‌ها به ۹۰ درصد برسد. کلمات باقی‌مانده (که ۱۰ درصد آخر را شامل می‌شوند و کلمات کم‌احتمال و نامربوط هستند) کاملاً از لیست حذف می‌شوند.

برای درک بهتر، یک مثال عددی فرضی را بررسی کنیم. فرض کنید مدل می‌خواهد کلمه بعدی را تولید کند و واژگان برتر همراه با احتمال آن‌ها به این صورت مرتب شده‌اند:

  • کلمه اول: «سیب» (احتمال: ۰.۵۰)
  • کلمه دوم: «گلابی» (احتمال: ۰.۳۰)
  • کلمه سوم: «پرتقال» (احتمال: ۰.۱۲)
  • کلمه چهارم: «موز» (احتمال: ۰.۰۵)
  • کلمات دیگر: (مجموع احتمال: ۰.۰۳)

اگر Top-P را روی ۰.۹۰ تنظیم کنیم، مدل کلمات را به ترتیب جمع می‌کند: احتمال «سیب» و «گلابی» با هم می‌شود ۰.۸۰ (کمتر از ۰.۹۰). پس کلمه بعدی یعنی «پرتقال» را نیز اضافه می‌کند که مجموع احتمال به ۰.۹۲ می‌رسد و از مرز ۰.۹۰ عبور می‌کند. در این لحظه فیلتر بسته می‌شود. کلمه «موز» و کلمات دیگر که خارج از این محدوده هستند، کاملاً حذف می‌شوند و مدل انتخاب نهایی خود را تنها از بین سه کلمه «سیب»، «گلابی» و «پرتقال» انجام می‌دهد. این فیلترینگ پویا مانع از انتخاب توکن‌های نامربوط در شرایط سخت می‌شود.

۳. نمونه‌برداری Top-K: محدودسازی سنتی و استاتیک گزینه‌ها

Top-K یکی از قدیمی‌ترین مکانیزم‌های فیلترینگ در دکودینگ مدل‌های زبانی است. برخلاف Top-P که به صورت پویا عمل می‌کند، Top-K یک محدودیت عددی ثابت ایجاد می‌کند. برای مثال، اگر Top-K را روی ۵۰ تنظیم کنید، مدل صرف‌نظر از میزان احتمالات، تنها ۵۰ کلمه اول که بیشترین احتمال را دارند در نظر می‌گیرد و بقیه را حذف می‌کند.

امروز در اکثر فریمورک‌های اجرای مدل‌ها (مانند Hugging Face یا vLLM)، ترکیب این سه فاکتور به این صورت اعمال می‌شود:

  1. ابتدا فیلتر Top-K اجرا می‌شود تا گزینه‌ها را به تعداد ثابتی (مثلاً ۵۰ توکن برتر) محدود کند.
  2. سپس فیلتر Top-P اجرا می‌شود تا از میان کاندیداهای باقی‌مانده، توکن‌های ضعیف‌تر که در محدوده احتمال انباشته مورد نظر قرار ندارند را حذف کند.
  3. در نهایت، پارامتر Temperature احتمالات گزینه‌های نهایی را مقیاس‌دهی می‌کند تا مدل به صورت تصادفی توکن نهایی را انتخاب کند.

راهنمای عملی تنظیم پارامترها در سناریوهای واقعی

برای دستیابی به بهترین نتیجه در برنامه‌نویسی با مدل‌های زبانی، جدول راهنمای زیر پیشنهاد می‌شود:

سناریوی کاربردی مقدار Temperature مقدار Top-P توضیحات و علت انتخاب
برنامه‌نویسی و رفع باگ ۰.۰ تا ۰.۱ ۰.۹۵ نیاز به راه‌حل‌های تکرارپذیر، دقیق و سینتکس بدون خطا
سیستم‌های پرسش و پاسخ (RAG) ۰.۱ تا ۰.۳ ۰.۹۰ جلوگیری از توهم و وفاداری کامل به متون ارسالی و فکت‌ها
خلاصه‌سازی و بازنویسی ۰.۳ تا ۰.۵ ۰.۹۵ حفظ ساختار اصلی در کنار تنوع عبارات نگارشی و خلاقیت نسبی
تولید محتوای تبلیغاتی و وبلاگ ۰.۷ تا ۰.۸۵ ۰.۹۵ نیاز به لحن گرم، روان و متقاعدکننده بدون ایجاد جملات عجیب
طوفان فکری و ایده‌پردازی ۰.۹ تا ۱.۰ ۱.۰ دریافت بیشترین ایده‌های خلاقانه و جسورانه از مدل بدون محدودیت

تعامل پارامترهای دکودینگ با اندازه مدل (Parameters)

یک نکته ظریف مهندسی هوش مصنوعی که کمتر به آن توجه می‌شود، تاثیر متقابل حجم پارامترهای مدل بر روی رفتار Temperature است. مدل‌های بسیار بزرگ (مانند کلود ۴ یا GPT-5) دارای درک بسیار عمیق و منسجمی از مفاهیم هستند؛ بنابراین حتی اگر Temperature را روی اعداد بالا (مانند ۰.۹) تنظیم کنید، آن‌ها همچنان ساختار جمله و منطق کلی بحث را به خوبی حفظ می‌کنند. اما مدل‌های کوچک‌تر (مانند مدل‌های ۷ یا ۸ میلیارد پارامتری) با بالا رفتن دما به سرعت کنترل منطقی خود را از دست می‌دهند و شروع به تولید جملات نامفهوم می‌کنند. پس هنگام کار با مدل‌های کوچک، همواره دما را در محدوده محافظه‌کارانه‌تری نگه دارید. این موضوع در پروژه‌های بزرگ اهمیت اقتصادی زیادی دارد؛ زیرا استفاده از مدل‌های کوچک‌تر با تنظیمات دمایی بهینه‌تر می‌تواند تا ۷۰ درصد در هزینه‌های سخت‌افزار صرفه‌جویی کند.

شبیه‌سازی اثر دما بر توزیع احتمال در پایتون

برای درک بهتر نحوه تغییر احتمالات با پارامتر دما، کد پایتون زیر نحوه عملکرد ریاضی سافت‌مکس و اثر تقسیم بر دما را بر روی سه لوجیت فرضی شبیه‌سازی می‌کند. با اجرای این محاسبات، توسعه‌دهندگان می‌توانند به صورت عددی تفاوت اعمال تغییرات دما را در خروجی‌های هوشمند مشاهده کنند:

import math

def softmax_with_temp(logits, temperature):
    # اگر دما صفر باشد، به سادگی گزینه‌ای که بیشترین لوجیت را دارد انتخاب می‌کنیم
    if temperature == 0.0:
        max_idx = logits.index(max(logits))
        return [1.0 if i == max_idx else 0.0 for i in range(len(logits))]
    
    # تقسیم لوجیت‌ها بر دما
    scaled_logits = [l / temperature for l in logits]
    
    # محاسبه توان‌های پایه طبیعی e
    exp_logits = [math.exp(l) for l in scaled_logits]
    sum_exp = sum(exp_logits)
    
    # محاسبه احتمالات نهایی
    probabilities = [e / sum_exp for e in exp_logits]
    return probabilities

# لوجیت‌های خام برای ۳ توکن فرضی
logits = [2.0, 1.0, 0.5]
# محاسبه با دمای پایین (سرد)
cold_probs = softmax_with_temp(logits, 0.2)
# محاسبه با دمای بالا (گرم)
hot_probs = softmax_with_temp(logits, 1.5)

# print(f"احتمال در دمای 0.2: {[round(p, 3) for p in cold_probs]}")
# print(f"احتمال در دمای 1.5: {[round(p, 3) for p in hot_probs]}")

توصیه‌های کاربردی برای بهینه‌سازی مصرف توکن و کنترل خروجی در پروداکشن

توسعه‌دهندگان با رعایت چند نکته ساده در محیط‌های عملیاتی می‌توانند کارایی سیستم‌های خود را به شدت افزایش دهند:

  • هرس کردن پرامپت‌ها (Prompt Primming): اطلاعات غیرضروری، فاصله‌های خالی طولانی و کلمات تکراری را از پرامپت‌های خود حذف کنید تا حجم توکن ورودی بیهوده بالا نرود.
  • پیاده‌سازی کش کردن هوشمند (Semantic Caching): پاسخ سوالات مشابه را در دیتابیس برداری ذخیره کنید تا نیازی نباشد در هر بار سوال تکراری، درخواست جدیدی به مدل ارسال کنید و هزینه پرداخت نمایید.
  • تست پایداری در توسعه: در زمان توسعه و دیباگ سیستم، همیشه دما را روی صفر تنظیم کنید تا رفتارهای مدل کاملاً تکرارپذیر و عیب‌یابی آن امکان‌پذیر باشد. این موضوع تضمین می‌کند که خروجی‌های ساختاریافته (مثل JSON) به درستی پارس شوند.

امیدواریم این مقاله دیدگاهی عمیق و کاربردی درباره نحوه هدایت و کنترل مدل‌های زبانی به شما ارائه داده باشد. اگر در این باره تجربه یا سوالی دارید، خوشحال می‌شویم آن را در بخش نظرات بشنویم و با هم گفتگو کنیم.

دوره‌های آنلاین برنامه‌نویسی لیست دوره‌ها