موضوع مقاله: شبکه عصبی پیچشی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # شبکه عصبی پیچشی | مقدمه: شبکه‌های عصبی پیچشی یا همگشتی رده‌ای از شبکه‌های عصبی ژرف هستند که معمولاً برای انجام تحلیل‌های تصویری یا گفتاری در یادگیری ماشین استفاده می‌شوند. | ## بخش 1: شبکه عصبی پیچشی | شبکه‌های عصبی پیچشی به منظور کمینه کردن پیش‌پردازش‌ها از گونه‌ای از پرسپترونهای چندلایه استفاده می‌کنند. این ساختار به گونه‌ای است که تک‌نورون‌ها تنها در یک ناحیه محدود به تحریک پاسخ می‌دهند که به آن ناحیه پذیرش گفته می‌شود. نواحی پذیرش نورون‌های مختلف به صورت جزئی با هم همپوشانی دارند به گونه ای که کل میدان دید را پوشش می‌دهند. شبکه‌های عصبی پیچشی نسبت به بقیه رویکردهای دسته‌بندی تصاویر به میزان کمتری از پیش‌پردازش استفاده می‌کنند. این امر به معنی آن است که شبکه معیارهایی را فرامی‌گیرد که در رویکردهای قبلی به صورت دستی فراگرفته می‌شدند. این استقلال از دانش پیشین و دستکاری‌های انسانی در شبکه‌های عصبی پیچشی یک مزیت اساسی است. تا کنون کاربردهای مختلفی برای شبکه‌های عصبی از جمله در بینایی کامپیوتر، سیستم‌های پیشنهاددهنده و پردازش زبان طبیعی پیشنهاد شده‌اند. طراحی یک شبکه عصبی پیچشی از یک لایه ورودی، یک لایه خروجی و تعدادی لایه پنهان تشکیل شده‌است. لایه‌های پیچشی لایه‌های پیچشی یک عمل پیچش را روی ورودی اعمال می‌کنند، سپس نتیجه را به لایه بعدی می‌دهند. مشبک‌کردن به شبکه‌های پیچشی این اجازه را می‌دهد که انتقال، دوران یا اعوجاج ورودی را تصحیح کنند. اگرچه شبکه‌های عصبی پیش‌خور کاملاً همبند می‌توانند برای یادگیری ویژگی‌ها و طبقه‌بندی داده به کار روند، این معماری در کاربرد برای تصاویر به کار نمی‌رود. عمل پیچش یک راه‌حل برای این شرایط است که تعداد پارامترهای آزاد را به عمیق‌تر کردن شبکه کاهش می‌دهد. لایه‌های پیچشی نسبت به شبکه‌های عصبی اولیه تفاوت‌های زیادی دارند که از آن‌ها می‌توان به موارد زیر اشاره کرد: تعامل پراکنده (sparse interaction): در این لایه به جای اینکه به ازای هریک از ورودی‌های لایه یک‌وزن تعریف شده باشد و هر ورودی با تمام خروجی‌های لایه در ارتباط باشد، یک هسته (Kernel) مشخص می‌شود که ماتریسی است که ابعاد آن نسبت به ورودی بسیار کوچک است. برای مثال برای پردازش تصویری که میلیون‌ها پیکسل دارد، یک ماتریس هسته با اندازه‌ای در حدود صد تا هزار پیکسل در نظر گرفته می‌شود که به کمک آن می‌توان تمام لبه‌هایی که در تصویر موجود است را مشخص کرد. این به این معناست که اطلاعات کمتری نسبت به ورودی نیاز داریم تا شبکه را آموزش دهیم. اما در لایه‌های پیچشی، هریک از درایه‌های ماتریس هسته درتمام موقعیت‌های ورودی استفاده می‌شود. درواقع هربار این ماتریس هسته روی ماتریس ورودی می‌لغزد و تمامی درایه‌های هسته در آن بخش از ورودی ضرب می‌شود. اینکار باعث می‌شود برای تمام لایه تنها نیاز به یادگیری یک ماتریس هسته باشد که در کاهش حجم مورد نیاز کمک می‌کند. کاملاً همبند لایه‌های کاملاً همبند، هر نورون در یک لایه را به هر نورون در لایه دیگر متصل می‌کنند. این رویکرد در اصل مشابه کاری است که در شبکه عصبی پرسپترون چند لایه (MLP) انجام می‌شود. وزن‌ها شبکه‌های عصبی پیچشی وزن‌ها را در لایه‌های پیچشی به اشتراک می‌گذارند که باعث می‌شود حداقل حافظه و بیشترین کارایی به‌دست بیاید. شبکه‌های عصبی متأخر برخی شبکه‌های عصبی متأخر از معماری مشابهی استفاده می‌کنند، مخصوصاً آن‌هایی که برای تشخیص تصویر یا طبقه‌بندی استفاده می‌شوند. | ## بخش 2: شبکه عصبی پیچشی | به عنوان مثال در مسئله رگرسیون تابع هزینه می‌تواند اختلاف بین پیش‌بینی و مقدار واقعی خروجی به توان دو باشد، یا در مسئله طبقه‌بندی ضرر منفی لگاریتم احتمال خروجی باشد. مشکلی که در یادگیری شبکه‌های عصبی وجود دارد این است که این مسئله بهینه‌سازی دیگر محدب (convex) نیست. روش‌های گرادیان کاهشی سعی می‌کنند به صورت متناوب در خلاف جهت گرادیان حرکت کنند و با این کار تابع هزینه را به حداقل برسانند. گرادیانِ لایه‌های میانی اما به صورت مستقیم به‌دست نمی‌آید و باید از روش‌هایی مانند قاعده زنجیری در مشتق‌گیری استفاده کرد. روش بازگشت به عقب از قاعده زنجیری برای محاسبه گرادیان‌ها استفاده می‌کند و همان‌طور که در پایین خواهیم دید، این روش به صورت متناوب گرادیان‌ها را از بالاترین لایه شروع کرده آن‌ها را در لایه‌های پایینتر «پخش» می‌کند. برای سلول عصبی ورودیی که از سلول عصبی به این سلول وارد می‌شود را با نشان می‌دهیم. وزن این ورودی است و مجموع ضرب ورودی‌ها با وزنهایشان را با نمایش می‌دهیم، به این معنی که . حال باید بر روی تابعی غیر خطی اعمال کنیم این تابع را می‌نامیم و خروجی آن را با نمایش می‌دهیم یعنی . به همین شکل خروجیی که از سلول عصبی خارج شده و به سلول وارد می‌شود را با نمایش می‌دهیم و وزن آن را می‌نامیم. حال تمام وزن‌های این شبکه عصبی را در مجموعه‌ای به اسم می‌گنجانیم، هدف یادگیری این وزنهاست. اگر ورودی ما باشد و خروجی و خروجی شبکه عصبی ما ، هدف پیدا کردن انتخاب است به قسمی که برای تمام داده‌ها و به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک تابع هزینه بر روی تمام داده هاست، اگر داده‌ها را با و تابع هزینه را با نشان دهیم هدف کمینه کردن تابع پایین است: به عنوان مثال اگر مسئله رگرسیون است برای می‌توانیم خطای مربعات را در نظر بگیریم و اگر مسئله دسته‌بندی است برای می‌شود منفی لگاریتم بازنمایی را استفاده کرد. برای به‌دست آوردن کمینه باید از روش گرادیان کاهشی استفاده کرد، به این معنی که گرادیان تابع را حساب کرده، کمی در خلاف جهت آن حرکت کرده و این کار را آنقدر ادامه داد تا تابع هزینه خیلی کوچک شود. قاعده زنجیری به این شکل کار می‌کند: اگر تابعی داشته باشیم به اسم که وابسته به سه ورودی ، و باشد و هرکدام از این سه ورودی به نوبه خود وابسته به باشند، مشتق به به این شکل محاسبه می‌شود: با استفاده از این قاعده زنجیری روش بازگشت به عقب را به این شکل دنبال می‌کنیم: همان‌طور که در خط پیشین دیدیم برای به‌دست آوردن گرادیان نسبت به به دو مقدار نیاز داریم ورودی به سلول عصبی از سلول عصبی که همان است و راحت به‌دست می‌آید و که از روش بازگشتی به‌دست می‌آید و بستگی به ‌هایی لایه بعد دارد که سلول به آن‌ها وصل است، به‌طور دقیقتر . روش بازگشتی برای به‌دست آوردن ‌ها به این شکل کار می‌کند که ابتدا را برای سلول‌های لایه خروجی حساب می‌کنیم، و بعد لایه‌ها را به نوبت پایین آئیم و برای هر سلول آن را با ترکیت ‌های لایه‌های بالایی آن طبق فرمول حساب می‌کنیم. تعدادی از ابرپارامترها در شبکه‌های عصبی پیچشی، مشابه با ابرپارامترهای سایر شبکه‌های عصبی است. اما این نوع شبکه‌ها نسبت به سایر شبکه‌ها تعداد ابرپاراکتر بیشتری دارند که به بررسی آن‌ها پرداخته می‌شود. گام (stride): همان‌طور که در ابتدا بیان شد، هسته (کرنل) در روی ماتریس ورودی می‌لغزد و با هربار لغزش، ماتریس کرنل و آن بخش از ورودی که منطبق بر کرنل است در یکدیگر ضرب می‌شوند. در نتیجه با داشتن کرنل به اندازه ۳*۳ و قرار دادن طول گام به اندازه ۲، خروجی نهایی ۳*۳ خواهد بود. حاشیه‌گذاری (padding): حاشیه گذاری به معنای اضافه کردن پیکسل‌هایی (معمولا با مقدار صفر) به حاشیه تصویر است. یکی از دلایل، آن است که با تغییر مقدار گام (stride) از ۱ به اعداد دیگر، ممکن است با لغزاندن ماتریس هسته روی ورودی، مقداری از این ماتریس خارج از ورودی بیفتد که منجر به بروز خطا در مدل می‌شود. یکی دیگر از دلایل اضافه کردن حاشیه به تصویر، برابر کردن اهمیت پیکسل‌ها در ورودی است. | ## بخش 3: شبکه عصبی پیچشی | درصورتی که حاشیه گذاری وجود نداشته باشد، پیکسل‌هایی که در گوشه تصویر هستند، تنها در یکی از عملیات‌های ضرب پیچشی قرار ی‌گیرند و در نتیجه اهمیت آن‌ها در خروجی کم‌رنگ‌تر است. با اضافه کردن حاشیه مناسب، تعداد بارهایی که هر پیکسل در عملیات ضرب پیچشی می‍آید برابر با تمام پیکسل‌های دیگر است. تعداد فیلترها: همان‌طور که پیشتر نیز ذکر شد، عمق هر ماتریس هسته به اندازه عمق ورودی است و از ضرب پیچشی هر ماتریس هسته در ورودی، یک ماتریس با عمق یک به وجود می‌آید. برای آنکه بتوان تعداد بیشتری ویژگی را از ورودی استخراج کرد، ورودی را با چند ماتریس هسته متفاوت با مقادیر مختلف ضرب پیچشی می‌کنند و در نتیجه عمق خروجی نیز به اندازه تعداد هسته‌هایی است که ورودی را در آن ضرب می‌کنند. محاسبه اندازه خروجی لایه پیچشی درصورتی که اندازه ورودی باشد و تعداد فیلترها باشد و اندازه ماتریس هسته باشد، و همچنین از هر طرف تصویر مقدار حاشیه‌گذاری باشد و مقدار گام در نظر گرفته شود اندازه تصویر خروجی از رابطه زیر به دست می‌آید: تاریخچه شبکه‌های عصبی پیچشی مشابه سیستم پردازش دیداری در موجودات زنده عمل می‌کنند. از قرن نوزدهم به‌طور همزمان اما جداگانه از سویی نوروفیزیولوژیست‌ها سعی کردند سیستم یادگیری و تجزیه و تحلیل مغز را کشف کنند، و از سوی دیگر ریاضیدانان تلاش کردند مدل ریاضی ای بسازند که قابلیت فراگیری و تجزیه و تحلیل عمومی مسائل را دارا باشد. اولین کوشش‌ها در شبیه‌سازی با استفاده از یک مدل منطقی در اوایل دههٔ ۱۹۴۰ توسط وارن مک‌کالک و والتر پیتز انجام شد که امروزه بلوک اصلی سازنده اکثر شبکه‌های عصبی مصنوعی است. عملکرد این مدل مبتنی بر جمع ورودی‌ها و ایجاد خروجی با استفاده از شبکه‌ای از نورون‌ها است. اگر حاصل جمع ورودی‌ها از مقدار آستانه بیشتر باشد، اصطلاحاً نورون برانگیخته می‌شود. پرسپترون دارای سه لایه است که شامل لایهٔ ورودی، لایهٔ خروجی و لایهٔ میانی می‌شود. این سیستم می‌تواند یاد بگیرد که با روشی تکرارشونده وزن‌ها را به گونه‌ای تنظیم کند که شبکه توان بازتولید جفت‌های ورودی و خروجی را داشته‌باشد. روش دیگر، مدل خطی تطبیقی نورون است که در سال ۱۹۶۰ توسط برنارد ویدرو و مارسیان هاف در دانشگاه استنفورد) به وجود آمد که اولین شبکه‌های عصبی به کار گرفته شده در مسائل واقعی بودند. آدالاین یک دستگاه الکترونیکی بود که از اجزای ساده‌ای تشکیل شده بود، روشی که برای آموزش استفاده می‌شد با پرسپترون فرق داشت. در سال ۱۹۶۹ میسکی و پاپرت کتابی نوشتند که محدودیت‌های سیستم‌های تک لایه و چند لایه پرسپترون را تشریح کردند. نتیجه این کتاب پیش داوری و قطع سرمایه‌گذاری برای تحقیقات در زمینه شبیه‌سازی شبکه‌های عصبی بود. آن‌ها با طرح اینکه طرح پرسپترون قادر به حل هیچ مسئله جالبی نمی‌باشد، تحقیقات در این زمینه را برای مدت چندین سال متوقف کردند. با وجود اینکه اشتیاق عمومی و سرمایه‌گذاری‌های موجود به حداقل خود رسیده بود، برخی محققان تحقیقات خود را برای ساخت ماشین‌هایی که توانایی حل مسائلی از قبیل تشخیص الگو را داشته باشند، ادامه دادند. همچنین او با همکاری کارپنتر شبکه‌های نظریه تشدید انطباقی را بنا نهادند که با مدل‌های طبیعی تفاوت داشت. ورباس در سال ۱۹۷۴ شیوه آموزش پس انتشار خطا را ایجاد کرد که یک شبکه پرسپترون چندلایه البته با قوانین نیرومندتر آموزشی بود. پیشرفت‌هایی که در سال ۱۹۷۰ تا ۱۹۸۰ به‌دست آمد برای جلب توجه به شبکه‌های عصبی بسیار مهم بود. | ## جمع‌بندی | برخی فاکتورها نیز در تشدید این مسئله دخالت داشتند، از جمله کتاب‌ها و کنفرانس‌های وسیعی که برای مردم در رشته‌های متنوع ارائه شد.