سعید حسنی
سعید حسنی
خواندن ۷ دقیقه·۲ ماه پیش

درباره Transformer: مدلی که همه چیز رو تغییر داد | 2

این قسمت با مراحل Encoder آشنا می‌شیم. از قسمت قبلی گفتیم که توی مدل Transformer، کلمات به عدد تبدیل می‌شن و ترتیبشون توی جمله اهمیت داره. پس بیایم با هم ببینیم این مراحل چطور در Encoder پیش می‌ره و چطور کامپیوتر اطلاعات رو درک می‌کنه.

آرامگاه ابن حسام خوسفی در شهر خوسف، شاعر سده نهم هجری
آرامگاه ابن حسام خوسفی در شهر خوسف، شاعر سده نهم هجری


مرحله اول: Embedding

همونطور که قسمت مقدمه گفتیم، فایل اطلاعاتی که درباره استان خراسان داریم، کلمه‌ها، جمله‌ها و عددها ذخیره شده. ولی کامپیوتر نمی‌تونه این کلمات رو مستقیم بفهمه، چون ماشین‌ فقط با اعداد سروکار داره. پس باید کلمات رو به چیزی تبدیل کنیم که کامپیوتر بتونه باهاشون کار کنه. به این مرحله Embedding می‌گن. توی این مرحله، هر کلمه به یه رشته از اعداد (یا به اصطلاح دقیق‌تر، یه بردار عددی) تبدیل می‌شه. مثلاً وقتی به کلمه "جمعیت" یا "آب و هوا" نگاه می‌کنیم، هر کدوم از این کلمات به یه سری عدد تبدیل می‌شن. حالا ماشین این کلمات رو دیگه به صورت کلمه نمی‌بینه، بلکه اون‌ها رو به شکل عدد می‌فهمه و باهاشون کار می‌کنه.

مثلا فرض کن ما دو کلمه داریم: "آب" و "هوا". این‌ها به ترتیب به بردارهای عددی تبدیل می‌شن که می‌تونه این‌طور باشه:
"آب": [1.2, 3.4, 2.1]
"هوا": [0.8, 1.9, 3.5]
حالا ماشین این اعداد رو به جای کلمات می‌فهمه و ازشون استفاده می‌کنه.

مرحله دوم: Positional Embedding

خب، حالا یه مسئله مهم دیگه پیش میاد: ترتیب کلمات توی جمله‌ها.

معنی جمله می‌تونه با تغییر ترتیب کلمات کاملاً عوض بشه. مثلاً فرق داره که بگی "آب و هوا خوبه" یا "هوا و آب خوبه"! پس ماشین هم باید متوجه بشه که ترتیب کلمات مهمه. برای این کار، باید جایگاه کلمات توی جمله رو هم به ماشین بگیم. اینجاست که Positional Embedding وارد عمل می‌شه.😎

تو این مرحله، علاوه بر اینکه برای هر کلمه یه سری عدد (بردار عددی) ساختیم که معنیش رو نشون بده، حالا یه سری عدد دیگه هم اضافه می‌کنیم که جایگاهش توی جمله رو مشخص کنه. این یعنی ماشین علاوه بر اینکه معنی هر کلمه رو می‌فهمه، می‌فهمه هر کلمه توی چه جایگاهی از جمله قرار داره.

مثلا فرض کن بردار "آب" این بود: [1.2, 3.4, 2.1] و بردار "هوا" هم [0.8, 1.9, 3.5] بود. حالا اگر "آب" اول جمله باشه، یه سری عدد جدید هم بهش اضافه می‌شه تا نشون بده توی جایگاه اول جمله قرار داره، مثلاً عدد [0.5]. در نتیجه، بردار جدید "آب" می‌شه: [1.2, 3.4, 2.1, 0.5].

مرحله سوم: ادغام Embedding و Positional Embedding

تا اینجا ما دو نوع بردار برای هر کلمه داریم:

  1. بردار معنی کلمه (که با Embedding به دست اومد)
  2. بردار جایگاه کلمه (که با Positional Embedding بهش اضافه شد)

