فیلتر / کرنل (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) چیست؟ را مطالعه کنید.
سلام ممنون از اطلاعات خوبتون
مقدار ماتریس کرنل چگونه مشخص میشود؟ مثلا یک ماتریس 3 در 3 کرنل مثال اول شامل 0 و -1 و 5 است. این آرایه ها از کجا می آیند؟
سلام و عرض ادب،
مقادیر ماتریس کرنل در شبکههای عصبی کانولوشنی طی فرآیند آموزش و بهینهسازی تعیین میشن. در ابتدا، این مقادیر به صورت تصادفی مقداردهی و بعد با استفاده از الگوریتمهایی مانند پسانتشار خطا (Backpropagation) و بهینهسازها بهینه میشن تا ویژگیهای مهم تصاویر ورودی رو استخراج کنن.
کرنل (Kernel) در زمینه شبکههای عصبی کانولوشنی به چه چیزی اشاره دارد؟
در فرایند کانولوشن از کرنل برای استخراج ویژگیهای عکس استفاده میشود. کرنل ماتریسی است که مانند پنجرهای روی عکس ورودی حرکت میکند. در هر بار حرکتش مقدار این ماتریس با ماتریس ورودی ضرب میشود تا درنهایت خروجی مدنظر را داشته باشیم. با این کار میتوانیم اطلاعات یک درایه را با درنظر گرفتن تاثیر همسایههای آن، ذخیره کنیم.
دو تفاوت اصلی میان فیلتر (Filter) و کرنل (Kernel) در شبکههای عصبی کانولوشنی چیست؟
کرنل ماتریسی است که روی عکس ورودی حرکت میکند و مقدار آن با مقدار ماتریس ورودی ضرب میشود؛ درنهایت ماتریسی را در خروجی به ما ارائه میکند که ویژگیهایی از عکس دارد که مدنظر ماست. ابعاد کرنل ابعاد کانولوشن را تعیین میکند؛ برای مثال، زمانیکه میگوییم کانولوشن دوبعدی (2D Convolution) یعنی ماتریس کرنل دوبعدی است.
فیلتر درواقع مجموع چندین کرنل است. هر عکس ورودی ممکن است چندین کانال رنگ داشته باشد که برای هر کانال رنگ یک کرنل جداگانه داریم و مجموع همهی این کرنلها یک فیلتر را به وجود میآورد. فیلترها همیشه یک بعد بیشتر از کرنلها هستند؛ برای مثال، در یک کانولوشن دوبعدی که ماتریس کرنل دوبعدی است فیلتر سهبعدی است.
چرا انتخاب اندازهی مناسب برای کرنل / فیلتر در شبکههای عصبی کانولوشنی اهمیت دارد؟
بهطور کلی، اندازهی کرنل به دو دستهی کوچک و بزرگ تقسیم میشود که کوچکها ۴×۴ و قبل از آن و بزرگها ۵×۵ و بعد از آن را شامل میشود که ما هنوز از ۵×۵ فراتر نمیرویم؛ بهاین دلیل که کرنلهایی با اندازهی بزرگ زمان بسیار زیادی را میگیرند. در سال ۲۰۱۲ الکسنت (AlexNet) از کرنلی بهاندازهی ۱۱×۱۱ استفاده کرد و زمان آموزش حدود ۲ تا ۳ هفته زمان برد.
سوال۳:
زیرا زمان و هزینه محایباتی کمتر میشود
سوال ۲:
کرنل ماتریسی است که روی عکس ورودی حرکت میکند و مقدار آن با مقدار ماتریس ورودی ضرب میشود؛
ابعاد کرنل ابعاد کانولوشن را تعیین میکند.
فیلتر درواقع مجموع چندین کرنل است.
فیلترها همیشه یک بعد بیشتر از کرنلها هستند
سوال ۱:
فرایند کانولوشن از کرنل برای استخراج ویژگیهای عکس استفاده میشود. کرنل ماتریسی است که مانند پنجرهای روی عکس ورودی حرکت میکند
عالی بود فقط در عکس اول که کرنل در روی ماتریس ورودی حرکت می کند چرا اعداد قسمتهای که کرنل بیرون است متناظر با عدد پایینی یا بغلی ضرب می شود ؟
دمتون گرم خیلی خوب بود
تشکر از شما دوست عزیز.
تفاوت فیلتر و کرنل رو به خوبی توضیح دادید ممنون
ممنون از اشتراک نظرتون.
مقاله عالی در باب فیلتر و کرنل ها بود لطفا یک مقاله هم در باب OUTLIER بذارید
حتما به زودی مقالاتی در این زمینه هم خواهیم داشت.
سلام چه فریمورک هایی برای یادگیری عمیق پیشنهاد می کنید ؟
سلام، دوست عزیز لازمه سوالتون رو کمی بسط بدین تا بشه بهتر پاسخ داد. فریم ورک مورد استفاده بستگی به حوزه کاری شما و عوامل زیاد دیگهای داره.
ببخشین درباره تابع ضرر و انتشار به عقب آموزشی دارید ؟
درمورد انتشار رو به عقب یا backpropagation مطلبی داریم که از طریق این لینک میتونین بهش دسترسی داشته باشین: http://ctdrs.ir/ds0110
salam shoma midonin baraye virid b elme dade ch zabani bayad yad begirim?
سلام، معمولا با زبان برنامهنویسی پایتون شروع میکنن که محبوبترین زبان برای استفاده در حوزه هوش مصنوعیه.
سلام خسته نباشین دوره پایتون هم دارین ؟
سلام در حال حاضر خیر. ممکنه در آینده دوره پایتون مختص علم داده هم داشته باشیم.
عالی بود تشکر
سپاس از توجه شما