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

محتوای حذف‌شده محتوای افزوده‌شده
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
خط ۲۲:
 
== یادگیری ==
یادگیری ماشینی با نظارت (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|بندانگشتی|جایگزین=|640x640پیکسل]]
 
برای سلول عصبی <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> به این شکل محاسبه می شود: