آموزشترنسفورمرها

درس ۲۴ از ۶۲، هوش مصنوعی، حدود ۱۰ دقیقه خواندن

رمزگذاری سینوسی مقاله‌ی ۲۰۱۷

جواب کوتاه

رمزگذاری سینوسی، فرمولیه که مقاله‌ی ۲۰۱۷ برای ساختن بردار جا گذاشت. هر عدد این بردار از یه موج سینوس یا کسینوس میاد، و هر موج تندی خودش رو داره: اولی‌ها خیلی تند عوض می‌شن، آخری‌ها خیلی کند. برای هر جا، از هر موج یه عدد برداشته می‌شه، و کنار هم یه بردار یکتا می‌سازن؛ مثل عقربه‌های ساعت که با هم دقیقا زمان رو می‌گن. عددها همیشه بین منفی یک و یکن، برای هر طولی ساخته می‌شن و چیزی یاد گرفته نمی‌شه. مقاله حدس زد که این شکل به مدل کمک می‌کنه فاصله‌ها رو راحت‌تر بفهمه، چون جلو رفتن به اندازه‌ی ثابت، مثل چرخیدن به یه زاویه‌ی ثابته.

یعنی چی

جای هر کلمه رو با چند تا موج، از تند تا کند، می‌نویسیم.

توی درس رمزگذاری موقعیتی دیدیم به هر کلمه یه بردار جا اضافه می‌شه، و مقاله‌ی ۲۰۱۷ به جای جدول یادگرفته یه فرمول ثابت انتخاب کرد. اسم «سینوسی» از اینه که این فرمول با سینوس و کسینوس ساخته می‌شه؛ همون موج‌هایی که بالا و پایین می‌رن. نگران ریاضیش نباشید؛ اول با یه ساعت شروع می‌کنیم.

عقربه‌ها

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

موج‌ها

حالا عقربه‌ها رو به شکل موج بکشیم. هر ردیف یه موجه، و از راست به چپ، جای کلمه‌ها جلو می‌ره. موج اول تند بالا و پایین می‌ره، موج آخر خیلی آروم. برای ساختن بردار جای ۲، روی جای ۲ یه خط عمودی می‌کشیم و از هر موج، عددی که خط بهش می‌خوره رو برمی‌داریم. توی تصویر چهار موج هست و تندی‌هاشون ساختگیه؛ توی مقاله، به تعداد عددهای بردار، یعنی ۵۱۲ تا، موج بود.

مثل شمردن

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

با عدد

فرمول مقاله اینه: عددهای زوج بردار سینوس‌ان، عددهای فرد کسینوس، و هر جفت یه تندی داره. جای کلمه بر یه عدد تقسیم می‌شه که هر جفت بزرگ‌ترش می‌کنه، تا ۱۰۰۰۰؛ برای همین موج‌ها کم‌کم کندتر می‌شن. یه مثال خیلی کوچیک: اگه بردار فقط ۴ عدد داشته باشه، جفت اول تنده و جفت دوم صد برابر کندتر. توی جدول می‌بینید جای ۰ تا ۳ چطور می‌شن: دو عدد اول حسابی عوض می‌شن، دو عدد آخر تقریبا تکون نمی‌خورن. ولی برای جاهای خیلی دور، همون عددهای کند به کار میان.

چرا خوبه

اول، عددها همیشه بین منفی یک و یکن، پس هیچ‌وقت بردار کلمه رو زیر خودشون گم نمی‌کنن. دوم، برای هر جایی، حتی خیلی دور، یه بردار ساخته می‌شه و چیزی برای یاد گرفتن نداره. سوم، یه جفت سینوس و کسینوس رو می‌شه یه نقطه روی دایره دید؛ یه قدم جلوتر رفتن یعنی نقطه به یه زاویه‌ی ثابت می‌چرخه. پس فاصله‌ی دو جا، هر جای جمله که باشن، یه شکل ثابت داره. مقاله‌ی ۲۰۱۷ حدس زد همین به مدل کمک می‌کنه فاصله‌ها رو راحت یاد بگیره. این ایده‌ی چرخش بعدا خیلی جدی‌تر شد.

نزدیک‌ها شبیه‌ترن

یه چیز دیگه هم می‌شه با خود عددها دید: بردار دو جای نزدیک، شبیه همه.

برای این‌که ببینیم، بردار ۶۴عددی جای ۲۰ رو ساختیم و با شباهت کسینوسی با جاهای جلوتر مقایسه کردیم. با خودش شباهتش ۱ هست، با جای بعدی ۰٫۹۷، با پنج جا جلوتر ۰٫۷۳ و با هشتاد جا جلوتر ۰٫۴۶. یعنی هرچی دورتر، کمتر شبیه؛ مثل دو ساعت که هرچی زمانشون به هم نزدیک‌تر باشه، عقربه‌هاشون بیشتر روی هم‌ان. جالب‌ترش اینه که همین حساب رو برای جای ۱۰۰۰ هم کردیم و دقیقا همین عددها دراومد. یعنی شباهت فقط به فاصله بستگی داره، نه به این‌که کجای متنیم؛ همون حرف چرخش که بالا گفتیم. این عددها حساب خود درسه، با همون فرمول مقاله.

با پایتون

کل فرمول توی چند خط پایتون جا می‌شه؛ اگه خواستید خودتون اجراش کنید.

این تابع برای جای pos و بردار d عددی، جفت‌جفت سینوس و کسینوس می‌سازه. هر بار که i دو تا جلو می‌ره، جای کلمه بر یه عدد بزرگ‌تر تقسیم می‌شه، پس موج کندتر می‌شه:

import math

def place(pos, d):
    v = []
    for i in range(0, d, 2):
        w = pos / 10000 ** (i / d)
        v += [math.sin(w), math.cos(w)]
    return v

print([round(x, 2) for x in place(2, 4)])
# [0.91, -0.42, 0.02, 1.0]

خروجی همون بردار جای ۲ با چهار عدده: دو عدد اول از موج تند حسابی عوض شدن، دو عدد آخر از موج کند هنوز تقریبا ۰ و ۱ان. اگه به جای ۴ بنویسید ۵۱۲، همون بردار اندازه‌ی مقاله‌ی ۲۰۱۷ ساخته می‌شه.

چند نکته

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

اون ایده‌ی چرخش رو یه روش دیگه برداشت و مستقیم روی پرسش و کلید گذاشت. درس بعد: رمزگذاری چرخشی (RoPE).

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • هر عدد بردار جا، یه موج.
  • موج‌ها از خیلی تند تا خیلی کند.
  • هر جا، یه بردار یکتا.
  • عددها بین منفی یک و یک.
  • یه قدم جلوتر، یه چرخش ثابت.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس

درس بعد