DBellQuant: راز فشرده‌سازی تا دوزار! چطور مدل‌های زبانی رو به حالت تق تق دربیاریم؟

Fall Back

داستان مدل‌های زبانی بزرگ یا همون LLMها (Large Language Model یعنی مدل زبان خیلی گنده‌ای که می‌تونه متن تولید کنه) اینه که عملاً همه‌چی رو بلدن، ولی یه مشکل خیلی بزرگ دارن! مصرف رم و قدرت محاسبه عجیب بالا که باعث میشه استفاده ازشون تو بسیاری از پروژه‌ها تقریباً غیرممکن بشه. یعنی مدل عالیه، ولی روی هر سیستمی بالا نمیاد!

اینجا یه ترفند باحال داریم به اسم کوانتیزیشن (Quantization یعنی تبدیل داده‌های اعشاری به عددهای کم‌دقیق‌تر یا مثلاً همون عددهای دودویی سبک!) که کلی از محاسبات رو سبک می‌کنه. فقط یه اشکال وجود داره: اکثر کوانتیزیشن‌ها به خاطر نوع وزن‌هایی که مدل داره یا به خاطر «آوتلایر»ها (outlier یعنی مقدارهایی که کلی با بقیه فرق دارن و باعث مشکل تو فشرده‌سازی میشن) اونقدری هم که فکر می‌کنی روون و بی‌مشکل نیستن. این خطاها آخرش باعث میشن مدل افت کارایی پیدا کنه.

حالا یه ایده جدید اومده وسط و اسمش رو گذاشتن «DBellQuant». اسمش یه جورایی بازی با کلمه double-bell (یعنی دوتا زنگوله؛ منظور همون توزیع دو قله‌ای تو ریاضیه) هست! این روش یه فریم‌ورک کوانتیزیشن بعد از آموزش (post-training quantization یا به اختصار PTQ یعنی کارهایی که بعد از آموزش مدل روی وزن‌ها انجام میدن تا مدل رو فشرده کنن) خیلی باحاله که دو حرکت هوشمندانه انجام میده تا بشه وزن‌ها رو تقریباً دودویی (1-bit یعنی وزن‌ها فقط ۰ یا ۱) و اکتیویشن‌ها رو هم رو 6 بیت (یعنی اکتیویشن هر نورون به عددهای 0 تا 63 محدود میشه) کوانتیز کرد، اونم بدون اینکه زیاد به کارایی مدل لطمه بزنه.

داستان رو ساده بگم: معمولاً وزن‌های مدل توزیع‌شون به صورت یک قله (یا همون bell یا زنگوله‌ی توی نمودار) هست و مستقیم باینری‌شون (دودویی) کنی کلی خطا تو مدل میفته. تیم DBellQuant با یه الگوریتم باحال به اسم LTDB (Learnable Transformation for Dual-Bell یعنی یه تبدیل یادگیری‌پذیر که توزیع وزن‌ها رو از تک‌قله به دوقله تبدیل می‌کنه) این جدول رو به هم میریزن و وزن‌ها رو جوری تغییر میدن که تقریباً دو قله‌ای بشه و بشه راحت و کم‌خطا دودویی‌شون کرد. جالب‌تر اینکه برای اکتیویشن‌ها هم با یه تبدیل معکوس کمک می‌کنن که داده‌ها صاف‌تر و کوانتیزیشن هم آسون‌تر و دقیق‌تر بشه.

حالا نتیجه‌ش چیه؟ مثلاً روی دیتاست Wikitext2 (که یه مجموعه داده معروف برای تست مدل‌های زبانیه)، این روش روی مدل LLaMA2-13B با اکتیویشن ۶ بیتی تونسته پرپلکسیتی (Perplexity یا همون گیجی مدل؛ هرچی پایین‌تر باشه یعنی مدل بهتر پیش‌بینی می‌کنه) معادل ۱۴/۳۹ بگیره. این عدد سریعاً بهتر از روش BiLLM هست که حتی با بدون کوانتیزیشن اکتیویشن هم عددش ۲۱/۳۵ بوده! یعنی DBellQuant هم مدل رو خوب فشرده کرده، هم کیفیت رو خیلی خوب حفظ کرده؛ واقعاً رکورد روش‌های قبل رو زده!

در کل DBellQuant اینجوری کار می‌کنه که هم وزن‌ها رو تقریباً کاملاً دودویی می‌کنه، هم اکتیویشن‌ها رو شدید فشرده می‌کنه (6 بیت)، و همه اینا بدون اینکه مدل بخواد همه‌چی یادش بره یا عملکردش بیاد پایین. تو دنیای واقعی اگه بخوای مدل‌های زبانی رو بندازی روی موبایل یا دستگاه‌های ضعیف‌تر و هزینه رو بیاری پایین، این روش به درد می‌خوره. خلاصه، یکی از باحال‌ترین پیشرفت‌ها تو بحث فشرده‌سازی LLMهاست که احتمالاً اسمش رو بیشتر خواهیم شنید!
منبع: +