ترکیب متخصصان

**ترکیب متخصصان**  یک تکنیک یادگیری ماشینی است که در آن از چندین شبکه متخصص (یادگیرنده) به منظور تقسیم‌بندی یک فضای مسئله، به مناطق همگن استفاده می شود.  تفاوت آن با تکنیک‌های یادگیری گروهی در این است که در MoE بر روی هر ورودی، تنها یک یا چند مدل متخصص اجرا می‌شوند، برخلاف تکنیک‌های گروهی، که همه مدل‌ها بر روی همه ورودی‌ها اجرا می‌شوند.

## نظریه پایه
ترکیب متخصصان، همیشه دارای موارد زیر است. این عوامل متفاوت از هم ساخته و نهایتاً ترکیب می‌شوند.

* متخصصان f_1, ..., f_n را داریم، که همه آنها ورودی یکسان x را دریافت می کنند، و خروجی‌های f_1(x), ..., f_n(x) را تولید می‌کند.
* یک تابع وزن‌دهی واحد (با نام مستعار تابع دروازه) w وجود دارد، که x را به عنوان ورودی دریافت کرده و بردار خروجی‌های (w(x)_1, ..., w(x)_n) را تولید می کند.
* \theta = (\theta_0, \theta_1, ..., \theta_n) مجموعه ای از پارامترها است. پارامتر \theta_0 برای وزن‌دهی تابع به کار می‌رود.
* ترکیب متخصصان با داشتن ورودی x، با توجه به وزن های w(x)_1, ..., w(x)_n، مقادیر f_1(x), ..., f_n(x) را تجمیع کرده و یک خروجی مرکب تولید می کند.

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

### شبکه متا-پی
**شبکه متا-پی**، که توسط همپشایر و وایبل ارائه شده است، از f(x) = \sum_i w(x)_i f_i(x) به عنوان تابع خروجی استفاده می‌کند. آموزش این مدل با اعمال گرادیان کاهشی بر روی افت خطای میانگین مربع L := \frac 1N \sum_k \|y_k - f(x_k)\|^2 انجام می‌شود. متخصصان می‌توانند هر تابع دلخواهی باشند.

نویسندگان مقاله در انتشار اولیه آن، مسئله طبقه‌بندی واج‌ها در سیگنال گفتاری 6 سخنران مختلف ژاپنی، شامل 2 زن و 4 مرد، را حل کردند. آنها 6 متخصص را آموزش دادند که هر کدام یک «شبکه عصبی با تأخیر زمانی» (در اصل یک شبکه کانولوشن چندلایه بر روی طیف‌نگار mel ) بودند. سپس دریافتند که ترکیب متخصصان به‌دست آمده، 5 متخصص را به 5 سخنران اختصاص داده است، اما گوینده ششم (مرد) متخصص اختصاصی ندارد. در عوض صدای او توسط ترکیب خطی متخصصان مرتبط با 3 سخنران مرد دیگر طبقه‌بندی شده است.

### ترکیب‌های تطبیقی از متخصصان محلی
**ترکیب تطبیقی متخصصان محلی**  از یک مدل ترکیبی گاوسی استفاده می کند. هر متخصص یک توزیع گاوسی را پیش‌بینی می‌کند و ورودی را کاملاً نادیده می‌گیرد. به بیان دقیق‌تر، متخصص i-ام پیش‌بینی می‌کند که خروجی y \sim N(\mu_i, I) است، به طوری که \mu_i یک پارامتر آموزش‌پذیر است. تابع وزن‌دهی یک تابع بیشینه هموار خطی  است:w(x)_i = \frac{e^{k_i^T x + b_i}}{\sum_j e^{k_j^T x + b_j}}ترکیب متخصصان پیش‌بینی می‌کند که خروجی بر اساس تابع توزیع چگالی احتمال تولید می‌شود:f_\theta(y|x) 
= \ln\left[\sum_i \frac{e^{k_i^T x + b_i}}{\sum_j e^{k_j^T x + b_j}} N(y | \mu_i, I)\right] 
= \ln\left[(2\pi)^{-d/2} \sum_i \frac{e^{k_i^T x + b_i}}{\sum_j e^{k_j^T x + b_j}} e^{-\frac 12 \|y-\mu_i\|^2}\right]این تابع با روش تخمین حداکثر احتمال، یعنی گرادیان صعودی بر روی f(y|x) آموزش می‌بیند. گرادیان برای متخصص i -ام به قرار زیر خواهد بود:\nabla_{\mu_i} f_\theta(y|x) = 
\frac{w(x)_i N(y|\mu_i, I)}{\sum_j w(x)_j N(y|\mu_j, I)}\; (y-\mu_i) و گرادیان، برای تابع وزنی به قرار زیر است:\nabla_{[k_i, b_i]} f_\theta(y|x) = \begin{bmatrix}x\\ 1\end{bmatrix} \frac{w(x)_i}{\sum_j w(x)_j N(y|\mu_j, I)} 
(f_{i}(x)- f_\theta(y|x))تابع وزن‌دهی برای هر جفت ورودی-خروجی (x, y) تغییر می‌کند تا وزن همه متخصصانی که بالاتر از میانگین کار کرده‌اند افزایش یابد و وزن همه متخصصانی که کمتر از میانگین کار کرده‌اند کاهش یابد. با این کار تابع وزن‌دهی تشویق می‌شود تا یاد بگیرد فقط متخصصانی را انتخاب کند که پیش‌بینی‌های درست را برای هر ورودی انجام می‌دهند.

متخصص i -ام برای نزدیک‌تر کردن پیش‌بینی خود به y تغییر می‌کند. میزان این تغییر متناسب با w(x)_i N(y|\mu_i, I) است. در واقع این کار یک استنباط بیزی است. با داشتن ورودی x، احتمال پیشین که متخصص i پاسخ درست بدهد w(x)_i است. و N(y|\mu_i, I) احتمال شاهد y است.

بنابراین، \frac{w(x)_i N(y|\mu_i, I)}{\sum_j w(x)_j N(y|\mu_j, I)} احتمال پسین برای متخصص i-ام است. در نتیجه نرخ تغییر برای متخصص i-ام متناسب با احتمال پسین آن است.

به بیان دیگر می‌توان گفت: از متخصصانی که در گذشته، متخصصان خوبی برای مشورت به نظر می‌رسیدند، خواسته می‌شود تا بر روی داده ها آموزش ببینند. متخصصانی که در گذشته برای مشورت مناسب نبودند، رها شده‌اند.

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

### ترکیب متخصصان سلسله مراتبی
بندانگشتی|لایه MoE - اثر دروازه بر روی ورودی و توابع
**ترکیب متخصصان سلسله مراتبی**  از چندین سطح مختلف دروازه در یک [ساختار] درخت استفاده می‌کند. هر دروازه یک توزیع احتمال جهت اعمال بر روی سطح بعدی دروازه‌ها است. متخصصان روی [گره های] برگ درخت هستند. این ساختار بسیار شبیه به درختان تصمیم است.

یک MoE سلسله مراتبی 2 سطحی نوعی به عنوان مثال، یک تابع دروازه ای مرتبه اول w_i، توابع دروازه‌ای مرتبه دوم w_{j|i} و متخصصان f_{j|i} را شامل می‌شود. لذا پیش‌بینی کل \sum_i w_i(x) \sum_j w_{j|i}(x) f_{j|i}(x) خواهد بود.

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

* متخصصان، آموزش می‌بینند تا توضیحاتی را بهبود بخشند، که برای آنها بار زیادی دریافت کرده‌اند
* دروازه‌ها، برای بهبود سهمیه‌بندی و توزیع "بار" آموزش می‌بیند.

با این روش تابع درست‌نمایی لگاریتمی سریعتر از روش گرادیان صعودی می‌تواند همگرا شود. 

انتخاب تابع دروازه‌ای اغلب انتخاب تابعی از نوع یک بیشینه هموار است. به علاوه،  استفاده از توزیع های گاوسی و  استفاده از خانواده توابع نمایی پیشنهاد شده است.

به جای پیاده‌سازی مجموع وزنی از همه متخصصان، در *MoE سخت*،  تنها از متخصص با بالاترین رتبه استفاده می‌شود. به این معنا که، f(x) = f_{\arg\max_i w_i(x)}(x) . با این کار زمان آموزش و استنتاج تسریع می‌شود.

