شبکه عصبی مصنوعی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
بدون خلاصۀ ویرایش
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
خط ۲۴:
یادگیری ماشینی با نظارت (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" />
 
=== ساختار ریاضی روش بازگشت به عقب ===
[[پرونده:شبکه سلولی چهار لایه‌ای .png|بندانگشتی]]
برای سلول عصبی <math>c</math>ورودیی که از سلول عصبی <math>p</math> به این سلول وارد می شود را با <math>b_{pc}</math> نشان می دهیم. وزن این ورودی <math>w_{pc}</math> است و مجموع ضرب ورودیها با وزنهایشان را با <math>a_c</math> نمایش می‌دهیم، به این معنی که <math>a_c = \sum 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> بگنجانیم، هدف در واقع یادگیری این وزنهاست. اگر ورودی ما <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>c</math> ورودیی که از سلول عصبی <math>p</math> به این سلول وارد می شود را با <math>b_{pc}</math> نشان می دهیم. وزن این ورودی <math>w_{pc}</math> است و مجموع ضرب ورودیها با وزنهایشان را با <math>a_c</math> نمایش می‌دهیم، به این معنی که <math>a_c = \sum 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> بگنجانیم، هدف در واقع یادگیری این وزنهاست. اگر ورودی ما <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>