حالا وقتشه که این دو تا بردار رو با هم ادغام کنیم. این یعنی برای هر کلمه، هم معنی و هم جایگاهش رو توی یه بردار واحد قرار می‌دیم تا همه چی توی یه بردار باشه.

مثلا فرض کن بردار کلمه "جمعیت" این باشه: [1.5, 2.3, 3.1] که معنی اون رو نشون می‌ده، و بردار جایگاهش هم [0.7] باشه که جایگاهش توی جمله رو نشون می‌ده. حالا این دو بردار رو با هم ادغام می‌کنیم و نتیجه این می‌شه: [1.5, 2.3, 3.1, 0.7]. این بردار نهایی هم معنی کلمه "جمعیت" رو داره و هم جایگاهش توی جمله.

مرحله چهارم: مکانیزم Attention

تا اینجا یاد گرفتیم که چطور هر کلمه به عدد تبدیل می‌شه و چطور جایگاهش توی جمله رو به ماشین می‌فهمونیم. حالا وقتشه وارد مهم‌ترین بخش بشیم: Attention. 🎯 این مکانیزم به زبان ساده مثل اینه که ماشین قراره بفهمه چه کلمه‌هایی توی جمله اهمیت بیشتری دارن و چطور با هم ارتباط دارن.

مثلا فرض کن جمله‌ای داری که می‌گه: "آب و هوای مشهد عالیه، ولی تابستون‌ها خیلی گرمه." حالا اگه از ماشین بپرسی "آب و هوای مشهد چطوره؟"، ماشین باید بدونه که "عالیه" به "آب و هوای مشهد" ربط داره، نه به تابستون. این یعنی ماشین باید روی بخش مهم جمله تمرکز کنه و به ارتباطات بین کلمات توجه کنه.
اینجا Attention به ماشین کمک می‌کنه که بفهمه کدوم کلمات باید به هم توجه کنن و چطور با هم ارتباط دارن. مثلاً "آب و هوای مشهد" با "عالیه" مرتبطه، ولی "تابستون‌ها" به "گرمه" ربط داره. این مکانیزم شبیه اینه که ماشین اول جمله رو می‌خونه و از خودش می‌پرسه: "خب، حالا من باید روی چی تمرکز کنم؟" بعد با کمک Attention، ماشین متوجه می‌شه که کدوم قسمت‌های جمله برای جواب دادن به سوال مهم‌ترن.

مکانیزم Attention چطوری کار می‌کنه؟

مدل Attention هر کلمه رو با همه کلمات دیگه توی جمله مقایسه می‌کنه تا بفهمه چطور با هم در ارتباطن. این مقایسه‌ها به ماشین کمک می‌کنن تا بفهمه کدوم کلمه‌ها به همدیگه مرتبط‌ترن. هر چقدر دو کلمه بیشتر به هم مربوط باشن، ماشین بهشون توجه بیشتری می‌کنه.

برای اینکه دقیق‌تر بشه گفت، Attention به هر کلمه توی جمله یه "وزن" می‌ده. هر چقدر یه کلمه به سوال یا مفهوم کلی جمله نزدیک‌تر باشه، وزن بیشتری می‌گیره. ماشین بعداً این وزن‌ها رو استفاده می‌کنه تا بفهمه کدوم کلمات باید توی جواب نهایی تاثیر بیشتری داشته باشن.

مثلا فرض کن جمله‌ی "آب و هوای مشهد عالیه، ولی تابستون‌ها خیلی گرمه" رو داری. اگه از ماشین بپرسی "هوای مشهد چطوره؟"، ماشین از Attention استفاده می‌کنه تا روی "عالیه" تمرکز کنه و "گرمه" رو کنار بذاره، چون "عالیه" به جواب سوال ربط بیشتری داره.

سه مرحله بعدی رو خسته شدی، یه لیوان آب بخور بعد بیا ادامه بدیم. تا الان دیگه کلیت Encoder رو گرفتی و بهت تبریک میگم.💔 حوصله نداشتی، بقیه اش رو نخون، برو فصل Decoder.😊 دو مرحله از سه مرحله بعدی نرمالسازی هست و بیشتر ریاضیاتی هست و میخوام توی یه مقاله جداگونه در مورد ریاضیات پشت صحنه Transformer صحبت کنم.


