با استفاده از دانش [[برنامهنویسی رایانه]] میتوان [[ساختار داده]]ای طراحی کرد که همانند یک نورون عمل نماید. سپس با ایجاد شبکهای از این نورونهای مصنوعی به هم پیوسته، ایجاد یک [[الگوریتم آموزشی شبکه عصبی|الگوریتم آموزشی]] برای شبکه و اعمال این [[الگوریتم]] به شبکه آن را آموزش داد.
این شبکهها برای تخمین و تقریب، کارایی بسیار بالایی از خود نشان دادهاند. گستره کاربرد این [[مدلهای ریاضی]] بر گرفته از عملکرد مغز انسان، بسیار وسیع میباشد که به عنوان چند نمونه کوچک میتوان استفاده از این ابزار ریاضی در پردازش سیگنالهای بیولوژیکی، مخابراتی و الکترونیکی تا کمک در نجوم و فضا نوردیفضانوردی را نام برد.
اگر یک شبکه را همارز با یک [[گراف (ریاضی)|گراف]] بدانیم، فرایند آموزش شبکه تعیین نمودن وزن هر یال و base اولیهٔ خواهد بود.
== یادگیری ==
یادگیری ماشینی با نظارت (supervised learning) به دنبال تابعی از میان یک سری توابع هست که [[تابع هزینه]] (loss function) [[داده هادادهها]] را بهینه سازد. به عنوان مثال در مسئله رگرسیون [[تابع هزینه]] میتواند اختلاف بین پیشبینی و مقدار واقعی خروجی به توان دو باشد، یا در مسئله [[طبقه بندیطبقهبندی]] ضرر منفی لگاریتم احتمال خروجی باشد. مشکلی که در یادگیری [[شبکه هایشبکههای عصبی]] وجود دارد این است که این [[مسئله بهینه سازیبهینهسازی]] دیگر محدب (convex) نیست .<ref name=":0">{{یادکرد کتاب|عنوان=Deep learning|نام خانوادگی=Ian Goodfellow and Yoshua Bengio and Aaron Courville|نام=|ناشر=MIT Press|سال=2016|شابک=|مکان=|صفحات=200}}</ref>. ازین رو با مشکل کمینههای محلی روبرو هستیم. یکی از روشهای متداول [[حل مسئله]] بهینه سازیبهینهسازی در شبکههای عصبی [[بازگشت به عقب]] یا همان back propagation است.<ref name=":0" />. روش بازگشت به عقب گرادیانِ تابع هزینه را برای تمام وزنهای شبکه عصبی محاسبه میکند و بعد از روشهای [[گرادیان کاهشی]] (gradient descent) برای پیدا کردن مجموعه وزنهای بهینه استفاده میکند.<ref name=":1">{{Cite journal|last=Heaton|first=Jeff|date=2017-10-29|title=Ian Goodfellow, Yoshua Bengio, and Aaron Courville: Deep learning|url=http://dx.doi.org/10.1007/s10710-017-9314-z|journal=Genetic Programming and Evolvable Machines|volume=19|issue=1-2|pages=305–307|doi=10.1007/s10710-017-9314-z|issn=1389-2576}}</ref> روشهای گرادیان کاهشی سعی میکنندمیکنند بصورت متناوب در خلاف جهت گرادیان حرکت کنند و با این کار تابع هزینه را به حداقل برسانند.<ref name=":1" /> پیدا کردن گرادیانِ لایه آخر ساده است و با استفاده از مشتق جزئی بدست می آیدمیآید. گرادیانِ لایههای میانی اما بصورت مستقیم بدست نمیآید و باید از روشهایی مانند [[قاعده زنجیری]] در مشتقگیری استفاده کرد.<ref name=":1" /> روش بازگشت به عقب از قاعده زنجیری برای محاسبه گرادیانها استفاده میکند و همانطورهمانطور که در پایین خواهیم دید، این روش بصورت متناوب گرادیانها را از بالاترین لایه شروع کرده آنها را در لایههای پایینتر «پخش» میکندمیکند.
=== بازگشت به عقب ('''Backpropagation''')، روشی برا محاسبه گرادیانها ===
[[پرونده:شبکه سلولی چهار لایهای .png|بندانگشتی|alt=تصویری از یک شبکه عصبی با دو لایه پنهان، گرادیان c وابسته به گرادیان لایههای بالاتر است که به آنها متصل است.|503x503px|تصویری از یک شبکه عصبی با دو لایه پنهان، گرادیان c وابسته به گرادیان لایههای بالاتر است که به آنها متصل است.]]
برای سلول عصبی <math>c</math> ورودیی که از سلول عصبی <math>p</math> به این سلول وارد میشود را با <math>b_{pc}</math> نشان میدهیم. وزن این ورودی <math>w_{pc}</math> است و مجموع ضرب ورودیها با وزنهایشان را با <math>a_c</math> نمایش میدهیم، به این معنی که <math>a_c = \sum_p w_{pc}\times b_{pc}</math>. حال باید بر روی <math>a_c</math> تابعی غیر خطی اعمال کنیم این تابع را <math>\theta_c</math> می نامیممینامیم و خروجی آن را با <math>b_c</math> نمایش میدهیم یعنی <math>b_c = \theta_c(a_c)</math>. به همین شکل خروجیی که از سلول عصبی <math>c</math> خارج شده و به سلول <math>n</math> وارد میشود را با <math>b_{cn}</math> نمایش میدهیم و وزن آن را <math>w_{cn}</math> مینامیم. حال تمام وزنهای این شبکه عصبی را در مجموعهای به اسم <math>W</math> میگنجانیم، هدف یادگیری این وزنهاست.<ref>{{یادکرد وب|وبگاهوبگاه=DeepAI|نشانی=https://deepai.org/machine-learning-glossary-and-terms/backpropagation|عنوان=Build with AI {{!}} DeepAI|بازبینی=2018-10-24}}</ref> اگر ورودی ما <math>x</math> باشد و خروجی <math>y</math> و خروجی شبکه عصبی ما <math>h_W(x)</math>، هدف پیدا کردن <math>W</math> است به قسمی که برای تمام دادهها <math>y</math> و <math>h_W(x)</math> به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک [[تابع هزینه]] بر روی تمام داده هاست، اگر دادهها را با <math>(x_1, y_1), \cdots, (x_n, y_n)</math> و [[تابع هزینه]] را با <math>l</math> نشان دهیم هدف کمینه کردن تابع پایین است :<ref>{{Cite journal|last=A.|first=Nielsen, Michael|date=2015|title=Neural Networks and Deep Learning|url=http://neuralnetworksanddeeplearning.com/chap6.html|language=en}}</ref>:
<math>Q(W) = \sum_{i=1}^n l\left(h_W(x_i),\,\,y_i\right)</math>
به عنوان مثال اگر مسئله [[رگرسیون خطی|رگرسیون]] است برای <math>l</math> میتوانیم خطای مربعات را در نظر بگیریم و اگر مسئله [[دستهبندیکننده بیز ساده|دستهبندی]] است برای <math>l</math> میشود منفی لگاریتم [[درستنمایی|درست نمایی]] را استفاده کرد.
برای بدست آوردن کمینه <math>Q(W)</math> باید از روش [[گرادیان کاهشی]] استفاده کرد، به این معنی که گرادیان تابع را حساب کرده، کمی در خلاف جهت آن حرکت کرده و این کار را آنقدر ادامه داد تا [[تابع هزینه]] خیلی کوچک شود. روش [[بازگشت به عقب]] در واقع روشی برای پیدا کردن گرادیان تابع <math>Q(W)</math> است.
حال فرض کنیم می خواهیممیخواهیم گرادیان تابع <math>Q(W)</math> را نسبت به وزن <math>w_{pc}</math> بدست بیاوریم. برای این کار نیاز به [[قاعده زنجیری]] در [[مشتق گیری|مشتقگیری]] داریم. قاعده زنجیری به این شکل کار میکند: اگر تابعی داشته باشیم به اسم <math>f</math> که وابسته به سه ورودی <math>u</math>، <math>v</math> و <math>w</math> باشد و هرکدام از این سه ورودی به نوبه خود وابسته به <math>t</math> باشند، [[مشتق]] <math>f</math> به <math>t</math> به این شکل محاسبه میشود:
<math>\frac{\partial f\left(u(t),v(t),w(t)\right)}{\partial t} = \frac{\partial f}{\partial u} \frac{\partial u}{\partial t} + \frac{\partial f}{\partial v} \frac{\partial v}{\partial t} + \frac{\partial f}{\partial w} \frac{\partial w}{\partial t} </math>
<math>\frac{\partial Q}{\partial w_{pc}} = \frac {\partial Q}{\partial a_c} \frac {\partial a_c}{\partial w_{pc}} = \delta_c b_p </math>
همانطورهمانطور که در خط پیشین دیدیم برای بدست آوردن [[گرادیان]] نسبت به <math>w_{pc}
</math> به دو مقدار نیاز داریم ورودی به سلول عصبی <math>c
</math> از سلول عصبی <math>p
</math> که همان <math>b_p
</math> است و راحت بدست می آیدمیآید و <math>\delta_c
</math> که از روش بازگشتی بدست می آیدمیآید و بستگی به <math>\delta
</math> هاییهایی لایه بعد دارد که سلول <math>c
</math>به آنها وصل است، بهطور دقیقتر <math>\delta_c = \left(\sum_n w_{cn}\delta_n \right) \times \acute{\theta}_c (a_c)
</math>.
روش بازگشتی برای بدست آوردن <math>\delta
</math> هاها به این شکل کار میکند که ابتدا <math>\delta
</math> را برای سلولهای لایه خروجی حساب میکنیم، و بعد لایهها را به نوبت پایین میآئیم و برای هر سلول <math>\delta
</math> آن را با ترکیت <math>\delta
</math> هایهای لایههای بالایی آن طبق فرمول حساب میکنیممیکنیم. محاسبه کردن <math>\delta
</math> برای لایه خروجی آسان است و مستقیماً با مشتق گرفتن از <math>Q
</math> بدست می آیدمیآید.<ref>{{یادکرد کتاب|نشانی=https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597|عنوان=Artificial Intelligence: A Modern Approach|نام خانوادگی=Russell|نام=Stuart|نام خانوادگی۲=results|نام۲=search|تاریخ=2009-12-11|ناشر=Pearson|سال=|شابک=9780136042594|ویرایش=3|مکان=Boston Columbus Indianapolis New York San Francisco Upper Saddle River Amsterdam, Cape Town Dubai London Madrid Milan Munich Paris Montreal Toronto Delhi Mexico City Sao Paulo Sydney Hong Kong Seoul Singapore Taipei Tokyo|صفحات=578|زبان=English}}</ref>
== تاریخچه شبکههای عصبی مصنوعی ==
* [[حذف تصادفی (شبکههای عصبی)|حذف تصادفی]]
* [[بازگشت به عقب]]
* [[گرادیان کاهشی تصادفی]]
* [[قاعده زنجیری]]
== پانویس ==
|