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

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

مقاله‌ی ۲۰۱۷ رو خودتون بخونید

جواب کوتاه

مقاله‌ی «Attention Is All You Need» حدود پونزده صفحه‌ست و حالا که این مسیر رو اومدید، تقریبا هر جمله‌ش رو می‌شناسید. بهترین راه خوندنش سه دوره؛ یه بار نگاه کلی به عنوان، چکیده، شکل‌ها و نتیجه‌گیری، یه بار خوندن با دقت بخش ۳ که خود مدله، و یه بار بازسازی ذهنی؛ این‌که بتونید بی نگاه کردن، شکل ۱ و فرمول ۱ رو بکشید و عددهاش رو حساب کنید. بخش ۳ معماریه (پشته‌ها، فرمول توجه، چندسر، پیش‌خور، جاسازی، جای سینوسی)، بخش ۴ مقایسه با بازگشتی و پیچشی، بخش ۵ آموزش، و بخش ۶ نتیجه‌ها و آزمایش‌ها.

یعنی چی

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

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

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

سه دور خوندن

یه روش معروف برای خوندن مقاله، که سال ۲۰۰۷ نوشته شد، می‌گه هر مقاله رو سه دور بخونید، هر دور با یه هدف:

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

برای این مقاله، دور اول و دوم با همین درس راحت می‌شه. دور سوم رو خودتون، با کاغذ و قلم، انجام بدید؛ آخر درس چند تمرین برای همین هست.

پیش‌نیازها

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

از بیرون این مسیر هم سه چیز لازمه؛ ضرب ماتریس، سافت‌مکس، و این‌که مدل‌های ترجمه چطور سنجیده می‌شن، که توی درس مقاله‌ی ۲۰۱۷ گفتیم؛ نمره‌ی BLEU، کوتاه‌شده‌ی Bilingual Evaluation Understudy، یعنی «ارزیاب دوزبانه». اگه هر کدوم رو یادتون نیست، اول یه نگاه بهش بندازید.

عنوان و چکیده

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

عددهای چکیده رو هم بشناسید؛ ۲۸٫۴ BLEU برای انگلیسی به آلمانی، و ۴۱٫۸ برای انگلیسی به فرانسوی، با ۳٫۵ روز آموزش روی ۸ کارت گرافیک. چکیده‌ها معمولا فقط بهترین عددها رو می‌گن؛ جزئیاتش توی بخش ۶ هست. یه عادت خوب؛ همیشه عدد چکیده رو توی جدول نتیجه‌ها هم پیدا کنید.

شکل ۱، نقشه‌ی مدل

شکل ۱ مهم‌ترین تصویر مقاله‌ست، و احتمالا معروف‌ترین شکل هوش مصنوعی امروز. یه بار با دقت نگاهش کنید:

سمت چپ رمزگذاره؛ پایینش جاسازی ورودی به‌علاوه‌ی جای سینوسی، بعد یه جعبه که کنارش نوشته Nx، یعنی این جعبه N بار تکرار می‌شه. توی جعبه دو تیکه هست؛ توجه چندسر و پیش‌خور، و هر کدوم با یه جعبه‌ی «Add & Norm» تموم می‌شن، یعنی میون‌بر و نرمال‌سازی. سمت راست رمزگشاست، با سه تیکه؛ توجه چندسر ماسک‌دار، توجه چندسر که یه فلش از رمزگذار بهش می‌رسه، یعنی توجه متقابل، و پیش‌خور. بالای رمزگشا، یه لایه‌ی خطی و سافت‌مکس که احتمال کلمه‌ی بعدی رو می‌دن.

یه جزئیات که خیلی‌ها نمی‌بینن؛ ورودی رمزگشا «خروجی‌ها، یه خونه جابه‌جا به راست» نوشته شده. یعنی رمزگشا موقع آموزش کل ترجمه‌ی درست رو می‌بینه، ولی یه خونه عقب‌تر، تا هر جا کلمه‌ی بعدی رو پیش‌بینی کنه؛ همون آموزش با معلم.

بخش ۱ و ۲

بخش ۱، مقدمه، می‌گه مدل‌های بازگشتی ذاتا ترتیبی‌ان؛ برای حساب جای t، حالت جای t منهای ۱ لازمه، و این جلوی موازی‌سازی رو می‌گیره. همون مشکلی که توی درس دردسرهای شبکه‌ی بازگشتی دیدیم. بعد می‌گه توجه تا اون موقع کنار شبکه‌های بازگشتی به کار می‌رفت، و ما اولین مدلی رو می‌سازیم که کاملا بر توجه تکیه داره.

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

