توی مدلهای زبانی بزرگ واقعاً چه خبره؟
خلاصهٔ کاملتر
نویسنده تو این پست که قسمت دوم از یه سری پنجقسمتی دربارهی هوش مصنوعیه، میگه شبکههای بازگشتی (RNN) بهخاطر دو مشکل اساسی دیگه محبوب نیستن: نمیشه پردازششونو موازی کرد چون هر مرحله باید منتظر مرحلهی قبل بمونه، و حافظهشون برای توکنهای دور کمکم محو میشه. مکانیزم attention که اول کنار RNN اضافه شده بود، تو مقالهی «Attention Is All You Need» (۲۰۱۷) کاملاً جای بازگشت رو گرفت؛ ایدهش اینه که هر توکن مستقیم با همهی توکنهای دیگه رابطهشو حساب کنه، و چون این حسابکتابها همه با هم قابل انجامن، کل توالی میتونه موازی پردازش بشه.
به گفتهی نویسنده، از دل همین معماری دو مسیر جدا باز شد: گوگل با انکودر مدل BERT رو ساخت که برای فهم متن و کارایی مثل تحلیل احساسات خوب بود، و OpenAI با دیکودر تنها رفت سمت GPT که فقط با پیشبینی توکن بعدی آموزش میبینه و به لیبل نیاز نداره. دیکودر تنها برنده شد چون هم آموزشش سادهتره (کل اینترنت میشه دادهی آموزشی)، هم هدفش universalه (ترجمه، خلاصهسازی، همه چی میشه continuation)، هم برای مکالمهی چندمرحلهای منطقیتره.
قبل از رسیدن به attention، متن باید تبدیل به عدد بشه. نویسنده توضیح میده که BPE (Byte-Pair Encoding) کلمات رو به زیرکلمهها میشکنه و همین باعث میشه مدلها گاهی تو شمردن حروف یه کلمه (مثل تعداد r توی strawberry) یا محاسبات ریاضی دچار مشکل بشن، چون یه کلمه ممکنه به چند توکن جدا تقسیم بشه که مدل از حروف داخلشون خبر نداره. هر توکن بعدش با یه بردار عددی (embedding) نمایش داده میشه که معنیشو حمل میکنه، ولی این بردار بهتنهایی موقعیت کلمه تو جمله رو نشون نمیده؛ برای همین باید یه positional encoding هم بهش اضافه بشه. نویسنده روش RoPE رو که بردارها رو بر اساس موقعیتشون میچرخونه، نسبت به روش قدیمی سینوس-کسینوس بهتر میدونه چون معنی کلمه رو خراب نمیکنه.
قلب ماجرا مکانیزم Scaled Dot-Product Attentionـه: هر توکن سه بردار Query، Key و Value میسازه، شباهت Query هر توکن با Key بقیهی توکنها حساب میشه، روی جذر بعد Key تقسیم میشه تا مقیاسش معقول بمونه، بعد با softmax تبدیل به احتمال میشه و در نهایت روی Value ضرب میشه. این کل فرمول تو چند خط کد پایتون قابل نوشتنه:
Q, K, V = E @ Wq, E @ Wk, E @ Wv
scores = Q @ K.T / np.sqrt(d_k)
weights = np.exp(scores) / np.exp(scores).sum(-1, keepdims=True)
output = weights @ Vنویسنده اشاره میکنه که چند تا سر (head) attention بهصورت موازی کار میکنن و هرکدوم یه چیز متفاوت یاد میگیرن؛ مثلاً تیم تفسیرپذیری آنتروپیک کشف کرده بعضی سرها الگوی «A B ... A» رو تشخیص میدن و پیشبینی میکنن B بعدی چیه. همچنین چون هزینهی محاسباتی attention با مربع طول ورودی بالا میره، طول context window هم محدود میمونه.
در آخر نویسنده به بلوکهای دیگهی ترنسفورمر هم اشاره میکنه: Add & Norm که جلوی محو شدن گرادیان رو میگیره، و شبکهی feed-forward که هر توکن رو جدا پردازش میکنه و طبق تحقیقات، شاید همینجاست که دانش واقعی مدل (مثل «پاریس پایتخت فرانسهست») ذخیره میشه. تو ضمیمه هم بهطور خلاصه از Grouped-Query Attention گفته که با اشتراکگذاری Key/Value بین چند سر، مصرف حافظهی cache رو تو مدلهای بزرگ کم میکنه.
نکات کلیدی:
- ترنسفورمرها با حذف بازگشت و نگهداشتن فقط attention، هم مشکل موازیسازی RNNها رو حل کردن هم مشکل فراموشی حافظهی بلندمدت
- دیکودر تنها (مثل GPT) بهخاطر ساده بودن آموزش و انعطاف بیشتر از انکودر-دیکودر و انکودر تنها (مثل BERT) جلو زد
- BPE کلمات رو به زیرکلمه میشکنه و همین ریشهی مشکلاتی مثل اشتباه تو شمارش حروف یا محاسبات ریاضیه
- RoPE با چرخوندن بردارها بر اساس موقعیت، بهتر از روش قدیمی سینوس-کسینوس عمل میکنه
- مکانیزم Query/Key/Value و softmax پایهی محاسبهی attentionـه که هزینهش با مربع طول ورودی بالا میره




