کاتالیست: منظم‌کننده جدید و باحال واسه حذف ساختاری شبکه عصبی (همراه افزونه کمکی!)

Fall Back

خب بچه‌ها، بذارین یه سری به دنیای شبکه‌های عصبی بزنیم و ببینیم این مقاله جدید که اسمش کاتالیست (Catalyst) هست درباره چیه! احتمالاً اگه قبلاً سر و کارتون به یادگیری عمیق خورده باشه، می‌دونین که این مدل‌ها گاهی انقدر بزرگ و سنگین می‌شن که واسه اجرا توی خیلی از دستگاه‌ها یه کابوس حساب می‌شن. اینجاست که روش‌هایی مثل Structured Pruning میاد وسط.

Structured Pruning یعنی چی؟ یعنی به‌جای اینکه فقط یه مشت وزن کوچیک تو شبکه رو حذف کنیم، می‌آیم کل یه فیلتر یا channel (یعنی یه سری وزن به طور مرتب توی شبکه) رو باهم حذف می‌کنیم. این کار باعث میشه مدل جمع و جورتر بشه، سریع‌تر اجرا بشه و مصرف منابع هم بیاد پایین؛ مثلاً برای موبایل یا سیستم‌های ضعیف‌تر خیلی عالیه!

اما یه سوال مهم: ما چجوری تصمیم می‌گیریم که کدوم فیلترها رو حذف کنیم؟ این کار رو قبلاً با یه سری منظم‌کننده (Regularizer) مثل L1 یا Group Lasso انجام می‌دادن. حالا L1 مثلاً میاد به وزن‌های شبکه فشار میاره که مقدارشون رو تا حد ممکن کم کنن تا در نهایت مقدارشون نزدیک صفر بشه و حذفشون کنیم. Group Lasso هم تقریباً همینه، فقط به صورت گروهی عمل می‌کنه و میره سراغ کانال‌ها یا فیلترها.

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

حالا بیاین ببینیم این مقاله چه حرف جدیدی داره:

این تیم اومدن دقیقاً بررسی کردن که چه شرط ریاضی لازمه تا وقتی بخشی از مدل رو حذف می‌کنیم (یعنی pruning انجام می‌دیم)، عملکرد مدل خراب نشه. بر اساس این شرط، یه منظم‌کننده جدید ساختن که اسمش رو گذاشتن Catalyst. حالا Catalyst یعنی چی؟ توی شیمی، کاتالیست اون ماده‌ایه که روند یه واکنش رو سریع‌تر یا بهتر می‌کنه بدون اینکه خودش مصرف بشه؛ اینجا هم قراره تو «حذف ساختاری» نقش یه کمک‌رسان جدید رو بازی کنه!

فرق اصلی کاتالیست چیه؟ این منظم‌کننده به‌جای اینکه صرفاً مقدار فیلتر رو نگاه کنه، میاد یه فضا یا دنیای جدید (بهش می‌گن extended parameter space، یعنی فضای پارامترهای گسترده‌تر) تعریف می‌کنه و یه سری متغیر کمکی (auxiliary catalyst variables) هم اضافه می‌کنه. این متغیرها یه جورایی به مدل یاد میدن که فیلترها رو عادلانه‌تر بررسی کنه و فقط به کوچیکی یا بزرگی مقدار فیلتر بسنده نکنه.

نتیجه این کار چیه؟ با استفاده از Catalyst، احتمال حذف شدن یا نشدن همه فیلترها منصفانه‌تر میشه و هیچ بایاسی به سمت فیلترهای کوچیک نداره. یعنی مثلاً اگه دو تا فیلتر دارین که یکی مقدارش خیلی کمه و اون یکی بیشتره، لزوماً قرار نیست همیشه اون کم مقدار رو حذف کنین. نکته محشر بعدی اینکه مرز بین حذف شدن و حذف نشدن فیلترها رو خیلی قوی‌تر و پرحاشیه‌تر (wide-margin) درست کردن. این یعنی با یه تغییر کوچیک تو مقدار فیلترها، دیگه تصمیم حذف یا نگه داشتنشون برعکس نمیشه و مدل نسبت به تکون‌های کوچیک مقاوم‌تر کار می‌کنه (به این میگن robust pruning behavior).

یه سوال مهم: حرف قشنگ زدن، اما واقعاً این روش جواب میده؟ یعنی تو عمل بهتر از بقیه‌س؟

جوابش بله‌س! نتایج آزمایشی که منتشر کردن نشون میده تکنیک Catalyst Pruning تو انواع مدل‌ها و دیتاست‌ها بهتر از بقیه روش‌های حذف فیلتر (filter pruning) جواب داده و همونطور که از تئوری‌ش انتظار می‌رفت هم مقاوم‌تر و هم منصفانه‌تر فیلترها رو حذف می‌کنه.

پس جمع‌بندی: اگه دنبال راهی هستین که بتونین مدل یادگیری عمیق (deep learning) خودتون رو جمع و جور، سریع و هوشمندانه‌تر کنین و حذف ساختاری هم براتون مهمه، حتماً یه نگاهی به Catalyst بندازین. این تکنیک هم تئوری قوی داره، هم توی عمل یه سر و گردن از بقیشون جلوتره!

امیدوارم این توضیح کلی و خوش‌حال‌کننده کمکتون کنه که ایده این مقاله رو بهتر بگیرید! هر سوالی بود، کامنت کنین تا بیشتر براتون بازش کنم 🙌

منبع: +