مدلسازی زبان - قسمت ششم
همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم 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
همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم 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
🔥3❤1👍1
Singular Thinker
مدلسازی زبان - قسمت ششم همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟ با ذکر این نکته که این تنها حالت…
خب اگه متوجه نشدید که چی شده احتمالا تقصیر من و بخشی محدودیت انتقال محتوا از طریق متن باشه ولی اگه مشتاقید میتونید از من بپرسید و یا این ویدیو بسیار زیبا رو ببینید. ولی حالا آخرش شاید بپرسیم که حالا این GPT چطوری میتونه جمله «رییس جمهور آمریکا در سالم ۲۰۲۱ آقای ...» رو درست کامل کنه؟ این اطلاعات که اصن تو جملهها نبوده که سوال خوبیه ولی با همراه باشید و برخلاف عنوان مقاله attention is 1/3 of all you need :>
پ.ن: برابرهای فارسی embedding خیلی عجیبه مثلا «جاسازی» «تعبیه» «نهفته سازی» و شاید بهترینشون «درون سپاری» باشه.
پن۲: سربسته بگم این یکی از سختترین چیزایی بود که توضیح دادم چطور شد؟
#language_modeling #note
@SingularThinker
پ.ن: برابرهای فارسی embedding خیلی عجیبه مثلا «جاسازی» «تعبیه» «نهفته سازی» و شاید بهترینشون «درون سپاری» باشه.
پن۲: سربسته بگم این یکی از سختترین چیزایی بود که توضیح دادم چطور شد؟
#language_modeling #note
@SingularThinker
🔥3👎1
Singular Thinker
چرا خورشید میتابه؟ چرا میچرخه زمین؟ به خاطر قانون دوم ترمودینامیک: https://youtu.be/DxL2HoqLbyA #video #Thermodynamics @SingularThinker
به مناسب این #meme یادی کنیم از این ویدئوی شاهکار :))
❤3🔥1
Singular Thinker
مدلسازی زبان - قسمت دوم خب تو متن اول راجع به این صحبت که مواد لازم برای ساخت یه chatbot مثل chatgpt چی باید باشه و در مورد مجموعه دادگان و شرایط ساطوری کردنش یکم توضیح دادیم. حالا الان بریم سراغ مدل که اصن چه مدلی برای مدلسازی زبان میشه استفاده کرد و در…
حالا که بحث DeepSeek داغه و جادی هم یه ویدئو جدید داده این عکسا رو هم نبینیم؟
یه مثال جالبی که جادی زد که مفهوم مدل زبانی یا همون language model رو راحتتر منتقل کنه همین قابلیت predictive text ای که تو موبایلا هست که کلمهی بعدی رو پیشنهاد میدن، حس کردم که مثال خوبی بود. اگه خواستید متن رو هم بخونید مجدد.
فارغ از همهی این جوکها و بازیهای بین چین و آمریکا و غیره، حرف خوب دیگه جادی این بود که این ابزارها خیلی جدیدا و ما اولین آدمهایی که ازش استفاده میکنیم و اگه بتونیم خوب ازش استفاده میکنیم میتونیم خیلی راحتتر به چیزایی که دوست داریم بهش برسیم، برسیم. مثلا اینجا من یه روشی رو گفتم که چطوری ازش به عنوان ویرایشگر متن استفاده میشه کرد. پس به نظرم میرزه روش وقت بذاریم تا بفهمیمش و با اینکه زمینه خودم NLP نبوده سعی کردم تو این سریال مدلسازی زبان تا جایی که میفهمم و میتونم راجع به مفهومش صحبت کنیم تا درک بهتری داشته باشیم همگی.
اینجا هم یه ویدئو خوب داره راجع به اینکه چطور یه Large Language Model رو به کمک ollama رو کامپیوتر شخصی خودمون بیاریمش بالا و نهایتا این اپیزود رادیوجادی که اسفند ۱۴۰۱ منتشرش کرده و در مورد ChatGPT صحبت میکنه.
پ.ن: و صد البته که آقای Schmidhuber هم گفتن که DeepSeek کاری نکرده که من همه رو قبلا تو مقالاتم گفتم و این پدرسوخته ها به من ارجاع ندادن :))))
اگه این بشر دوست داشتنی☺️ رو نمیشناسید هم اینجا عکسشو حتما ببنید🤭 داستان مفصل این بزرگوارم مثه قبل بمونه برای بعدا :>
#video #language_modeling
@SingularThinker
یه مثال جالبی که جادی زد که مفهوم مدل زبانی یا همون language model رو راحتتر منتقل کنه همین قابلیت predictive text ای که تو موبایلا هست که کلمهی بعدی رو پیشنهاد میدن، حس کردم که مثال خوبی بود. اگه خواستید متن رو هم بخونید مجدد.
فارغ از همهی این جوکها و بازیهای بین چین و آمریکا و غیره، حرف خوب دیگه جادی این بود که این ابزارها خیلی جدیدا و ما اولین آدمهایی که ازش استفاده میکنیم و اگه بتونیم خوب ازش استفاده میکنیم میتونیم خیلی راحتتر به چیزایی که دوست داریم بهش برسیم، برسیم. مثلا اینجا من یه روشی رو گفتم که چطوری ازش به عنوان ویرایشگر متن استفاده میشه کرد. پس به نظرم میرزه روش وقت بذاریم تا بفهمیمش و با اینکه زمینه خودم NLP نبوده سعی کردم تو این سریال مدلسازی زبان تا جایی که میفهمم و میتونم راجع به مفهومش صحبت کنیم تا درک بهتری داشته باشیم همگی.
اینجا هم یه ویدئو خوب داره راجع به اینکه چطور یه Large Language Model رو به کمک ollama رو کامپیوتر شخصی خودمون بیاریمش بالا و نهایتا این اپیزود رادیوجادی که اسفند ۱۴۰۱ منتشرش کرده و در مورد ChatGPT صحبت میکنه.
پ.ن: و صد البته که آقای Schmidhuber هم گفتن که DeepSeek کاری نکرده که من همه رو قبلا تو مقالاتم گفتم و این پدرسوخته ها به من ارجاع ندادن :))))
اگه این بشر دوست داشتنی
#video #language_modeling
@SingularThinker
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4