اگر امروز برای استنتاج از مدلهای زبانی هزینه میپردازید، باید بدانید که چند «پیچ تنظیم» ساده میتوانند صورتحساب ماهانه شما را بهشدت تغییر دهند. تفاوت بین یک پاسخ خلاقانه و یک متن تکراری و بیمعنی، نه در معماری مدل، بلکه در لحظه انتخاب توکنها نهفته است.
به نقل از شریجیت ونکاترامانا (Shrijith Venkatramana)، خالق LiveReview، مدلهای زبانی در واقع متن نمینویسند، بلکه یک توزیع احتمالی روی کل واژگان خود ایجاد میکنند. تولید واقعی متن در مرحله رمزگشایی (Decoding) — شبیه به لحظهای که یک داور تصمیم میگیرد کدام گزینه از لیست احتمالات را تایید کند — رخ میدهد.
وقتی مدلی یک پرامپت را پردازش میکند، برای هر کلمه بعدی حدود ۵۰,۰۰۰ گزینه احتمالی دارد. برای جملهای مثل «گربه روی ... نشست»، مدل ممکن است به «زیرانداز» احتمال ۴۲٪، به «کف زمین» ۲۰٪، به «صندلی» ۱۲٪، به «تخت» ۸٪، به «میز» ۵٪ و به «سقف» ۱٪ بدهد. مدل ذاتاً نمیداند کدام کلمه «درست» است و کدام «غلط»؛ او فقط میداند که «زیرانداز» بسیار محتمل است و «سقف» کمتر است.
این تمایز حیاتی است؛ زیرا یک مدل و یک پرامپت واحد، بسته به استراتژی نمونهگیری، نتایجی کاملاً متفاوت تولید میکنند. پژوهشگران در سال ۲۰۱۹ دریافتند که تنها با تغییر روش رمزگشایی، میتوان خروجی مدل را از تکرارهای کسالتبار به متونی شبیه به نوشتههای انسانی یا حتی مهملات مطلق تغییر داد، در حالی که شبکه عصبی مدل هیچ تغییری نکرده بود.
همانطور که در تحلیل قبلی ما دربارهی نحوه استفاده از FastAPI برای بستهبندی Ollama اشاره کردیم، درک این مکانیزمهای داخلی برای توسعهدهندگانی که میخواهند از فراخوانیهای ساده API به سیستمهای بهینه تولیدی حرکت کنند، گام بعدی است.
مکانیزم اصلی: قطعی در برابر تصادفی
یک رمزگشا، توزیع احتمالات را به یک توکن واحد تبدیل میکند. دو فلسفه اصلی برای این کار وجود دارد:
- رمزگشایی قطعی (Deterministic decoding): یا همان Greedy decoding؛ که همیشه توکنی با بالاترین احتمال را با استفاده از فرمول
argmax_i P(token_i | context)انتخاب میکند. - رمزگشایی تصادفی (Stochastic decoding): که توکن را بر اساس توزیع احتمالات نمونهبرداری میکند:
token ~ P(token | context).
رمزگشایی تصادفی به مدل اجازه میدهد گاهی گزینههای کمتر محتمل اما پذیرفتنی را انتخاب کند، مثلاً «کف زمین» را به جای «زیرانداز». این تفاوت کوچک در طول یک توالی اثرات مرکب میگذارد. اگر مدلی در هر گام دو انتخاب معقول با احتمالات ۰.۸ و ۰.۲ داشته باشد، احتمال اینکه ۲۰ بار متوالی گزینه ۰.۸ را انتخاب کند، تقریباً $0.8^{20}$ یا حدود ۰.۰۱۱۵ است.
این تصادفی بودن است که خلاقیت در طوفان فکری، تولید دادههای مصنوعی (Synthetic Data) و گفتگوها را ممکن میکند، اما ریسک تولید خروجیهای «زباله» را نیز به همراه دارد. مشکل اصلی این است که توزیعهای مدلهای زبانی دارای یک «دم بلند» (Long Tail) هستند؛ یعنی چند توکن بسیار محتمل و هزاران توکن مشکوک در انتهای لیست. تاریخچه نمونهگیری مدرن در واقع تلاش برای یافتن نقطهای برای بریدن این دم است.
دمای مدل: شکلدهی به توزیع
دما (Temperature) اولین لایه در خط لوله نمونهگیری است. این پارامتر لاجیتها ($z_i$) را پیش از اعمال تابع سافتمکس (Softmax) تغییر میدهد. معادله مورد استفاده به این صورت است: $z_i' = z_i / T$ و سپس $P_i = exp(z_i') / sum_j exp(z_j')$.
وقتی دما (T) کمتر از ۱ باشد، توزیع احتمالات تیزتر میشود و مدل روی گزینه اول خود متعهدتر میگردد. وقتی T بیشتر از ۱ باشد، توزیع تخت میشود و احتمال انتخاب گزینههای ضعیفتر افزایش مییابد. اگر T برابر ۱ باشد، توزیع بدون تغییر میماند.
توزیعی را تصور کنید که در آن توکن A احتمال ۰.۷۰، توکن B احتمال ۰.۲۰، توکن C احتمال ۰.۰۷ و توکن D احتمال ۰.۰۳ دارد. کاهش دما باعث میشود مدل بیشتر به A متعهد شود. افزایش دما، احتمال را به سمت B، C و D سوق میدهد.
از نظر ریاضی، دما نسبت احتمالات (Odds Ratios) را تغییر میدهد. فرض کنید نسبت $P(A) / P(B) = 4$ باشد. پس از مقیاسبندی دما، این نسبت تقریباً به $(P(A) / P(B))^{1/T}$ تبدیل میشود:
- در T = 0.5: نسبت به $4^{1/0.5} = 16$ تبدیل میشود. ترجیح مدل ۱۶ به ۱ میشود.
- در T = 2: نسبت به $4^{1/2} = 2$ تبدیل میشود. ترجیح مدل ۲ به ۱ میشود.
با این حال، دما بهتنهایی نمیتواند مشکل «دم بلند» را حل کند. بالا بردن دما تفاوتی بین «جایگزینهای معقول» و «مهملات انتهای لیست» قائل نمیشود و فقط به همه احتمالات بیشتری میدهد. این یافته کلیدی در دوران GPT-2 بود؛ پژوهشگرانی مانند هولتزمن نشان دادند که دما بهتنهایی نمیتواند تعادل بین کیفیت و تنوع را بهطور مناسب کنترل کند. دما به سؤال «چقدر ماجراجو باشم؟» پاسخ میدهد، اما نمیگوید «کدام گزینهها را اصلاً باید در نظر بگیرم؟»
استراتژیهای برش: Top-k، Top-p و Min-p
برای مدیریت دم بلند، توسعهدهندگان از فیلترهای برش استفاده میکنند تا توکنهای نامحتمل را کاملاً حذف کنند.
نمونهگیری k برتر (Top-k sampling) روشی ساده است که کاندیداها را بر اساس احتمال مرتب کرده و فقط K توکن اول را نگه میدارد. برای مثال اگر توزیع به صورت A(0.40), B(0.25), C(0.15), D(0.08), E(0.05), F(0.03), G(0.02) باشد و top_k = 3 تنظیم شود، نمونهگیر فقط A، B و C را نگه میدارد. سپس اینها دوباره نرمالسازی میشوند (مثلاً A میشود $0.40 / 0.80 = 0.50$، B میشود $0.25 / 0.80 = 0.3125$ و C میشود $0.15 / 0.80 = 0.1875$) و سپس نمونهبرداری انجام میشود.
این تکنیک در سال ۲۰۱۸ از طریق کارهای آنجلا فن، مایک لوئیس و یان دوفین روی تولید سلسلهمراتبی داستانهای عصبی کاربردی شد. هدف این بود که مدلهای عصبی بهجای سقوط در متون بیکیفیت، داستانهای طولانی و منسجم تولید کنند. اما Top-k ابزاری زمخت است؛ زیرا K ثابت است در حالی که عدم قطعیت مدل متغیر است:
- در بافتار مطمئن: (A=0.95, B=0.02, C=0.01, D=0.005, E=0.005...)، مقدار Top-k=5 ممکن است چندین کاندیدای پوچ از انتهای لیست را وارد کند.
- در بافتار نامطمئن: (A=0.20, B=0.18, C=0.16, D=0.14, E=0.12, F=0.10, G=0.10...)، مقدار Top-k=5 ممکن است احتمالات کاملاً معقولی را دور بریزد.
Top-k میپرسد «چند کاندیدا را میتوانم در نظر بگیرم؟» اما نمیپرسد «چه مقدار از جرم احتمالات را باید اعتماد کنم؟»
نمونهگیری هستهای (Top-p sampling) در سال ۲۰۱۹ توسط آری هولتزمن و همکارانش در پژوهشی درباره تخریب متن عصبی معرفی شد. آنها مشاهده کردند که حداکثر احتمال (Maximum Likelihood) هدف آموزشی خوبی است، اما انتخاب محتملترین ادامه متن اغلب منجر به متونی کسالتبار، تکراری یا حلقههای بیپایان میشود. مدلها میتوانستند در سطح توکن احتمال عالی داشته باشند اما در حلقههای تکرار گیر کنند.
در Top-p، بهجای تعداد ثابت، کوچکترین مجموعهای از توکنها که مجموع احتمالاتشان به مقدار p برسد، نگه داشته میشوند. اگر top_p = 0.80 باشد و احتمالات A(0.45), B(0.25), C(0.15), D(0.08), E(0.04), F(0.02), G(0.01) باشند، نمونهگیر ابتدا A(0.45) را میگیرد، سپس A+B(0.70) و در نهایت A+B+C(0.85). هسته {A, B, C} است و بقیه توکنها حذف میشوند.
این باعث میشود «هسته» در زمان عدم قطعیت مدل گسترش یابد و در زمان اطمینان، کوچک شود. هولتزمن و همکارانش دریافتند که این روش توزیعهایی بسیار نزدیکتر به متن انسانی تولید میکند. به همین دلیل ترکیب temperature = 0.8 و top_p = 0.95 به یک استاندارد عملی تبدیل شده است. دما توزیع را شکل میدهد و Top-p تصمیم میگیرد تا کجای دم پیش برود.
نمونهگیری Min-p رویکرد جدیدتری است که در کنفرانس ICLR ۲۰۲۵ توسط مین نگوین و همکارانش منتشر شد. این روش منتقد Top-p است زیرا معتقد است Top-p روی جرم تجمعی تمرکز میکند نه کیفیت نسبی در مقایسه با بهترین کاندیدا. در Min-p، توکنهایی نگه داشته میشوند که شرط P(token) >= min_p * P_max را داشته باشند.
- مدل مطمئن: اگر P_max = 0.60 و
min_p = 0.1باشد، آستانه ۰.۰۶ است. توکنهای زیر ۰.۰۶ حذف میشوند. - مدل نامطمئن: اگر P_max = 0.12 و
min_p = 0.1باشد، آستانه به ۰.۰۱۲ کاهش مییابد و مجموعه کاندیداها گسترش مییابد.
توزیعی را در نظر بگیرید: A(0.50), B(0.20), C(0.10), D(0.08), E(0.04), F(0.03), G(0.02), H(0.01).
- با
top_k = 4شما A, B, C, D را میگیرید. - با
top_p = 0.80شما A, B, C را میگیرید (مجموعاً ۰.۸۰). - با
min_p = 0.10آستانه ۰.۰۵ است، بنابراین A, B, C, D زنده میمانند.
در حالی که مقاله اصلی بهبودهایی در تعادل کیفیت/تنوع در دماهای بالا گزارش کرد، یک تحلیل انتقادی بعدی در سال ۲۰۲۵ برخی از این نتایج را به چالش کشید و Min-p را به جای یک راهکار قطعی، به یک حوزه پژوهشی فعال تبدیل کرد.
مدیریت تکرار و تاریخچه
در حالی که فیلترهای قبلی به توزیع فعلی نگاه میکنند، جریمه تکرار (Repetition penalty) تاریخچه را وارد میکند. رویکرد کلاسیک مرتبط با مدل CTRL، یک تبدیل ضربی روی توکنهایی که قبلاً ظاهر شدهاند اعمال میکند.
در پیادهسازیهای آگاه از علامت (Sign-aware) با penalty >= 1 (مثلاً ۱.۲):
- لاجیتهای مثبت (z > 0): $z' = z / penalty$. یک لاجیت ۶.۰ به ۵.۰ تبدیل میشود.
- لاجیتهای منفی (z <= 0): $z' = z * penalty$. یک لاجیت ۶.۰- به ۷.۲- تبدیل میشود.
مدیریت علامت حیاتی است؛ تقسیم ساده یک لاجیت منفی بر ۱.۲، مقدار ۶.۰- را به ۵.۰- تبدیل میکند که در واقع احتمال آن توکن را بیشتر میکند.
اما جریمههای تکرار تهاجمی میتوانند خطرناک باشند. این فیلترها «نابینا» هستند و نمیفهمند که تکرار کلمه "name" در یک شیء JSON (مثلاً {"name": "alice", "age": 37, "city": "London"}) یا تکرار "return self" در پایتون کاملاً عمدی است. جریمه بیش از حد میتواند منطق خروجیهای ساختاریافته، نمادهای ریاضی و کدها را بههم بریزد. قانون این است: از جریمه تکرار برای مبارزه با حلقههای پاتولوژیک استفاده کنید، نه برای تحمیل تنوع به عنوان یک هدف جهانی.
خط لوله تولید و اقتصاد استنتاج
در یک سیستم واقعی، این پارامترها به صورت یک خط لوله (Pipeline) عمل میکنند و ترتیب عملیات بسیار مهم است:
۱. تولید لاجیتها: مدل امتیازات خام را تولید میکند.
۲. تنظیمات لاجیت: جریمههای تکرار و سایر تنظیمات اعمال میشوند.
۳. مقیاسبندی دما: توزیع تیز یا تخت میشود.
۴. فیلترهای برش: Top-k، Top-p یا Min-p لیست را فیلتر میکنند.
۵. نرمالسازی: احتمالات باقیمانده مقیاس میشوند تا مجموع آنها ۱ شود.
۶. نمونهبرداری: توکن نهایی انتخاب شده و به بافتار (Context) اضافه میشود.
اگر چندین قانون را ترکیب کنید، مثلاً top_k = 50 و top_p = 0.9، در واقع میگویید: بیش از ۵۰ کاندیدا را در نظر نگیر و همچنین کاندیداهای خارج از هسته ۹۰٪ احتمالات را نادیده بگیر. مجموعه نهایی معمولاً اشتراک این دو است.
این توالی اثرات اقتصادی مستقیم دارد. تصور کنید برنامهای با ۱ میلیون درخواست در ماه دارید که هر درخواست ۵۰۰ توکن خروجی دارد (در مجموع ۵۰۰ میلیون توکن). اگر رمزگشایی ضعیف باعث شود تنها ۲٪ از درخواستها بهدلیل حلقههای تکراری یا بیمعنا بودن نیاز به تولید مجدد داشته باشند، ماهانه ۱۰ میلیون توکن هدر میرود. بنابراین، نمونهگیری یک انتخاب زیباییشناختی نیست، بلکه یک تصمیم مدیریت هزینه است. این موضوع با رویکردهای مهندسی سیستم برای کاهش هزینههای ماهانه استنتاج که پیشتر بررسی کردیم، همراستا است. هدف عملیاتی، به حداکثر رساندن موفقیت در انجام وظیفه با رعایت محدودیتهای هزینه، تأخیر (Latency) و نرخ شکست است.
استراتژیهای تنظیم برای وظایف مختلف
بهجای جستجوی تصادفی (Grid Search)، توسعهدهندگان باید تنظیمات را لایه به لایه انجام دهند، با شروع از T=1.0 و افزودن کنترل برش یا تکرار تنها در صورت نیاز:
- نوشتن خلاقانه: T ≈ 0.8–1.1، Top-p ≈ 0.9–0.98، جریمه تکرار ≈ 1.0–1.1.
- استخراج داده: T ≈ 0–0.3 با برش شدید یا رمزگشایی کاملاً قطعی (Greedy).
- تولید کد: T ≈ 0–0.3 و جریمه تکرار ۱.۰ برای جلوگیری از تخریب سینتکس.
در نهایت، نمونهگیری سیاستی برای مدیریت عدم قطعیت است. مدل چشمانداز احتمالات را ارائه میدهد و نمونهگیر تصمیم میگیرد که توسعهدهنده چقدر به آن چشمانداز اعتماد کند. با رشد حجم کدهای تولید شده توسط AI، مدیریت این عدم قطعیت برای پایداری سیستمهای تولیدی حیاتی است. برای مثال، در جریانهای دادهای بسیار حجیم، استفاده از تکنیکهایی مانند StreamingLLM میتواند پایداری استنتاج را در مقیاس میلیونی تضمین کند. به همین دلیل است که ابزارهایی مثل LiveReview بر بازبینی آگاه از «شعاع تخریب» (Blast-radius aware review) تمرکز میکنند تا در حالی که AI کد را تولید میکند، توجه انسان روی پرریسکترین تغییرات در گراف فراخوانیها متمرکز شود.
گام بعدی شما
- اگر خروجیهای مدل شما در کدهای ساختاریافته (مثل JSON) دچار خطا میشود، جریمه تکرار را به ۱.۰ برگردانید.
- برای کاهش هزینههای استنتاج، ابتدا
top_pرا روی ۰.۹ تنظیم کنید و سپس دما را برای رسیدن به تعادل بین دقت و خلاقیت تغییر دهید. - در وظایف استخراج داده، از Greedy decoding استفاده کنید تا از توهمات احتمالی ناشی از تصادفی بودن جلوگیری شود.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو