شبکه Inception از V1 تا V4

ماژول Inception چیست؟در شبکه های CNN فیلتر های کانولوشن برای استخراج ویژگی های تصویر استفاده می شوند. اندازه فیلترها یکی از عوامل تعیین کننده در ویژگی‌های استخراج شده از تصویر است. پیش از معرفی ماژول های Inception طراحان شبکه باید با توجه به تصویر اندازه فیلترها را تعیین می‌کردند برای درک این اهمیت مسئله اندازه فیلترها به مثال ساده زیر توجه کنید.بر روی پایه های برج آزادی خطوط قرار دارد که در تصاویر نشان داده شد فرض کنید یکی از ویژگی‌های لازم برای تشخیص این برج از برج های دیگر این خطوط باشند تصویر با دو کیفیت مختلف تصویر برداری شده است. در تصویر اول دیده میشود خطوط بر روی پنجره 5x5 از پیکسل ها ظاهر می شود در حالی که در تصویر دوم یک پنجره 3x3 نیاز است.شکل 1. استخراج ویژگی خطوط روی پایه با دو کیفیت مختلف. برای شکل اول به فیلترهایی با اندازه 5x5 نیاز است و برای شکل دوم فیلترهای 3x3ایده ماژول Inception استفاده از فیلترهای با ابعاد مختلف به طور همزمان است. به این صورت که چند فلیتر با ابعاد مختلف (فیلترهای کانولوشنی و pooling) روی ورودی اعمال می‌شوند. سپس خروجی آنها کنار یکدیگر قرار می‌گیرد (concat می شوند). در این حالت feature mapها مشتمل بر ویژگی های مختلف خواهند بود. هر ماژول شامل چند عملیات کانولوشنی و pooling موازی است. شکل زیر به صورت بلوکی یک ماژول Inception دلخواه را نشان می دهد.شکل 2. نمودار بلوکی یک ماژول Inception دلخواهمشکل این شبکه ها چه بود؟به تصویر زیر که در واقع شبکه­ای است که توسط طراحان ماژول پیشنهاد شده توجه کنید.شکل 3. شبکه Inception V1در نگاه اول چه میبینید؟ تعداد زیادی عملیات موازی، که یعنی هزینه محاسباتی زیاد!. طراحان ماژول پس از این ضمن تلاش برای افزایش دقت، به اصلاحاتی برای کاهش هزینه محاسباتی نیز پرداختند.تغییرات در Inception V2:سه نوع آوری در این ورژن رخ داد:تفکیک در فیلترها (مهمترین)اصلاح شاخه های Auxiliaryکاهش ابعاد grid به صورت بهینهتفکیک در فیلترها (Filter factorization)به شکل 4 الف که یک ماژول Inception از نوع هست V1 نگاه کنید.شکل 4. تغییر اندازه ی فیلترها. شکل الف برای V1 و شکل ب برای V2 هستاز نگاه محاسباتی فیلتر 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 ب ماژولی که همزمان کاهش ابعاد نیز می‌دهد را نشان می دهد.شکل 5. کاهش اندازه gridها (الف) در V1 (ب) در V2تغییرات در Inception V3:تغییرات زیر در ورژن سوم شبکه­های Inception داده شد.استفاده از RMSProbفاکتوریزه کردن کرنل های 7x7استفاده از BN auxiliaryاستفاده از تکنیک Label smoothingاستفاده 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 را برای ورژن های ۲ و ۴ نشان می دهد بدیهی است که چقدر تعداد فیلترها در نسخه ۴ زیاد شده است.شکل 6. مقایسه تعداد و ابعاد فیلترها در دو ورژن مختلف از Inception networkهاInception-ResNet: Resnet با معرفی Residual blockها تاثیر زیادی بر دنیای شبکه عصبی گذاشت. به همین جهت طراحان Inception نیز سعی کردند از ویژگی مسیر Residual در ساختار خود بهره ببرند. به این صورت که مجموعه فیلترها inceptionی در مسیر Residual قرار خواهند گرفت.شکل 7. بلوکهای شبکه Inception-Resnet. الف) یک بلوک از شبکه نهایی ب) استفاده از Activation scalingبا به وجود آوردن این نوع ماژول مشکلی که در خود شبکه ResNet نیز به آن اشاره شده بود پدید آمد. اگر تعداد فیلترها از ۱۰۰۰ بیشتر می بود خروجی لایه ها بعد از چند هزار تکرار صفر می­شد. راه حل پیشنهادی استفاده از Activation scaling در مسیر Residual بوده در واقع ضریبی از بلوک Inception به مسیر مستقیم اضافه شود.شکل 7 ب نحوه استفاده از Activation Scaling را نشان می­دهد.عمق و فیلترهای ماژول­ها در Inception-ResNet به گونه ای انتخاب شد که از نظر حجم محاسباتی مشابه V4 باشد. هر دو شبکه دقتی مشابه یکدیگر داشتند اما سرعت همگرایی Inception-ResNet به وضوح بالاتر است. شکل زیر مقایسه دقت و سرعت همگرایی دو شبکه بر روی داده­های ILSVRC-2012 را نشان می دهد. (دقت شود که Inception-ResNet v1 شبکه­ایست که حجم محاسباتی آن مشابه V3 می باشد و Inception-ResNet v2 از لحاظ عمق و فیلترهای ماژول­ها معادل V4هست).شکل 8. مقایسه InCeption-Resnetها با Inceptionها خالص و دقت آن¬هاجمع بندی:برای جمع بندی خوب است که نکاتی که از این چند ورژن یادگرفته­ایم و می­توان در دیگر ساختارها نیز از آن استفاده کرد را مرور کنیم.به جای استفاده از فیلترهای بزرگ از فیلترهای سری کوچکتر می­توان استفاده کرد (Filter factorization)شاخه­های Auxiliary همراه با BN اثر Regulizing بر شبکه­ خواهند داشت. روش Label Smoothing تکنیکیست که می­تواند در جلوگیری از Overfitting در شبکه­ها موثر باشداستفاده از بلوک­های Residual به همراه یک scaling در آن می­تواند یا در دقت و یا سرعت همگرایی موثر واقع شود.مراجع:[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.