متخصصان می توانند از انواع کلی‌تری از توزیع‌های گاوسی چند‌متغیره استفاده کنند. به عنوان مثال، مقاله  پیشنهاد کرد f_i(y|x) = N(y | A_i x + b_i, \Sigma_i)، که همگی A_i، b_i، و \Sigma_i پارامترهای قابل یادگیری هستند. به بیان دیگر، هر متخصص یاد می‌گیرد که رگرسیون خطی را با استفاده از روش تخمین عدم‌قطعیت قابل‌یادگیری انجام دهد.

می توان در متخصصان متفاوت از توابعی به غیر از توزیع‌های گاوسی استفاده کرد. به عنوان مثال، می‌توان از توزیع لاپلاس،  یا توزیع تی-استیودنت استفاده کرد.  برای طبقه‌بندی باینری نیز، متخصص رگرسیون لجستیک توصیه شده است باf_i(y|x) = \begin{cases}
\frac{1}{1+e^{\beta_i^T x + \beta_{i,0}}}, & y = 0 \\
1-\frac{1}{1+e^{\beta_i^T x + \beta_{i,0}}}, & y= 1
\end{cases}  به طوری که \beta_{i}   و \beta_{i, 0}   پارامترهای قابل یادگیری هستند. با تعمیم این فرمول می‌توان به طبقه‌بندی چندگروهی دست یافت، که با استفاده از متخصصان رگرسیون لجستیک چند جمله‌ای انجام می‌شود. 

## یادگیری عمیق
در بخش قبلی MoE توصیف شد و باید توجه کرد که روش‌های بالا پیش از عصر یادگیری عمیق مورد استفاده قرار می گرفت. در دوره پیش از یادگیری عمیق، MoE کاربردهای دیگری از جمله، در پیاده‌سازی مدل‌های بسیار بزرگتر پیدا کرد. در این کاربرد از MoE به عنوان یک روش ساده برای انجام *[[Conditional computation|محاسبات شرطی]]* بهره می‌بریم. یعنی به جای استفاده از کل مدل، فقط بخش‌هایی از مدل استفاده می‌شود، که متناسب با ورودی انتخاب می‌شوند. 

اولین مقاله‌ای که MoE را برای یادگیری عمیق به کار می‌برد، «یادگیری بازنمایی‌های عامل‌دار در ترکیبی عمیق از متخصصان» (Eigen, Ranzato, Sutskever)  است که پیشنهاد می‌کند از یک شبکه دروازه‌ای متفاوت در هر لایه در یک شبکه عصبی عمیق استفاده شود. به طوری که، هر دروازه یک شبکه بیشینه هموار-خطی-ReLU-خطی، و هر متخصص یک شبکه ReLU-خطی انتخاب شود.

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

* مسیریابی و جهت‌دهی ورودی ها (پرس و جوها) به بهترین متخصصان چگونه انجام بپذیرد‌.

### لایه MoE با دروازه پراکنده
**لایه MoE با پراکندگی دروازه‌**،   که توسط محققان گوگل برین منتشر شده است، از شبکه‌های پیش‌خور به‌ عنوان متخصص و از بیشینه هموار خطی به عنوان دروازه استفاده می‌کند. مشابه پیشنهادهای ارائه شده در بالا برای MoE سخت، به منظور دستیابی به هدف پراکندگی، آنها به جای استفاده از جمع وزنی همه متخصصان، از جمع وزنی k متخصص برتر استفاده می‌کنند. به بیان خاص‌تر، در یک لایه MoE، شبکه‌های پیشخور f_1, ..., f_n و یک شبکه دروازه w وجود دارد . شبکه دروازه توسط رابطه w(x) = \mathrm{softmax}(\mathrm{top}_k(W x + \text{noise}))  تعریف می‌شود. \mathrm{top}_k تابعی است که ورودی های به k واحد برتر را دست نخورده و یکسان نگه می‌دارد، ولی همه ورودی‌های دیگر را به -\infty تغییر می‌دهد. باید به این نکته اشاره کرد که اضافه شدن نویز به تعادل بار کمک می کند.

انتخاب k یک فراپارامتر است که با توجه به کاربرد انتخاب می‌شود. k = 1, 2 مقادیر معمول و کاربردی هستند. با فرض k = 1، این نسخه از شبکه، ترنسفورمر سوئیچی نامیده می شود. 

