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

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

ترکیب متخصص‌ها (Mixture of Experts)

جواب کوتاه

ترکیب متخصص‌ها، یا MoE، کوتاه‌شده‌ی Mixture of Experts، یعنی به‌جای یه شبکه‌ی پیش‌خور توی هر بلوک ترنسفورمر، چند شبکه‌ی پیش‌خور جدا، یعنی متخصص، بذاریم و یه مسیریاب کوچیک برای هر تکه تصمیم بگیره کدوم یکی دو تاشون کار کنن. این‌طوری مدل کلی پارامتر داره، ولی برای هر تکه فقط بخش کوچیکی حساب می‌شه؛ پس با همون هزینه‌ی حساب، مدل بزرگ‌تر و بهتری داریم. در عوض همه‌ی متخصص‌ها باید توی حافظه باشن، باید مراقب بود همه‌ی تکه‌ها سراغ یه متخصص نرن، و پخش کردنش روی چند کارت ارتباط زیادی لازم داره.

یعنی چی

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

ترکیب متخصص‌ها، یا MoE، کوتاه‌شده‌ی Mixture of Experts، یعنی «ترکیب متخصص‌ها»، همین فکره توی شبکه‌ی عصبی. Expert یعنی متخصص. به‌جای یه شبکه‌ی بزرگ که برای هر ورودی کامل کار کنه، چند شبکه‌ی کوچیک‌تر داریم و یه پذیرش، که بهش مسیریاب یا Router می‌گن، برای هر ورودی تعیین می‌کنه کدوم‌ها کار کنن.

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

کجای بلوک

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

توجه دست نمی‌خوره. شبکه‌ی پیش‌خور، که یه دونه بود، چند تا می‌شه، مثلا ۸ تا یا ۶۴ تا، و یه مسیریاب کوچیک جلوشون میاد. چرا شبکه‌ی پیش‌خور؟ چون بیشتر پارامترهای یه ترنسفورمر، معمولا حدود دو سوم، همون‌جاست، و چون هر تکه جدا ازش رد می‌شه، راحت می‌شه هر تکه رو به یه جای جدا فرستاد. خیلی از مدل‌ها این کار رو توی همه‌ی بلوک‌ها می‌کنن، و بعضی یکی‌درمیون، یه بلوک معمولی و یه بلوک با متخصص.

مسیریاب

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

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

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

یکی یا دو تا

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

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

ترکیب خروجی‌ها

وقتی دو متخصص کار کردن، دو تا خروجی داریم. این دو تا با وزن جمع می‌شن، و وزنشون همون احتمالیه که مسیریاب داده؛ معمولا اول دوباره طوری مقیاس می‌شن که جمعشون یک بشه. توی مثال سیب، ۴۰ و ۲۵ می‌شن حدودا ۶۲ و ۳۸ درصد، و خروجی نهایی ۶۲ درصد از متخصص سه و ۳۸ درصد از متخصص شش‌ه.

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

پارامتر کل و پارامتر فعال

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

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

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

چرا ارزون‌تره

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

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

چرا حافظه کم نمی‌شه

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

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

تعادل بار

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

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

ضرر کمکی

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

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

ظرفیت و جا نشدن

برای این‌که کارت گرافیک بتونه همه رو با هم و منظم حساب کنه، معمولا از قبل تعیین می‌شه هر متخصص توی هر دسته حداکثر چند تکه بگیره. به این ظرفیت متخصص می‌گن. اگه ۸ متخصص و ۸۰۰ تکه داشته باشیم، سهم برابر ۱۰۰ تکه‌ست، و ظرفیت رو معمولا یه کم بیشتر، مثلا ۱٫۲۵ برابر، یعنی ۱۲۵ تکه می‌ذارن. به اون ۱٫۲۵ ضریب ظرفیت می‌گن:

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

نویز

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

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

پایداری

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

پژوهش ۲۰۲۲ یه جریمه‌ی کوچیک دیگه پیشنهاد داد که بهش z-loss می‌گن؛ اندازه‌ی کلی امتیازهای مسیریاب رو کوچیک نگه می‌داره، بی این‌که روی این‌که کدوم انتخاب بشه زیاد اثر بذاره. یه ترفند دیگه هم اینه که حساب مسیریاب، حتی وقتی بقیه‌ی مدل با دقت کم حساب می‌شه، با دقت کامل انجام بشه، چون خیلی کوچیکه و هزینه‌ای نداره.