بخش ۳٫۱، دو پشته

این‌جا اولین عددها میان. رمزگذار یه پشته از N برابر ۶ لایه‌ی یکسانه. هر لایه دو زیرلایه داره؛ خودتوجهی چندسر، و پیش‌خور. دور هر زیرلایه یه میون‌بر هست و بعدش نرمال‌سازی؛ یعنی خروجی هر زیرلایه، LayerNorm(x + Sublayer(x))‌ه. برای این‌که میون‌برها کار کنن، همه‌ی زیرلایه‌ها و جاسازی‌ها خروجی هم‌اندازه دارن؛ d_model برابر ۵۱۲.

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

فرمول ۱

بخش ۳٫۲٫۱ قلب مقاله‌ست. اسمش «توجه ضرب نقطه‌ای مقیاس‌دار»ه، و فرمول ۱ این‌طوریه:

Attention(Q, K, V) = softmax(Q Kᵀ / √d_k) V

تیکه به تیکه بخونیمش. Q، K و V سه ماتریسن؛ هر ردیفشون پرسش، کلید یا مقدار یه جا. Q Kᵀ یعنی Q ضرب در ترانهاده‌ی K؛ جدولی که هر خونه‌ش ضرب نقطه‌ای یه پرسش و یه کلیده، یعنی همون امتیازها. تقسیم بر ریشه‌ی d_k، که d_k اندازه‌ی بردار کلیده. softmax روی هر ردیف، که امتیازها رو وزن می‌کنه. و آخر ضرب در V، یعنی جمع وزن‌دار مقدارها برای هر پرسش.

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

چرا ریشه

پانویس ۴ مقاله، دلیل ریشه رو با یه جمله‌ی ریاضی می‌گه. اگه عددهای q و k تصادفی، با میانگین صفر و واریانس یک باشن، ضرب نقطه‌ایشون، که جمع d_k تا حاصل‌ضربه، میانگین صفر و واریانس d_k داره. یعنی با d_k برابر ۶۴، امتیازها معمولا تا حدود ۸ بالا و پایین می‌رن، چون ریشه‌ی ۶۴ می‌شه ۸.

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

بخش ۳٫۲٫۲، چندسر

مقاله به‌جای یه توجه با بردارهای ۵۱۲تایی، ۸ توجه موازی با بردارهای ۶۴تایی می‌ذاره؛ h برابر ۸، d_k و d_v برابر ۵۱۲ تقسیم بر ۸، یعنی ۶۴. هر سر، با سه ماتریس جدای خودش، Q، K و V رو به ۶۴ بعد می‌بره، توجهش رو حساب می‌کنه، و خروجی‌های ۸ سر کنار هم گذاشته می‌شن و با یه ماتریس W^O دوباره ۵۱۲ می‌شن.

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

بخش ۳٫۲٫۳، سه کاربرد

این بخش کوتاه سه جای استفاده‌ی توجه رو می‌شمره. یک، توی لایه‌های «رمزگذار به رمزگشا»، پرسش‌ها از لایه‌ی قبلی رمزگشا میان و کلیدها و مقدارها از خروجی رمزگذار؛ پس هر جای ترجمه به همه‌ی جاهای جمله‌ی اصلی نگاه می‌کنه. دو، خودتوجهی رمزگذار، که پرسش و کلید و مقدار همه از یه جان. سه، خودتوجهی رمزگشا، که هر جا فقط به جاهای تا خودش نگاه می‌کنه.

و جمله‌ی آخرش، جزئیات ماسکه؛ مقدارهای ورودی سافت‌مکس برای اتصال‌های غیرمجاز، منفی بی‌نهایت می‌شن. منفی بی‌نهایت، بعد از توان، صفر می‌شه؛ پس وزن اون جاها دقیقا صفره. همون کاری که کتابخونه‌ها امروز می‌کنن.

فرمول ۲، پیش‌خور

بخش ۳٫۳ پیش‌خور رو با فرمول ۲ می‌گه:

FFN(x) = max(0, x W₁ + b₁) W₂ + b₂

یعنی x در W₁ ضرب می‌شه و b₁ اضافه، بعد max با صفر، که همون ReLU‌ه، یعنی منفی‌ها صفر می‌شن، بعد ضرب در W₂ و اضافه‌ی b₂. ورودی و خروجی ۵۱۲ بعدی‌ان و وسطش، d_ff، ۲۰۴۸، یعنی چهار برابر. این شبکه روی هر جا جدا و یکسان اجرا می‌شه، ولی هر لایه وزن‌های خودش رو داره. مقاله می‌گه یه جور دیگه هم می‌شه دیدش؛ دو پیچش با پنجره‌ی ۱.

