داستان جذاب RoPE و ماجراهای عدد تتا تو مدل‌های زبانی!

ببین رفیق، اگه مدل‌های ترنسفورمر و هوش مصنوعی برات جذاب باشه، احتمالاً اسم Rotary Positional Embedding یا همون RoPE به گوشت خورده. این یه تکنیک معروف تو مدل‌های ترنسفورمره که کمک می‌کنه مدل‌ها بفهمن ترتیب کلمه‌ها (یا حتی کاراکترها) تو جمله چیه. حالا این RoPE یه عدد جادویی داره به اسم تتا (θ). تتا یه پارامتریه که می‌تونه رو نحوه کار این تکنیک حسابی تاثیر بذاره.

معمولاً اکثر مدل‌ها از یه مقدار پیش‌فرض برای تتا استفاده می‌کنن (مثلاً ۱۰٬۰۰۰) اما کسی دقیق نمی‌دونه اگه این عدد رو تغییر بدیم دقیقاً چه اتفاقی میوفته مخصوصاً تو مدل‌هایی که با کاراکترها کار می‌کنن، نه کلمات (به اینا می‌گن character-level model یعنی مدل سطح کاراکتر، یعنی به جای کار با واژه، مستقیم سراغ تک‌تک حروف یا کاراکترها می‌ره). حالا داستان از اینجا جالب میشه!

یه تحقیق باحال اومده گفته بذاریم این تتا رو از ۵۰۰ تا ۵۰٬۰۰۰ هی تغییر بدیم و ببینیم چی پیش میاد. مدل تستیشون هم از نوع GPT کاراکتری بوده (یعنی مثل مدل معروف ChatGPT، ولی بجای واژه، کارش رو روی تک‌تک حروف امتحان کرده). واسه آزمایش هم از سه دیتاست معروف استفاده کردن:

  • Tiny Shakespeare (یه مجموعه‌ی کوچیک از نمایشنامه‌های شکسپیر)
  • Enwik8 (یه حجم نسبتاً زیاد از ویکی‌پدیاست)
  • Text8 (بخشی از متون انگلیسی Wikipedia)

خلاصه کار این بوده که مقدار تتا رو تغییر دادن و با حالت پیش‌فرض (۱۰٬۰۰۰) مقایسه کردن تا ببینن دقیقاً چه فرقی می‌کنه.

ولی یه چیز جالب این بود که هر موقع تتا رو به غیر از مقدار پیش‌فرض تنظیم می‌کردن، سرعت اجرای مدل تقریباً نصف میشد! یعنی مدل خیلی دیرتر جواب می‌داد (به این می‌گن computational overhead یعنی هزینه پردازشی اضافه که اجرا رو کند می‌کنه). نکته جالبتر این که این کند شدن نه به خاطر خود تتا، بلکه احتمالاً بخاطر نحوه پیاده‌سازی این تکنیک تو کد بوده؛ با تغییر نرم‌افزار یا بهینه‌سازی شاید بشه حلش کرد.

اما خب، این ماجرا فقط مربوط به سرعت نبوده. کار اصلی این تحقیق این بود که دنبال یه تعادل بین عملکرد مدل (یعنی چقدر خوب یاد می‌گیره و جواب درست می‌ده) و زمان اجرا بگرده، چون گاهی با انتخاب یه تتای خاص می‌شه عملکرد مدل رو بهتر کرد اما هزینه سرعت رو باید قبول کنی.

نتیجه مهمی که گرفتن این بود که “بهینه‌ترین” مقدار تتا برای هر دیتاست ممکنه فرق کنه! یعنی قشنگ باید برای هر نوع داده جدا جدا تتا رو بهینه کنی که به نتیجه‌ی خوب و سریع برسی. خلاصه اینکه محقق‌ها پیشنهاد کردن که شاید آینده باید دنبال رویکردهای تطبیقی (adaptive scheduling) برای تعیین تتا باشیم یا اصلاً هر دیتاست تتای مخصوص به خودش رو داشته باشه تا هم عملکرد مدل بالا بره، هم سرعت فدای نتیجه نشه.

در کل اگر دنبال ساخت مدل زبانی باحال و سریع هستی و به RoPE علاقه داری، باید حواست به این عدد تتا باشه و کوتاه نیای! شاید با یه تنظیم ساده، مدل هم سریع‌تر بشه هم بهتر جواب بده. پس دفعه بعد که سراغ Positional Encoding (یعنی مشخص کردن جای هر عنصر تو جمله برای مدل) رفتی، حتماً تتا رو جدی بگیر. رو هم رفته این تحقیق کلی کمک می‌کنه که بفهمیم چطور میشه مدل‌های قوی‌تر و سریع‌تری ساخت، فقط کافیه کمی با اعداد بازی کنیم!

منبع: +