ماژول Inception چیست؟
در شبکه های CNN فیلتر های کانولوشن برای استخراج ویژگی های تصویر استفاده می شوند. اندازه فیلترها یکی از عوامل تعیین کننده در ویژگیهای استخراج شده از تصویر است. پیش از معرفی ماژول های Inception طراحان شبکه باید با توجه به تصویر اندازه فیلترها را تعیین میکردند برای درک این اهمیت مسئله اندازه فیلترها به مثال ساده زیر توجه کنید.
بر روی پایه های برج آزادی خطوط قرار دارد که در تصاویر نشان داده شد فرض کنید یکی از ویژگیهای لازم برای تشخیص این برج از برج های دیگر این خطوط باشند تصویر با دو کیفیت مختلف تصویر برداری شده است. در تصویر اول دیده میشود خطوط بر روی پنجره 5x5 از پیکسل ها ظاهر می شود در حالی که در تصویر دوم یک پنجره 3x3 نیاز است.
ایده ماژول Inception استفاده از فیلترهای با ابعاد مختلف به طور همزمان است. به این صورت که چند فلیتر با ابعاد مختلف (فیلترهای کانولوشنی و pooling) روی ورودی اعمال میشوند. سپس خروجی آنها کنار یکدیگر قرار میگیرد (concat می شوند). در این حالت feature mapها مشتمل بر ویژگی های مختلف خواهند بود. هر ماژول شامل چند عملیات کانولوشنی و pooling موازی است. شکل زیر به صورت بلوکی یک ماژول Inception دلخواه را نشان می دهد.
مشکل این شبکه ها چه بود؟
به تصویر زیر که در واقع شبکهای است که توسط طراحان ماژول پیشنهاد شده توجه کنید.
در نگاه اول چه میبینید؟ تعداد زیادی عملیات موازی، که یعنی هزینه محاسباتی زیاد!. طراحان ماژول پس از این ضمن تلاش برای افزایش دقت، به اصلاحاتی برای کاهش هزینه محاسباتی نیز پرداختند.
تغییرات در Inception V2:
سه نوع آوری در این ورژن رخ داد:
تفکیک در فیلترها (Filter factorization)
به شکل 4 الف که یک ماژول Inception از نوع هست V1 نگاه کنید.
از نگاه محاسباتی فیلتر 5x5 به شدت از دیگر فیلترها چالش برانگیزتر است. این فیلتر برای محاسبه هر پیکسل 25 ضرب و جمع انجام میدهد اما فیلتر 3x3 تنها 9 ضرب و جمع انجام می دهد. فیلترهای بزرگ در مسائل کلاسیک بینایی ماشین نیز چالش برانگیزند. یکی از راهحلهای مرسوم برای کاهش حجم محاسباتی، تفکیک فیلترهاست یعنی فیلتر را به صورت کانولوشن دو یا چند فیلتر تفکیک شده از هم بنویسیم. شکل زیر فرم تفکیک شده فیلتر معروف Sobel را نشان میدهد که میتوان آن را با کانولوشن دو فیلتر دیگر ساخت.
برای هر محاسبه هر پیکسل با این فیلتر به جای 9 ضرب و جمع 3+3=6 ضرب و جمع انجام می شود. کاملا مشخص است تفکیک برای فیلترهایی با اندازه های بالاتر صرفهجویی محاسباتی پررنگتری از خود نشان میدهد.
نوع دیگری از تفکیک این است که یک فیلتر مربعی بزرگتر به چند فیلتر مربعی کوچکتر افراز شود برای مثال اگر کانولوشن را از نوع full در نظر بگیریم بسیاری از فیلترهای 5x5 قابل تفکیک به دو فیلتر 3x3 هستند.
طراحان شبکه Inception در V2 از این دو شیوه در تفکیک استفاده کردند تا هزینه محاسباتی را کاهش دهد. شکل 4 (ب) نمایی از اجرای تفکیک در ماژول را نشان میدهد.
سوال: آیا باید همه فیلترها را همواره کوچک کرد؟
از نگاه حجم محاسباتی پاسخ به سوال فوق مثبت به نظر میرسد. اما نکته اینجاست که هر فیلتر بزرگی با فیلترهای کوچکتر از خود به شیوه ای که گفته شد قابل تفکیک نیست. برای مثال یک فیلتر 3x3 دارای ۹ درجه آزادی در حالیکه دو فیلتر 3x1 دارای 6 درجه آزادی هستند. (دلیل اینکه فیلتر Sobel با دو فیلتر کوچکتر قابل تفکیک بود این است که به دلیل ماهیت متقارن، درجه آزادی آن کمتر از ۶ است).
پس از تفکیک حداکثری امکان پذیر نیست طراحان با آزمایش و خطا به این نتیجه رسیدند که در لایه های ابتدایی از تفکیک کمتر استفاده شود برای مثال فقط کرنل های مربعی 5تایی به 3تایی افراز شود. در لایههای میانی و پایانی تفکیکهای بیشتری امکان پذیر است. همچنین برای تفکیک کرنل های مربعی بزرگتر (بین ۱۲ تا ۲۰) از کرنل های 7x1 استفاده شود.
اصلاح شاخه های Auxiliary:
در ورژن 1 شاخه هایی در میانه شبکه با نام Auxiliary classifier قرار داده شد (شکل 3) با این هدف که خطا به لایههای میانی مستقیماً تزریق شود و با این روش سرعت همگرایی افزایش یابد در ورژن ۲ طراحان به این نتیجه رسیدند سرعت همگرایی در حضور این شاخه تغییر محسوسی ندارد.
کاهش اندازه grid:
در شبکههاای Inception هر چه به لایههای جلوتر میرویم Feature mapها در اندازهی grid کاهش و در عمق افزایش پیدا میکنند. در V1 افزایش عمق توسط ماژولهای Inception و کاهش اندازه با عملیات pooling انجام می شد (شکل 5 الف). در این ورژن با تغییر بلوکهای کانولوشنی و پولینگ معمولی در ماژول به strided convolution و strided pooling علاوه بر افزایش عمق grid نیز کاهش ابعاد داده میشود. شکل 5 ب ماژولی که همزمان کاهش ابعاد نیز میدهد را نشان می دهد.
تغییرات در Inception V3:
تغییرات زیر در ورژن سوم شبکههای Inception داده شد.
استفاده RMSProb: یک الگوریتم بهینه سازی است که برای شبکه های عصبی طراحی شده این الگوریتم نرخ یادگیری را به صورت تطبیقی تغییر می دهد و موفقیتهای خوبی در بسیاری از شبکه ها نشان داده در Inceptionنیز بهبود دقت نشان داد.
کرنلهای 7x7: در این ورژن در ماژولها به جای استفاده از کرنل های 7x7 از کرنلهای 3x3 به صورت سری استفاده شد که منطق آن در V2 توضیح داده شد.
شاخه BN auxiliary: اگرچه در تحقیقات مربوط به V2 نشان داده شد که شاخه auxiliary بر سرعت همگرایی تاثیر زیادی ندارد. اما دیده شد که استفاده از این شاخه زمانی که Batch normalized باشد، می تواند به عنوان Regularizerعمل کند.
استفاده از Label smoothing: اگر خروجیهای نرمال نشده را z بنامیم و خروجی مورد نظر را x، آنگاه اینکه هر داده چقدر توسط شبکه احتمال داده شده که مربوط به دسته kام باشد از رابطه p(k|x)=exp(zk)/(1+Σexp(zk)) به دست می آید. حال خروجی ایده آل این است که وقتی داده مربوط به دسته yام است به آن احتمال 1 نسبت داده شده باشد و احتمال تعلق آن به دستههای دیگر 0 یعنی q(k|x)=δ[k-y] در حالت عادی شبکه را به گونه آموزش می دهیم که p مشابه q شود. اما این می تواند منجر به بروز مشکلاتی شود. دقت کنید که زمانی p مشابه q خواهد شد که برای داده دسته yام zy به سمت بی نهایت میل کند که با تعداد دادههای آموزش محدود امکان پذیر نیست. به عبارت دیگر چون هیچ گاه p با q نمیتواند برابر شود، در حین آموزش همیشه مقداری خطا در شبکه محاسبه می شود و بر وزن ها تاثیر می گذارد این پدیده ممکن است باعث overfitting شود.
طراحان پیشنهاد دادند که به جای استفاده از تابع دلتا برای q از تابعی محافظه کارانه تر به صورت:
به این صورت احتمال تعلق به یک دسته کاملاً 1 نبوده و با رسیدن به zهای محدود می توان خطا را صفر کرد. در V3 از ε=0.1 استفاده شد.
معرفی Inception V4 و Inception-Resnet:
نسخه V4 محصول توسعه TensorFlow بوده است. این نسخه تغییری در ساختارهای ماژول ارائه نداده. در واقع قبل از TensorFlowطراحان برای پایداری شبکه و همچنین رعایت قیدهای حافظه محافظه کارانه شبکه را طراحی می کردند با کاهش محدودیتهای طراحی به وسیله TensorFlow طراحان شبکه های عمیق تر با ماژولهایی با فیلترهای بیشتری را پیشنهاد دادند. شکل زیر ماژول برای اندازه 8x8 را برای ورژن های ۲ و ۴ نشان می دهد بدیهی است که چقدر تعداد فیلترها در نسخه ۴ زیاد شده است.
Inception-ResNet: Resnet با معرفی Residual blockها تاثیر زیادی بر دنیای شبکه عصبی گذاشت. به همین جهت طراحان Inception نیز سعی کردند از ویژگی مسیر Residual در ساختار خود بهره ببرند. به این صورت که مجموعه فیلترها inceptionی در مسیر Residual قرار خواهند گرفت.
با به وجود آوردن این نوع ماژول مشکلی که در خود شبکه ResNet نیز به آن اشاره شده بود پدید آمد. اگر تعداد فیلترها از ۱۰۰۰ بیشتر می بود خروجی لایه ها بعد از چند هزار تکرار صفر میشد. راه حل پیشنهادی استفاده از Activation scaling در مسیر Residual بوده در واقع ضریبی از بلوک Inception به مسیر مستقیم اضافه شود.شکل 7 ب نحوه استفاده از Activation Scaling را نشان میدهد.
عمق و فیلترهای ماژولها در Inception-ResNet به گونه ای انتخاب شد که از نظر حجم محاسباتی مشابه V4 باشد. هر دو شبکه دقتی مشابه یکدیگر داشتند اما سرعت همگرایی Inception-ResNet به وضوح بالاتر است. شکل زیر مقایسه دقت و سرعت همگرایی دو شبکه بر روی دادههای ILSVRC-2012 را نشان می دهد. (دقت شود که Inception-ResNet v1 شبکهایست که حجم محاسباتی آن مشابه V3 می باشد و Inception-ResNet v2 از لحاظ عمق و فیلترهای ماژولها معادل V4هست).
برای جمع بندی خوب است که نکاتی که از این چند ورژن یادگرفتهایم و میتوان در دیگر ساختارها نیز از آن استفاده کرد را مرور کنیم.
مراجع:
[1] Szegedy, Christian, et al. "Rethinking the inception architecture for computer vision." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[2] Szegedy, Christian, et al. "Inception-v4, inception-resnet and the impact of residual connections on learning." Thirty-first AAAI conference on artificial intelligence. 2017.