بخش ۳٫۴، جاسازی

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

دوم این‌که جاسازی‌ها، قبل از جمع با جای سینوسی، در ریشه‌ی d_model، یعنی ریشه‌ی ۵۱۲، حدود ۲۲٫۶، ضرب می‌شن. مقاله دلیلش رو نمی‌گه؛ یه حدس رایج اینه که این‌طوری اندازه‌ی جاسازی و جای سینوسی، که بین منفی یک و یکه، هم‌سطح می‌شن و جا روی معنی غلبه نمی‌کنه. این یه نمونه‌ست از جزئیاتی که فقط با خوندن دقیق متن پیدا می‌شن.

بخش ۳٫۵، فرمول جا

این‌جا جای سینوسی با دو فرمول میاد:

PE(pos, 2i)   = sin(pos / 10000^(2i / d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i / d_model))

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

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

بخش ۴ و جدول ۱

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

خودتوجهی، هزینه‌ی n به توان دو ضرب در d، عملیات پشت سر هم ثابت، طول مسیر ثابت. بازگشتی، هزینه‌ی n ضرب در d به توان دو، عملیات پشت سر هم n، طول مسیر n. n طول جمله‌ست و d اندازه‌ی بردار. مقاله می‌گه وقتی n از d کمتره، که برای جمله‌های ترجمه با d برابر ۵۱۲ معمولا همین‌طوره، خودتوجهی حتی از نظر هزینه هم ارزون‌تره.

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

بخش ۵٫۱ و ۵٫۲، داده و سخت‌افزار

داده‌ی انگلیسی به آلمانی حدود ۴٫۵ میلیون جفت جمله بود، با یه واژه‌نامه‌ی مشترک حدود ۳۷ هزار تکه، و انگلیسی به فرانسوی ۳۶ میلیون جمله با ۳۲ هزار تکه. جمله‌ها بر اساس طول تقریبی دسته می‌شدن و هر دسته حدود ۲۵ هزار تکه‌ی ورودی و ۲۵ هزار تکه‌ی خروجی داشت. دسته‌بندی بر اساس طول، جای خالی رو کم می‌کنه.

سخت‌افزار یه دستگاه با ۸ کارت گرافیک بود. مدل پایه هر قدم حدود ۰٫۴ ثانیه طول می‌کشید و ۱۰۰ هزار قدم، یعنی ۱۲ ساعت، آموزش دید. مدل بزرگ هر قدم ۱ ثانیه و ۳۰۰ هزار قدم، یعنی ۳٫۵ روز. برای مقایسه، امروز آموزش یه مدل زبانی بزرگ ماه‌ها روی هزاران کارت طول می‌کشه.

بخش ۵٫۳، آدام و فرمول ۳

بهینه‌ساز آدام بود، با β1 برابر ۰٫۹، β2 برابر ۰٫۹۸، و ε برابر ده به توان منفی ۹. β2 کمی کمتر از مقدار پیش‌فرض رایج، ۰٫۹۹۹، انتخاب شد. نرخ یادگیری با فرمول ۳ عوض می‌شد:

lrate = d_model^-0.5 · min(step^-0.5, step · warmup_steps^-1.5)

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

توی قدم ۱۰۰ هزار، آخر آموزش مدل پایه، نرخ حدود ۰٫۰۰۰۱۴ می‌شه؛ پنج برابر کمتر از اوج. این فرمول، با اسم «زمان‌بندی نرخ یادگیری ترنسفورمر»، سال‌ها پیش‌فرض خیلی از کتابخونه‌ها بود، و فکر گرم کردن هنوز همه‌جا هست.

بخش ۵٫۴، نظم‌دهی

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

دو، هموارسازی برچسب با ۰٫۱. یعنی موقع آموزش، به‌جای این‌که جواب درست رو صد درصد بگیریم، ۹۰ درصد به کلمه‌ی درست و بقیه رو پخش روی بقیه‌ی کلمه‌ها می‌دیم. مقاله صادقانه می‌گه این سرگشتگی رو بدتر می‌کنه، چون مدل یاد می‌گیره کمتر مطمئن باشه، ولی دقت و BLEU رو بهتر. یه درس خوب؛ معیار آموزش و معیار نهایی همیشه هم‌جهت نیستن.

