اساس کار اینه که مدل Student فقط از روی لیبلهای واقعی (ground-truth) یاد نمیگیره، بلکه تلاش میکنه خروجیهای مدل Teacher رو هم تقلید کنه. این خروجیها فقط جواب نهایی نیستن، بلکه شامل توزیع کامل احتمالاتی روی تمام توکنهای ممکن (logits) هم میشن. این اطلاعات غنی که بهش "dark knowledge" هم میگن، به Student کمک میکنه تا "روش فکر کردن" Teacher رو یاد بگیره، نه فقط جواب درست رو.
چندتا استراتژی اصلی برای این کار وجود داره:
یک. Response-Based Distillation
این روش کلاسیک و سادهترین راهه. اینجا Student سعی میکنه توزیع احتمالاتی (logits) خروجی Teacher رو برای هر توکن تقلید کنه. مدلهایی مثل DistilBERT از این روش استفاده کردن. این متد از نظر سختافزاری بهینهترینه.
دو. Feature-Based Distillation
اینجا به جای خروجی نهایی، حالتهای میانی (hidden states) یا attention maps مدل Teacher به Student منتقل میشه. این کار Student رو مجبور میکنه که ساختار داخلی و فرآیند استدلال Teacher رو یاد بگیره. این روش برای پر کردن گپ بین یه Teacher خیلی بزرگ و یه Student خیلی کوچیک مفیده.
سه. Instruction & Rationale-Based Distillation
این یکی از موثرترین تکنیکها برای مدلهای امروزیه. به جای جواب تنها، از Teacher خواسته میشه که مراحل استدلال خودش یا همون Chain-of-Thought (CoT) رو هم تولید کنه. بعد Student روی این دیتاست که شامل
دستور -> مراحل استدلال -> جواب نهایی هست، فاینتیون میشه. پروژههایی مثل Orca نشون دادن که این روش میتونه عملکرد مدلهای کوچیک در تسکهای استدلالی رو به شدت بهبود بده. اصل داستان اینه که به جای یاد دادن *جواب نهایی*، به مدل *روش فکر کردن* رو یاد بدی.گردش کار عملیاتی برای پیادهسازی Knowledge Distillation معمولاً اینطوریه:
۱. جمعآوری دیتا: یه مجموعه از پرامپتها یا دستورات آماده میشه. این دیتا میتونه از دیتاستهای عمومی مثل Alpaca بیاد یا به صورت مصنوعی با روشهایی مثل Self-Instruct تولید بشه.
۲. گرفتن خروجی از Teacher: با استفاده از دیتاست مرحله قبل، از مدل Teacher خروجی گرفته میشه. اینجا تنظیم هایپرپارامترهایی مثل
Temperature مهمه. دمای بالاتر (مثلاً T > 1.0) تنوع بیشتری در خروجی ایجاد میکنه، در حالی که دمای پایینتر (مثلاً T ≈ 0.7) جوابهای دقیقتری میده.۳. فیلتر کردن و امتیازدهی: خروجیهای Teacher همیشه بینقص نیستن و ممکنه شامل hallucination یا اطلاعات غلط باشن. به نظر من، مهمترین قسمت داستان همین فیلتر کردنه. با استفاده از روشهایی مثل rejection sampling، بررسی `perplexity`، یا فیلترهای مبتنی بر قوانین، خروجیهای بیکیفیت حذف میشن تا Student دیتای تمیزی برای یادگیری داشته باشه.
۴. فاینتیون کردن Student: مدل Student روی دیتاست تمیز شده فاینتیون میشه. تابع هزینه (loss function) معمولاً ترکیبی از دو بخشه: یکی `Cross-Entropy` روی لیبلهای واقعی (اگه وجود داشته باشن) و دومی
KL Divergence بین خروجی Student و Teacher. تفاوت بین رویکرد black-box (فقط دسترسی به متن خروجی Teacher) و white-box (دسترسی به logits) هم اینجا مشخص میشه.با وجود تمام مزایا، این روش چالشهایی هم داره. بزرگترین مشکل، انتقال خطاها و hallucination های مدل Teacher به Student هست. اگه Teacher اطلاعات غلط تولید کنه، Student هم همون رو یاد میگیره. مسئلهی دیگه، "capacity gap" هست؛ یعنی وقتی Student خیلی کوچیک باشه، نمیتونه به خوبی از یه Teacher خیلی بزرگ یاد بگیره. همچنین مسائل قانونی مربوط به لایسنس API مدلهای تجاری مثل GPT-4 هم وجود داره که استفاده از خروجی اونها برای ترین کردن مدلهای رقیب رو محدود میکنه.
📃 مقاله اصلی هینتون در مورد Distillation
Distilling the Knowledge in a Neural Network
📃 مقاله پروژه Orca که از CoT Distillation استفاده کرده
Orca: Progressive Learning from Complex Explanation Traces of GPT-4
🛠 Join @LLMEngineers Community