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