نویسندگان مقاله برای ارائه نتایج خود، با استفاده از لایه‌های متناوب MoE و LSTM، مجموعه‌ای از مدل‌ها را برای کاربرد به عنوان ترجمه ماشینی آموزش دادند و نتیجه را با مدل‌های عمیق LSTM مقایسه کردند. جدول 3 نشان می دهد که مدل های MoE علیرغم داشتن 30 برابر پارامترهای بیشتر، از زمان محاسبه استنتاج کمتری استفاده می کنند.

Vanilla MoE معمولاً مشکلاتی در تعادل بار دارد: با برخی از متخصصان اغلب مشورت می شود، در حالی که متخصصان دیگر به ندرت یا اصلاً مشورت نمی کنند. برای تشویق گیت به انتخاب هر متخصص با فرکانس برابر (تعادل بار مناسب) در هر دسته، هر لایه MoE دارای دو تابع تلفات کمکی است. این با  به یک تابع تلفات کمکی بهبود یافته است. به طور خاص، اجازه دهید n تعداد متخصصان باشد، سپس برای یک دسته معین از پرس و جوها \{x_1, x_2, ..., x_T\}، ضرر کمکی برای دسته است

### مسیریابی
در MoE با دروازه‌های پراکنده، فقط از k متخصصان برتر پرس و جو می‌شود و خروجی‌های آن‌ها وزن‌دهی و به هم افزوده می‌شود. روش های دیگری نیز وجود دارد. 

در Hash MoE،  مسیریابی توسط یک تابع هش انجام می شود که قبل از شروع یادگیری تثبیت و بدون تغییر در نظر گرفته شده است. به عنوان مثال، اگر مدل یک ترانسفورماتور 4 لایه باشد و ورودی، نشانه‌ای (توکن) متناظر با کلمه "eat" باشد و هش "eat" (1, 4, 2, 3) باشد. آنگاه توکن به متخصص 1 در لایه 1، متخصص 4 در لایه 2، متخصص 2 در لایه و متخصص 3 در لایه 4 هدایت می شود. با وجود سادگی، این روش از لحاظ بازدهی در سطح MoE با دروازه پراکندگی با پارامتر k = 1 است.

در MoE نرم، فرض کنید در هر دسته، هر متخصص می تواند تعداد p پرس و جو را پردازش کند. در نتیجه n\times p پرس و جو وجود دارد که می‌توان به هر دسته تخصیص داد. حال برای هر دسته از پرس و جوهای \{x_1, x_2, ..., x_T\}، لایه MoE نرم، یک آرایه نوعی w_{i, j, k} را محاسبه می کند، به طوری که (w_{i, j, 1}, ..., w_{i, j, T}) توزیع احتمال بر روی پرس و جوها است، و پرس و جو j-ام به متخصص i-ام با رابطه \sum_k w_{i,j,k}x_k محاسبه می‌شود. با این حال، این روش با مدل‌سازی مدل خودهمبسته کار نمی‌کند، زیرا وزن‌ w_{i, j, k} بغیر از خود توکن، به همه توکن‌های دیگر بستگی دارد. 

روش‌های دیگر عبارتند از

* حل مسئله با روش برنامه‌ریزی خطی مقید
* وادار کردن هر متخصص به انتخاب k پرس و جو برتر به انتخاب خودش (به جای اینکه هر پرس و جو k متخصص برتر را انتخاب کند)
* استفاده از یادگیری تقویتی برای آموزش الگوریتم مسیریابی (از آنجایی که انتخاب یک متخصص یک اقدام مجزا است، مانند RL). 

### فاکتور ظرفیت
فرض کنید n متخصص در یک لایه وجود دارند. برای یک دسته معین از پرس و جوی \{x_1, x_2, ..., x_T\}، هر پرس و جو به یک یا چند متخصص هدایت می شود. به عنوان مثال، اگر هر پرس و جو به یک متخصص مانند ترنسفورمر سوئیچی هدایت شود، و اگر تقسیم بار بین متخصصان صورت گرفته باشد، هر متخصص باید به طور متوسط انتظار دریافت T/n از دسته پرس و جوها را داشته باشد. در عمل، متخصصان نمی‌توانند انتظار تعادل بار کامل را داشته باشند: در برخی از دسته پرس و جوها، یک متخصص ممکن است کم کار شود، در حالی که در دسته های دیگر، بیش از حد کار می کند.

