آیا میتوان 99% از شبکه های عصبی را هرس نمود؛ بدون آنکه از دقت آن کاسته شود؟
حتی در رایجترین معماریهای شبکه های عصبی هم تعداد بسیار زیادی پارامتر وجود دارد. شبکه عصبی ResNet50 که مدل پایهای متدوالی است حدود 25 میلیون پارامتر دارد؛ به این معنی که هنگام آموزش شبکه در واقع با یک فضای پارامتر 25 میلیون بُعدی سروکار داریم.
برای اینکه عدد مذکور را بهتر درک کنید یک مکعب را در این فضا مجسم نمایید. یک مکعب n وجهی، رأس دارد. پس وقتی میگوییم یک شیء 25 میلیون بُعد دارد، بدین معنی است که راس دارد. در متود جستجوی مشبک جستجوی مشبک Search Grid این مکعب بزرگ فقط یک مؤلفه محسوب میشود. برای مثال در نظر بگیرید که تعداد اتمهای موجود در بخش قابل مشاهدهی جهان حدود برآورد شده است. درک چنین اعدادی از عهدهی آدمی خارج است.
بنابراین میتوانیم بگوییم که کاهش تعداد پارامترها چندین مزیت به دنبال خواهد داشت. یک شبکهی خلوت هم کوچکتر است و هم آموزش و استفاده از آن سریعتر خواهد بود. دستگاههای تعبیهشده یا تلفنهای هوشمند که سختافزاری محدودی دارند، سرعت و اندازه نقش تعیینکننده خواهد داشت. علاوه بر این، هرچه مدلها پیچیدهتر باشند احتمال بیشتطبیقی overfitting بیشتر خواهد بود. در نتیجه محدودکردن فضای جستجو میتواند به عنوان تنظیمکننده نیز عمل کند.
با این وجود کاهش فضای جستجو کار آسانی نیست، زیرا ممکن است باعث کاهش دقت مدل شود. بنابراین، میتوان گفت باید بین پیچیدگی و عملکرد تعادلی دقیق برقرار کرد. در این نوشتار قصد داریم نگاهی به چالشهای این مسیر بیاندازیم و راهحلهای بالقوهی آن را بررسی کنیم.
هرس وزن Weight pruning
در شروع, سادهترین چالش این است که بعد از آموزش مدل بخواهیم پارامترهای آن را کاهش دهیم. این مسئله به آموزش کمکی نخواهد کرد، اما محاسبات لازم در مرحله استنتاج را خواهد کاست.
فرآیند حذف وزنها، هرس کردن نامیده میشود (از اینجا به بعد، وزن و پارامتر به جای هم به کار خواهند رفت). ریشهی این اصطلاح به مقالهی مشهور آسیب مغزی بهینه (Yann LeCun, John S. Denker and Sara A. Solla) برمیگردد. آنها در این مقاله یک روش برای هرس کردن پیشنهاد دادند که شامل این گامهاست:
[irp posts=”17090″]- آموزش مدل.
- برآورد اهمیت هر وزن: معیار برجستگی را میتوانید از طریق آَشفته کردن وزن و سپس مشاهده تغییر ایجاد شده در تابع هزینه تعریف کنید. هرچقدر این تغییر کوچکتر باشد بدین معنی است که وزن اثر کمتری بر روی آموزش دارد.
- حذف کماهمیتترین وزنها: بدین صورت که ارزش آنها را صفر کنید و بگذارید در بقیه2ی طول فرآیند همانطور باقی بماند.
- به گام اول برگردید و مدل هرس شده را مجدداً آموزش دهید.
ادامهی آموزش با وزنهای هرس شده ضروری است. نویسندگان به این نتیجه رسیدهاند که بدون آموزش مجدد مدل، با حذف قسمت بزرگی از وزنها، تابع هدف (که همان تابع زیان است) به طور معناداری افزایش مییابد.
زمانی که شبکه های عصبی هرس شده را دوباره آموزش دهیم، به یک چالش خاص برمیخوریم و آن این است که به دلیل ظرفیت کاهش یافته، آموزش مجدد به شدت سختتر میشود. راهحل این مشکل بعدها با ارائهی فرضیهای به نام بلیط لاتاری مطرح شد، فرضیهای که این مشکل را از زاویهای دیگر مینگرد.
فرضیهی بلیط لاتاری
به دست آوردن بلیط برندهی لاتاری احتمال بسیار پایینی دارد. برای مثال اگر در بازی لاتاری Powerball شرکت میکنید احتمال اینکه بلیط برندهی اصلی را ببرید، یک در 292,201,338, است. حال اگر n بلیط گرفته باشید احتمال برد شما چقدر خواهد بود؟ با همین حساب اگر احتمال برد باشد:
p=1/292201338
احتمال برنده نشدن میشود:
1-p
زمانی که n بلیط میخرید، احتمال اینکه هیچکدام آنها برنده نباشد برابر است با:
(1-p)^n
:در نتیجه میتوان گفت احتمال اینکه حداقل یکی از آنها برنده باشد میشود
1-(1-p)^n
حال اگر n مقدار زیادی باشد این نسبت به یک نزدیکتر خواهد شد (احتمال برد بیشتر خواهد شد).
شاید برایتان این سوال پیش آمده باشد که مطالبی که بیان شد چه ارتباطی با شبکه های عصبی دارد. قبل از آموزش، وزنهای یک مدل به صورت تصادفی تعریف میشوند. آیا امکان دارد زیرشبکهی یک شبکه که به صورت اتفاقی تعریف شده، بتواند لاتاری تعریف شده را ببرد؟ جاناتان فرنکل و مایکل کاربین در کار خود فرضیهی بلیط لاتاری را بدین صورت شرح میدهند:
یک شبکه عصبی متراکم که به صورت تصادفی تعریف شده حاوی یک زیرشبکه است. این زیرشبکه به نحوی تعریف شده که زمانی که بهتنهایی آموزش داده میشود، دقتش میتواند با دقت شبکهی اصلی بعد از آموزش به حداکثر همان تعداد تکرارها، برابری کند.
بزرگترین مشکل در دستیابی به دقتی یکسان با شبکهی کامل، تعداد مراحل آموزشی است. همانطور که قبلاً هم گفته شد، بزرگترین چالش هرس کردن این است: آموزش شبکههای کوچکتر به دلیل ظرفیت مدلسازی پایینتر، دشوارتر است.
حال چطور میتوانیم این برندههای تعریفشدهی لاتاری را پیدا کنیم؟ آیا اصلاً چنین چیزی وجود دارد؟ نویسندگان روشی را پیدا کردهاند که از طریق آن می¬توان چنین زیرشبکههایی را در معماری¬های خاصی تشخیص داد. روش آنها این مراحل را در برمیگیرد:
یک شبکه عصبی را به صورت اتفاقی تعریف کنید.
شبکه را برای n گام آموزشی، آموزش دهید.
k% از وزنهایی که کمترین کمیت را دارند حذف کنید.
وزنهای باقیمانده را بر اساس ارزشی که هنگام مقداردهی تصادفی اولیه داشتند دوباره تنظیم کنید.
به گام دوم برگشته و آموزش و هرس را تکرار کنید.
این روش در مقایسه با روشهای قبلی دو گام کلیدی دارد. 1. وزنها بر اساس کمیتشان به آسانی حذف میشوند و 2. وزنهای شبکه عصبی هرس شده مجدداً تعریف نمیشوند، بلکه به حالتی که بعد از اولین معرفی داشتند برمیگردند. این مسئله از اهمیت بالایی برخوردار است: مقداردهی تصادفی مجدد شبکه عصبی هرس شده، زمانی که بیش از 80% وزنها حذف گردیده باشند، منجر به نتایجی شد که به طرز معناداری بدتر بود.
شکل زیر دقت آزمون استفاده از Lenet (هرس مکرر) را به صورت همزمان با آموزش نشان میدهد. هر منحنی نشان دهنده میانگین 5 بار آزمون است. برچسب های P_m حاکی از وزنهای باقیمانده در شبکه عصبی بعد از هرس هستند. ستونهای خطا نیز حداقل و حداکثر هر آزمون را به نمایش میگذارند.
با اینحال این روش محدودیتهایی هم دارد. برای نمونه، این روش در مشکلات و معماریهای بزرگمقیاستر عملکرد خوبی از خود نشان نمیدهد. نویسندگان مقالهی اصلی بیان کردهاند که این روش در دادههای دیتاستهای پیچیدهتر (مثل ImageNet) و دیتاستهای عمیقتر (مثل ResNet) قادر به تشخیص برندههای لاتاری تعریفشده نیست.
به طور کلی رسیدن به تعادل بین دقت و پراکندگی مسئله دشواری است که زمینهی پژوهشی داغ و فعالی را نیز به خود اختصاص داده و کارهای علمی مهمی در آن در حال انجام هستند.
با اینکه ارائه این روش پیشرفت بزرگی محسوب میشد، یک مشکل اساسی را نتوانست حل کند و آن این است که زیرشبکههای هرس شده همچنان به آموزش مجدد نیاز دارند. برای یافتن راهحل، خود مشکل را معکوس کردیم.
شبکه های عصبی weight-agnostic
کاری که تا الان کردهایم این بوده که با یک شبکه عصبی بزرگ شروع کنیم و آن را مکرراً هرس کرده تا فشرده و کوچک شود. با این حال میتوانیم از رویکرد دیگری استفاده کنیم که منطق زیربنایی آن نطقه مقابل روش قبلی است؛ یعنی به جای هرس کردن میتوانیم با یک معماری ساده (کمینه ) شروع کرده و به تدریج به آن بیافزاییم.
آنچه بیان کردیم نقطهی آغاز کار آدام گیر و دیوید ها در مقالهی اخیرشان به نام شبکه های عصبی weight-agnostic بود. این نویسندگان علاوه بر به دست آوردن شبکهای ساده، هدف دیگری هم دنبال میکردند. هدف دیگر آنهااین بود که معماریهای تولیدشده باید با وزنهای تصادفی عملکرد خوبی داشته باشند. اگر به خاطر داشته باشید بزرگترین نقطه ضعف روشهای هرس کردن این بود که زیرشبکههای حاصل به سختی آموزش داده میشدند. اما در این روش جدید، دیگر به آموزش نیازی نیست.
روش گیر و ها در اصل یک جستجوی مکاشفه ای Evolutionary search در بین معماریهای محتمل است. در مقایسه با متدهای پیشین، جستجو در این روش به دنبال سادگی و خاصیت weight-agnostic (ضدوزنی) میباشد. گامهای این روش عبارتاند از:
- یک مجموعه از معماریهای سادهی شبکه عصبی ایجاد کنید که قابلیت تعبیه در یک معماری تک والد را داشته باشند. در این مرحله هیچ ارزش وزنی وجود ندارد، بلکه فقط ارتباطات هستند. اساساً میتوان گفت که هر شبکه معادل یک هرس خاص از معماری والد است.
- شبکههایی که مجموعه وزنهای مشترک دارند را آزمایش کنید. به اشتراکگذاری وزنها ضروری است، زیرا همین خاصیت باعث میشود که جستجو به دنبال معماریهای weight-agnostic باشد.
- شبکهها را بر اساس عملکرد و پیچیدگی مرتب کنید. از آنجایی که وزنها بین شبکهها به اشتراک گذاشته شده بودند، عملکرد میتواند نشاندهندهی ظرفیت weight-agnostic نیز باشد.
- از طریق انتخاب شبکههای برتر و اصلاح تصادفی آنها، شبکههای جدید خلق کنید.
- شبکههای به دست آمده را انتخاب کرده و به گام دوم بازگردید.
نویسندگان مراحل فرآیند گفته شده را در شکل زیر به صورت خلاصه آوردهاند. (جستجوی شبکه عصبی weight-agnostic برای شبیهسازی هر وزن مشترک واحد نمونهگیری میکند و بدین ترتیب هنگام جستجو در انواع شبکه های عصبی، نیازی به یادگیری وزن برای هر شبیهسازی ندارد. شبکهها بر اساس چند شبیهسازی ارزیابی میشوند. در هر بار شبیهسازی به هر وزن مشترک یک ارزش داده شده و پاداش تراکمی کل آزمون ثبت میگردد. مجموعه این شبکهها براساس عملکرد و میزان پیچیدگی رتبهبندی میشود. شبکههایی که در رتبههای بالا قرار دارند بر اساس احتمالات انتخاب شده و به صورت تصادفی پخش میشوند تا یک مجموعه جدید را تشکیل دهند. سپس فرآیند تکرار میشود.)
از این طریق میتوان معماریهایی را یافت که در استفاده از وزنهای تصادفی عملکرد خوبی دارند و این خود دستاوردی بزرگ است.
این روش نه تنها برای تشخیص دیجیتالی دستخط، بلکه برای چندین مسئلهی دیگر هم در حوزهی یادگیری ماشین کاربرد دارد. نویسندگان قادر بودند معماریهای سادهی weight-agnostic مهندسی کنند که برای رویارویی با چندین مشکل دائمی در رابطه با کنترل، همچون متعادلسازی میله Pole Balancing (یک مسأله یادگیری تقویتی میباشد که در آن با تغییر جهت یک میله سعی میشود آن را به صورت قائم متعادل نگه داشت) و cart racing (یک مساله دیگر یادگیری تقویتی) به کار میرود.
شکلی که در پایین مشاهده میکنید رشد انواع شبکه عصبی weight-agnostic را در طی زمان نشان میدهد.
نسل 8: در اینجا شبکهای جوان را شاهد هستیم که تقریباً در استفاده از همهی وزنها عملکرد ضعیفی از خود نشان میدهد.
نسل 32: روابط بین موقعیت Cart و سرعت میله را به نمایش گذاشته است. تنش میان این دو, باعث به وجود آمدن تمایل به مرکزگرایی میله (centering) و نوعی رفتار تاب خوردن (swing-up) می شود.
نسل 128: مربوط به موقعیتی است که پیچیدگی افزایش داده شده تا تعادل میله (که حالا در محیط برنامه به صورت قائم می باشد) را اصلاح کند.
تا کنون این روش در یافتن معماریهای ساده که نیازی به آموزش ندارند بیشترین کمک را به ما ارائه داده است. با این حال هنوز هم جای کار زیادی وجود دارد. برای برخی مسائل پیچیدهتر همچون ردهبندی دیتاست ImageNet، تلاش برای پیدا کردن شبکههای weight-agnostic دقیق همچنان بینتیجه مانده است.
پیشرفتهای جدید
همزمان با نوشتن این مطلب مقالهای جدید منتشر شده که ادعا میکند به بالاترین حد نظری فشردهسازی، بدون نیاز به بررسی دادهها، دست یافته است. در مقالهی هرس شبکه های عصبی بدون استفاده از داده از طریق حفظ جریان سیناپسی (Hidenori Tanaka et al.) از الگوریتمی به نام SynFlow استفاده میکنند که قابلیت کنترل مسائل پیچیدهای که روشهای قبلی نمیتوانستند را دارد.
[irp posts=”3068″]هرس کردن در کاربرد
تاکنون تنها از جنبهی تئوری هرس کردن سخن گفتهایم. اکنون قصد دارم با معرفی ابزارهای کاربردی در این حوزه مطلب را تمام کنم. اگر کاربر نرمافزار TensorFlow هستید، چندین ابزار داخلی برای بهینهسازی مدل (از جمله هرس کردن) وجود دارد.
خلاصه
یادگیری ماشینی به آموزش مدلهای دقیق ختم نمیشود. زمانی که میخواهیم این مدلها را وارد فرایند تولید کنیم، اندازه و سرعت از اهمیت بالایی برخوردارند. به منظور جای دادن معماریهای پیچیده در محدودیتهای تولیدی میتوان اندازهی مدلها را از طریق هرس کردن وزنهای خاص کاهش داد (روشهای دیگری هم وجود دارند که ما از آنها صحبتی نکردهایم).
از آنجایی که باید به از کاهش دقت مدل نیز توجه داشته باشیم، میتوانیم بگوییم که این کار آسان نخواهد بود. علاوه بر این، معماریهای کوچکتر نیاز به آموزش دوباره دارند که خود میتواند با توجه به ظرفیت کاهش یافتهی مدلسازی کار دشواری باشد. در این مطلب دو روش هرس کردن و یک رویکرد مکمل برای جستجوی معماری را بررسی کردیم که تا حد زیادی میتوانند این مشکلات را حل کنند.
با اینحال آنچه بیان شد تنها سر سوزنی از مطالب موجود در این زمینه بود. هرس کردن وزن به خصوص برای مسائل پیچیدهتر همچون شناسایی تصاویر بزرگ مقیاس (همچون تصاویر موجود در ImageNet)، خود یک حوزهی تحقیقاتی فعال به شمار میرود.
روشهای هرس کردن در چارچوبهای مدرن یادگیری عمیق همچون TensorFlow و PyTorch موجود هستند؛ بنابراین، میتوانید همین الان کار با آنها را آغاز و شاید حتی مرزهای این حوزه را هم جابجا کنید. پس اگر به این مطلب علاقهمند شدید، کار کردن با این ابزارها را شروع کنید.