فرایند لایه گذاری در شبکه عصبی کانولوشنی یکی از مفاهیمی است که برای یادگیری هوش مصنوعی و علم داده یا دیتا ساینس باید با آن آشنا باشید. قطعاً زمانیکه وارد دنیای هوش مصنوعی و شبکههای عصبی میشویم، بارها با شبکه عصبی کانولوشنی یا همان شبکه عصبی پیچشی (CNN / Convolutional Neural Network) برخورد میکنیم. این شبکه در میان شبکههای عصبی بهترین عملکرد را در حل مسائل حوزه بینایی ماشین (Computer Vision)، مانند شناسایی تصاویر (Image Detection)، طبقهبندی تصاویر (Image Classification)، تشخیص چهره (Face Recognition) و غیره، دارد. یکی از فرایندهای مهمی که در شبکه عصبی کانولوشنی صورت میگیرد فرایند لایهگذاری (Padding) است. در این مطلب تلاش کردهایم تا با جزئیات بیشتری به فرایند لایه گذاری در شبکه عصبی کانولوشنی بپردازیم.
فرایند کانولوشن در شبکه عصبی کانولوشنی
میدانیم که عکس بهصورت ماتریسی از پیکسلها (Pixel) به شبکه عصبی وارد میشود که هر یک از این پیکسلها مقداری بین صفر تا ۲۵۵ دارند؛ برای مثال شکل ۱ را در نظر میگیریم که ماتریسی از یک عکس ۵×۵ پیکسلی است که در اینجا برای راحتی و درک بهتر مقدار هر پیکسل به جای صفر تا ۲۵۵، صفر یا ۱ است.
در فرایند کانولوشن مقدار پیکسلهای ماتریس عکس ورودی در یک فیلتر ضرب میشود. فیلتر یک ماتریس است که ممکن است مقدارها و اندازههای مختلفی داشته باشد؛ مثلاً در این مثال یک فیلتر ۳×۳ بهاین شکل داریم:
این فیلتر مانند یک پنجره کوچک روی عکس ورودی قرار میگیرد؛ بهعبارت دیگر، میتوانیم بگوییم این فیلتر با عکس ورودی ادغام (Convolve) میشود. این فیلتر روی هر بخش از عکس ورودی که قرار میگیرد مقدار هر پیکسل آن با مقدار پیکسل متناظرش در ماتریس عکس ورودی ضرب میشود؛ حاصلجمع ضرب تمامی پیکسلها با پیکسلهای متناظرشان ماتریس جدیدی را ایجاد میکند که به آن Convolved Layer / Convolutional Feature / Feature map / Filter map گفته میشود. در شکل ۳ این فرایند دیده میشود:
این فیلتر طبق مقدار گام (Stride) روی ماتریس عکس ورودی حرکت میکند؛ یعنی اگر مقدار stride برابر با ۱ باشد، فیلتر هر بار یک پیکسل به جلو حرکت میکند. در شکل ۳ مقدار stride برابر با ۱ است.
درواقع در هر بار فرایند کانولوشن ما اندازهی عکس را کوچکتر میکنیم و چیزی که به دست میآوریم Feature Map است که نسخهی کوچکشدهی عکس ورودی است و اطلاعات مهم و موردنیاز عکس را به همراه دارد.
حال که با فرایند کانولوشن بهطور خلاصه آشنا شدیم، به موضوع اصلیمان، یعنی فرایند لایهگذاری در شبکه عصبی کانولوشنی (Padding)، میرسیم.
چرا به فرایند لایهگذاری (Padding) نیاز داریم؟
همانطور که در بخش قبل دیدیم، هر بار که فرایند کانولوشن صورت میگیرد، اندازهی عکس ورودی (ماتریس عکس ورودی) با عبور از هر لایهی کانولوشنی کوچکتر میشود؛ در مثال قبلی یک عکس ۵×× با یک بار فرایند کانولوشن با یک فیلتر ۳×۳ به یک عکس ۳×۳ تبدیل شد. بهطور کلی، اگر یک عکس n×n داشته باشیم و فیلتر f×f باشد، ابعاد عکس خروجی (n-f+1)*(n-f+1) میشود؛ مثلاً اگر عکس ورودی ۶×۶ و فیلتر ۳×۳ باشد، اندازهی عکس خروجی (۱+۳-۶)*(۱+۳-۶) میشود که همان ۴×۴ است.
اما این فرایند دو مشکل به همراه دارد:
- همانطور که متوجه شدیم، عکس بعد از هربار فرایند کانولوشن کوچک میشود؛ برای مثال، اگر عکس ما ۶×۶ باشد، با یک بار کانولوشن ۴×۴ میشود؛ حال اگر چندین بار عملیات کانولوشن روی عکس انجام دهیم، ممکن است آنقدر کوچک شود که به ۱×۱ برسد که این چیزی نیست که ما دنبالش هستیم. نمیخواهیم عکس ورودی هر بار که کانولوشن انجام میدهیم کوچک شود.
- مشکل بعدی این است که زمانی که کانولوشن انجام میشود، پیکسلهایی که در لبه عکس وجود دارند فقط یک بار دیده میشوند، درحالیکه فیلتر ممکن است چندین بار روی پیکسلهای میانی قرار بگیرد؛ برای مثال، در شکل ۴ مشخص است که فیلتر فقط یک بار روی پیکسل قرمز، اما ۳ بار روی پیکسل سبز قرار میگیرد؛ این یعنی پیکسلهایی که روی لبه قرار دارند در محاسبه ماتریس خروجی، یعنی همان Feature Map، خیلیکم استفاده میشوند و اطلاعات مهمی که در لبههای عکس وجود دارد دور ریخته میشود.
با توجه به دو مشکل مطرحشده، نیاز به فرایند لایهگذاری (Padding) داریم.
پیشنهاد میکنیم با کاربردهای شبکه عصبی کانولوشنی (CNN) بیشتر آشنا شوید.
فرایند لایه گذاری در شبکه عصبی کانولوشنی
در فرایند لایهگذاری، قبل از اینکه کانولوشن را انجام دهیم، لایهای دورتادور عکس اضافه میکنیم که معمولاً مقدار پیکسلهای آن برابر با صفر است و بههمین دلیل به آن Zero Padding میگویند. لایهگذاری صفر (Zero Padding) مشهورترین نوع لایهگذاری است. در اینجا یک لایهی یکپیکسلی دورتادور عکس اضافه شده است؛ البته این لایه میتواند هر چند پیکسل باشد؛ بهطور کلی، بعد از لایهگذاری اگر یک عکس n×n و فیلتر f×f داشته باشیم، اندازهی ماتریس (عکس) خروجی برابر با (n + 2p — f + 1) × (n + 2p — f + 1) است. در شکل ۵ نمونهای از لایهگذاری را با 1=p مشاهده میکنیم.
حال که یک لایه دورتادور عکس اضافه شده اندازهی عکس برابر با ۸×۸ است و بعد از کانولوشن با فیلتر ۳×۳ یک عکس ۶×× را در خروجی داریم.
انواع لایهگذاری (Padding)
فرایند لایهگذاری (Padding) انواع مختلفی دارد که در اینجا هر یک را بررسی میکنیم:
۱. بدون لایهگذاری (Valid Padding / No Padding)
این نوع لایهگذاری همان ماتریس بدون لایه است؛ یعنی اصلاً هیچ لایهای به ماتریس عکس ورودی اضافه نکنیم.
۲. لایهگذاری صفر (Same Padding / Zero Padding)
این نوع لایهگذاری بیشتر از باقی انواع لایهگذاری استفاده میشود. همانطور که از اسمش مشخص است، بهاین معناست که مقدار هر پیکسل در لایه یا لایههایی که به عکس اضافه میکنیم برابر با صفر است؛ دقیقاً مانند مثالی که پیشتر داشتیم.
۳. لایهگذاری ثابت (Constant Padding)
لایهگذاری با اعداد ثابت یکی دیگر از انواع لایهگذاری است که در آن تعیین میکنیم مقدار هر پیکسل در لایه یا لایههایی که اضافه کردیم برابر با یک مقدار ثابت باشد.
۴. لایهگذاری انعکاسی (Reflection Padding)
این نوع لایهگذاری بهاین شکل عمل میکند که در هر لبه مقدار پیکسل لایهی اضافهشده را برابر با پیکسل کناری که در لبه قرار دارد (در جهت مخالف) در نظر میگیرد؛ درواقع مانند این است که انعکاس اعداد کناری روی یک سطح در پیکسلهای لایههای اضافهشده قرار میگیرند. برای درک بهتر این مسئله به شکل ۶ نگاهی میاندازیم:
در اینجا به لبههای سمت چپ و راست دو لایه اضافه شده و به لبههای پایین و بالا یک لایه اضافه شده است. اگر به لبه چپ ماتریس عکس ورودی نگاه کنیم، میبینیم که اولین عدد از بالا ۳ است. حال برای لایهگذاری باید به عدد سمت راست ۳ نگاه کنیم که ۵ است؛ بنابراین ۵ مقدار پیکسل اولین لایهی اضافهشده میشود. مقدار پیکسل دومین لایه اضافهشده هم ۱ خواهد بود؛ زیرا دومین پیکسل سمت راست ۳ برابر با ۱ است. همین فرایند در تمامی لبهها تکرار میشود تا ماتریس خروجی که در شکل ۶ مشاهده میکنیم ایجاد شود.
۵. لایهگذاری متقارن (Replication Padding / Symmetric padding)
در اینجا هم مثل نوع قبلی انعکاس اعداد ماتریس اصلی در لایههای اضافهشده قرار میگیرد، با این تفاوت که خود عددی هم که در لبه ماتریس قرار دارد در نظر گرفته میشود. برای درک این مسئله به شکل ۷ نگاهی میاندازیم:
همانطور که در شکل مشخص است، اگر لبه چپ را در نظر بگیریم، از بالا اولین عدد ۳ است و عدد کناری آن (در سمت راست) ۶ است. برای لایهگذاری اول ۳ و سپس ۶ اضافه میشود.
پیشنهاد میکنیم با لایه ادغام در شبکه عصبی کانولوشنی (CNN) آشنا شوید.
یادگیری دیتا ساینس با کلاسهای آنلاین آموزش علم داده کافهتدریس
کافهتدریس بهصورت جامع کلاسهای آنلان آموزش علم داده را در دورههای مقدماتی و پیشرفته برگزار میکند. شرکت در این کلاسها به شما امکان میدهد در هر نقطهی جغرافیایی به کاملترین و بهروزترین آموزش دیتا ساینس دسترسی داشته باشید.
این کلاسها بهصورت کاملاً پویا و تعاملی و کارگاهی برگزار میشود و مبنای آن کار روی پروژههای واقعی علم داده است.
برای آشنایی با کلاسهای آنلاین آموزش علم داده کافهتدریس و مشاورهی رایگان برای شروع یادگیری دیتا ساینس روی این لینک کلیک کنید: