تو دنیای هوش مصنوعی، بعضی مدلها خیلی بزرگ و پیچیدهان. مثلاً مدلهایی مثل GPT که با میلیاردها پارامتر کار میکنن و کارهای خیلی پیچیدهای انجام میدن. اما مشکل اینه که این مدلها خیلی حجیم و سنگین هستن. برای اجراشون به سخت افزارهای خیلی قوی و انرژی زیادی نیازه. اینجاست که یه تکنیک جالب به اسم تقطیر دانش (Knowledge Distillation) به کمکمون میاد!
تقطیر دانش چیه؟
تقطیر دانش یه روشیه که به کمکش میتونیم دانش یه مدل بزرگ و پیچیده رو به یه مدل کوچکتر و سادهتر منتقل کنیم. این کار شبیه اینه که یه استاد باتجربه، تمام دانشش رو به شاگردش یاد بده، اما به شکلی فشرده و کارآمد!
تقطیر دانش چطور کار میکنه؟
آموزش مدل بزرگ (معلم): اول یه مدل بزرگ و قوی رو آموزش میدیم. این مدل میتونه خیلی دقیق باشه، اما اجراش سنگینه و نیاز به منابع زیادی داره.
تولید داده های نرم: به جای اینکه مدل کوچک فقط جوابهای درست رو یاد بگیره، ازش میخوایم "تفکرات پنهان" مدل بزرگ رو هم تقلید کنه. مثلاً اگر مدل بزرگ بین دو جواب شک داره (مثلاً 70 درصد جواب A و 30 درصد جواب B)، مدل کوچک باید این شک رو هم یاد بگیره.
آموزش مدل کوچک (شاگرد): حالا مدل کوچکتر رو آموزش میدیم تا هم جوابهای درست رو یاد بگیره، هم الگوی پیشبینی مدل بزرگ رو تقلید کنه.
تقطیر دانش با مثال کد: آموزش مدل کوچک از مدل بزرگ
بیایید با یک مثال کد (به زبان پایتون) تقطیر دانش را عملاً ببینیم. از کتابخانهی معروف PyTorch استفاده میکنیم و مراحل را قدم به قدم جلو میرویم.
نصب و ایمپورت کتابخونه ها
برا نصب کتابخونه ها این دستور رو با پایتون 3.8.6 اجرا کنین.
pip install torch torchvision
حالا باید کتابخونه هایی رو که نصب کردیم داخل پروژه ایمپورت کنیم
کد ها رو با سایت کربن نوشتم نگید کپی کردی
تعریف مدل بزرگ (معلم) و مدل کوچک (شاگرد)
فرض کنین مدل معلم یه شبکهی عصبی پیچیدهتر هست و مدل شاگرد یک شبکهی سادهتر.
آمادهسازی داده ها
از دیتاست سادهای مثل MNIST استفاده میکنیم.
آموزش مدل معلم
اول مدل معلم را آموزش میدهیم تا دانش آن را به دست بیاوریم.
آموزش مدل شاگرد
حالا از خروجیهای مدل معلم برای آموزش مدل شاگرد استفاده میکنیم. اینجا از تنسور نرمشده (Soft Targets) استفاده میشود.
توضیحات کد
مدل معلم: یک شبکهی عصبی با دو لایهی پنهان بزرگ تعریف کردیم. این مدل روی دیتاست MNIST آموزش میبیند.
مدل شاگرد: یک شبکهی عصبی سادهتر با یک لایهی پنهان تعریف کردیم. هدف این است که این مدل از مدل معلم یاد بگیرد.
تنسور نرمشده: با استفاده از پارامتر دما (Temperature)، خروجیهای مدل معلم را نرمسازی میکنیم تا مدل شاگرد بتواند بهتر یاد بگیرد.
خطای تقطیر: از ترکیب دو خطا استفاده میکنیم: خطای معمولی (Cross-Entropy): برای یادگیری جوابهای درست. خطای تقطیر (KL Divergence): برای یادگیری "تفکرات پنهان" مدل معلم.
پارامتر آلفا: این پارامتر تعیین میکند که چقدر به خطای معمولی و چقدر به خطای تقطیر اهمیت بدهیم.
کاربرد های تقطیر دانش
دستیارهای صوتی: نسخههای سبکشدهی دستیارهایی مثل الکسا یا گوگل اسیستنت که روی موبایل اجرا میشوند.
تشخیص تصویر: اجرای مدلهای تشخیص اشیا روی دوربینهای امنیتی یا موبایل.
پردازش زبان طبیعی: مدلهای ترجمه یا چتباتهایی که روی دستگاههای کمقدرت کار میکنند.
سلامت دیجیتال: اجرای مدلهای تشخیص بیماری روی دستگاههای پزشکی قابلحمل.
چالش های تقطیر دانش
کیفیت مدل معلم: اگر مدل معلم ضعیف باشد، مدل شاگرد هم ضعیف میشود.
انتقال دانش پیچیده: بعضی مدلها استدلالهای چندمرحلهای انجام میدهند که انتقال آنها به مدل کوچک سختتر است.
بهینهسازی: پیدا کردن تعادل بین اندازهی مدل و دقت آن یک چالش بزرگ است.
حرف آخر
تقطیر دانش فقط یک تکنیک فنی نیست، بلکه فلسفهای برای دموکراتیک کردن هوش مصنوعی است! با این روش، قدرت مدلهای بزرگ را در دسترس همه قرار میدهیم، بدون نیاز به سختافزارهای خاص. پس دفعهی بعد که با یک اپلیکیشن هوشمند روی موبایلتان کار کردید، بدانید شاید یک مدلِ "مقطر" پشت صحنه دارد زحمت میکشد!