متخصص‌ها روی چی تخصص دارن

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

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

متخصص‌های ریز و متخصص مشترک

یه پژوهش ۲۰۲۴ دو تا تغییر پیشنهاد داد که الان خیلی رایجه. اولی، متخصص‌های ریزتر؛ به‌جای ۸ متخصص بزرگ، مثلا ۶۴ متخصص که هر کدوم یک هشتم اندازه‌ان، و به‌جای ۲ تا، ۸ تاشون برای هر تکه روشن می‌شن. پارامتر کل و فعال تقریبا همونه، ولی ترکیب‌های ممکن خیلی بیشتره، و هر متخصص می‌تونه روی یه چیز باریک‌تر تمرکز کنه:

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

انتخاب از طرف متخصص

تا این‌جا هر تکه متخصص‌هاش رو انتخاب می‌کرد. یه پژوهش ۲۰۲۲ برعکسش رو امتحان کرد؛ هر متخصص از بین همه‌ی تکه‌های دسته، چند تکه‌ای که بیشترین امتیاز رو باهاش دارن انتخاب می‌کنه. چون هر متخصص دقیقا به اندازه‌ی ظرفیتش برمی‌داره، تعادل کامل خود به خود درست می‌شه و ضرر کمکی لازم نیست.

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

تعادل بی ضرر کمکی

ضرر کمکی یه عیب داره؛ یه هدف دوم به مدل تحمیل می‌کنه که با هدف اصلیش، یعنی پیش‌بینی خوب، کمی دعوا داره. یه پژوهش ۲۰۲۴ راه دیگه‌ای پیشنهاد داد؛ برای هر متخصص یه عدد کوچیک، یعنی اریب یا Bias، که فقط موقع انتخاب به امتیازش اضافه می‌شه، نه موقع وزن دادن به خروجی.

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

ساختن از مدل متراکم

آموزش یه مدل با متخصص از صفر گرونه. یه راه میون‌بر، که یه پژوهش ۲۰۲۲ نشون داد، اینه که از یه مدل معمولی آموزش‌دیده شروع کنیم. شبکه‌ی پیش‌خور هر بلوک رو مثلا ۸ بار کپی می‌کنیم، هر کپی می‌شه یه متخصص، یه مسیریاب تازه اضافه می‌کنیم، و آموزش رو ادامه می‌دیم.

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

پخش روی چند کارت

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

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

موقع اجرا

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

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

تنظیم دقیق

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

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

در برابر مدل متراکم

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

کی کدوم؟ اگه حساب گرون‌ترین چیزه، مثل آموزش مدل خیلی بزرگ یا سرویس دادن به کلی آدم، متخصص‌ها برنده‌ان. اگه حافظه محدودترین چیزه، مثل اجرا روی یه کارت تنها، یا سادگی مهمه، مدل متراکم انتخاب بهتریه. به همین دلیل، کنار مدل‌های بزرگ با متخصص، هنوز کلی مدل کوچیک‌تر متراکم ساخته می‌شه.

از کجا اومد

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

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

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

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

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

تمرین

این چهار تا رو اول خودتون حساب کنید. یک، مدلی با ۱۶ متخصص ۲ میلیاردی و ۴ میلیارد پارامتر بقیه، که هر تکه به ۲ متخصص می‌ره؛ پارامتر کل و فعال؟ دو، همون مدل با دو بایت برای هر عدد، چقدر حافظه می‌خواد؟ سه، ۸ متخصص، ۱۶۰۰ تکه، ضریب ظرفیت ۱٫۵؛ ظرفیت هر متخصص؟ چهار، اگه ۳۰۰ تکه بخوان برن پیش یه متخصص، چند تا انداخته می‌شن؟

جواب‌ها. اولی، کل ۴ به‌علاوه‌ی ۳۲، یعنی ۳۶ میلیارد، و فعال ۴ به‌علاوه‌ی ۴، یعنی ۸ میلیارد. دومی، ۳۶ میلیارد ضرب در دو بایت، یعنی حدود ۷۲ گیگابایت، چون همه‌ی متخصص‌ها باید توی حافظه باشن. سومی، سهم برابر ۲۰۰، ضرب در ۱٫۵، یعنی ۳۰۰. چهارمی، هیچی؛ ظرفیت دقیقا ۳۰۰ تاست. اگه ۳۵۰ تا بودن، ۵۰ تا انداخته می‌شدن.

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

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

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

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

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

۱۵ پرسش

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

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

درس بعد