tgoop.com/matlabtips/1707
Last Update:
اگر از داخل تابع سافتمکس شروع کنیم متوجه می شویم که چون اول ترانهاده ی ماتریس K را حساب میکنیم تعداد ستون های Q و تعداد سطر های K با هم هماهنگی دارند. بنابراین نتیجه یک ماتریس nxn است. حالا اگر این ماتریس را بر جذر d_k تقیسم کنیم (تقسیم کردن بر روی هر کدام از درایه های ماتریس) و در نهایت تابع سافتمکس را بر روی هر داریه اعمال کنیم نتیجه همچنان یک ماتریس nxn باقی می ماند. به این ترتیب می بینیم که مشکلی در ضرب در V هم وجود ندارد چون باز هم تعداد ستون های نتیجه n و سطر های V با هم هماهنگ هستند. بنابراین کل نتیجه ی سمت راست معادله بالا می شود n x d_v
با این حال وقتی کد مربوط به حساب کردن attention را می بینید موضوع کمی پیچیده تر می شود. در عمل ما به جای کار کردن با فقط یک ورودی با یک batch کار میکنیم. دلیل این کار این است که با استفاده ازین روش می توانیم از محاسبات تانسوری که بر روی کارت های گرافیک مدرن تعبیه شده اند بهره ببریم. در عمل منطق کار هیچ تفاوتی نمی کند به جز اینکه به جای یک ماتریس شما B ماتریس را بر روی هم قرار می دهید و سپس ضرب ها را انجام می دهید. بنابراین سایز ها به صورت زیر می شوند
BY MatlabTips
Share with your friend now:
tgoop.com/matlabtips/1707