آیا از نفهمیدن positional encoding خسته شدهاید؟ به این پست توجه کنید!
امروزه به هر تسکی از زمینه هایی مثل تصویر، متن، صوت و ... نگاه کنید پرچمدارانش یک تعداد مدل با معماری ترنسفورمر هستند. همونطور که میدونید مکانیزم positional encoding یکی از بخشهای مهم معماری ترنسفورمره که روی نحوه ارتباط توکنها در جایگاههای مختلف تاثیر گذاره. در واقع از اونجایی که ترنسفورمرها ذات بازگشتی و ترتیبی RNNها رو حذف کردند عملا به کل جمله با یک ترتیب یکسان میتونند نگاه بکنند که این بده! برای حل این مشکل سعی میکنند اطلاعات مکانی هر کلمه رو یهجوری در امبدینگش امبد بکنند! این بلاگ که نوشته یکی از خوبای این حوزه است (امیرحسین کاظمنژاد)، اومده و یه توضیح شیک مفهومی درباره این مکانیزم داده که شیرفهمتون میکنه. بهطور خلاصه اگه مثلا اعداد ۱ تا ۸ رو به صورت باینری و پشت سرهم بنویسید متوجه میشید که کمارزشترین بیت داره مدام تغییر میکنه درحالیکه دومین کمارزشترین بیت داره هر دوتا عدد یه بار تغییر میکنه و پرارزشترین بیت هم هر ۴ عدد یکبار تغییر میکنه. خب حالا میخوایم اطلاعات مکانی هر کلمه رو با یه بردار dبعدی نشون بدیم که طبیعتا استفاده از مقادیر باینری در دنیای اعشاری بهنوعی هدر دادن حافظه ست. شهودی که به ذهن میرسه اینه که هر چیزی که بتونه شبیه همین اعداد باینری تغییر بکنه مفهوم پوزیشن رو تداعی میکنه. ینی دنبال تابعی میگردیم که اولا خروجیش اعشاری باشه و دوما مثلا اولین درایه از بردار با فرکانس بیشتری نسبت به آخرین درایه بردار تغییر بکنه. اینجاست که توابع sin و cos معرفی میشه و با بازی با فرکانس ورودی این توابع دقیقا همین خاصیت ایجاد میشه. مثلا در تصویر زیر یک بردار ۱۲۸بعدی positional encoding میبینید که حداکثر طول ۵۰ رو مدل میکنه. همونطور که در تصویر مشخصه درایههای اول این بردار از پایین به بالا با نرخ بیشتری نسبت به آخرین درایههای این بردار تغییر میکنند. برای اینکه بهطرز نکویی این مکانیزم رو متوجه بشید حتما این بلاگ کوتاه رو بخونید. آخرش هم چند سوال پرتکرار رو آورده که دیگه نعمت رو بر شما تکمیل میکنه.
لینک بلاگ:
kazemnejad.com/blog/transformer_architecture_positional_encoding/
#blog
@nlp_stuff
Post #284
3.26K