اگر کمی با شبکههای عصبی و یادگیری ماشین آشنا باشید، احتمالاً با الگوریتم "پسانتشار خطا" مواجه شدهاید، الگوریتمی که پایه و اساس آموزش بیشتر شبکههای چندلایه و یادگیری مبتنی بر گرادیان است. در این نوشته قصد دارم نگاهی جامع و تاریخی به این الگوریتم داشته باشم و مسیر شکلگیری آن از ریشههای ریاضیاتی در حساب دیفرانسیل و بهینهسازی تا کاربرد مدرن آن در شبکههای عصبی را بررسی کنم.
در این متن سعی کردم تا حد امکان از واژگان فارسی استفاده کنم. در انتهای متن، معادل انگلیسی واژگان به کار رفته قرار گرفته است.
توجه: نسخه صوتی این نوشته توسط سرویس آواشو (هوش مصنوعی تبدیل متن به گفتار) ایجاد شده است و دچار اشتباهاتی در تلفظ کلمات است.
الگوریتم پسانتشار خطا در سادهترین بیان، روشی است برای نسبتدادن "اشتباه نهایی" یک محاسبه به اجزای سازندهٔ آن.
وقتی یک سیستم چندمرحلهای داریم که از ورودی به خروجی میرسد و در انتها با یک مقدار خطا مواجه میشویم، مسئله این است که بفهمیم هر پارامتر در طول مسیر چه سهمی در این خطا داشته است. پسانتشار خطا دقیقاً همین سهمبندی را بهشکل ریاضیاتی انجام میدهد.
ایدهٔ اصلی این است که ابتدا خروجی سیستم با مقدار مطلوب مقایسه میشود و مقدار اشتباه سیستم(خطا) با استفاده از یک تابع خطا تعیین میگردد. سپس بهجای اینکه هر پارامتر را جداگانه و با روشهای پرهزینه تغییر دهیم، مشتق این خطا نسبت به پارامترها محاسبه میشود. این مشتقها با استفاده از قاعدهٔ زنجیرهای، از انتهای محاسبه به ابتدای آن منتقل میشوند. به این ترتیب، با یک عبور رو به جلو برای محاسبهٔ خروجی و یک عبور معکوس برای محاسبهٔ مشتقها، گرادیان کل سیستم بهدست میآید.
از این گرادیانها برای بهروزرسانی پارامترها استفاده میشود، معمولاً در قالب روشهای نزول گرادیان سعی می کنیم به روزرسانی پارامتر ها را انجام دهیم. هر پارامتر به اندازهای تغییر میکند که سهمش در خطا کاهش یابد. نکتهٔ مهم این است که هزینهٔ محاسباتی این فرایند تقریباً متناسب با هزینهٔ خود محاسبهٔ خروجی است، نه با تعداد پارامترها؛ همین ویژگی است که پسانتشار خطا را برای مدلهای بزرگ قابل استفاده میکند.
الگوریتم پسانتشار خطا در اصل پاسخ به یک سؤال بسیار قدیمی است: وقتی در انتهای یک محاسبه به عددی میرسیم، چطور بفهمیم کدام بخشهای مسیر بیشترین نقش را در این نتیجه داشتهاند؟ این پرسش خیلی قبلتر از شبکههای عصبی مطرح بوده است. ریاضیدانها از همان زمانی که با توابع مرکب و وابستگیهای زنجیرهای سروکار داشتند، عملاً با همین مشکل درگیر بودند، فقط اسمش چیز دیگری بود.
ریشهٔ فنی ماجرا به قاعدهٔ زنجیرهای مشتقها برمیگردد؛ ابزاری که از قرن هفدهم، با اختراع حساب دیفرانسیل و انتگرال توسط نیوتن و لایب نیتز، بهطور ضمنی وجود داشت. از همان لحظهای که میشد گفت "اگر این تغییر کند، آن چقدر تغییر میکند؟"، ایدهٔ انتشار اثر تغییرات در یک ساختار چندمرحلهای متولد شد. الگوریتم پسانتشار خطا چیزی اضافهتر از این ندارد، فقط این انتشار را منظم و محاسباتی میکند.
در قرن هجدهم، مسئله جدیتر شد. اویلر و لاگرانژ نشان دادند که در مسائل بهینهسازی، تغییرات کوچک در یک نقطه از مسیر میتوانند کل نتیجه را تحت تأثیر قرار دهند. شرطهای اویلر–لاگرانژ در واقع راهی بودند برای دنبالکردن اثر تغییرات از انتهای مسئله به کل مسیر. این نگاه، از نظر مفهومی، بسیار به الگوریتم پسانتشار خطا نزدیک است.
لاگرانژ با معرفی ضرایبش یک قدم دیگر جلو رفت. این روش نشان میداد که چگونه سهم محدودیتها به تابع هدف منتقل میشود و چگونه میتوان با افزودن متغیرهای کمکی، کل سیستم را قابل مشتقگیری کرد. این دقیقاً همان تفکر «برگشتن از خروجی به ورودی» است که در قالب مسائل کلاسیک بهینهسازی مطرح شده است.
در قرن نوزدهم، با رسمیشدن آنالیز توسط کوچی و وایرشتراس، همهٔ این ابزارها از نظر منطقی تثبیت شدند. قاعدهٔ زنجیرهای دیگر یک ایده وابسته به شهود نبود، بلکه قضیهای دقیق بود. از این لحظه به بعد، محاسبهٔ مشتق توابع مرکب بزرگ کاملاً قابل اجرا بود، که بعدها برای الگوریتم پسانتشار خطا بسیار حیاتی شد.
در اوایل قرن بیستم، این خط فکری وارد مکانیک تحلیلی و سپس نظریهٔ کنترل شد. مفهوم متغیرهای همساز و روشهای حساسیت به این معنا بودند که میتوان اثر یک تغییر در خروجی را بهطور سیستماتیک به تمام پارامترهای ورودی نسبت داد. این ها عملاً همان چیزی هستند که امروز در شبکههای عصبی انجام میدهیم.
در دهههای ۱۹۶۰ و ۱۹۷۰، این ایدهها بهصورت صریح وارد محاسبات عددی شدند. در کنترل بهینه، الگوریتمهایی وجود داشت که گرادیان را با یک عبور رو به جلو و یک عبور معکوس محاسبه میکردند. پاول وربوس اولین کسی بود که این منطق را مستقیماً برای آموزش شبکههای چندلایه بهکار گرفت.
و در نهایت، در ۱۹۸۶، راملهارت، هینتون و ویلیامز الگوریتم پسانتشار خطا را بهعنوان یک روش استاندارد یادگیری معرفی کردند. نوآوری اصلی آنها ریاضی جدید نبود، بلکه بهره گیری هوشمندانه از ایده ای چندصد ساله بود.
در نتیجه، الگوریتم پسانتشار خطا نه یک جهش ناگهانی، بلکه جمعبندی تاریخیِ قاعدهٔ زنجیرهای، حساب دیفرانسیل و انتگرال، بهینهسازی و ... است. ایده ای قدیمی که دیر راهش را به علوم کامپیوتر باز کرد.
در نهایت، پسانتشار خطا یک سازوکار عمومی برای محاسبهٔ مشتقها در سیستمهای مرکب است؛ سازوکاری که میتواند هم در شبکههای عصبی، هم در مدلهای فیزیکی، و هم در هر مسئلهای که بهینهسازی مبتنی بر گرادیان دارد، بهکار رود.
الگوریتم پسانتشار خطا : Backpropagation algorithm
قاعدهٔ زنجیرهای مشتقها : chain rule of derivatives
حساب دیفرانسیل و انتگرال : differential and integral calculus
حساب تغییرات : calculus of variations
شرطهای اویلر–لاگرانژ : Euler–Lagrange equations
ضرایب لاگرانژ : Lagrange multipliers
متغیرهای همساز (adjoint variables) : adjoint variables
حساسیت (sensitivity) : sensitivity
بهینهسازی : optimization
گرادیان : gradient
نزول گرادیان : gradient descent
سهم محدودیتها / تأثیر محدودیتها : impact of constraints / contribution of constraints
نیوتن : Isaac Newton
لایب نیتز : Gottfried Wilhelm Leibniz
اویلر : Leonhard Euler
لاگرانژ : Joseph-Louis Lagrange
کوتچی : Augustin-Louis Cauchy
وایرشتراس : Karl Weierstrass
پاول وربوس : Paul Werbos
راملهارت : David E. Rumelhart
هینتون : Geoffrey Hinton
ویلیامز : Ronald J. Williams
هنری کلی : Henry Kelley