مقدمهای بر معماری CNNها و متداولترین لایههای آن
شبکههای عصبی پیچشی یا CNN خانوادهای از معماریهای شبکه عصبی مصنوعی هستند که ویژه مسائل بینایی کامپیوتری و پردازش تصویر ساخته شدهاند. این شبکهها، عصبی و چندلایهای هستند و هدف از ساخت آنها تجزیه و تحلیل ورودیهای دیداری و اجرای مسائلی همچون قطعهبندی تصویر، ردهبندی، حذف نویز (با استفاده از خودرمزنگارها)، تولید (با استفاده از شبکههای مولد تخاصمی یا GAN) و تشخیص اشیا است. در سالهای اخیر، علاوه بر مسائل مربوط به بینایی، شاهد پیادهسازی و کاربردهایی از CNNها در سایر حوزههای هوش مصنوعی همچون پردازش زبان طبیعی (NLP) نیز بودهایم.
معماری CNN
معماری CNN بر اساس کارکرد و ساختار قشر بینایی مغز طراحی شده است. به بیان ساده، معماری CNN ها الگوی اتصال نورونها در مغز انسان را تقلید میکند. یک CNN چندین لایه دارد، اما در کل میتوان دو جزء اصلی را برای آن در نظر گرفت:
- یک شبکه پیچشی که از چندین لایه (کانولوشن، ادغام، dropout و…) تشکیل شده است و میتواند ویژگیهای تصاویر را از هم جدا کند و تشخیص دهد.
- یک لایه یا شبکه کاملاً متصل که خروجی شبکه پیچشی را دریافت و بهترین خروجی ممکن را برای تصویر ورودی پیشبینی میکند.
لایه یا شبکه کاملاً متصل دقیقاً شبیه به معماری ابتداییترین شبکه عصبی مصنوعی یعنی پرسپترون چندلایهای است. شبکه کانولوشن مخصوص معماری CNN ها است. اکنون میخواهیم نگاه دقیقتری به لایههای شبکه بیندازیم.
لایههای CNN
انواع گوناگونی از لایهها هستند که میتوانند به CNNها اضافه شوند؛ برای مثال، یک CNN میتواند لایههای غیرمتداولی همچون upsampling یا لایههای پیچشی ترانهاده داشته باشد؛ اما در حالت عادی، یک CNN معمولی اغلب 5 لایه دارد:
لایه پیچشی
لایههای پیچشی بدیهیترین و شناختهشدهترین لایههای CNN هستند. با استفاده از لایههای پیچشی میتوان یک نگاشت ویژگی ساخت که با اجرای یک فیلتر (که تمام تصویر را بهصورت نواحی پیکسلی اسکن میکند) احتمال تعلق هر ویژگی به کلاسها را پیشبینی میکند. عملیات کانولوشن با اجرای فیلترها روی دادههای ورودی انجام میشود؛ این فیلترها اندازه تصویر را کوچک میکنند.
یکی از مزایای استفاده از کانولوشن این است که پیچیدگی محاسباتی کاهش مییابد. از آنجایی که هر پیکسل اغلب با پیکسلهای مجاورش ارتباط دارد، روابط بین بخشهای مختلف تصاویر بعد از کانولوشن همچنان حفظ میشوند. وقتی کانولوشن را با استفاده از یک فیلتر 3×3 روی یک تصویر 5×5 اجرا کنیم (در هر گام یک جابهجایی 1 پیکسلی اتفاق میافتد)، خروجی نیز 3×3 خواهد بود. این فرایند منجر به کاهش 64 درصدی پیچیدگی محاسبات میشود.
![شبکه عصبی](https://hooshio.com/wp-content/uploads/2022/03/4-1.png)
لایه ادغام
یک لایه رایج و اساسی دیگر که در CNNها دیده میشود، لایه ادغام است. لایه ادغام اغلب بعد از یک لایه پیچشی قرار میگیرد. لایههای ادغام از طریق کاهش اندازه فضایی بازنمایی، پارامترها را کاهش میدهند و بدین ترتیب به کاهش بیشتر پیچیدگی محاسباتی کمک میکنند. این لایه مقادیر پیکسلی را جمع میکند، تا پیچیدگی را کاهش دهد؛ این مسئله تأثیر منفی روی عملکرد مدل نخواهد داشت. این عملیات جمع و ادغام میتواند بر اساس انتخاب بیشینه، میانگین یا جمع کل مقادیر پیکسلها باشد. رایجترین روش ادغام MaxPooling یا ادغام بیشینه است؛ تصویر پایین طرز کار این روش را نشان میدهد:
![معماری شبکه های عصبی پیچشی](https://hooshio.com/wp-content/uploads/2022/03/5-1.png)
همانطور که مشاهده میکنید، ابتدا پیکسلها را به مربعات 2×2 تقسیم میکنیم و سپس مقدار بیشینه پیکسلی را از داخل هر مربع انتخاب میکنیم. با استفاده از روش MaxPooling میتوان یک پیکسل 4×4 را ابه 2×2 کاهش داد.
لایه Dropout
وجود لایه dropout در معماری یک شبکه عصبی پیچشی الزامی نیست. بااینحال، بهمنظور جلوگیری از مشکل بیشبرازش، اغلب یک یا چند لایه dropout در CNNها مشاهده میشود. هر شبکهای، بهخصوص شبکههای عصبی بزرگی که روی دیتاستهای نسبتاً کوچکی آموزش دیدهاند، میتوانند دچار بیشبرازش شوند و در نتیجه عملکرد بدی روی دادههای دنیای واقعی داشته باشند.
با اینکه چندین روش منظمسازی برای مقابله با مشکل بیشبرازش وجود دارد، امکانپذیرترین روش برای CNNها استفاده از لایه dropout است. پیادهسازی فرایند dropout آسان است: طی آموزش، خروجی چندلایه بهصورت تصادفی نادیده گرفته شده یا دور انداخته میشود (drop out). این فرایند، فرایند آموزش را نویزدار میکند و باعث میشود آن دسته از گرههای داخل یک لایه که حذف (dropout) نشدهاند، مسئولیت بیشتری بر عهده گیرند و آن گرههایی که حذف شدهاند، مسئولیت کمتری در برابر ورودیها داشته باشند. به کمک لایههای dropout، یک شبکه عصبی پیچشی میتواند انعطاف بیشتری در سازگاری با بهینهسازی وزنهای مدل داشته باشد و بدین طریق از بیشبرازش اجتناب کند.
لایه Flatten
همانطور که پیشتر اشاره شد، هر شبکه عصبی پیچشی شامل یک شبکه پیچشی و یک لایه کاملاً متصل میشود. لایه flatten بهعنوان پلی بین این دو قمست عمل میکند. از آنجایی که داده تصویری حداقل یک فرمت دوبعدی دارد، خروجی شبکه پیچشی نیز حداقل دوبعدی خواهد بود. از سوی دیگر، از آنجایی که لایه کاملاً متصل دقیقاً مشابه یک پرسپترون چندلایهای (نوع ساده شبکه عصبی) است، ورودیهای یکبعدی دریافت میکند. لایه flatten در همین مرحله نقش خود را ایفا میکند؛ پس میتوان گفت تنها هدف لایه flatten تبدیل آرایههای دوبعدی به آرایههای یکبعدی است.
شبکه یا لایه کاملاً متصل
لایه کاملاً متصل بخشی از یک شبکه عصبی پیچشی است که میتواند یک لایه متراکم یا یک پرسپترون پیچیده چندلایهای باشد. ورودیهای این لایه، خروجی لایه flatten هستند؛ بنابراین، لایه flatten را میتوان لایه ورودی این قسمت در نظر گرفت. وظیفه لایه کاملاً متصل، اجرای وزنها روی ورودیهای تولیدشده از طریق شبکه پیچشی و تولید احتمالات نهایی برای پیشبینی است (تا در نهایت بتواند، برای مثال، کلاس شیء تصویر ورودی را تعیین کند).
سخن نهایی
با ترکیب این 5 لایه متداول و برخی لایههای دیگر که کمتر به کار میروند (و در این نوشتار مورد بررسی قرار نگرفتند)، میتوانیم یک شبکه عصبی بسیار پیچیده بسازیم؛ اما کارکرد کلی شبکه تغییری نمیکند: جزء اول (شبکه پیچشی که لایههای مشخصی را در بردارد) ویژگیها را تشخیص میدهند و آنها را بهعنوان اطلاعات حائز اهمیت به یک لایه/شبکه کاملاً متصل انتقال میدهد؛ سپس این لایه کاملاً متصل میآموزد بر اساس این ویژگیها و با سازگار کردن وزنهایش، پیشبینیهای نهایی را تولید کند.
جدیدترین اخبار هوش مصنوعی ایران و جهان را با هوشیو دنبال کنید