Singular Thinker – Telegram
Singular Thinker
948 subscribers
405 photos
17 videos
5 files
250 links
We talk about things that find them interesting.
توی این کانال از مطالبی که برامون جذاب باشه حرف
میزنیم، یا مطالب جذاب بقیه رو نشر می‌دیم.
Contact/راه ارتباطی:
@Singular_Thinker
Download Telegram
If you know me, you know which one is my favourite #meme. Any guess? No it is not that one.
اول هفته تو با میم شروع کن هموطن :)) برای هموطنای خارج از کشور هم اول آخر هفته رو با میم شروع کنن.
@SingularThinker
6🔥2💅1
مدلسازی زبان - قسمت ششم

همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟

با ذکر این نکته که این تنها حالت ساختن این مکانیزم نیست و اساسا خود نویسنده‌های مقاله تو گوگل خودشون این مفهوم رو از پژوهش‌های قبلی الهام گرفته بودن ایشالا تو قسمتای اینده بیشتر در مورد تاریخش حرف میزنیم.

خب تا اینجا رو اومده بودیم که embedding درسته سعی میکنه معنای هر توکن رو تو یه بردار کدگذاری کنه ولی «این درد مشترک هرگز جدا جدا درمان نمی شود.» یعنی شما باید به کلمات قبل و بعد هم نگاه کنی تا بتونی دقیقا مفهوم اصلی هر کلمه/توکن رو بفهمی پس میایم با مکانیزم attention این بردار embedding برای هر کلمه رو بروزرسانی میکنیم. حالا بیاید یه مرحله بریم جلوتر و ببنیم چطوری این کارو انجام میدیم؟

خب بیاید تصور کنید که بردار E_i بردار embedding توکن iام در جمله باشه و شما میخواید اینو با استفاده از سایر کلمات بروزش بکنید. ساده ترین کار چیه؟ این که یه ترکیب خطی از سایر embeddingها رو با هم جمع کنیم.
E'_i = E_i + ΔE_i
ΔE_i = Sum(j=1 to n) {a_ji* E_j}

خب این خوبه ولی ممکنه یه سوال بکنه بگه که خب الان هر کدوم از این جهتا قبلا یه معنی خاصی داشت همین طوری ما زرتی اینا رو با هم جمع کنیم اینا که با هم قاطی میشه اینجاست که میگم که حق با شماست. پس بیایم چیکار کنیم بیایم اول با یه نگاشت خطی از فضای embedding بریم یه فضای دیگه و بعد همون قبلی رو بریم یعنی چی؟
V_j = W_v * E_j
ΔE_i = Sum(j=1 to n) {a_ji * V_j}

حالا این W_v رو از کجا میاریم هیچی دیگه اینم یه چیز رندومی میذاریم و در طی فرایند آموزش یادش میگیریم. خب حالا شاید بپرسید که این a_jiها رو چیکار کنیم؟ اینا چین اصن اینا وزن‌های ترکیب خطی‌ان که هر چی بزرگتر باشن تاثیر V_j مربوطه بیشتر میشه پس در واقع بیشتر به توکن jام توجه میکنیم. در واقع باید از یه تابع کرنل استفاده کنیم که شباهت بین بردار iام و jام رو بسنجه مثلا:
a_ji = k(E_i, E_j) / Sum(j=1 to n) {k(E_i, E_j)}

خب حالا این تابع کرنل که مقاله معروف استفاده کرده به چه صورته؟(آماده ای طاقتشو داری؟)
Q_i = W_q * E_i
K_j = W_k * E_j
a_ji = Softmax(Q_i * K_1, Q_i * K_2, ... , Q_i * K_n)

یعنی چی اصن اینا؟ والا سوال خوبیه. این Wها رو که مثل قبل باید یاد بگیریم. softmax هم که اگه معرف حضورتون نیست از بین n تا عدد میگه کدوم احتمالا ماکزیممه (بهترین از این نتانم توضیحش بدم فرمولشو خودت ببین)

