چگونه نمونه‌ها را مستقیما به شبکه عصبی بدهیم

شبکه های عصبی متداول مانند پرسپترون، پرسپترون چند لایه و … یک ورودی در قالب یک بردار ویژگی دریافت می‌کنند و سپس آنرا از تعدادی لایه مخفی عبور می‌دهند و نهایتا یک خروجی که نتیجه پردازش لایه‌ها است در لایه خروجی شبکه ظاهر می‌شود.
در اینگونه از شبکه‌های عصبی، هر لایه مخفی از تعدادی نورون تشکیل شده که این نورون‌ها به تمام نورون‌های لایه قبل از خود متصل می‌شوند. نورون‌های هر لایه بصورت مستقل عمل کرده و هیچ ارتباطی با یکدیگر ندارند. آخرین لایه تماما متصل (fully connected layer) به لایه خروجی (output layer) معروف است و معمولا نقش نمایش دهنده امتیاز هر دسته را ایفا می‌کند. بعنوان نمونه یک شبکه عصبی پرسپترون چند لایه، با دولایه مخفی و یک لایه ورودی را در شکل زیر ملاحظه می‌کنید.

حال فرض کنید نمونه مورد استفاده ما یک تصویر رنگی سه کاناله باشد. شبکه‌های عصبی معمولی برای تصاویر معمول بخوبی عمل نمی‌کنند زیرا که حجم بردار ورودی بالاست و نمی‌تواند مسئله را با دقت مناسبی حل کند. بعنوان مثال اگر یک تصویر به اندازه 32*32 باشد (۳۲ پیکسل عرض، ۳۲ پیکسل ارتفاع و ۳ کانال رنگ)؛ بنابراین یک نورون با اتصال کامل (fully connected) در لایه اول یک شبکه عصبی معمولی 3*32*32=3072 وزن خواهد داشت. این مقدار شاید در نظر اول مقدار قابل توجهی به نظر نیاید اما بطور واضح مشخص است که این معماری تماما مرتبط قابل استفاده برای تصاویر بزرگتر نخواهد بود.

برای مثال یک تصویر با اندازه متعارف تر مثل 3*200*200 باعث می‌شود که یک نورون 120000 وزن داشته باشد! علاوه بر این ما قطعا خواهان تعداد بیشتری از این نورون‌ها خواهیم بود، پس تعداد پارامترها بسرعت افزایش پیدا می‌کند. مشخص است این اتصال کامل باعث اتلاف بوده و تعداد بسیار زیاد پارامترها هم بسرعت باعث overfitting خواهد شد.

برای حل این مشکل، از تصاویر ویژگی‌های مهم و کلیدی را که نماینده خوبی برای تصویر باشند را استخراج می‌کنند و به صورت یک بردار ویژگی به شبکه اعمال می‌کنند.

فرض کنید که می‌خواهیم توسط شبکه عصبی تشخیص چهره را انجام دهیم(برای دریافت برنامه تشخیص چهره با شبکه عصبی پرسپترون چند لایه کلیک کنید):
به دو دلیل نمی‌توانیم مستقیما از پیسکل‌های خود تصویر استفاده کنیم:
– سایز تصویر بزرگ هست و نمی‌توان به درستی شبکه را آموزش داد و مشکلاتی که توضیح دادیم پیش میاد.
– تصاویر در شرایط مختلف گرفته می شود و ممکن است ویژگی های تصویر تغییر کند. برای مثال شخص یکبار با ریش و سیبیل باشد و در عکس دیگر بدون ریش و سیبیل. یا اینکه تصویر از یک زاویه دیگه ای گرفته شود. سایز تصویر تغییر کند، شدت روشنایی تصویر تغییر کند! و …

بطور خلاصه می‌توان گفت شرایط تاثیر گذار هستند و عملا زمانی که یکی از شرایط گفته شده اتفاق بیافتد شبکه نمی‌تواند مسئله را به خوبی حل کند، و حتی ممکن است مقادیر پیکسل‌ها در تصاویر مختلف تغییر کنند. بنابر مسائل گفته شده باید برای هر نمونه ورودی (در مثال ما تصویر ورودی) ویژگی استخراج کرد که به خوبی نماینده آن نمونه باشد، تعداد معقولی مقدار داشته باشد و نهایتا برای هر تصویر تعداد ویژگی‌های استخراج شده یکسان باشد.

در استخراج ویژگی باید چند مسئله در نظر گرفته شود:
– ویژگی‌ای که استخراج می‌شود باید مجزا باشد، یعنی مقدار متفاوتی بین کلاس‌های مختلف داشته باشد.
– تا حد ممکن به تغییراتی مثل چرخش، شدت روشنایی و غیره حساس نباشد، یعنی با تغییر شرایط، ویژگی‌ها تغییر نکنند.

البته در انتها قابل ذکر است، استخراج چنین ویژگی‌هایی در بسیاری از مسائل خود چالشی بزرگ خواهد بود و یا حتی مسئله‌ای مانند اینکه از بین صدها ویژگی کدام ویژگی‌ها مناسب‌تر است (که البته برای این موضوع الگوریتم‌هایی مانند PCA یا تحلیل مولفه‌های اساسی، ارائه شده است که میتوانید در سایت یارکد راجع به PCA مطالع کنید.)

بنابراین یک راه حل مطمئن استفاده از خود نمونه است بجای ویژگی‌ها. به شرط غلبه بر مشکلات بیان شده. در شبکه های عصبی کانولوشنال که حالت تعمیم یافته شبکه های عصبی هستند، دیگر نیازی نیست که ویژگی استخراج شود، خود تصویر به طور مستقیم به شبکه اعمال می‌شود و شبکه در ضمن فرآیند یادگیری، در لایه های مختلف از تصویر نیز ویژگی استخراج می‌کند. در شکل زیر ساختار کلی یک شبکه عصبی کانولوشنال را می‌توان ملاحظه کرد که ورودی این شبکه خود تصویر است و نه ویژگی‌های استخراج شده از تصویر.

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.