بخش ۶٫۱، نتیجه‌ها

جدول ۲ نتیجه‌ها رو با مدل‌های قبلی مقایسه می‌کنه، هم BLEU و هم هزینه‌ی آموزش. مدل بزرگ ۲۸٫۴ روی انگلیسی به آلمانی، بیش از ۲ واحد بهتر از بهترین نتیجه‌ی قبلی، حتی وقتی قبلی‌ها چند مدل رو با هم ترکیب کرده بودن. حتی مدل پایه از همه‌ی قبلی‌ها بهتر بود، با کسری از هزینه.

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

جدول ۳، آزمایش‌ها

جدول ۳ شاید آموزنده‌ترین جدول مقاله باشه؛ هر ردیف یه چیز مدل پایه رو عوض می‌کنه و نتیجه رو گزارش می‌ده. ردیف A تعداد سرها رو عوض می‌کنه، با حساب ثابت؛ یه سر ۰٫۹ BLEU بدتره، ولی ۳۲ سر هم بدتر از ۸. ردیف B اندازه‌ی کلید رو کم می‌کنه و کیفیت افت می‌کنه؛ یعنی تشخیص سازگاری پرسش و کلید ساده نیست.

ردیف C نشون می‌ده مدل بزرگ‌تر بهتره. ردیف D نشون می‌ده دراپ‌اوت خیلی کمک می‌کنه. ردیف E جای سینوسی رو با جای یادگرفته عوض می‌کنه و تقریبا هیچ فرقی نمی‌بینه. و آخرین ردیف، مدل بزرگه؛ d_model برابر ۱۰۲۴، d_ff برابر ۴۰۹۶، ۱۶ سر، دراپ‌اوت ۰٫۳، و حدود ۲۱۳ میلیون پارامتر، در برابر ۶۵ میلیون مدل پایه. خوندن این‌طور جدول‌ها، یاد می‌ده هر تیکه‌ی مدل چقدر مهمه.

بخش ۶٫۳، تجزیه‌ی جمله

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

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

نتیجه‌گیری و پیوست

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

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

نمادها

این فهرست کوتاه نمادها رو کنار مقاله نگه دارید. N تعداد لایه‌های هر پشته، ۶. d_model اندازه‌ی بردار اصلی، ۵۱۲. d_k و d_v اندازه‌ی کلید و مقدار هر سر، ۶۴. h تعداد سرها، ۸. d_ff اندازه‌ی وسط پیش‌خور، ۲۰۴۸. n طول دنباله. P_drop احتمال دراپ‌اوت، ۰٫۱. ε_ls مقدار هموارسازی برچسب، ۰٫۱. W^Q، W^K، W^V و W^O ماتریس‌های سرها.

یه نکته درباره‌ی نوشتن ماتریس‌ها؛ توی مقاله‌ها معمولا هر ردیف یه جاست، پس ضرب در W از سمت راست میاد، مثل x W₁. توی بعضی کتاب‌ها برعکسه. اگه یه فرمول عجیب به نظر اومد، اول ببینید ردیف یعنی چی.

شمردن پارامترها

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

هر لایه‌ی رمزگشا دو توجه داره، پس حدود ۴٫۲ میلیون، و شش لایه حدود ۲۵٫۲ میلیون. جدول جاسازی مشترک، ۳۷ هزار در ۵۱۲، حدود ۱۸٫۹ میلیون. جمع این‌ها حدود ۶۳ میلیون می‌شه. بقیه، تا ۶۵، بایاس‌ها و نرمال‌سازی‌هان. ببینید جاسازی نزدیک یه سوم کل مدله؛ برای همین مشترک کردنش این‌قدر مهم بود.

چی از اون موقع عوض شده

این مقاله پایه‌ست، ولی ترنسفورمرهای امروز توی چند جزئیات باهاش فرق دارن:

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

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

اشتباه‌های رایج

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

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

تمرین

این‌ها دور سوم خوندنه؛ بی نگاه کردن انجام بدید. یک، شکل ۱ رو از حافظه روی کاغذ بکشید، با هر جعبه و فلش. دو، فرمول ۱ رو بنویسید و بگید هر تیکه‌ش چیه. سه، اگه d_model برابر ۷۶۸ و h برابر ۱۲ باشه، d_k چنده؟ چهار، با warmup برابر ۴۰۰۰، نرخ یادگیری توی قدم ۲۰۰۰ نسبت به اوج چقدره؟

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

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

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

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

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

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

۱۵ پرسش

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

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

درس بعد