خودتوجهی (Self-attention)
جواب کوتاه
خودتوجهی یعنی توجهی که پرسش و کلید و مقدارش همه از همون یه جمله میان؛ پس هر کلمه به همهی کلمههای همون جمله، حتی خودش، نگاه میکنه و معنیش رو از اونها میگیره. مثلا «شیر» کنار «خورد» میشه شیر خوردنی و کنار «غرش» شیر جنگل. فرقش با توجه متقابل اینه که اونجا پرسش از رمزگشا میاد و کلید و مقدار از رمزگذار. توی خودتوجهی، هر دو کلمه، هر چقدر هم دور، فقط یه قدم با هم فاصله دارن، که یاد گرفتن ربطهای دور رو آسون میکنه. ولی خودتوجهی تنها ترتیب کلمهها رو نمیدونه و جایگاه باید جدا بهش اضافه بشه.
یعنی چی
هر کلمه به کلمههای همون جمله نگاه میکنه تا بفهمه خودش چیه.
توی درس توجه با دست دیدیم «خورد» به «گربه» و «شیر» نگاه کرد و از هر دو چیزی برداشت. همهی اون پرسشها و کلیدها و مقدارها از همون یه جمله اومده بودن. به این نوع توجه میگن خودتوجهی؛ «خود» یعنی جمله داره به خودش نگاه میکنه. این مهمترین تیکهی ترنسفورمره.
سه «شیر»
کلمهی «شیر» رو در نظر بگیرید. شیر خوردنی؟ شیر جنگل؟ شیر آب؟ تا کلمههای کناریش رو نبینید، نمیدونید. مدل هم اولش برای «شیر» فقط یه بردار داره، هر جملهای که باشه. خودتوجهی کمک میکنه «شیر» به کلمههای دیگهی جمله نگاه کنه و از اونها چیزی برداره. اگه کنارش «خورد» باشه، بیشتر از «خورد» برمیداره و بردارش به سمت شیر خوردنی میره؛ اگه «غرش» باشه، به سمت شیر جنگل. وزنهای این تصویر ساختگیان، ولی ایده همینه.
از یه جا
مقالهی ۲۰۱۷ میگه توی خودتوجهی، پرسش و کلید و مقدار همه از یه جا میان، یعنی از خروجی لایهی قبل همون جمله. پس هر کلمه به همهی کلمهها نگاه میکنه، حتی خودش. یه نوع دیگه هم داریم: توجه متقابل، که پرسش از رمزگشا میاد و کلید و مقدار از رمزگذار؛ مثلا موقع ترجمه، جملهی در حال ساخت به جملهی اصلی نگاه میکنه. فرمول هر دو یکیه؛ فقط جای ورودیها فرق داره.
«اون» کیه
همون سال، نویسندههای ترنسفورمر یه مثال معروف منتشر کردن. توی جملهی «حیوون از خیابون رد نشد، چون اون خیلی خسته بود»، «اون» یعنی حیوون. ولی اگه آخرش بشه «خیلی پهن بود»، «اون» یعنی خیابون. اونها نشون دادن که توی خودتوجهی مدلشون، «اون» توی جملهی اول بیشتر به «حیوون» نگاه میکرد و توی دومی بیشتر به «خیابون». یعنی فقط با عوض شدن یه کلمه، جای نگاه عوض شد. مثال اصلی انگلیسی بود؛ اینجا فارسیش رو گذاشتیم.
دور و نزدیک
توی درس مشکل شبکهی بازگشتی دیدیم که اونجا خبر باید کلمهبهکلمه دستبهدست بشه؛ پس اولین و آخرین کلمهی یه جملهی بلند، کلی قدم با هم فاصله دارن و خبر توی راه کمرنگ میشه. توی خودتوجهی، هر کلمه مستقیم به هر کلمه نگاه میکنه؛ هر چقدر دور باشن، فقط یه قدم. مقالهی ۲۰۱۷ میگه همین مسیر کوتاه، یاد گرفتن ربطهای دور رو آسونتر میکنه. تازه چون همهی کلمهها با هم حساب میشن، منتظر هم نمیمونن و کار خیلی سریعتر پیش میره.
ترتیب رو نمیدونه
یه نکتهی عجیب: خودتوجهی تنها، نمیدونه کدوم کلمه اول اومده. چون هر کلمه به همه نگاه میکنه و هیچجای فرمول نمیگه کی کجاست. «گربه شیر خورد» و «شیر گربه خورد» براش یه دسته کلمهان؛ در حالی که معنیشون کاملا فرق داره. مقالهی ۲۰۱۷ هم همین رو گفته، و برای همین به بردار هر کلمه یه نشونه از جایگاهش اضافه میکنن. درس رمزگذاری موقعیتی این رو کامل باز میکنه.
یه آزمایش جابهجایی
اینکه خودتوجهی ترتیب رو نمیدونه رو میشه با همون عددهای درس توجه با دست دید.
اونجا خروجی «گربه» ۲٫۶۴ و ۱٫۳۶ شد، «شیر» ۱٫۳۶ و ۲٫۶۴، و «خورد» ۲ و ۲. حالا جای «گربه» و «شیر» رو عوض کنیم، یعنی «شیر گربه خورد»، بی اینکه هیچ نشونهی جایگاهی اضافه کنیم. هر کلمه هنوز همون پرسش و کلید و مقدار رو داره، و هنوز به همون کلمهها نگاه میکنه؛ پس خروجیها دقیقا همونها میشن، فقط جاشون عوض میشه. یعنی مدل هیچ فرقی بین دو جملهای که معنیشون کاملا فرق داره نمیبینه. اسم ریاضیش اینه که خودتوجهی نسبت به جابهجایی «هموردا»ست: ورودی رو جابهجا کنی، خروجی هم همونطور جابهجا میشه، نه بیشتر.
پایین و بالا
ترنسفورمر چند لایه خودتوجهی رو روی هم میذاره. یه سوال جالب اینه که هر لایه بیشتر چی یاد میگیره.
یه پژوهش ۲۰۱۹ یه مدل فقطرمزگذار معروف رو لایهبهلایه بررسی کرد و دید کارهایی که زبانشناسها قدیمها پشت سر هم انجام میدادن، تقریبا به همون ترتیب توی لایهها پیدا میشن: اول نوع کلمه، مثلا اسمه یا فعل؛ بعد ساختار جمله؛ بعد پیدا کردن اسمهای خاص؛ بعد اینکه کی با چی چی کار کرد؛ و آخر از همه، اینکه هر ضمیر به کدوم اسم برمیگرده. یعنی لایههای پایینتر چیزهای سادهتر و نزدیکتر رو میگیرن، و لایههای بالاتر روی همونها چیزهای پیچیدهتر میسازن.
یه نکتهی جالبتر هم داشت: این ترتیب خشک نیست. نوشتن مدل «اغلب» وقتی یه لایهی بالاتر چیزی میفهمه که ابهام رو برطرف میکنه، تصمیم لایههای پایینتر رو هم عوض میکنه؛ مثل همون «شیر» که تا «خورد» یا «غرش» دیده نشه، معلوم نیست کدومه.
چند نکته
- خودتوجهی، همون فرموله؛ فقط ورودیها از یه جمله.
- هر لایه یه بار تکرارش میکنه. رمزگذار مقالهی ۲۰۱۷ شش لایه داشت.
- هر لایه، روی خروجی لایهی قبل کار میکنه.
- جایگاه رو جدا بهش میدن.
توی هر لایه، یه خودتوجهی تنها فقط یه جور نگاه داره. ولی ربط کلمهها چند جوره؛ یکی دستوریه، یکی معنایی. درس بعد: توجه چندسری (Multi-head).
جمعبندی. آنچه از این درس با خودتان میبرید.
- پرسش، کلید و مقدار از یه جمله.
- هر کلمه به همه نگاه میکنه، حتی خودش.
- معنی کلمه از کناریهاش درمیاد.
- دورترین کلمهها هم یه قدم فاصله دارن.
- ترتیب رو خودش نمیدونه.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.