حالا چرا سه تا بردار درست کردیم Q, K, V والا ندانم اینم. ولی بیا بگم چرا بهشون میگیم Q, K, V؟
کاری که ما فک میکنیم این جا داره اتفاق میفته این طوریه که فرض کن یه جمله داریم مثل: «در جنگل یک شیر درنده را دیدم». حالا میخوای بدونیم این شیر کدوم شیره؟

هر کدوم از کلمه ها رو embeddingشون رو پیدا میکنیم و بعد میایم متناسب با وزن ها Q,K, V رو هم حساب میکنیم. Q شروع کلمه query عه یعنی انگار این بردار Q یه سوالی رو کدگذاری کرده . مثلا Q مرتبط با کلمه شیر(Q_4) این رو کد کرده که آیا بعد از من صفتی اومده که من رو توصیف کنه؟ K شروع کلمه Key و انگار این بردار داره جواب یه سوال خاصی رو کد میکنه. مثلا این طور که آیا من دارم کلمه قبل از خودم رو توصیف میکنم؟

حالا اتفاقی که میفته اینه که وقتی Qمرتبط با کلمه شیر رو در تک تک Kها ضرب میکنیم چون Q_4 با بردار K_5 در یک جهت هستن پس وقتی مفهوم کدگذاری شده برای کلمه شیر رو بروزرسانی بکنیم به کلمه «درنده» بیشتر توجه میکنیم و V_5 تاثیر زیادی رو ما میذاره؟

حالا این مکانیزم توجه برای کلمه شیر بود. مثلا کلمه درنده حالا میتونه دقیقا سوال برعکسی رو بپرسه بگه آیا قبل من اسمی وجود داره که من توصیفش کنم؟

حالا همه اینا تازه میشه یه head از این مکانیزم attention. توی هر مرحله میتونیم به ازای هر کلمه چندین بار سوال بپرسیم مثلا کلمه شیر بار بعدی میتونه بپرسه آیا قبل یا بعد من کلمه ای هست که مرتبط باشه با مفهوم طبیعیت و حیات وحش؟ حالا این بار وزن مرتبط با جنگل زیاد میشه و به اون توجه میکنه. خب پس این میشه Multi-Head attention mechanism.

خب حالا شاید سوال پیش بیاد مثلا مدلای مرسوم چند تا Head دارن؟ به قول یه بنده خدایی دارای صدها head. مثلا مدل GPT3 از ۹۶تا Head استفاده میکرد
و قسمت جذابش اینجاست که این ۹۶ تا به طور موازی انجام میشه و یهو برای همه iها هم انجام میشه من اینجا برای سادگی فقط برای یه دونه توضیح دادم. پس
E'_i = E_i + ΔE_i(1) + ΔE_i(2) + ... + ΔE_i(96)

#language_modeling #note
@SingularThinker
🔥31👍1
Singular Thinker
مدلسازی زبان - قسمت ششم همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟ با ذکر این نکته که این تنها حالت…
خب اگه متوجه نشدید که چی شده احتمالا تقصیر من و بخشی محدودیت انتقال محتوا از طریق متن باشه ولی اگه مشتاقید میتونید از من بپرسید و یا این ویدیو بسیار زیبا رو ببینید. ولی حالا آخرش شاید بپرسیم که حالا این GPT چطوری میتونه جمله «رییس جمهور آمریکا در سالم ۲۰۲۱ آقای ...» رو درست کامل کنه؟ این اطلاعات که اصن تو جمله‌ها نبوده که سوال خوبیه ولی با همراه باشید و برخلاف عنوان مقاله attention is 1/3 of all you need :>

پ.ن: برابرهای فارسی embedding خیلی عجیبه مثلا «جاسازی» «تعبیه» «نهفته سازی» و شاید بهترینشون «درون سپاری» باشه.

پ‌ن۲: سربسته بگم این یکی از سخت‌ترین چیزایی بود که توضیح دادم چطور شد؟

#language_modeling #note
@SingularThinker
🔥3👎1
با #meme‌ های متفاوت اومدم این سری :)))
@SingularThinker
💅8🔥51