شبکه عصبی پیچشی
شبکه‌های عصبی پیچشی یا همگشتی رده‌ای از شبکه‌های عصبی ژرف هستند که معمولاً برای انجام تحلیل‌های تصویری یا گفتاری در یادگیری ماشین استفاده می‌شوند.
شبکه‌های عصبی پیچشی به منظور کمینه کردن پیش‌پردازش‌ها از گونه‌ای از پرسپترونهای چندلایه استفاده می‌کنند. به جای شبکه عصبی پیچشی گاهی از این شبکه‌ها با نام شبکه‌های عصبی تغییرناپذیر با انتقال (shift invariant) یا تغییرناپذیر با فضا (space invariant) هم یاد می‌شود. این نام‌گذاری بر مبنای ساختار این شبکه است که در ادامه به آن اشاره خواهیم کرد.
ساختار شبکه‌های پیچشی از فرایندهای زیستی قشر بینایی گربه الهام گرفته‌شده‌است. این ساختار به گونه‌ای است که تک‌نورون‌ها تنها در یک ناحیه محدود به تحریک پاسخ می‌دهند که به آن ناحیه پذیرش گفته می‌شود. نواحی پذیرش نورون‌های مختلف به صورت جزئی با هم همپوشانی دارند به گونه ای که کل میدان دید را پوشش می‌دهند.
شبکه‌های عصبی پیچشی نسبت به بقیه رویکردهای دسته‌بندی تصاویر به میزان کمتری از پیش‌پردازش استفاده می‌کنند. این امر به معنی آن است که شبکه معیارهایی را فرامی‌گیرد که در رویکردهای قبلی به صورت دستی فراگرفته می‌شدند. این استقلال از دانش پیشین و دستکاری‌های انسانی در شبکه‌های عصبی پیچشی یک مزیت اساسی است.
تا کنون کاربردهای مختلفی برای شبکه‌های عصبی از جمله در بینایی کامپیوتر، سیستم‌های پیشنهاددهنده و پردازش زبان طبیعی پیشنهاد شده‌اند.
یک شبکه عصبی پیچشی از یک لایه ورودی، یک لایه خروجی و تعدادی لایه پنهان تشکیل شده‌است. لایه‌های پنهان یا پیچشی هستند، یا تجمعی یا کامل.
لایه‌های پیچشی یک عمل پیچش را روی ورودی اعمال می‌کنند، سپس نتیجه را به لایه بعدی می‌دهند. این پیچش در واقع پاسخ یک تک‌نورون را به یک تحریک دیداری شبیه‌سازی می‌کند.
هر نورون پیچشی داده‌ها را تنها برای ناحیه پذیرش خودش پردازش می‌کند. مشبک‌کردن به شبکه‌های پیچشی این اجازه را می‌دهد که انتقال، دوران یا اعوجاج ورودی را تصحیح کنند.
اگرچه شبکه‌های عصبی پیش‌خور کاملاً همبند می‌توانند برای یادگیری ویژگی‌ها و طبقه‌بندی داده به کار روند، این معماری در کاربرد برای تصاویر به کار نمی‌رود. در این حالت حتی برای یک شبکه کم‌عمق تعداد بسیار زیادی نورون لازم است. عمل پیچش یک راه‌حل برای این شرایط است که تعداد پارامترهای آزاد را به عمیق‌تر کردن شبکه کاهش می‌دهد.
لایه‌های ادغام (pooling layer): شبکه‌های عصبی پیچشی ممکن است شامل لایه‌های ادغام محلی یا سراسری باشند که خروجی‌های خوشه‌های نورونی در یک لایه را در یک تک‌نورون در لایه بعدی ترکیب می‌کند. به عنوان مثال روش حداکثر تجمع (max pooling) حداکثر مقدار بین خوشه‌های نورونی در لایه پیشین استفاده می‌کند. مثال دیگر میانگین تجمع (average pooling) است که از مقدار میانگین خوشه‌های نورونی در لایه پیشین استفاده می‌کند.
لایه‌های کاملاً همبند، هر نورون در یک لایه را به هر نورون در لایه دیگر متصل می‌کنند. این رویکرد در اصل مشابه کاری است که در شبکه عصبی پرسپترون چند لایه (MLP) انجام می‌شود.
شبکه‌های عصبی پیچشی وزن‌ها را در لایه‌های پیچشی به اشتراک می‌گذارند که باعث می‌شود حداقل حافظه و بیشترین کارایی بدست بیاید.
برخی شبکه‌های عصبی متأخر از معماری مشابهی استفاده می‌کنند، مخصوصاً آن‌هایی که برای تشخیص تصویر یا طبقه‌بندی استفاده می‌شوند.
یادگیری ماشینی با نظارت (supervised learning) به دنبال تابعی از میان یک سری توابع هست که تابع هزینه (loss function) داده ها را بهینه سازد. به عنوان مثال در مسئله رگرسیون تابع هزینه می‌تواند اختلاف بین پیش‌بینی و مقدار واقعی خروجی به توان دو باشد، یا در مسئله طبقه بندی ضرر منفی لگاریتم احتمال خروجی باشد. مشکلی که در یادگیری شبکه های عصبی وجود دارد این است که این مسئله بهینه سازی دیگر محدب (convex) نیست . ازین رو با مشکل کمینه‌های محلی روبرو هستیم. یکی از روش‌های متداول حل مسئله بهینه سازی در شبکه‌های عصبی بازگشت به عقب یا همان back propagation است. روش بازگشت به عقب گرادیانِ تابع هزینه را برای تمام وزن‌های شبکه عصبی محاسبه می‌کند و بعد از روش‌های گرادیان کاهشی (gradient descent) برای پیدا کردن مجموعه وزن‌های بهینه استفاده می‌کند. روش‌های گرادیان کاهشی سعی میکنند به صورت متناوب در خلاف جهت گرادیان حرکت کنند و با این کار تابع هزینه را به حداقل برسانند. پیدا کردن گرادیانِ لایه آخر ساده است و با استفاده از مشتق جزئی بدست می آید. گرادیانِ لایه‌های میانی اما به صورت مستقیم بدست نمی‌آید و باید از روش‌هایی مانند قاعده زنجیری در مشتق‌گیری استفاده کرد. روش بازگشت به عقب از قاعده زنجیری برای محاسبه گرادیان‌ها استفاده می‌کند و همانطور که در پایین خواهیم دید، این روش به صورت متناوب گرادیان‌ها را از بالاترین لایه شروع کرده آن‌ها را در لایه‌های پایینتر «پخش» می‌کند.
برای سلول عصبی formula_1 ورودیی که از سلول عصبی formula_2 به این سلول وارد می‌شود را با formula_3 نشان می‌دهیم. وزن این ورودی formula_4 است و مجموع ضرب ورودی‌ها با وزنهایشان را با formula_5 نمایش می‌دهیم، به این معنی که formula_6. حال باید بر روی formula_5 تابعی غیر خطی اعمال کنیم این تابع را formula_8 می نامیم و خروجی آن را با formula_9 نمایش می‌دهیم یعنی formula_10. به همین شکل خروجیی که از سلول عصبی formula_1 خارج شده و به سلول formula_12 وارد می‌شود را با formula_13 نمایش می‌دهیم و وزن آن را formula_14 می‌نامیم. حال تمام وزن‌های این شبکه عصبی را در مجموعه‌ای به اسم formula_15 می‌گنجانیم، هدف یادگیری این وزنهاست. اگر ورودی ما formula_16 باشد و خروجی formula_17 و خروجی شبکه عصبی ما formula_18، هدف پیدا کردن انتخاب formula_15 است به قسمی که برای تمام داده‌ها formula_17 و formula_18 به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک تابع هزینه بر روی تمام داده هاست، اگر داده‌ها را با formula_22 و تابع هزینه را با formula_23 نشان دهیم هدف کمینه کردن تابع پایین است :
formula_24
به عنوان مثال اگر مسئله رگرسیون است برای formula_23 می‌توانیم خطای مربعات را در نظر بگیریم و اگر مسئله دسته‌بندی است برای formula_23می‌شود منفی لگاریتم بازنمایی را استفاده کرد.
برای بدست آوردن کمینه formula_27 باید از روش گرادیان کاهشی استفاده کرد، به این معنی که گرادیان تابع را حساب کرده، کمی در خلاف جهت آن حرکت کرده و این کار را آنقدر ادامه داد تا تابع هزینه خیلی کوچک شود. روش بازگشت به عقب در واقع روشی برای پیدا کردن گرادیان تابع formula_27 است.
حال فرض کنیم می خواهیم گرادیان تابع formula_27 را نسبت به وزن formula_4 بدست بیاوریم. برای این کار نیاز به قاعده زنجیری در مشتق‌گیری داریم. قاعده زنجیری به این شکل کار می‌کند: اگر تابعی داشته باشیم به اسم formula_31 که وابسته به سه ورودی formula_32، formula_33 و formula_34 باشد و هرکدام از این سه ورودی به نوبه خود وابسته به formula_35 باشند، مشتق formula_31 به formula_35 به این شکل محاسبه می‌شود:
formula_38
با استفاده از این قاعده زنجیری روش بازگشت به عقب را به این شکل دنبال می‌کنیم:‌
formula_39 formula_40 formula_41 formula_42 formula_43
همانطور که در خط پیشین دیدیم برای بدست آوردن گرادیان نسبت به formula_44 به دو مقدار نیاز داریم ورودی به سلول عصبی formula_45 از سلول عصبی formula_46 که همان formula_47 است و راحت بدست می آید و formula_48 که از روش بازگشتی بدست می آید و بستگی به formula_49‌‌‌هایی لایه بعد دارد که سلول formula_45به آن‌ها وصل است، به‌طور دقیقتر formula_51.
روش بازگشتی برای بدست آوردن formula_49‌‌ها به این شکل کار می‌کند که ابتدا formula_49 را برای سلول‌های لایه خروجی حساب می‌کنیم، و بعد لایه‌ها را به نوبت پایین آئیم و برای هر سلول formula_49 آن را با ترکیت formula_49 ‌های لایه‌های بالایی آن طبق فرمول حساب میکنیم. محاسبه کردن formula_49 برای لایه خروجی آسان است و مستقیما با مشتق گرفتن از formula_57 بدست می‌آید.
شبکه‌های عصبی پیچشی مشابه سیستم پردازش دیداری در موجودات زنده عمل می‌کنند. از قرن نوزدهم به‌طور همزمان اما جداگانه از سویی نوروفیزیولوژیست‌ها سعی کردند سیستم یادگیری و تجزیه و تحلیل مغز را کشف کنند، و از سوی دیگر ریاضیدانان تلاش کردند مدل ریاضی ای بسازند که قابلیت فراگیری و تجزیه و تحلیل عمومی مسائل را دارا باشد. اولین کوشش‌ها در شبیه‌سازی با استفاده از یک مدل منطقی در اوایل دههٔ ۱۹۴۰ توسط وارن مک‌کالک و والتر پیتز انجام شد که امروزه بلوک اصلی سازنده اکثر شبکه‌های عصبی مصنوعی است. عملکرد این مدل مبتنی بر جمع ورودی‌ها و ایجاد خروجی با استفاده از شبکه‌ای از نورون‌ها است. اگر حاصل جمع ورودی‌ها از مقدار آستانه بیشتر باشد، اصطلاحاً نورون برانگیخته می‌شود. نتیجه این مدل اجرای ترکیبی از توابع منطقی بود.
در سال ۱۹۴۹ دونالد هب قانون یادگیری را برای شبکه‌های عصبی طراحی کرد. در سال ۱۹۵۸ شبکه پرسپترون توسط روزنبلات معرفی گردید. این شبکه نظیر واحدهای مدل شده قبلی بود. پرسپترون دارای سه لایه است که شامل لایهٔ ورودی، لایهٔ خروجی و لایهٔ میانی می‌شود. این سیستم می‌تواند یاد بگیرد که با روشی تکرارشونده وزن‌ها را به گونه‌ای تنظیم کند که شبکه توان بازتولید جفت‌های ورودی و خروجی را داشته‌باشد. روش دیگر، مدل خطی تطبیقی نورون است که در سال ۱۹۶۰ توسط برنارد ویدرو و مارسیان هاف در دانشگاه استنفورد) به وجود آمد که اولین شبکه‌های عصبی به کار گرفته شده در مسائل واقعی بودند. آدالاین یک دستگاه الکترونیکی بود که از اجزای ساده‌ای تشکیل شده بود، روشی که برای آموزش استفاده می‌شد با پرسپترون فرق داشت.
در سال ۱۹۶۹ میسکی و پاپرت کتابی نوشتند که محدودیت‌های سیستم‌های تک لایه و چند لایه پرسپترون را تشریح کردند. نتیجه این کتاب پیش داوری و قطع سرمایه‌گذاری برای تحقیقات در زمینه شبیه‌سازی شبکه‌های عصبی بود. آن‌ها با طرح اینکه طرح پرسپترون قادر به حل هیچ مسئله جالبی نمی‌باشد، تحقیقات در این زمینه را برای مدت چندین سال متوقف کردند.
با وجود اینکه اشتیاق عمومی و سرمایه‌گذاری‌های موجود به حداقل خود رسیده بود، برخی محققان تحقیقات خود را برای ساخت ماشین‌هایی که توانایی حل مسائلی از قبیل تشخیص الگو را داشته باشند، ادامه دادند. از جمله گراسبگ که شبکه‌ای تحت عنوان Avalanch را برای تشخیص صحبت پیوسته و کنترل دست ربات مطرح کرد. همچنین او با همکاری کارپنتر شبکه‌های نظریه تشدید انطباقی را بنا نهادند که با مدل‌های طبیعی تفاوت داشت. اندرسون و کوهونن نیز از اشخاصی بودند که تکنیک‌هایی برای یادگیری ایجاد کردند. ورباس در سال ۱۹۷۴ شیوه آموزش پس انتشار خطا را ایجاد کرد که یک شبکه پرسپترون چندلایه البته با قوانین نیرومندتر آموزشی بود.
پیشرفت‌هایی که در سال ۱۹۷۰ تا ۱۹۸۰ بدست آمد برای جلب توجه به شبکه‌های عصبی بسیار مهم بود. برخی فاکتورها نیز در تشدید این مسئله دخالت داشتند، از جمله کتاب‌ها و کنفرانس‌های وسیعی که برای مردم در رشته‌های متنوع ارائه شد. امروز نیز تحولات زیادی در تکنولوژی ANN ایجاد شده‌است.