پسانتشار خطا (Backpropagation)
جواب کوتاه
پسانتشار خطا روشیه که حساب میکنه هر وزن شبکه چقدر توی اشتباهش سهم داشته. اول شبکه یه جواب میده (گذر رو به جلو) و با جواب درست مقایسه میشه. بعد از لایهی آخر شروع میکنیم و لایه به لایه به عقب برمیگردیم؛ هر لایه با قاعدهی زنجیرهای، سهم خودش رو از سهم لایهی بعدش حساب میکنه. مثل یه خط تولید که جنسش خراب درمیاد و بازرس از آخر خط برمیگرده و به هر ایستگاه میگه سهمش چقدر بوده. آخرش برای هر وزن یه عدد داریم که میگه به کدوم طرف و چقدر هلش بدیم؛ همون گرادیان، که با گرادیان کاهشی وزنها رو یه کم بهتر میکنه.
تقصیر کی بود؟
یه کارخونه با سه تا ایستگاه رو تصور کنید. جنس از ایستگاه اول راه میفته، از دومی و سومی رد میشه، و آخرش بازرس میبینه خراب درومده.
برای اینکه دفعهی بعد درست بشه، بازرس باید بفهمه تقصیر کی بوده. از آخر خط شروع میکنه: به ایستگاه سوم میگه سهمت چقدر بوده، بعد سومی میتونه بگه چقدرش به خاطر جنسی بوده که از دومی گرفته، و همینطور تا اول خط.
شبکهی عصبی هم همین مشکل رو داره. توی گذر رو به جلو دیدیم شبکه یه جواب میده. اگه اشتباه باشه، باید بفهمیم هر وزن چقدر توش سهم داشته. روشی که این کار رو میکنه اسمش پسانتشار خطا هست: خطا رو از آخر شبکه به عقب پخش میکنه.
یه زنجیرهی کوچیک
سادهترین شبکهی ممکن رو بگیریم: یه ورودی، دو تا وزن پشت سر هم، یه جواب. بی تابع فعالسازی، که حساب راحتتر باشه:
ورودی ۲ هست. ضرب در وزن اول (۳) میشه ۶. ضرب در وزن دوم (۰٫۵) میشه ۳. ولی جواب درست ۵ بوده. خطا رو با فرق جواب و درست، به توان دو، میسنجیم: (۳ منهای ۵) به توان دو، یعنی ۴. همون فکر میانگین مربع خطا.
برگشت، قدم به قدم
«سهم» هر چیز یعنی اینکه اگه یه ذره زیادش کنیم، خطا چقدر و به کدوم طرف عوض میشه؛ همون مشتق. از آخر شروع میکنیم:
- جواب: خطا یعنی (جواب منهای ۵) به توان دو. اگه جواب یه ذره بیشتر بشه، خطا ۴ برابر اون ذره کمتر میشه. پس سهمش منفی ۴ هست. منفی یعنی «زیادش کنی، خطا کم میشه».
- وزن دوم: جواب = وسط ضرب در وزن دوم. اگه وزن دوم یه ذره زیاد بشه، جواب ۶ برابر اون ذره زیاد میشه. پس سهمش: منفی ۴ ضرب در ۶، یعنی منفی ۲۴.
- وسط: اگه عدد وسط یه ذره زیاد بشه، جواب ۰٫۵ برابرش زیاد میشه. پس سهمش: منفی ۴ ضرب در ۰٫۵، یعنی منفی ۲.
- وزن اول: وسط = ورودی ضرب در وزن اول. اگه وزن اول یه ذره زیاد بشه، وسط ۲ برابرش زیاد میشه. پس سهمش: منفی ۲ ضرب در ۲، یعنی منفی ۴.
دیدید؟ هر قدم، سهم قبلی رو در یه عدد محلی ضرب کردیم. این دقیقا قاعدهی زنجیرهای هست، که از آخر به اول اجرا شده.
هل دادن وزنها
حالا برای هر وزن میدونیم به کدوم طرف و چقدر بریم. هر دو سهم منفی بودن، یعنی هر دو وزن باید زیاد بشن. با گرادیان کاهشی و نرخ یادگیری ۰٫۰۱، هر وزن رو به اندازهی سهمش ضرب در ۰٫۰۱، برعکس سهمش جابهجا میکنیم:
وزن دوم که سهم بیشتری داشت (منفی ۲۴)، بیشتر عوض شد. با وزنهای تازه، جواب شد حدود ۴٫۵ و خطا از ۴ رسید به حدود ۰٫۲۵. فقط با یه قدم! یادگیری یعنی تکرار همین: جواب بده، خطا رو برگردون، وزنها رو یه کم هل بده.
توی شبکهی بزرگ
توی یه شبکهی واقعی، جای دو تا وزن، میلیونها وزن داریم و هر لایه تابع فعالسازی هم داره. ولی روال همونه: یه گذر رو به جلو برای جواب، یه گذر رو به عقب برای سهمها. تابع فعالسازی هم فقط یه عدد محلی دیگه توی زنجیرهست؛ برای همین باید نرم باشه، نه پله.
قشنگیش اینه که هر لایه برای حساب سهم خودش، فقط به سهم لایهی بعدش نیاز داره، که تازه حساب شده. پس هیچ حسابی دو بار تکرار نمیشه، و گرادیان همهی میلیونها وزن با یه برگشت حساب میشه. همین صرفهجویی آموزش شبکههای بزرگ رو ممکن کرده.
یه کم تاریخ
خود ایدهی ریاضیش سال ۱۹۷۰ منتشر شد. سال ۱۹۸۲ به همین شکل امروزی روی شبکههای چندلایه به کار رفت، و مقالههای ۱۹۸۵ و ۱۹۸۶ معروفش کردن؛ همون وقتی که علاقه به شبکههای عصبی دوباره زنده شد، بعد از رکودی که با مسئلهی XOR شروع شده بود.
با این درس، ایستگاه شبکهی عصبی تموم شد. حالا میدونید یه شبکه از چی ساخته شده، چطور جواب میده و چطور یاد میگیره. ایستگاه بعد سراغ ترفندهایی میریم که آموزش شبکههای خیلی عمیق رو واقعا ممکن میکنن؛ اول از همه: یادگیری عمیق چیه.
جمعبندی. آنچه از این درس با خودتان میبرید.
- جواب بده، با درست مقایسه کن.
- از آخر به اول، لایه به لایه.
- قاعدهی زنجیرهای: سهم از سهم بعدی.
- هر وزن یه عدد: کدوم طرف، چقدر.
- با گرادیان کاهشی هلشون بده.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.