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

سرعت دادن به شبکه های عصبی عمیق

    0

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

    در این پست در مورد این موضوعات به صورت تقرییاً کامل و جامع صحبت خواهیم کرد (برای این­که روش­‌های بیان شده را بهتر درک کنید، پیشنهاد می­‌شود به خود مقاله­‌های منبع مراجعه کنید):

    • هرس و اشتراک گزاری
    • فاکتورگیری حداقلی
    • فیلترهای پیچشی فشرده
    • تقطیر دانش
    هرس و به اشتراک­گذاری پارامترها

    هرس به کاهش مقدار چیزی یا حذف بخش‌­های اضافی آن گفته می­شود.

    به بیان ساده می‌­توان گفت که هرس به حذف پارامترهایی اشاره دارد که در عملکرد مدل نقش کلیدی ندارند. مبنای عملکرد هرس کاهش برداری پارامترهایی است که تأثیری در بهتر شدن مدل ندارند. تکنیک­‌های هرس را می‌­توان به سه دسته تقسیم کرد:

    کوانتیزه کردن و باینری کردن binarization: کوانتیزه کردن به فرآیندی گفته می‌­شود که طی آن یک بازه­‌ی پیوسته از مقادیر به یک بازه‌­ی محدود از مقادیر گسسته تبدیل می­‌شود. برای درک بهتر تصور کنید یک تصویر سیاه­سفید داریم. کوانتیزه کردن (N سطحی) N سطح خاکستری (سیاه) از این تصویر به ما می‌­دهد. از سوی دیگر باینری کردن تنها دو سطح خاکستری از آن ارائه می‌­دهد.

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

    سرعت دادن به شبکه های عصبی

    وزن­‌ها و فعال در طول آزمون (TESTING) در دقت ثابتی نگه داشته شده‌­اند.

    سرعت دادن به شبکه های عصبی

    وزن­‌ها و فعال­سازی­‌ها در طول آموزش (TRAINING) در دقت ثابتی نگه داشته شده‌­اند.

    همانطور که مشاهده می­‌کنید کوانتیزه کردن در طی آموزش تأثیر معناداری بر میزان دقت نمی‌­گذارد که خود نکته­ خوبی است. کوانتیزه کردن در مرحله­‌ی استنتاج به نحوی با شکست مواجه می­‌شود که دیگر امکان آموزش وجود نخواهد داشت.

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

    مقالات بسیار خوبی در مورد شبکه های ۸ بیتی، ۴ بیتی، ۲ بیتی و ۱ بیتی (شبکه های باینری) وجود دارد.

    سرعت دادن به شبکه های عصبی

    هرس و به اشتراک­‌گذاری: یکی از رویکردهای شناخته شده در بحث هرس شبکه­‌ها و به اشتراک­‌گزاری وزن­‌ها، مراحل این فرآیند را بدین صورت بیان می‌کند:

    • در شروع کار انحراف معیار هر کدام از لایه­‌های شبکه را پیدا می­‌کنیم تا توزیع وزن آن لایه را بفهمیم.
    • وقتی انحراف معیار توزیع را به دست آوردیم، وزن­‌های پایین­تر را از طریق آستانه­‌گذاری حذف می­‌کنیم. آستانه­­‌ی پیاده شده را با ضرب انحراف معیار لایه در نسبت هرس به دست می‌­آوریم. نسبت هرس برای لایه­‌های مختلف از آزمایشاتی به دست می‌­آید که از حوصله­ این متن خارج است.
    • برای این­که به دقت بهینه برسیم، شبکه­ هرس شده را دوباره آموزش می‌دهیم تا وزن­های حذف شده جبران گردند.
    • در مرحله­‌ی به اشتراک­‌گذاری وزن­‌ها، وزن­‌هایی که تفاوت­ کمی با هم دارند توسط مقادیر نماینده جایگزین می­‌شوند. این مقادیر نماینده، مقادیر مرکز خوشه Centroid values  نامیده می­‌شوند و بنابر توزیع وزن هر لایه متفاوت هستند. این مقادیر بعد از محاسبه­‌ی فاصله‌ی خطی به دست می­‌آیند در طی آموزش مجدد، نهایی می­‌شوند.

    سرعت دادن به شبکه های عصبی

    سرعت دادن به شبکه های عصبی

    فاکتورگیری حداقلی ماتریس (LRMF)

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

    عملیات‌های پیچشی در شبکه های عصبی پیچشی (CNN) عمیق معمولاً دارای هزینه محاسبات بالایی هستند. بنابراین کاهش تعداد عملیات­ پیچشی Convolution operation  به فشرده سازی شبکه و سرعت دادن به شبکه های عصبی کمک می‌کند.

    LRMF بر اساس این مفروضه بنا شده که ماتریس های چند بعدی کرنل پیچشی ۴ بُعدی بسیار زائد هستند و می­‌توان آن­‌ها را تجزیه کرد. لایه  به صورت تنسور­های دو بُعدی نشان داده­ می‌­شوند.

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

    سرعت دادن به شبکه های عصبی

    فیلتر­های پیچشی فشرده

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

    تعداد پارامترهای شبکه­‌ی عصبی Squeezenet 50 برابر کمتر و اندازه­‌ی آن کمتر از ۰/۵  مگابایت است، اما به عملکردی برابر با شبکه­‌ی Alexnet دست یافت. توجه داشته باشید که  ظرفیت حافظه‌ی­ این شبکه نسبت به Alexnet 510 برابر کمتر است. حال بررسی کنیم که برای رسیدن به این دستاورد چه رویکردی را در پیش گرفته‌­اند. آن­‌ها به عنوان بلوک سازنده­ی معماری شبکه­‌ی عصبی پیچشی­ (CNN) خود از ماژول­‌های Fire استفاده کردند. راهبردهای به کار رفته در طراحی Squeezenet را می‌­توان به صورت کلی در سه دسته تقسیم‌­بندی کرد:

    • جایگزینی فیلتر­های ۳×۳ با فیلترهای ۱×۱.
    • کاهش تعداد کانال­‌های ورودی به فیلترهای ۳×۳.
    • به تأخیر انداختن کاهش نمونه­‌گیری به این منظور که لایه‌­های پیچشی، نگاشت‌های فعال­‌سازی بزرگی داشته باشند. کاهش نمونه­‌گیریdownsampling  در شبکه در مراحل ابتدایی­‌تر منجر به از دست رفتن برخی اطلاعات می‌شود. زیرا لایه­‌های خروجی نگاشت‌های فعال­سازی کوچکی دارند. با توجه به تأخیر کاهش نمونه­‌گیری ، بیشتر لایه‌­های شبکه نگاشت‌های فعال بزرگ­تری خواهند داشت که خود حتی در شرایطی که بقیه­‌ی عوامل ثابت نگه داشته شده باشند، منجر به دقت بیشتر در مسئله می­‌شود.

    ماژول Fire تقریباً چنین شکلی دارد:

    سرعت دادن به شبکه های عصبی

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

    تقطیر دانش

    تصور کنید می­‌خواهید مجموعه­‌ی (داده­‌های) خود را برروی دیتاست­‌های Kaggle یا Imagenet به صورتی فشرده­‌سازی کنید که مدل­‌های بسیار کوچک­تری به دست آورید که در زمان اجرا نیز عملکرد خوبی دارند. کارهای اخیر پرفسور هینتون و جف ‌دین در تیم تحقیقاتی گوگل­ به رفع این مسئله می‌­پردازد. برای واضح­تر کردن مطلب از یک مثال استفاده می­‌کنیم. در یک کلاس درس معلم معادل مدلی بزرگ و سنگین است که بسیار دقیق آموزش دیده تا معیارهای تعیین شده را برآورده کند. دانش‌­آموز هم یک شبکه­‌ی کوچک­تر است که از معلم دانش کسب می­‌کند. موضوعی که مقاله بیان می­‌کند مربوط به تقطیر یا انتقال دانش از مجموعه‌­ای از شبکه های بزرگ به یک شبکه­‌ی کوچک­تر است. این شبکه­‌ی کوچک مستقیماً از خروجی­‌های آن مدل سنگین می‌آموزد و پیاده­سازی آسان‌تری دارد. چرا این روند به خوبی جواب می‌­دهد؟ زمانی که آموزش دیده باشید همان پیش‌­بینی­‌های مدل سنگین را انجام دهید، دیگر لازم نیست نگران مسائلی همچون بیش‌برازش باشید؛ زیرا مدل سنگین خودش قبلاً این مسئله را حل کرده است. یک دلیل دیگر هم این است که شبکه بر اساس احتمالات «نرمِ» مدل سنگین آموزش دیده، نه بر اساس اهداف «سخت» آن که به صورت one-hot رمزگزاری شده‌­اند. به تصویر پایین دقت کنید.

    سرعت دادن به شبکه های عصبی

    مدل سنگین آموزش دیده تا اهداف سخت را به این صورت به کار ببرد: ماشین—۱، انسان—۰، درخت—۰.

    از سوی دیگر مدل تقطیری برای استفاده از احتمالات نرم آموزش دیده است: ماشین— ۰/۹۶، انسان—۰/۰۰۰۰۱~، درخت —~۰۰۰۰۰۲/۰ ، ساختمان‌ها —~ ۰۳/۰.

    مدل تقطیری نسبت به مدل سنگین «اطلاعات» بیشتری باید بیاموزد. اما هنوز هم ممکن است در یادگیری ویژگی­‌های فضایی ساختمان موفق عمل نکند، زیرا تنها احتمال ۰/۰۳ برای آن یادگیری وجود دارد که طی آن گرادیان­‌ها خیلی ضعیف خواهند بود و برای لایه‌های عمیق‌تر تفاوتی را ایجاد نمی کنند.

    راه­حلی که در این مقاله ارائه شده است تقسیم ورودی­‌های تابع Softmax (تابعی که خروجی آن احتمالات است) با استفاده از عددی که در این­جا به آن دما می­‌گوییم. برای مثال اگر ورودی­‌هایی که وارد softmax می­‌شوند عبارت باشند از ، بعد از تقسیم بر مقدار دما (که مثلاً در این­جا ۵ است)، مقادیر جدیدی که وارد تابع softmax می­‌شوند  هستند. این مسئله باعث تغییر احتمالات نرم خروجی از مدل سنگین می­‌شود، طوری که برای مدل تقطیری آسان­تر خواهد بود یاد بگیرد که یک ساختمان وجود دارد. بعد از تغییرات softmax، احتمالات نرم بدین شکل خواهند بود:

    ماشین —~۶۷/۰، انسان —~۰۴/۰، ساختمان—~۲۴/۰ و درخت—~۰۵/۰.

    این احتمالات بر پیش­بینی مدل تقطیری تاثیر می­‌گذارند. بنابراین لازم است برای پیش­بینی، ورودی­‌های softmax را با ضرب آن­‌ها در مقدار دما به حالت اولیه بازگردانیم.

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

    تقطیرساز

    به منظور تسهیل اجرای دستی الگوریتم، توجه خود را به سمت تقطیرساز شبکه­‌ی عصبیHover over me Neural Network Distiller  که توسط Intel AI Labs ارائه شده سوق می‌دهیم‌. تقطیرساز شبکه­‌ی عصبی یک پکیج پایتون برای پژوهش­‌های فشرده‌­سازی شبکه های عصبی می‌­باشد. تقطیرساز برای نمونه سریع­تر و تحلیل الگوریتم­‌های تراکمی (همچون روش پراکنده‌ساز و محاسبات کم‌­دقت) یک محیط در  PyTorch آماده می­‌کند.

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

    نتیجه‌­گیری

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

    پروژه تشخیص اشیاء و ایجاد یک مکانیزم لاگین کردن با استفاده از TDD

    مقاله قبلی

    افزایش دقت مدل تشخیص چهره با روش متعادل‌ سازی هیستوگرام

    مقاله بعدی

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

    نظرات

    پاسخ دهید

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