مرحله پنجم: نرمالسازی

همونطور که قبلا گفتیم، ما کلمات رو به اعداد تبدیل کردیم و ماشین دیگه با اعداد سر و کله میزنه. وقتی مدل داره روی یه سری عدد یا داده کار می‌کنه، ممکنه بعضی از این عددها خیلی بزرگ یا خیلی کوچیک بشن. اگر این تفاوت‌ها خیلی زیاد بشن، مدل ممکنه نتونه درست نتیجه بگیره.
نرمال‌سازی شبیه اینه که همه چیز رو مرتب کنی و به یه سطح یکنواخت برسونی. اینطوری عددها و داده‌ها از یه حد متعادل خارج نمی‌شن و مدل راحت‌تر می‌تونه روشون کار کنه.

به‌عبارت دیگه، نرمال‌سازی کمک می‌کنه که هیچ اطلاعاتی زیادی بزرگ یا زیادی کوچیک نشه و همه چیز توی یه سطح قابل‌قبول باقی بمونه. این مرحله به مدل کمک می‌کنه که خروجی‌های دقیق‌تری داشته باشه و درک بهتری از متن به دست بیاره.

مرحله ششم: شبکه Feed Forward

اینجا نمیخوام در مورد شبکه عصبی صحبت کنم و اگه با شبکه عصبی آشنایی نداری، میتونی کلی مطلب گوگل کنی. Feed Forward یه نوعی از شبکه های عصبی هست. (ساده است نگران نباش👍، اگه خیلی سردرگم شدی، کامنت بذار).

حالا که اطلاعات نرمال شده رو داریم، وقتشه که اون‌ها رو توی یه مرحله پردازشی عمیق‌تر بفرستیم. این مرحله شبکه Feed Forward هست. این شبکه مثل یه خط تولید عمل می‌کنه: اطلاعات رو از یه سر می‌گیره، روشون یه سری عملیات انجام می‌ده و از طرف دیگه یه خروجی تولید می‌کنه که برای مدل کاربردی‌تره.

معماری شبکه Feed Forward [منبع تصویر]
معماری شبکه Feed Forward [منبع تصویر]


مرحله هفتم: نرمالسازی دوباره

وقتی اطلاعات از شبکه Feed Forward عبور می‌کنه و پردازش می‌شه، ممکنه باز اعدادمون خیلی بزرگ یا خیلی کوچیک بشن. بنابراین دوباره نیاز داریم که نرمال‌سازی انجام بدیم(مثل مرحله پنجم) تا مطمئن بشیم همه‌چیز توی یه سطح متعادل قرار داره.


خلاصه مقاله

اگه تا اینجا باهم اومدی، بهت تبریک میگم. 👏به یه فهم خوبی از Encoder رسیدی.❤️ یاد گرفتیم که ماشین، چطوری کلمات رو به عدد تبدیل میکنه (Embedding) و چطوری جایگاه کلمات براش مهمه (Positional Embedding). همینطور درک کردیم که چطوری با مکانیزم Attention، ماشین میفهمه کدوم کلمات توی یه جمله از اهمیت بالایی برخوردار هستن.
در مورد Attention مقاله بعدی میخوام کلی صحبت کنم تا عمیق تر بشیم. 🏊‍♂️


فهرست مطالبی که قراره در موردش عمیق بشیم:

هر کدوم از مطالب زیر که آماده شده، لینک میدم به صفحه مربوطه اش
  • بخش اول: مقدمه
  • بخش دوم: Encoder
  • بخش سوم: Attention چرا اینقدر خوبه؟ [هنوز آماده نشده...]
  • بخش چهارم: دیکودر (Decoder) [هنوز آماده نشده...]
llmtransformerencoderembeddingpositional embedding
یه برنامه نویس خوشحال ツ تلگرامم: TheCoderLife
شاید از این پست‌ها خوشتان بیاید