محاسبه Softmax
ابزار آموزشی رایگان این صفحه فقط در مرورگر اجرا میشود؛ داده به سرور ارسال نمیشود.
Softmax فهرستی از امتیازهای خام را به عددهای غیرمنفی تبدیل میکند که جمعشان یک است. در یک مسئله تکبرچسبی میتوان این خروجی را توزیع نسبی کلاسها در مدل دانست. این تبدیل بهتنهایی ثابت نمیکند احتمالهای مدل با واقعیت کالیبرهاند یا پاسخ انتخابشده درست است. اینجا فرمول را با سه عدد ساده حساب میکنیم.
امتیاز خام با درصد چه فرقی دارد؟
فرض کنید سه خروجی خام، یعنی logits، برابر صفر، یک و دو هستند. عدد دو به معنی «۲۰۰ درصد» نیست. برای Softmax، نمای هر امتیاز را حساب و بر مجموع نماها تقسیم میکنیم. نتیجه به فاصله امتیازها وابسته است و ترتیب آنها را حفظ میکند.
| گزینه آموزشی | امتیاز خام | نمای امتیاز | خروجی Softmax |
|---|---|---|---|
| گزینه ۱ | ۰ | ۱ | 0.090031 |
| گزینه ۲ | ۱ | ۲٫۷۱۸۲۸۲ | 0.244728 |
| گزینه ۳ | ۲ | ۷٫۳۸۹۰۵۶ | 0.665241 |
خروجی سوم حدود ۰٫۶۶۵۲ است؛ دو خروجی دیگر هم حذف نشدهاند. جمع عددهای گردشده ممکن است در آخرین رقم دقیقاً یک نشود. برای محاسبه و آزمون، از مقدار کامل استفاده کنید و فقط نمایش را گرد کنید.
چرا در پیادهسازی، بزرگترین امتیاز را کم میکنیم؟
نمای عددهای بسیار بزرگ ممکن است از محدوده عددی برنامه بیرون بزند. کمکردن یک مقدار ثابت از همه logits، نسبتهای Softmax را عوض نمیکند. یک روش معمول این است که پیش از exp، بیشترین امتیاز را از همه کم کنیم. برای ورودی (۱۰۰۰،۱۰۰۱،۱۰۰۲)، محاسبه پایدار باید همان توزیع مثال (۰،۱،۲) را بدهد.
function softmax(logits) {
if (logits.length < 2 || !logits.every(Number.isFinite)) {
throw new Error("Provide at least two finite numbers");
}
const maximum = Math.max(...logits);
const exp = logits.map(value => Math.exp(value - maximum));
const total = exp.reduce((sum, value) => sum + value, 0);
return exp.map(value => value / total);
}
این تابع برای تمرین چند عدد است. برای آرایه بسیار بزرگ، محدودیت اندازه و شیوه پیمایش هم لازم است. ابزار همراه این متن ورودی را به ۲ تا ۲۰ عدد محدود میکند و برای جلوگیری از تبدیل ورودی ناقص، عدد نامعتبر را رد میکند؛ سیاست محدودیت آن، بخشی از همین ابزار آموزشی است.
خروجی Softmax چه چیزی را تضمین نمیکند؟
اگر یک مدل سه موضوع درخواست را با این توزیع امتیاز دهد، هنوز نمیدانیم روی درخواستهای مشابه چند بار درست عمل کرده است. این مسئله با بررسی کالیبراسیون احتمال و داده دارای نتیجه واقعی سنجیده میشود. جملهای مثل «من مطمئنم» در متن پاسخ هم جای توزیع عددی یا آزمون آماری را نمیگیرد.
همچنین اگر یک درخواست میتواند همزمان چند برچسب داشته باشد، نباید صرفاً برای رساندن جمع به یک، مسئله را تکبرچسبی فرض کنیم. تعریف خروجی باید از کاربرد بیاید. درخواست «تغییر آدرس و پیگیری سفارش» ممکن است دو موضوع داشته باشد؛ کمبودن امتیاز یک موضوع پس از نرمالسازی، دلیل نبودن آن در متن نیست.
یک آزمایش کوچک و قابل تکرار
- اعداد صفر، یک و دو را وارد و نتیجه را ثبت کنید.
- به هر سه عدد، هزار اضافه کنید؛ توزیع باید تا خطای محاسباتی یکسان بماند.
- هر سه امتیاز را برابر بگذارید؛ سهمها باید برابر شوند.
- یکی از ورودیها را خالی یا غیرعددی کنید؛ ابزار نباید مقدار ساختگی جای آن بگذارد.
این آزمونها بررسی فرمول و رفتار ابزارند، نه آزمون کیفیت یک مدل زبانی. اگر هدف شما مقایسه مدلهاست، مجموعه ورودی و معیار پذیرش را جدا تعریف کنید. برای زمینه بیشتر، راهنمای دمای مدل و روش نمونهگیری را بخوانید؛ Softmax و تنظیمات سرویس را یک قابلیت مشترک و یکسان در همه محصولات فرض نکنید.
در پروژه پاسخگویی، تصمیم درباره ارجاع به انسان باید به نوع خطا و نتیجه آزمون تکیه کند. برای بررسی کاربرد خود، یک سناریوی واقعیِ بدون اطلاعات حساس را از مسیر راهکارهای اپرا مطرح کنید. این مثال هیچ امتیاز یا نتیجه واقعی برای محصولات اپرا اعلام نمیکند.
منابع و تاریخ بررسی
این منابع در ۳ نوامبر ۲۰۲۶ بررسی شدهاند. عددهای مثالها آموزشی و ساخته تحریریهاند؛ نتیجه آزمون یک محصول یا مشتری نیستند.
ادامه مسیر یادگیری
شبکه عصبی چیست؟ محاسبه یک شبکه کوچک با مثال — برای دیدن منشأ یک امتیاز خام، نمونه محاسبه شبکه عصبی را قدمبهقدم دنبال کنید.
Attention در ترنسفورمر؛ مثال عددی Query، Key و Value — برای کاربرد وزنهای نرمالشده در Attention، نمونه عددی جداگانه آن را ببینید.