المستوى المطلوب: متوسط — محتاج معرفة أساسية بـ Transformers وفكرة الـ feed-forward layer داخل الـ LLM. لو لسه مبتدئ، اقرأ أول مقال عن البنية العامة للموديلات قبل ده.
DeepSeek V3 بـ 671 مليار parameter بيرد على prompt في نفس الوقت اللي بياخده موديل 37 مليار. مش سحر، ده Mixture of Experts. هتفهم في 8 دقايق ليه الـ architecture دي بقت معيار 2026، ازاي تطبقها، وإمتى لازم تتفاداها.
Mixture of Experts: 8 خبراء بدل عقل واحد ضخم
المشكلة باختصار
الـ Dense Transformer التقليدي بيشغّل كل الـ parameters على كل token بيمر في الموديل. لو الموديل 70 مليار parameter، انت بتدفع compute لـ 70 مليار في كل كلمة بتطلع — حتى لو السؤال "السلام عليكم". ده هدر طاقة فعلي وفاتورة GPU بتطلع للسماء على شغل غير محتاج.
MoE بيقسّم الـ feed-forward layer لـ N "خبير" منفصل (8 في Mixtral، 256 في DeepSeek V3). في كل token، router صغير بيختار k خبراء يشتغلوا بس. الباقي بياخد إجازة. النتيجة: موديل بسعة هائلة لكن بتكلفة شغل صغيرة.
تقريب للمبتدئ: عيادة تخصصات
تخيل عيادة فيها 8 دكاترة: قلب، عظام، عيون، جلد، أعصاب، أسنان، أطفال، باطنة. لما المريض بيدخل، موظف الاستقبال (الـ router) بيقرأ شكواه ويوديه للدكتور المناسب. مش معقول كل دكتور يقعد يكشف على كل مريض.
الـ Dense Transformer زي عيادة فيها نفس الـ 8 دكاترة بس كلهم بيكشفوا على كل مريض بالترتيب. التشخيص في الآخر هو هو، بس استهلكت 8 ساعات شغل بدل ساعة. الـ MoE بيختار 2 دكاترة فقط لكل مريض. نفس جودة التشخيص، 25% من الوقت والتكلفة.
دلوقتي بعد ما المثال واضح، نروح للتعريف الرياضي الدقيق.
التعريف العلمي بالظبط
Mixture of Experts تاريخها بيرجع لـ ورقة Jacobs et al. 1991، لكن النسخة المعاصرة في LLMs مبنية على ورقة Shazeer et al. 2017 (Sparsely-Gated Mixture-of-Experts) من Google Brain، وبعدها Switch Transformer من Fedus et al. 2022. الفكرة الرياضية:
- عندك N خبراء، كل واحد عبارة عن feed-forward network مستقل بـ d parameter.
- Router function G(x) بياخد الـ token x ويرجّع توزيع احتمالي على N.
- بنختار أعلى k خبراء فقط (في DeepSeek V3: k=8 من 256 expert + خبير مشترك).
- الـ output النهائي = مجموع موزون لمخرجات الخبراء المختارين.
اقتصاد الـ compute: لو الموديل فيه 671 مليار parameter لكن نختار 37 مليار بس في كل forward pass، التكلفة الفعلية لكل token = 5.5% من حجم الموديل الكامل. بتدفع compute لموديل 37B وبتاخد سعة معرفية لموديل 671B.
الكود الفعلي: MoE في 24 سطر PyTorch
import torch
import torch.nn as nn
import torch.nn.functional as F
class SimpleMoE(nn.Module):
def __init__(self, dim=512, num_experts=8, top_k=2):
super().__init__()
self.num_experts = num_experts
self.top_k = top_k
self.router = nn.Linear(dim, num_experts)
self.experts = nn.ModuleList([
nn.Sequential(
nn.Linear(dim, dim * 4),
nn.GELU(),
nn.Linear(dim * 4, dim),
)
for _ in range(num_experts)
])
def forward(self, x):
logits = self.router(x)
weights, indices = torch.topk(logits, self.top_k, dim=-1)
weights = F.softmax(weights, dim=-1)
output = torch.zeros_like(x)
for i in range(self.top_k):
expert_idx = indices[..., i]
for e in range(self.num_experts):
mask = (expert_idx == e)
if mask.any():
expert_out = self.experts[e](x[mask])
output[mask] += weights[..., i][mask].unsqueeze(-1) * expert_out
return output