یکی از مهمترین قسمتهای الگوریتمهای شبکه عصبی که امروزه بسیار کاربرد دارد، پس انتشار خطا یا Backpropagation است که به مدلها این امکان را میدهد که از روی دادههای آموزش یادبگیرد و در طول زمان مدل را بهبود دهد.
این که به درستی پسانتشار خطا را بشناسید و نحوه کارکرد آن را بدانید برای ورود به دنیایی یادگیری عمیق و شبکههای عصبی بسیار مهم است.
در این مقاله ما سعی میکنیم که این الگوریتم و نحوه کارکرد آن را توضیح دهیم.
پس انتشار چیست؟
این روش برای اولین بار در سال 1970 برای تنظیم دقیق وزنهای شبکه در طول فرایند یادگیری با توجه به میزان خطای بهدست آمده از دورههای قبل ارائه شد. اگر بخواهیم به یک زبان ساده این الگوریتم را تعریف کنیم، میتوانیم آن را به صورت یک بازخورد در نظر گرفت که بعد از هر ایپوک در فرآیند آموزش میزان کارایی مدل را در کاری که انجام میدهد ارزیابی میکند. این کار با محاسبه اختلاف مقدار واقعی با مقداری که مدل بدست آورده است انجام میدهد که به اصطلاح به آن خطا (Error) گفته میشود، در مرحله بعد پارامترهای مدل که همان وزن مدل است را دوباره تنظیم میکند تا خطای شبکه کاهش پیدا کند. این روش پایه و اساسی در شبکههای عصبی است تا با استفاده از آن به شبکه این قابلیت را بدهیم تا بهتر پیشبینی کند و یا تصمیم بگیرد.
پس انتشار خطا چگونه کار میکند؟
برای این که با نحوه کار پس انتشار خطا آشنا شویم یک شبکه عصبی را در نظر بگیرید که دارای دو ورودی دو لایه پنهان و یک لایه خروجی است.
پسانتشار خطا به طور کلی از چهار بخش مختلف تشکیل شده است که عبارتند از:
- حرکت به جلو
- محاسبه خطا
- حرکت به عقب
- بهروزرسانی خطا
در ادامه وظایف و تعریف هر کدام از بخشها را معرفی میکنیم.
حرکت به جلو (Forward pass)
- گام اول از پسانتشار خطاست که در گام اول دادههای ورودی که در اینجا X1 و X2 تعریف میشوند به لایه ورودی انتقال داده میشوند.
- در گام دوم هر کدام از ورودیها در وزن متناظر آن ضرب میشود و نتایج آن به نورونهای لایههای پنهان ارسال میشود.
- در مرحله بعدی توابع فعال سازی که در هر نورون هست به ورودیها اعمال میشود و نتیجه آن به لایه بعدی انتقال پیدا میکند.
محاسبه خطا (Error calculation)
- این فرآیند تا زمانی که لایه خروجی، خروجی نهایی را تولید کند ادامه پیدا میکند.
- خروجی شبکه با خروجی مد نظر(ground truth) مقایسه شده و تفاوت این دو محاسبه میشود و در نتیجه میزان خطا محاسبه میگردد.
حرکت به عقب (Backward pass)
این گام در واقع پسانتشار واقعی است و عملا وابسته به مراحل قبلی است و تا زمانی که مراحل قبل به اتمام نرسیده باشد این مرحله انجام نمیشود. در ادامه مراحل انجام آن را بیان میکنیم.
- میزان خطای بدست آمده در مرحله قبل برای محاسبه گرادیان تابع ضرر استفاده میشود.
- میزان خطایی که توسط گرادیان محاسبه میشود، از لایه خروجی تا به لایه ابتدای منتشر میشود.
- زمانی که گرادیان از لایه خروجی به سمت عقب بر میگردد، در مسیر خود وزنهای نورونها را تغییر میدهد، این تغییرات بستگی به این دارد که وزن هر نورون در خطای خروجی چقدر نقش داشته است. برای این کار از خطای به دست آمده نسبت به وزن هر نورون مشتق گرفته میشود، با این کار متوجه میشویم که اگر وزن یک نورون تغییر کند چقدر بر روی خطا تاثیر میگذارد.
- نرخ یادگیری که برای شبکه تنظیم شده است، مشخص میکند که وزنها چقدر تغییر کند. هر چقدر این عدد کوچک باشد تغییرات کوچک و هر چقدر بزرگتر باشد تغییرات بزرگ خواهد بود.
بهروزرسانی خطا (Weights update)
- به طور کلی هدف اصلی ما در یادگیری عمیق کاهش خطا است و برای این کار باید بدانیم اگر وزن یک نورون را کم یا زیاد کنیم چه تغییری بر روی خطای خروجی صورت میپذیر، به زبان ساده تر اگر وزن را زیاد کنیم خطا کم میشود یا بیشتر میشود. از آنجایی که ما میخواهیم خطا را کاهش دهیم، وزنها در شبکه در خلاف جهت گرادیان تغییر میکند برای همین به این روش Gradient Descent گفته میشود.
- فرآیند های قبلی ( حرکت به جلو، محاسبه خطا، حرکت به عقب و به روزرسانی خطا) چندین بار انجام میشود تا یا خطا به حداقل برسد یا دیگر پیشرفت خاصی در یادگیری صورت نگیرد.
مزایایی استفاده از پسانتشار خطا
پسانتشار خطا یک روش اساسی در آموزش شبکههای عصبی است که به دلیل پیادهسازی ساده و کاربرد همه منظوره در معماریهای مختلف شبکه عصبی به صورت گسترده مورد استفاده قرار میگیرد. در این بخش مزایایی استفاده از این روش در الگوریتمهای هوش مصنوعی اشاره میشود:
پیادهسازی راحت:
کتابخانههای بزرگ یادگیری عمیق مثل pytorch و یا keras به طور کامل این الگوریتمها را پیادهسازی کردند و نیازی به پیادهسازی مجدد آن نیست.
برنامه نویسی راحت:
به لطف همین کتابخانهها نیازی به پیاده سازی نیازی به پیادهسازی پیچیده ریاضی این الگوریتمها نیست و فقط با چند خط کد میتوان از آن استفاده کرد.
انعطاف پذیری بالا:
از این الگوریتم در شبکههای مختلف هوش مصنوعی مانند، شبکههای بازگشتی، شبکههای کانولوشنی و حتی معماریهای پیچیدهتر نیز استفاده میشود.
معایب و محدودیتها
با وجود این که الگوریتم پسانتشار خطا بسیار موثر و موفق است اما دارای محدودیتهای نیز است که روند آموزش تحت تاثیر قرار میدهد.
کیفیت دادهها:
هر کیفیتی از دادهها را که به شبکه بدهیم، شبکه همان را یاد میگیرد. اگر دادههای که به شبکه داده میشود، ناقص و ضعیف، پر از نویز و یا بالانس نباشد کیفیت خروجی نیز پایین میآید.
آموزش طولانی:
عملیات ریاضی در بخش پسانتشار خطا با بزرگتر شدن شبکه، سنگینتر میشود. به طور کلی میتوان گفت با افزایش تعداد نورونها حجم محاسبات بیشتر شده و فشار بیشتری بر روی سختافزار میآید.