۹. محاسبه در زمان آزمون: چند بار بپرسیم؟
درس قبل دربارهٔ انتخاب توکن بعدی بود؛ این درس دربارهٔ انتخاب کل پاسخ است. سادهترین راه بهتر کردن پاسخ این است که چند پاسخ بسازیم و بهترینش را برداریم. ولی «بهترین» یعنی چه و این کار تا کجا میارزد؟
چند بار بپرسیم؟ محاسبه در زمان آزمون
یک راه ساده برای بهتر کردن پاسخ: بهجای یک پاسخ، چند پاسخ بسازید و بهترین را بردارید. به این محاسبه در زمان آزمون (test time compute) میگویند. «بهترین از N» که در درس ۷ دیدیم سادهترین شکل آن است. شکل حسابشدهترش جستوجوی پرتو (beam search) است: در هر قدم تولید، فقط چند ادامهٔ امیدوارکننده نگه داشته میشوند.
یک راه ساده برای مؤثرتر کردنش: خروجیها را متنوعتر کنید. مجموعهٔ متنوعتر شانس بیشتری برای گزینهٔ خوب دارد؛ پس اگر با یک مدل چند گزینه میسازید، خوب است متغیرهای نمونهبرداری را هم عوض کنید. برای انتخاب هم میشود چند خروجی را به کاربر نشان داد تا خودش برگزیند، یا روشی خودکار داشت.
ولی «بهترین» را چطور انتخاب کنیم؟ چند راه:
- بیشترین احتمال: احتمال یک پاسخ، حاصلضرب احتمال تکتک توکنهایش است. چون این ضرب برای پاسخهای بلند همیشه کوچکتر میشود، از میانگین logprob استفاده میکنند تا پاسخ کوتاه بیدلیل برنده نشود.
- مدل پاداش یا وارسیگر: هر پاسخ را به یک مدل داور بدهید. OpenAI نشان داد یک وارسیگر برای مسئلههای ریاضی به اندازهٔ ۳۰ برابر کردن اندازهٔ مدل اثر دارد: مدلی ۱۰۰ میلیونی با وارسیگر، همتراز مدلی ۳ میلیاردی بدون آن.
- قاعدهٔ خاص کار شما: اگر پاسخ کوتاه بهتر است، کوتاهترین را بردارید. اگر متن را به SQLStructured Query Languageزبان پرسوجوی ساختیافته تبدیل میکنید، آنقدر تولید کنید تا یک SQL معتبر بیاید.
- اولین پاسخ آماده: یک تیم برای کم کردن تأخیر، چند پاسخ را همزمان میسازد و اولین پاسخ کامل و معتبر را نشان میدهد.
- رأی اکثریت: برای سؤالهایی که جواب دقیق دارند، چند بار بپرسید و پرتکرارترین جواب را بردارید. گوگل برای ارزیابی Gemini روی MMLU برای هر سؤال ۳۲ نمونه گرفت.
import math
# احتمال هر توکن در پاسخ «من غذا دوست دارم»
probs = [0.2, 0.1, 0.3]
product = 0.2 * 0.1 * 0.3 # 0.006
logprob = sum(math.log(p) for p in probs) # جمع لگاریتمها = لگاریتم ضرب
average = logprob / len(probs) # منصفانه برای پاسخهای بلند و کوتاه
print(product, round(logprob, 2), round(average, 2)) # 0.006 -5.12 -1.71| این تکه | یعنی چه |
|---|---|
probs = [0.2, 0.1, 0.3] | مدل به توکن اول ۲۰٪، به دومی (با دیدن اولی) ۱۰٪ و به سومی ۳۰٪ احتمال داده |
math.log(p) | لگاریتم هر احتمال. چون احتمال کمتر از ۱ است، لگاریتمش منفی است |
sum(...) | جمع لگاریتمها با لگاریتم حاصلضرب برابر است؛ ولی هیچوقت به عدد آنقدر کوچک نمیرسد که کامپیوتر صفرش کند |
/ len(probs) | تقسیم بر تعداد توکن: میانگین. همان چیزی که OpenAI برای انتخاب بهترین از چند پاسخ استفاده میکرد |
Nextdoor دید مدل پاداش عامل اصلی بهتر شدن اپلیکیشنشان بود (۲۰۲۳). DeepMind هم استدلال میکند بزرگ کردن محاسبهٔ زمان استنتاج میتواند کاراتر از بزرگ کردن پارامترهای مدل باشد (Snell و همکاران، ۲۰۲۴). تیم Kittipat Kampa در TIFIN برای کم کردن تأخیر پرسشهای زنجیرهٔ فکر، چند پاسخ را موازی میسازد و اولین پاسخ کامل و معتبر را نشان میدهد. به رأی اکثریت خودسازگاری (self-consistency) هم میگویند (Wang و همکاران، ۲۰۲۳).
رأی اکثریت را در عمل ببینید. دقت یکبار پرسیدن را تغییر دهید و ببینید با چند بار پرسیدن، دقت چقدر بالا میرود — و هزینه چقدر:
سادهتر بگوییم: مدلی مقاوم است که با تغییر کوچک ورودی، خروجیاش خیلی عوض نشود. هرچه مدل مقاومت کمتری داشته باشد، از چند بار نمونه گرفتن سود بیشتری میبرد. البته کتاب در پانویس میگوید بهترین کار با مدل شکننده، عوض کردن آن است.
یک نکتهٔ عملی: هرچه مدل کمثباتتر باشد، از چند بار پرسیدن بیشتر سود میبرد. نویسندهٔ کتاب در پروژهای میخواست از عکس محصول اطلاعات بیرون بکشد. مدل فقط در نیمی از موارد موفق بود و در نیم دیگر میگفت «عکس تار است». با سه بار امتحان برای هر عکس، تقریباً همهٔ عکسها درست خوانده شدند.
خودآزمایی
مرور فلشکارتهای این درس
محاسبه در زمان آزمون (test time compute) چیست؟
برای دیدن پاسخ کلیک کنید یا Space بزنید
کارت ۱ از ۶