تعادل بار از آن جهت اهمیت پیدا می‌کند به بدانیم ورودی‌‌ها به هر لایه نمی‌توانند از آن عبور کرده و به لایه بعدی بروند، تا زمانی که همه متخصص‌ها در همان لایه پرس و جوهایی را که به آنها منتسب شده را به پایان برساند. **فاکتور ظرفیت** به شکل یک محدودیت سخت در تعادل بار ایجاد شده است. فاکتور ظرفیت بدین معنی که: هر متخصص فقط مجاز به پردازش حداکثر تا c \cdot T/n پرس و جوی دسته ای را دارد. در مقاله عملاً مقدار c \in [1.25, 2] نتیجه خوبی به دست داد.

### کاربرد در مدل های ترنسفورمر
لایه‌های MoE در بزرگترین مدل‌های ترنسفورمر استفاده می‌شوند، زیرا که مراحل آموزش و استنباط مدل کامل بسیار پرهزینه است. آنها معمولاً دارای دروازه‌های پراکنده با پراکندگی 1 یا 2 هستند. در مدل‌های ترانسفورماتور، لایه‌های MoE اغلب برای انتخاب لایه‌های پیش‌خور (معمولاً یک شبکه-خطی-ReLU-خطی) استفاده می‌شوند. بدین صورت که پس از توجه چند سر در مسیر هر بلوک ترانسفورماتور ظاهر می‌شوند. به این که با بزرگتر شدن مدل‌ها، لایه‌های پیش‌خور بخش فزاینده‌ای از هزینه محاسبات را به خود اختصاص می‌دهند. به عنوان مثال در مدل Palm-540B حدود 90 درصد پارامترها در لایه های پیشخور آن قرار دارند. 

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

فارغ از مدل‌های زبانی، Vision MoE نیز یک مدل ترنسفورمر با لایه‌های MoE است. نویسندگان مقاله با آموزش یک مدل با 15 میلیارد پارامتر، کاربرد دیگر MoE را نشان دادند.

یک سری از مدل های زبان بزرگ گوگل از MoE استفاده می کردند. GShard از MoE با حداکثر 2 متخصص در هر لایه استفاده می کند. بدین سان که، ابتدا متخصص برتر اول انتخاب می‌شود و متخصص برتر دوم با احتمالی متناسب با وزن محاسبه شده توسط تابع دروازه انتخاب می‌شود. پس از آن، مدل GLaM  که یک مدل زبانی با 1.2 تریلیون پارامتر را رونمایی شد که هر در لایه MoE آن از 2 متخصص برتر (از بین 64 متخصص) استفاده می کرد. ترنسفورمرهای سوئیچی از 1 متخصص برتر در تمام لایه های MoE استفاده می کنند.

NLLB-200 از متا ای‌آی یک مدل ترجمه ماشینی است با پشتیبانی از 200 زبان انسانی.  هر لایه MoE از یک MoE سلسله مراتبی با دو سطح استفاده می کند. در سطح اول، تابع دروازه تصمیم می‌گیرد که از یک لایه پیشخور "به اشتراک گذاشته شده" استفاده کند یا متخصصان. اگر از متخصصان استفاده شود، یک تابع دروازه‌ای دیگر وزن‌ها را محاسبه می‌کند و 2 متخصص برتر را انتخاب می کند. 

مدل‌های زبان بزرگ MoE را می‌توان با تنظیم دستورالعمل برای کارهای پایین دستی سازگار کرد. 

در دسامبر 2023، شرکت میسترال ای‌آی مدل Mixtral 8x7B خود را تحت مجوز آپاچی 2.0 منتشر کرد. این یک مدل زبان MoE با 46.7B پارامتر، 8 متخصص، و پراکندگی دروازه 2 است. آنها همچنین نسخه ای را منتشر کردند که به منظور فرمان‌بری از دستورها تنظیم شده بود. 

در مارس 2024، شرکت  مدل  را منتشر کرد. این یک مدل زبان MoE با 132B پارامتر، 16 متخصص و پراکندگی دروازه 4 است. آنها همچنین نسخه ای را منتشر کردند که برای آموزش زیر تنظیم شده بود. 

## در صورت نیاز به مطالعات بیشتر

* قبل از دوران یادگیری عمیق
** 
** 
** 
** 
* دوران یادگیری عمیق
** 

## مشاهدات بیشتر

* محصول متخصصان
* مدل های مخلوط
* مخلوطی از گاوسیان
* یادگیری گروهی

## پاورقی‌ها


## منابع

رده:الگوریتم‌های یادگیری ماشین