بنك الذاكرة هو بنية بيانات تُستخدم في خوارزميات التعلم الآلي لتخزين المعلومات من التكرارات السابقة أو العينات المعالجة والرجوع إليها، مما يؤدي إلى فصل سعة ذاكرة النموذج بشكل فعال عن قيوده الحسابية المباشرة . في سياق التعلم العميق (DL)، يعمل بنك الذاكرة عادةً كمستودع للتضمينات أو متجهات الميزات. وهذا يسمح للنموذج بمقارنة المدخلات الحالية مع سجل واسع من المدخلات السابقة دون الحاجة إلى إعادة معالجة أو الاحتفاظ بجميع تلك البيانات في ذاكرة الوصول العشوائي النشطة (RAM) في وقت واحد. من خلال الحفاظ على مخزن مؤقت للتمثيلات، يمكن للنماذج التعلم من سياق أوسع، مما يحسن الأداء في المهام التي تتطلب اتساقًا طويل الأمد أو مقارنة مع مجموعات بيانات كبيرة.
تتمثل الوظيفة الأساسية لبنك الذاكرة في توسيع نطاق المعلومات المتاحة بما يتجاوز حجم الدفعة الحالية . أثناء التدريب، مع تدفق البيانات عبر الشبكة العصبية، يتم دفع تمثيلات الميزات الناتجة إلى البنك. إذا وصل البنك إلى سعته القصوى ، فعادةً ما تتم إزالة الميزات الأقدم لإفساح المجال للميزات الجديدة، وهي عملية تُعرف باسم قائمة الانتظار "الأول يدخل، الأول يخرج" (FIFO).
هذه الآلية مهمة بشكل خاص لأن GPU محدودة. بدون بنك ذاكرة ، فإن مقارنة صورة واحدة بمليون صورة أخرى تتطلب حجم دفعة لا يمكن أن يتناسب مع الأجهزة القياسية . مع وجود بنك ذاكرة، يمكن للنموذج تخزين متجهات خفيفة الوزن لتلك الملايين من الصور والرجوع إليها بكفاءة باستخدام تقنيات البحث عن التشابه، مثل المنتج القياسي أو تشابه جيب التمام.
أصبحت بنوك الذاكرة حجر الزاوية في العديد من عمليات الرؤية الحاسوبية (CV) واللغة الطبيعية المتقدمة:
من المفيد التمييز بين بنك الذاكرة ومفاهيم التخزين والمعالجة الأخرى الموجودة في المسرد:
ما يلي Python يوضح المقتطف مفهوم بنك الذاكرة "الأول يدخل، الأول يخرج"
(FIFO) باستخدام torch. غالبًا ما تُستخدم هذه البنية للحفاظ على سجل متجدد لمتجهات الميزات
أثناء حلقات التدريب المخصصة أو مهام الاستدلال المعقدة.
import torch
# Initialize a memory bank (Capacity: 100 features, Vector Dim: 128)
# In a real scenario, these would be embeddings from a model like YOLO26
memory_bank = torch.randn(100, 128)
# Simulate receiving a new batch of features (e.g., from the current image batch)
new_features = torch.randn(10, 128)
# Update the bank: Enqueue new features, Dequeue the oldest ones
# This maintains a fixed size while keeping the memory 'fresh'
memory_bank = torch.cat([memory_bank[10:], new_features], dim=0)
print(f"Updated Memory Bank Shape: {memory_bank.shape}")
# Output: Updated Memory Bank Shape: torch.Size([100, 128])
على الرغم من قوة بنوك الذاكرة، إلا أنها تطرح تحدي "انحراف التمثيل". نظرًا لأن شبكة التشفير تتغير قليلاً مع كل خطوة تدريب، فقد تكون الميزات المخزنة في البنك منذ 100 خطوة "قديمة" أو غير متسقة مع حالة النموذج الحالية. تساعد تقنيات مثل استخدام مشفر الزخم (متوسط تحديث بطيء للنموذج) في التخفيف من هذه المشكلة.
بالنسبة للفرق التي تسعى إلى إدارة إصدارات مجموعات البيانات ونماذج الأرتفات التي تستخدم هذه التقنيات المتقدمة، توفر Ultralytics مركزيًا لتنظيم البيانات وتت track التجارب ونشر النماذج بكفاءة. تعد إدارة تعقيد تخزين الميزات واسترجاعها أمرًا ضروريًا للانتقال من الذكاء الاصطناعي التجريبي إلى أنظمة إنتاج قوية .