اكتشف كيف يعمل Mixture of Depths (MoD) على تحسين كفاءة الذكاء الاصطناعي من خلال توجيه الرموز بشكل ديناميكي. تعرف على كيفية تقليل هذه التقنية لعمليات FLOPs في Ultralytics و LLMs.
في بنى التعلم العميق، تعتبر الكفاءة الحسابية أمراً بالغ الأهمية، خاصة عند معالجة تسلسلات طويلة أو مدخلات عالية الدقة. هناك نهج جديد يوزع موارد الحوسبة ديناميكياً من خلال السماح للشبكة بتحديد أجزاء المدخلات التي تتطلب معالجة كاملة وأجزاء يمكن تجاوزها بأمان في طبقات معينة. تقلل استراتيجية التوجيه الديناميكي هذه من التعقيد الحسابي الإجمالي دون التضحية بقدرة النموذج على التنبؤ أو دقته.
مزيج الأعماق (MoD) هو تقنية معمارية تُطبق بشكل أساسي على بنى المحولات حيث يتعلم النموذج تخطي الحساب ديناميكيًا لرموز معينة في طبقات مختلفة. تعالج المحولات التقليدية كل رمز عبر كل طبقة، سواء كان جزءًا مهمًا من المعلومات أو محتوى حشو. في المقابل، يستخدم نموذج MoD آلية توجيه لتقييم الرموز وتعيين درجة لها. فقط الرموز التي حصلت على أعلى الدرجات — حتى حد السعة المحدد مسبقًا — تمر عبر كتل الحساب الثقيلة، مثل آليات الانتباه أو طبقات التغذية الأمامية الكثيفة . أما الرموز المتبقية فتتجاوز الكتلة عبر الوصلات المتبقية، مما يخلق بشكل فعال "مزيجًا من الأعماق" حيث تخضع الرموز المختلفة لمستويات متفاوتة من عمق المعالجة.
هذه الطريقة، التي شاعت بفضل الأبحاث الحديثة التي أجرتها DeepMind وتم توثيقها بشكل مكثف في مستودع arXiv، تقلل بشكل كبير من إجمالي عدد عمليات النقاط العائمة (FLOPs) المطلوبة أثناء كل من التدريب والاستدلال.
من السهل الخلط بين هذا المفهوم و مزيج الخبراء (MoE). على الرغم من أن كلاهما يستخدم آليات التوجيه، إلا أنهما يحلان مشكلتين مختلفتين:
تجعل القدرة على حساب الميزانية ديناميكيًا هذه التقنية ذات قيمة عالية في مجالات متعددة من الرؤية الحاسوبية ومعالجة اللغة الطبيعية.
فيما يلي PyTorch مفاهيمي PyTorch يوضح كيف يمكن لآلية التوجيه الأساسية تخطي حساب جزء من الرموز المدخلة، محاكاةً سلوك التوجيه العميق.
import torch
import torch.nn as nn
class MixtureOfDepthsBlock(nn.Module):
def __init__(self, d_model, capacity_factor=0.5):
super().__init__()
self.capacity_factor = capacity_factor
self.router = nn.Linear(d_model, 1)
self.heavy_compute = nn.Sequential(nn.Linear(d_model, d_model * 4), nn.GELU(), nn.Linear(d_model * 4, d_model))
def forward(self, x):
# x shape: (batch_size, seq_len, d_model)
seq_len = x.size(1)
capacity = int(seq_len * self.capacity_factor)
# 1. Compute routing scores
scores = self.router(x).squeeze(-1) # Shape: (batch_size, seq_len)
# 2. Identify top-k tokens to process
topk_indices = torch.topk(scores, capacity, dim=1).indices
# 3. Create an output tensor mirroring the input (residual baseline)
output = x.clone()
# 4. Apply heavy computation only to the selected tokens
for b in range(x.size(0)):
selected_tokens = x[b, topk_indices[b]]
processed_tokens = self.heavy_compute(selected_tokens)
output[b, topk_indices[b]] += processed_tokens
return output
# Example usage
dummy_input = torch.randn(2, 64, 128) # Batch=2, Seq=64, Dim=128
mod_block = MixtureOfDepthsBlock(d_model=128, capacity_factor=0.5)
output = mod_block(dummy_input)
print(f"Output shape: {output.shape}") # Expect (2, 64, 128)
من خلال الاستفادة من أطر عمل مثل PyTorch أو TensorFlow، يمكن للمطورين دمج كتل تحسين النماذج المخصصة هذه. علاوة على ذلك، تساعد أدوات مثل Ultralytics الفرق على إدارة بيانات التدريب اللازمة لتدريب هذه الموجهات بدقة، إلى جانب التكامل السلس مع النظم البيئية للمؤسسات مثل Google AI.