فیلتر / کرنل (Filter / Kernel) چیست و در شبکه عصبی کانولوشنی (CNN) چه نقشی دارد؟ فرایند کانولوشن اصلیترین مرحله در شبکهی عصبی کانولوشن (CNN / Convolutional Neural Network) محسوب میشود؛ درواقع نام این شبکه بههمین دلیل انتخاب شده است. اتفاقی که در هر لایه از کانولوشن رخ میدهد قرارگرفتن یک فیلتر / کرنل روی عکس ورودی است تا درنهایت یک خروجی فیلترشده که ویژگیهای اصلی آن را به همراه دارد به دست آید. در این مطلب قصد داریم فیلتر / کرنل (Filter / Kernel) را شرح دهیم و ببینیم چطور اندازه یک فیلتر / کرنل مشخص میشود.
کرنل (Kernel) چیست؟
در فرایند کانولوشن از کرنل برای استخراج ویژگیهای عکس استفاده میشود. کرنل ماتریسی است که مانند پنجرهای روی عکس ورودی حرکت میکند. در هر بار حرکتش مقدار این ماتریس با ماتریس ورودی ضرب میشود تا درنهایت خروجی مدنظر را داشته باشیم. با این کار میتوانیم اطلاعات یک درایه را با درنظر گرفتن تاثیر همسایههای آن، ذخیره کنیم.
کرنلها انواع مختلفی دارند و هر کرنل برای استخراج ویژگیهای متفاوتی طراحی شده است؛ برای مثال، به این عکس نگاه کنید:
در شکل بالا کرنلی برای شارپکردن (Sharpening) عکس استفاده شده است. همانطور که میبینیم، کرنل روی هر قسمت از ماتریس عکس ورودی که قرار میگیرد مقدار هر خانهی آن با مقدار متناظر در ماتریس ورودی ضرب میشود و درنهایت همهی این مقادیر با هم جمع میشوند و ماتریس خروجی را گامبهگام ایجاد میکنند.
اما چطور این کرنل با این کار، میتواند عکس را شارپ کند؟
فرایند شارپشدن عکس در کرنل
مثال دیگری را در شکل بعدی میبینیم که زمانیکه در عکس اول مقادیر کرنل در مقادیر عکس ضرب میشوند و درنهایت با هم جمع میشوند مقدار خروجی برابر با ۲×۰+۲×-۱+۲×+۲×-۱+۳×۵+۲×-۱+۲×۰+۲×-۱+۲×۰=۷ میشود؛ یعنی درواقع مقدار ۳ که در مرکز عکس قرار دارد به ۷ افزایش یافته است؛ همچنین در عکس دوم خروجی برابر با ۳- شده است؛ یعنی مقدار ۱ که مرکز قرار دارد به -3 کاهش یافته است. این یعنی تضاد میان ۱ و ۳ به ۷ و ۳- تبدیل شده است و این یعنی کنتراست (Contrast) عکس افزایش مییابد و شارپ میشود.
تفاوت فیلتر (Filter) و کرنل (Kernel)
ممکن است بارها کلمههای فیلتر (Filter) و کرنل (Kernel) را شنیده باشید که بهجای هم استفاده میشوند، اما در واقعیت این دو کمی با هم متفاوت هستند. همانطور که در بخش قبل توضیح داده شد، کرنل ماتریسی است که روی عکس ورودی حرکت میکند و مقدار آن با مقدار ماتریس ورودی ضرب میشود؛ درنهایت ماتریسی را در خروجی به ما ارائه میکند که ویژگیهایی از عکس دارد که مدنظر ماست. ابعاد کرنل ابعاد کانولوشن را تعیین میکند؛ برای مثال، زمانیکه میگوییم کانولوشن دوبعدی (2D Convolution) یعنی ماتریس کرنل دوبعدی است.
فیلتر درواقع مجموع چندین کرنل است. هر عکس ورودی ممکن است چندین کانال رنگ داشته باشد که برای هر کانال رنگ یک کرنل جداگانه داریم و مجموع همهی این کرنلها یک فیلتر را به وجود میآورد. فیلترها همیشه یک بعد بیشتر از کرنلها هستند؛ برای مثال، در یک کانولوشن دوبعدی که ماتریس کرنل دوبعدی است فیلتر سهبعدی است.
برای مثال شکل بالا یک ماتریس ورودی ۵×۵ را نشان میدهد که سه کانال رنگ دارد. یک فیلتر ۳×۳ هم داریم که سهبعدی است؛ یعنی سه کرنل دارد که هر یک جداگانه روی سه کانال رنگ ماتریس ورودی اعمال میشوند.
انتخاب اندازه کرنل / فیلتر در شبکه عصبی کانولوشنی
قطعاً همهی ما در حین یادگیری و مطالعه دربارهی شبکهی عصبی کانولوشنی (CNN) بارها با اندازههای مختلف کرنل برخورد کردهایم و این سؤال ذهنمان را مشغول کرده است که آیا راهی برای تشخیص اندازه و ابعاد کرنل وجود دارد؟ درواقع پاسخ این سؤال منفی است. بهطور کلی، مشهورترین انتخاب در دنیای یادگیری عمیق اندازهی ۳×۳ است که اکثر مواقع استفاده میشود، اما چرا ۳×۳؟ چرا ۱×۱ یا ۴×۴ یا ۲×۲ نه؟
بهطور کلی، اندازهی کرنل به دو دستهی کوچک و بزرگ تقسیم میشود که کوچکها ۴×۴ و قبل از آن و بزرگها ۵×۵ و بعد از آن را شامل میشود که ما هنوز از ۵×۵ فراتر نمیرویم؛ بهاین دلیل که کرنلهایی با اندازهی بزرگ زمان بسیار زیادی را میگیرند. در سال ۲۰۱۲ الکسنت (AlexNet) از کرنلی بهاندازهی ۱۱×۱۱ استفاده کرد و زمان آموزش حدود ۲ تا ۳ هفته زمان برد.
برای آشنایی با الکسنت پیشنهاد میکنیم مطلب معماری الکس نت (AlexNet) را مطالعه کنید.
دلیل ترجیح استفاده از کرنلهای اندازهی کوچک همین زمان و هزینهی محاسباتی کمتر آنهاست. در سال ۲۰۱۵ شبکهی عصبی کانولوشنی VGG از کرنلهای ۳×۳ استفاده کرد و از آن زمان بهبعد اندازهی کرنل ۳×۳ انتخاب محبوب همه شد.
برای آشنایی با ویجیجینت پیشنهاد میکنیم مطلب شبکهی عصبی وی جی جی نت (VGGNet) را مطالعه کنید.
تا اینجا متوجه شدیم که کرنلهای اندازههای کوچک گزینههای مناسبتری هستند، اما چرا ۱×۱، ۲×۲ یا ۴×۴ انتخاب نمیشوند؟
نحوه انتخاب اندازه کرنل
کرنل با اندازهی ۱×۱ فقط برای کاهش ابعاد بهمنظور کاهش تعداد کانالهای رنگ استفاده میشود. از آنجا که کرنل ۱×۱ ارتباط میان کانالهای ورودی را در یک نقشهی ویژگی (Feature Map) یکپیکسلی به دست میآورد، هیچ اطلاعاتی از پیسکلهای همسایه ارائه نمیکند و کارایی برای استخراج ویژگی ندارد.
کرنلهایی با اندازهی زوج مانند ۲×۲ و ۴×۴ معمولاً بهدلیل اینکه نمیتوان پیکسلهای دور پیکسل خروجی را متقارن تقسیم کرد استفاده نمیشوند؛ برای مثال، در شکل بعدی میبینیم که کرنل ۳×۳ انتخاب شده است و پیکسلهای دور پیکسل ۶ که درنهایت پیکسل خروجی خواهد بود متقارن هستند. اگر اندازهی کرنل زوج باشد، نمیتوانیم یک پیکسل در مرکز انتخاب کنیم که درنهایت پیکسل خروجی باشد.
خلاصهی مطالب دربارهی فیلتر / کرنل (Filter / Kernel)
در این مطلب کرنل و نحوهی کار آن در شبکهی عصبی کانولوشنی (CNN) را بررسی کردیم؛ همچنین تفاوت اصلی میان کرنل و فیلتر را یاد گرفتیم. از همه مهمتر، دلیل محبوببودن اندازهی کرنل ۳×۳ را بررسی کردیم.
برای آشنایی با شبکهی عصبی کانولوشنی مطلب شبکهی عصبی کانولوشنی (CNN) چیست؟ را مطالعه کنید.