شبکه های عصبی
آموزشآموزش‌های پایه‌ای هوش مصنوعیآموزش‌های پیشرفته هوش مصنوعیکتابخانه‌ های یادگیری عمیقیادگیری تقویتییادگیری عمیق

آیا می‌توان ۹۹% از شبکه های عصبی را هرس نمود؛ بدون آن‌که از دقت آن کاسته شود؟

    0
    مدت زمان مطالعه: ۸ دقیقه

    حتی در رایج‌­ترین معماری­‌های شبکه­ های عصبی هم تعداد بسیار زیادی پارامتر وجود دارد. شبکه عصبی ResNet50 که مدل پایه‌­ا‌ی متدوالی است حدود ۲۵ میلیون پارامتر دارد؛ به این معنی که هنگام آموزش شبکه در واقع با یک فضای پارامتر ۲۵ میلیون بُعدی سروکار داریم.

    برای این­که عدد مذکور را بهتر درک کنید یک مکعب را در این فضا مجسم نمایید. یک مکعب n وجهی،  رأس دارد. پس وقتی می­گوییم یک شیء ۲۵ میلیون بُعد دارد، بدین معنی است که  راس دارد. در متود جستجوی مشبک جستجوی مشبک Search Grid این مکعب بزرگ فقط یک مؤلفه محسوب می­‌شود. برای مثال در نظر بگیرید که تعداد اتم‌­های موجود در بخش قابل مشاهده‌­ی جهان حدود  برآورد شده است. درک چنین اعدادی از عهده‌­ی آدمی خارج است.

    بنابراین می­‌توانیم بگوییم که کاهش تعداد پارامتر­ها چندین مزیت به دنبال خواهد داشت. یک شبکه­‌ی خلوت هم کوچک­‌تر است و هم آموزش و استفاده از آن سریع­‌تر خواهد بود. دستگاه­‌های تعبیه­­‌شده  یا تلفن‌های هوشمند که سخت‌­افزاری محدودی دارند، سرعت و اندازه نقش تعیین‌­کننده خواهد داشت. علاوه بر این،­ هرچه مدل­‌ها پیچیده­‌تر باشند احتمال بیش‌­تطبیقی overfitting بیشتر خواهد بود. در نتیجه محدودکردن فضای جستجو می‌­تواند به عنوان تنظیم‌­کننده نیز عمل کند.

    با این وجود کاهش فضای جستجو کار آسانی نیست، زیرا ممکن است باعث کاهش دقت مدل شود. بنابراین، می‌­توان گفت باید بین پیچیدگی و عملکرد تعادلی دقیق برقرار کرد. در این نوشتار قصد داریم نگاهی به چالش‌­های این مسیر بیاندازیم و را‌‌‌‌ه‌­حل­های بالقوه‌­ی آن را بررسی کنیم.

    هرس وزن Weight pruning

    در شروع, ساده‌ترین چالش این است که بعد از آموزش مدل بخواهیم پارامترهای آن را کاهش دهیم. این مسئله به آموزش کمکی نخواهد کرد، اما محاسبات لازم در مرحله استنتاج  را خواهد کاست.

    فرآیند حذف وزن­‌ها، هرس کردن نامیده می­‌شود (از این­جا به بعد، وزن و پارامتر به جای هم به کار خواهند رفت). ریشه­‌ی این اصطلاح به مقاله­‌ی مشهور آسیب مغزی بهینه (Yann LeCun, John S. Denker and Sara A. Solla) برمی­‌گردد. آن‌ها در این مقاله یک روش برای هرس کردن پیشنهاد دادند که شامل این گام­‌هاست:

    1. آموزش مدل.
    2. برآورد اهمیت هر وزن: معیار برجستگی را می­‌توانید از طریق آَشفته کردن وزن و سپس مشاهده­ تغییر ایجاد شده در تابع هزینه تعریف کنید. هرچقدر این تغییر کوچک‌­تر باشد بدین معنی است که وزن اثر کمتری بر روی آموزش دارد.
    3. حذف کم­‌اهمیت‌­ترین وزن­‌ها: بدین صورت که ارزش آن­‌ها را صفر کنید و بگذارید در بقیه­۲ی طول فرآیند همان‌طور باقی بماند.
    4. به گام اول برگردید و مدل هرس شده را مجدداً آموزش دهید.

    ادامه­‌ی آموزش با وزن‌­های هرس شده ضروری است. نویسندگان به این نتیجه رسیده‌­اند که بدون آموزش مجدد مدل، با حذف قسمت بزرگی از وزن­‌ها، تابع هدف (که همان تابع زیان است) به طور معناداری افزایش می‌­یابد.

    شبکه عصبی

    تصویر ۱: تابع هدف (در dB) در مقایسه با تعداد پارامترها – بدون آموزش (منحنی بالا) و پس از آموزش (منحنی پایین) – منحنی های مربوط به مجموعه آموزشی (a) و برای مجموعه آزمون (b)

    زمانی که شبکه های عصبی هرس شده را دوباره آموزش دهیم، به یک چالش خاص برمی­خوریم و آن این است که به دلیل ظرفیت کاهش یافته، آموزش مجدد به شدت سخت­تر می­شود. راه‌حل این مشکل بعدها با ارائه­ی فرضیه‌­ای به نام بلیط لاتاری مطرح شد، فرضیه­‌ای که این مشکل را از زاویه‌­ای دیگر می‌نگرد.

    فرضیه­‌ی بلیط لاتاری:       

    به دست آوردن بلیط برنده­‌ی لاتاری احتمال بسیار پایینی دارد. برای مثال اگر در بازی لاتاری Powerball شرکت می‌­کنید احتمال این­که بلیط برنده‌­ی اصلی را ببرید، یک در ۲۹۲,۲۰۱,۳۳۸, است. حال اگر n بلیط گرفته باشید احتمال برد شما چقدر خواهد بود؟ با همین حساب اگر احتمال برد باشد:

    p=1/292201338

    احتمال برنده نشدن می­شود:

    ۱-p

    زمانی که n بلیط می­خرید، احتمال این­که هیچ­کدام آنها برنده نباشد برابر است با:

    (۱-p)^n

    :در نتیجه می­توان گفت احتمال این­که حداقل یکی از آن­ها برنده باشد می­شود

    ۱-(۱-p)^n

    حال اگر n مقدار زیادی باشد این نسبت به یک نزدیکتر خواهد شد (احتمال برد بیشتر خواهد شد).
    شاید برایتان این سوال پیش آمده باشد که مطالبی که بیان شد چه ارتباطی با شبکه های عصبی دارد. قبل از آموزش، وزن‌های یک مدل به صورت تصادفی تعریف می‌شوند. آیا امکان دارد زیرشبکه‌ی یک شبکه که به صورت اتفاقی تعریف شده، بتواند لاتاری تعریف شده را ببرد؟ جاناتان فرنکل و مایکل کاربین در کار خود فرضیه‌ی بلیط لاتاری را بدین صورت شرح می‌دهند:
    یک شبکه عصبی متراکم که به صورت تصادفی تعریف شده حاوی یک زیرشبکه است. این زیرشبکه به نحوی تعریف شده که زمانی که به‌تنهایی آموزش داده می‌شود، دقتش می‌تواند با دقت شبکه‌ی اصلی بعد از آموزش به حداکثر همان تعداد تکرارها، برابری کند.

    بزرگ‌ترین مشکل در دستیابی به دقتی یکسان با شبکه‌ی کامل، تعداد مراحل آموزشی است. همان‌طور که قبلاً هم گفته شد، بزرگ‌ترین چالش هرس کردن این است: آموزش شبکه‌های کوچک‌تر به دلیل ظرفیت مدل‌سازی پایین‌تر، دشوارتر است.
    حال چطور می‌توانیم این برنده‌های تعریف‌شده‌ی لاتاری را پیدا کنیم؟ آیا اصلاً چنین چیزی وجود دارد؟ نویسندگان روشی را پیدا کرده‌اند که از طریق آن می¬توان چنین زیرشبکه‌هایی را در معماری¬های خاصی تشخیص داد. روش آنها این مراحل را در برمی‌گیرد:

    یک شبکه عصبی را به صورت اتفاقی تعریف کنید.
    شبکه را برای n گام آموزشی، آموزش دهید.
    k% از وزن‌هایی که کمترین کمیت را دارند حذف کنید.
    وزن‌های باقیمانده را بر اساس ارزشی که هنگام مقداردهی تصادفی اولیه داشتند دوباره تنظیم کنید.
    به گام دوم برگشته و آموزش و هرس را تکرار کنید.

    این روش در مقایسه با روش‌های قبلی دو گام کلیدی دارد. ۱. وزن‌ها بر اساس کمیت‌شان به آسانی حذف می‌شوند و ۲. وزن‌های شبکه عصبی هرس شده مجدداً تعریف نمی‌شوند، بلکه به حالتی که بعد از اولین معرفی داشتند برمی‌گردند. این مسئله از اهمیت بالایی برخوردار است: مقداردهی تصادفی مجدد شبکه عصبی هرس شده، زمانی که بیش از ۸۰% وزن‌ها حذف گردیده باشند، منجر به نتایجی شد که به طرز معناداری بدتر بود.
    شکل زیر دقت آزمون استفاده از Lenet (هرس مکرر) را به صورت همزمان با آموزش نشان می‌دهد. هر منحنی نشان دهنده میانگین ۵ بار آزمون است. برچسب های P_m حاکی از وزن‌های باقیمانده در شبکه عصبی بعد از هرس هستند. ستون‌های خطا نیز حداقل و حداکثر هر آزمون را به نمایش می‌گذارند.

    شبکه عصبی

    عملکرد روش هرس ارائه شده توسط Frankle و Carbin.

    با این‌­حال این روش محدودیت­‌هایی هم دارد. برای نمونه، این روش در مشکلات و معماری‌­های بزرگ­‌مقیاس‌­تر عملکرد خوبی از خود نشان نمی­‌دهد. نویسندگان مقاله­‌ی اصلی بیان کرده­‌اند که این روش در داده­‌های دیتاست­‌های پیچیده‌­تر (مثل ImageNet) و دیتاست­‌های عمیق‌­تر (مثل ResNet) قادر به تشخیص برنده‌­های لاتاری تعریف‌­شده نیست.

    به طور کلی رسیدن به تعادل بین دقت و پراکندگی مسئله دشواری است که زمینه­‌ی پژوهشی داغ و فعالی را نیز به خود اختصاص داده و کارهای علمی مهمی در آن در حال انجام هستند.

    با این­که ارائه این روش پیشرفت بزرگی محسوب می­شد، یک مشکل اساسی را نتوانست حل کند و آن این است که زیرشبکه‌های هرس شده همچنان به آموزش مجدد نیاز دارند. برای یافتن راه­حل، خود مشکل را معکوس کردیم.

    شبکه های عصبی weight-agnostic

    کاری که تا الان کرده‌­ایم این بوده که با یک شبکه­ عصبی بزرگ شروع کنیم و آن را مکرراً هرس کرده تا فشرده­ و کوچک شود. با این حال می­‌توانیم از رویکرد دیگری استفاده کنیم که منطق زیربنایی آن نطقه مقابل روش قبلی است؛ یعنی به جای هرس کردن می­‌توانیم با یک معماری ساده (کمینه ) شروع کرده و به تدریج به آن بیافزاییم.

    آن­چه بیان کردیم نقطه­‌ی آغاز کار آدام گیر و دیوید ها در مقاله­‌ی اخیرشان به نام شبکه های عصبی weight-agnostic  بود. این نویسندگان علاوه بر به دست آوردن شبکه‌­ای ساده، هدف دیگری هم دنبال می­‌کردند. هدف دیگر آن‌هااین بود که معماری­‌های تولیدشده باید با وزن­‌های تصادفی عملکرد خوبی داشته باشند. اگر به خاطر داشته باشید بزرگ­‌ترین نقطه ضعف روش‌­های هرس کردن این بود که زیرشبکه­‌های حاصل به سختی آموزش داده می­‌شدند. اما در این روش جدید، دیگر به آموزش نیازی نیست.

    روش گیر و ها در اصل یک جستجوی مکاشفه ای Evolutionary search در بین معماری­‌های محتمل است. در مقایسه با متدهای پیشین، جستجو در این روش به دنبال سادگی و خاصیت weight-agnostic (ضدوزنی) می‌­باشد. گام­‌های این روش عبارت­‌اند از:

    1. یک مجموعه از معماری­‌های ساده­‌ی شبکه­ عصبی ایجاد کنید که قابلیت تعبیه در یک معماری تک والد را داشته باشند. در این مرحله هیچ ارزش وزنی وجود ندارد، بلکه فقط ارتباطات هستند. اساساً می‌­توان گفت که هر شبکه معادل یک هرس خاص از معماری والد است.
    2. شبکه‌­هایی که مجموعه وزن­‌های مشترک دارند را آزمایش کنید. به اشتراک‌گذاری وزن­‌ها ضروری است، زیرا همین خاصیت باعث می­شود که جستجو به دنبال معماری­‌های weight-agnostic باشد.
    3. شبکه­‌ها را بر اساس عملکرد و پیچیدگی مرتب کنید. از آن­جایی که وزن­‌ها بین شبکه­‌ها به اشتراک گذاشته شده بودند، عملکرد می­‌تواند نشان­‌دهنده‌­ی ظرفیت weight-agnostic نیز باشد.
    4. از طریق انتخاب شبکه­‌های برتر و اصلاح تصادفی آن­ها، شبکه‌­های جدید خلق کنید.
    5. شبکه­‌های به دست آمده را انتخاب کرده و به گام دوم بازگردید.

    نویسندگان مراحل فرآیند گفته شده را در شکل زیر به صورت خلاصه آورده‌­اند. (جستجوی شبکه­ عصبی weight-agnostic برای شبیه­‌سازی هر وزن مشترک واحد نمونه­‌گیری می­کند و بدین ترتیب هنگام جستجو در انواع شبکه­ های عصبی، نیازی به یادگیری وزن برای هر شبیه­‌سازی ندارد. شبکه­‌ها بر اساس چند شبیه­‌سازی ارزیابی می‌­شوند. در هر بار شبیه­‌سازی به هر وزن مشترک یک ارزش داده شده و پاداش تراکمی کل آزمون ثبت می‌­گردد. مجموعه این شبکه­‌ها براساس عملکرد و میزان پیچیدگی رتبه‌بندی می­‌شود. شبکه­‌هایی که در رتبه‌­های بالا قرار دارند بر اساس احتمالات انتخاب شده و به صورت تصادفی پخش می­‌شوند تا یک مجموعه جدید را تشکیل دهند. سپس فرآیند تکرار می­شود.)

    شبکه عصبی

    از این طریق می­‌توان معماری­‌هایی را یافت که در استفاده از وزن­‌های تصادفی عملکرد خوبی دارند و این خود دستاوردی بزرگ است.

    این روش نه تنها برای تشخیص دیجیتالی دست­خط، بلکه برای چندین مسئله­‌ی دیگر هم در حوزه­‌ی یادگیری ماشین کاربرد دارد. نویسندگان قادر بودند معماری­‌های ساده­ی weight-agnostic مهندسی کنند که برای رویارویی با چندین مشکل دائمی در رابطه با کنترل، همچون متعادل‌­سازی میله Pole Balancing (یک مسأله یادگیری تقویتی می‌باشد که در آن با تغییر جهت یک میله سعی می‌شود آن را به صورت قائم متعادل نگه داشت) و cart racing (یک مساله دیگر یادگیری تقویتی) به کار می­‌رود.

    شکلی که در پایین مشاهده می­‌کنید رشد انواع شبکه­ عصبی weight-agnostic را در طی زمان نشان می‌­دهد.

    نسل ۸: در این‌جا شبکه­‌ای جوان را شاهد هستیم که تقریباً در استفاده از همه­‌ی وزن­ها عملکرد ضعیفی از خود نشان می‌­دهد.

    نسل ۳۲: روابط بین موقعیت Cart و سرعت میله را به نمایش گذاشته است. تنش میان این دو, باعث به وجود آمدن تمایل به مرکزگرایی میله (centering) و نوعی رفتار تاب خوردن (swing-up) می شود.

    نسل ۱۲۸: مربوط به موقعیتی است که پیچیدگی افزایش داده شده تا تعادل میله (که حالا در محیط برنامه به صورت قائم می باشد) را اصلاح کند.

    شبکه عصبی

    تا کنون این روش در یافتن معماری­‌های ساده که نیازی به آموزش ندارند بیشترین کمک را به ما ارائه داده است. با این حال هنوز هم جای کار زیادی وجود دارد. برای برخی مسائل پیچیده‌­تر همچون رده­‌بندی دیتاست ImageNet، تلاش برای پیدا کردن شبکه‌های weight-agnostic دقیق همچنان بی­‌نتیجه مانده است.

    پیشرفت­‌های جدید

    هم‌زمان با نوشتن این مطلب مقاله‌­ای جدید منتشر شده که ادعا می­‌کند به بالاترین حد نظری فشرده­‌سازی، بدون نیاز به بررسی داده‌­ها، دست یافته است. در مقاله­‌ی هرس شبکه های عصبی بدون استفاده از داده از طریق حفظ جریان سیناپسی (Hidenori Tanaka et al.) از الگوریتمی به نام SynFlow استفاده می‌­کنند که قابلیت کنترل مسائل پیچیده‌­ای که روش­‌های قبلی نمی‌­توانستند را دارد.

    هرس کردن در کاربرد

    تاکنون تنها از جنبه­‌ی تئوری هرس کردن سخن گفته‌­ایم. اکنون قصد دارم با معرفی ابزارهای کاربردی در این حوزه مطلب را تمام کنم. اگر کاربر نرم‌­افزار TensorFlow هستید، چندین ابزار داخلی برای بهینه‌­سازی مدل (از جمله هرس کردن) وجود دارد.

    خلاصه

    یادگیری ماشینی به آموزش مدل‌­های دقیق ختم نمی‌­شود. زمانی که می­‌خواهیم این مدل­‌ها را وارد فرایند تولید کنیم، اندازه و سرعت از اهمیت بالایی برخوردارند. به منظور جای دادن معماری‌­های پیچیده در محدودیت‌­های تولیدی می­‌توان اندازه‌­ی مدل­‌ها را از طریق هرس کردن وزن­های خاص کاهش داد (روش‌­های دیگری هم وجود دارند که ما از آن­ها صحبتی نکرده‌­ایم).

    از آن­جایی که باید به از کاهش دقت مدل نیز توجه داشته باشیم، می­‌توانیم بگوییم که این کار آسان نخواهد بود. علاوه بر این، معماری­‌های کوچک­تر نیاز به آموزش دوباره دارند که خود می­‌تواند با توجه به ظرفیت کاهش ­یافته­‌ی مدل­‌سازی کار دشواری باشد. در این مطلب دو روش هرس کردن و یک رویکرد مکمل برای جستجوی معماری را بررسی کردیم که تا حد زیادی می‌­توانند این مشکلات را حل کنند.

    با این‌­حال آن­چه بیان شد تنها سر سوزنی از مطالب موجود در این زمینه بود. هرس کردن وزن به خصوص برای مسائل پیچیده‌­تر همچون شناسایی تصاویر بزرگ­ مقیاس (همچون تصاویر موجود در ImageNet)، خود یک حوز‌ه‌­ی تحقیقاتی فعال به شمار می‌رود.

    روش‌­های هرس کردن در چارچوب­‌های مدرن یادگیری عمیق همچون TensorFlow و PyTorch موجود هستند؛ بنابراین، می­‌توانید همین الان کار با آن­ها را آغاز و شاید حتی مرزهای این حوزه را هم جابجا کنید. پس اگر به این مطلب علاقه‌­مند شدید، کار کردن با این ابزارها را شروع کنید.

     

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    آشنایی با روش تقطیر دانش جهت بهبود عملکرد مدل‌های یادگیری عمیق

    مقاله قبلی

    مدیریت ترافیک هوایی پرنده‌های بدون سرنشین ؛ طرحی که با موفقیت به پایان رسید

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    بیشتر در آموزش

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *