Memory Bank
تعلّم ما بنك الذاكرة في التعلّم العميق. استكشف كيف تخزّن بنوك الذاكرة التضمينات للتعلّم التبايني وتتبع الأجسام وفهم الفيديو.
بنك الذاكرة هو بنية بيانات تُستخدم في خوارزميات تعلّم الآلة لتخزين المعلومات من التكرارات السابقة أو العينات المُعالجة والرجوع إليها، مما يفصل بفعالية سعة ذاكرة النموذج عن قيوده الحسابية الفورية. في سياق التعلم العميق (DL)، يعمل بنك الذاكرة عادةً كمستودع لـالتضمينات أو متجهات السمات. يتيح ذلك للنموذج مقارنة الإدخال الحالي بسجل واسع من الإدخالات السابقة من دون الحاجة إلى إعادة معالجة كل تلك البيانات أو الاحتفاظ بها جميعًا في ذاكرة الوصول العشوائي (RAM) النشطة في الوقت نفسه. ومن خلال الاحتفاظ بمخزن مؤقت للتمثيلات، يمكن للنماذج التعلم من سياق أوسع، مما يحسن الأداء في المهام التي تتطلب اتساقًا طويل الأمد أو مقارنة بمجموعات بيانات كبيرة.
آلية عمل بنك الذاكرة#
تتمثل الوظيفة الأساسية لبنك الذاكرة في توسيع نطاق المعلومات المتاحة إلى ما يتجاوز حجم الدفعة الحالية. أثناء التدريب، ومع تدفق البيانات عبر الشبكة العصبية، تُدفَع تمثيلات السمات الناتجة إلى البنك. وإذا بلغ البنك سعته القصوى، فعادةً ما تُزال أقدم السمات لإفساح المجال للجديدة، وهي عملية تُعرف باسم قائمة الوارد أولًا، الصادر أولًا (FIFO).
تكتسب هذه الآلية أهمية خاصة لأن ذاكرة GPU محدودة. فمن دون بنك ذاكرة، ستتطلب مقارنة صورة واحدة بمليون صورة أخرى حجم دفعة يستحيل ملاءمته على الأجهزة القياسية. أما مع بنك الذاكرة، فيمكن للنموذج تخزين متجهات خفيفة الوزن لتلك الصور المليون والرجوع إليها بكفاءة باستخدام تقنيات البحث عن التشابه، مثل حاصل الضرب النقطي أو التشابه الجيبي.
التطبيقات الواقعية#
أصبحت بنوك الذاكرة عنصرًا أساسيًا في العديد من سير عمل الرؤية الحاسوبية (CV) واللغة الطبيعية المتقدمة:
- التعلم التبايني (التعلم ذاتي الإشراف): يتمثل أحد أشهر تطبيقاته في التعلم التبايني، وتحديدًا في خوارزميات مثل التباين الزخمي (MoCo). يتمثل الهدف هنا في تعليم النموذج التمييز بين صورة معينة والعديد من العينات «السلبية» (الصور المختلفة). يخزن بنك الذاكرة آلاف التمثيلات للعينات السلبية، مما يتيح للنموذج تعلم سمات متينة من دون الحاجة إلى بيانات تدريب موسومة. وللاطلاع على التفاصيل التقنية المتعمقة، يرجع الباحثون غالبًا إلى ورقة MoCo التي أشاعت هذا النهج.
- تتبع الكائنات طويل الأمد: في تحليل الفيديو، قد يحجب عائقٌ مؤقتًا كائنًا ما (مثل سيارة أو شخص). وقد تفقد أدوات التتبع القياسية هوية الكائن (ID) أثناء هذا الحجب. وتستخدم أدوات التتبع المتقدمة بنك ذاكرة لتخزين السمات البصرية للكائنات التي اكتُشفت سابقًا. وعندما يظهر الكائن مجددًا، يستعلم النظام من البنك لإعادة إسناد المعرّف الصحيح (ID). ويستفيد المستخدمون الذين يعتمدون على Ultralytics YOLO26 في تتبع الكائنات من منطق داخلي مماثل يحافظ على اتساق الهوية عبر الإطارات.
- فهم الفيديو: للتعرف على الأفعال التي تمتد لعدة ثوانٍ أو دقائق، تحتاج النماذج إلى سياق زمني. يعمل بنك الذاكرة كمخزن مؤقت للإطارات أو المقاطع السابقة، مما يتيح للشبكة «تذكّر» ما حدث في بداية الفيديو أثناء معالجة نهايته. ويُعد ذلك أمرًا بالغ الأهمية للتعرف الدقيق على الأفعال.
التمييز بين المفاهيم ذات الصلة#
من المفيد التمييز بين بنك الذاكرة ومفاهيم التخزين والمعالجة الأخرى الواردة في المسرد:
- بنك الذاكرة مقابل قاعدة بيانات المتجهات: يخزن كلاهما التضمينات لاسترجاعها. إلا أن بنك الذاكرة يكون عادةً بنية مؤقتة داخل الذاكرة تُستخدم ديناميكيًا أثناء التدريب أو الاستدلال النشط لجلسة واحدة من جلسات النموذج. أما قاعدة بيانات المتجهات (مثل تلك المستخدمة في RAG) فهي حل تخزين دائم وقابل للتوسع، مصمم للاستمرار إلى أجل غير مسمى وخدمة تطبيقات متعددة.
- بنك الذاكرة مقابل نافذة السياق: تحدد نافذة السياق (وهي شائعة في Transformers) الحد الأقصى لطول تسلسل الإدخال الذي يعالجه النموذج دفعة واحدة (مثل 32k من الرموز). أما بنك الذاكرة فهو مخزن مؤقت خارجي يخزن تمثيلات مضغوطة خارج نافذة المعالجة النشطة، مما يتيح نظريًا عمق ذاكرة لا نهائيًا، كما هو الحال في بنيات مثل Transformer-XL.
- بنك الذاكرة مقابل حجم الدفعة: يحدد حجم الدفعة عدد العينات التي تُعالج بالتوازي لتحديثات التدرج. ويزيد بنك الذاكرة العدد الفعلي للعينات التي يستطيع النموذج «رؤيتها» لأغراض المقارنة، من دون زيادة التكلفة الحسابية للتمريرين الأمامي والخلفي.
مثال على الشيفرة: محاكاة بنك للسمات#
يوضح مقتطف 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 مركزًا موحدًا لتنظيم البيانات، وتتبع التجارب، ونشر النماذج بكفاءة. وتُعد إدارة تعقيدات تخزين السمات واسترجاعها أمرًا ضروريًا للانتقال من الذكاء الاصطناعي (AI) التجريبي إلى أنظمة إنتاج متينة.









