شبکه عصبی پیشخور
قواعد یادگیری > یادگیری از طریق بازگشت به عقب

یادگیری ماشینی با نظارت (supervised learning) به دنبال تابعی از میان یک سری توابع هست که تابع هزینه (loss function) داده‌ها را بهینه سازد. به عنوان مثال در مسئله رگرسیون تابع هزینه می‌تواند اختلاف بین پیش‌بینی و مقدار واقعی خروجی به توان دو باشد، یا در مسئله طبقه‌بندی ضرر منفی لگاریتم احتمال خروجی باشد. مشکلی که در یادگیری شبکه‌های عصبی وجود دارد این است که این مسئله بهینه‌سازی دیگر محدب (convex) نیست. ازین رو با مشکل کمینه‌های محلی روبرو هستیم. یکی از روش‌های متداول حل مسئله بهینه‌سازی در شبکه‌های عصبی بازگشت به عقب یا همان back propagation است. روش بازگشت به عقب گرادیانِ تابع هزینه را برای تمام وزن‌های شبکه عصبی محاسبه می‌کند و بعد از روش‌های گرادیان کاهشی (gradient descent) برای پیدا کردن مجموعه وزن‌های بهینه استفاده می‌کند. روش‌های گرادیان کاهشی سعی می‌کنند به صورت متناوب در خلاف جهت گرادیان حرکت کنند و با این کار تابع هزینه را به حداقل برسانند. پیدا کردن گرادیانِ لایه آخر ساده است و با استفاده از مشتق جزئی بدست می‌آید. گرادیانِ لایه‌های میانی اما به صورت مستقیم بدست نمی‌آید و باید از روش‌هایی مانند قاعده زنجیری در مشتق‌گیری استفاده کرد. روش بازگشت به عقب از قاعده زنجیری برای محاسبه گرادیان‌ها استفاده می‌کند و همان‌طور که در پایین خواهیم دید، این روش به صورت متناوب گرادیان‌ها را از بالاترین لایه شروع کرده آن‌ها را در لایه‌های پایینتر «پخش» می‌کند.
برای سلول عصبی  c ورودیی که از سلول عصبی  p به این سلول وارد می‌شود را با  b_{pc} نشان می‌دهیم. وزن این ورودی  w_{pc} است و مجموع ضرب ورودی‌ها با وزنهایشان را با  a_{c} نمایش می‌دهیم، به این معنی که  a_{c}=\sum _{p}w_{pc}\times b_{pc}. حال باید بر روی  a_{c} تابعی غیر خطی اعمال کنیم این تابع را  \theta _{c} می‌نامیم و خروجی آن را با  b_{c} نمایش می‌دهیم یعنی  b_{c}=\theta _{c}(a_{c}). به همین شکل خروجیی که از سلول عصبی  c خارج شده و به سلول  n وارد می‌شود را با  b_{cn} نمایش می‌دهیم و وزن آن را  w_{cn} می‌نامیم. حال تمام وزن‌های این شبکه عصبی را در مجموعه‌ای به اسم  W می‌گنجانیم، هدف یادگیری این وزنهاست. اگر ورودی ما  x باشد و خروجی  y و خروجی شبکه عصبی ما  h_{W}(x)، هدف پیدا کردن انتخاب  W است به قسمی که برای تمام داده‌ها  y و  h_{W}(x) به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک تابع هزینه بر روی تمام داده هاست، اگر داده‌ها را با  (x_{1},y_{1}),\cdots ,(x_{n},y_{n}) و تابع هزینه را با  l نشان دهیم هدف کمینه کردن تابع پایین است:
Q(W)=\sum _{i=1}^{n}l\left(h_{W}(x_{i}),\,\,y_{i}\right)
به عنوان مثال اگر مسئله رگرسیون است برای  l می‌توانیم خطای مربعات را در نظر بگیریم و اگر مسئله دسته‌بندی است برای  lمی‌شود منفی لگاریتم بازنمایی را استفاده کرد.
برای بدست آوردن کمینه  Q(W) باید از روش گرادیان کاهشی استفاده کرد، به این معنی که گرادیان تابع را حساب کرده، کمی در خلاف جهت آن حرکت کرده و این کار را آنقدر ادامه داد تا تابع هزینه خیلی کوچک شود. روش بازگشت به عقب در واقع روشی برای پیدا کردن گرادیان تابع  Q(W) است.
حال فرض کنیم می‌خواهیم گرادیان تابع  Q(W) را نسبت به وزن  w_{pc} بدست بیاوریم. برای این کار نیاز به قاعده زنجیری در مشتق‌گیری داریم. قاعده زنجیری به این شکل کار می‌کند: اگر تابعی داشته باشیم به اسم  f که وابسته به سه ورودی  u،  v و  w باشد و هرکدام از این سه ورودی به نوبه خود وابسته به  t باشند، مشتق  f به  t به این شکل محاسبه می‌شود:
با استفاده از این قاعده زنجیری روش بازگشت به عقب را به این شکل دنبال می‌کنیم:
\delta _{c}={\frac {\partial Q}{\partial a_{c}}}
a_{c}=\sum _{p}w_{pc}\times b_{pc}
b_{c}=\theta _{c}(a_{c})
{\frac {\partial Q}{\partial w_{pc}}}={\frac {\partial Q}{\partial a_{c}}}{\frac {\partial a_{c}}{\partial w_{pc}}}=\delta _{c}b_{p}
همان‌طور که در خط پیشین دیدیم برای بدست آوردن گرادیان نسبت به  w_{pc} به دو مقدار نیاز داریم ورودی به سلول عصبی  c از سلول عصبی  p که همان  b_{p} است و راحت بدست می‌آید و  \delta _{c} که از روش بازگشتی بدست می‌آید و بستگی به  \delta ‌هایی لایه بعد دارد که سلول  cبه آن‌ها وصل است، به‌طور دقیقتر  \delta _{c}=\left(\sum _{n}w_{cn}\delta _{n}\right)\times {\acute {\theta }}_{c}(a_{c}).
روش بازگشتی برای بدست آوردن  \delta ‌ها به این شکل کار می‌کند که ابتدا  \delta  را برای سلول‌های لایه خروجی حساب می‌کنیم، و بعد لایه‌ها را به نوبت پایین آئیم و برای هر سلول  \delta  آن را با ترکیت  \delta ‌های لایه‌های بالایی آن طبق فرمول حساب می‌کنیم. محاسبه کردن  \delta  برای لایه خروجی آسان است و مستقیماً با مشتق گرفتن از  Q بدست می‌آید.