معرفی ماژول Inception در شبکه GoogleNet
GoogleNet یک شبکه پیچشی عمیق با 22 لایه است. معماری این شبکه در چالش ILSVRC سال 2014 معرفی شد (دو مسئلهی اصلی این چالش، تشخیص اشیاء Object detection و طبقهبندی تصویر Image classification بودند). جنبه نوآورانهی معماری GoogleNet مربوط به ماژولی به نام Inception است.
برای اینکه بفهمیم این ابداع چرا تا این حد مورد توجه قرار گرفته است، ابتدا باید معماری شبکه های عصبی کانولوشنی (CNN) معمولی را مرور کرده و مصالحهای که در ساخت همهی شبکهها باید برقرار شود را مورد مطالعه قرار دهیم. مطالبی که اینجا در مورد CNNها ارائه میدهیم، به زبان پیشرفته و سطح بالا هستند؛ به همین دلیل، در صورت تمایل، ابتدا این مقاله را در مورد معماری CNNها مطالعه کنید.
برقراری توازن در ساخت CNNها
اجزای تشکیلدهندهی CNNها عبارتاند از:
- لایهی کانولوشن convolution (+ تبدیلات غیرخطی Non-affine transformations که از طریق توابع فعالسازی اجرا میشوند)
- لایهی پولینگ pooling
- لایهی تراکم (کاملاً متصل)
هر بار بخواهیم یک لایهی جدید قبل از لایههای تراکم (که در انتهای شبکه قرار دارند) اضافه کنیم، دو نکتهی مهم را باید تعیین کنیم:
- انتخاب بین عملیات کانولوشن و یا ادغام؛
- تعیین اندازه و تعداد فیلترهایی که از خروجی لایهی قبلی وارد لایهی جدید خواهند شد.
راهکار ایدهآل این است که بتوان همهی گزینههای موجود را در یک لایه به صورت یکجا امتحان کرد. در همین راستا، تیم پژوهشی گوگل، معماری جدیدی طراحی کردند که یک لایهی جدید به نام Inception دارد.
[irp posts=”23236″]معرفی ماژول Inception
هدف اصلی از طراحی ماژول Inception این بود که چندین عملیات (ادغام، کانولوشن) با فیلترهایی با اندازههای گوناگون (3×3، 5×5 و …) را بتوان به صورت موازی ایجاد کرد و نیازی به انتخاب بین آنها نباشد.
قبل از اینکه معماری رسمی GoogleNet را نشان دهیم، ابتدا نحوهی کارکرد ماژول Inception را با هم بررسی میکنیم؛ بدین منظور از این لایه استفاده میکنیم:
همانطور که مشاهده میکنید، ورودی اولیه (پشتهای stack از نقشههای ویژگی Feature maps که خروجی لایهی قبلی هستند) تنسور tensor با 64 نقشهی ویژگی است، ابعاد همهی این نگاشتها 32×32 میباشد. سه عملیات، به صورت موازی، روی این تنسور اجرا میشوند:
- عملیات کانولوشن با 16 فیلتر 1×1: اندازهی تنسور خروجی 16×32×32 خواهد بود (عدد آخر، یعنی 16، نشاندهندهی تعداد نهایی نقشههای ویژگی است که برابر با تعداد فیلترهای اعمال شده روی تصویر میباشد).
- عملیات کانولوشن با 32 فیلتر 3×3: هدف از این عملیات این است که ابعاد خروجی هماندازه با نگاشتهای ویژگی اصلی باقی بماند. padding را میتوان برابر با 1 و stride (گام) را برابر با 1 قرار داد (برای کسب اطلاعات بیشتر در مورد padding و strides و تأثیرات آنها روی ابعاد نگاشتها به این مقاله مراجعه کنید). اندازهی تنسور خروجی 32×32×32 خواهد بود.
- عملیات پولینگ ماکزیمم با یک فیلتر 3×3 (مقادیر padding و stride طبق استدلال بیان شده در عملیات قبلی محاسبه میشوند): اندازهی تنسور خروجی 64×32×32 خواهد بود؛ از آنجایی که فیلتر پولینگ روی همهی نقشههای ویژگی تنسور ورودی اجرا میشود، عمق تنسور خروجی برابر با عمق تنسور اصلی (=64) است.
بدیهی است که با افزودن این عملیاتها به تمام لایهها، مدل از نظر تعداد پارامترها پیچیدهتر میشود. اما خوشبختانه، نسخهی دوم ماژول Inception تکنیک خوبی برای کاهش ابعاد نگاشتهای ویژگی قبل از اجرای مدل ارائه داده است.
حل مشکل پارامترهای زیاد
هدف این است که قبل از ورود نگاشتهای ویژگی به عملیاتهای موازی، یک فیلتر کانولوشن 1×1 روی آنها اجرا کنیم. بدین طریق عمق تنسوری که این نگاشتها را دربردارد، کاهش خواهد یافت. به بیان دقیقتر با اجرای این فیلتر، تعداد نقشههای ویژگی موجود در پشتهی ورودی را کاهش میدهیم.
به عنوان مثال، در اجرای عملیات اول کانولوشن، با اجرای کانولوشن 1×1 میتوانیم تعداد نگاشتها را از 64 به 16 کاهش دهیم.
با انجام این کار، فیلتر 16×1×1 را روی یک تنسور کمعمقتر که حالا ابعادش 16×32×32 است، اجرا میکنیم. بدین ترتیب تعداد پارامترها به طرز چشمگیری کاهش خواهد یافت.
[irp posts=”5264″]جمعبندی
معرفی ماژول Inception یک نوآوری فوقالعاده در حوزهی بینایی کامپیوتری به شمار میرود. برای جمعبندی آنچه گفته شد از سه تصویر پایین استفاده میکنیم؛ دو تصویر اول نشاندهندهی ماژول Inception هستند که روی یکی از آنها، به منظور کاهش ابعاد، عملیات کانولوشن 1×1 اجرا شده است. تصویر سوم هم کل معماری GoogleNet را نشان میدهد.