Memory Bank
يخزّن بنك الذاكرة التضمينات من الدفعات أو الإطارات أو الصور المرجعية السابقة، ليتمكن النموذج من مقارنة المدخلات الجديدة بعدد أكبر بكثير من الأمثلة مما تتيحه دفعة واحدة.
بنك الذاكرة مخزن لمتجهات السمات، أو التضمينات، التي حسبها النموذج سابقًا، ويُحتفظ بها لمقارنة المدخلات الجديدة بأمثلة أكثر بكثير مما تتسع له دفعة واحدة أو تمريرة أمامية واحدة. وتأتي المتجهات المخزنة، بحسب الطريقة، من دفعات تدريب سابقة أو إطارات فيديو سابقة أو مجموعة مرجعية من الصور العادية، ويُستعلم عن البنك بعمليات بحث عن التشابه أو بالانتباه، ويُحدَّث عند ورود متجهات جديدة. وتُعد بنوك الذاكرة أساسية في ثلاثة مجالات من الرؤية الحاسوبية: التعلم التبايني، حيث توفر آلاف الأمثلة السلبية في كل خطوة؛ وتقسيم الفيديو والتتبّع، حيث تتذكر كيف بدا الجسم في الإطارات السابقة؛ واكتشاف الحالات الشاذة، حيث تحفظ هيئة البيانات العادية.
بنوك الذاكرة في التعلم التبايني#
يدرّب التعلّم الذاتي الإشراف التبايني مُشفّرًا على تقريب التمثيلين الناتجين عن منظورين للصورة نفسها وإبعاد تمثيلات الصور الأخرى عنهما، وعادةً ما توفّر زيادة عدد الأمثلة السلبية إشارة تدريب أفضل. وتتطلب المقارنة مع عدد أكبر من الصور عادةً حجم الدفعة أكبر، لكن ذاكرة GPU تحدّ من حجم الدفعة الممكن. وقد قدّم Zhirong Wu وزملاؤه بنك الذاكرة لهذا الغرض في بحث تعلّم السمات غير الخاضع للإشراف عبر التمييز غير المعلمي للعينات في CVPR 2018: احتفظ بنك الذاكرة بمتجه سمات ذي 128 بُعدًا لكل صورة من صور التدريب البالغ عددها 1.28 مليون صورة في ImageNet، وحدّث كل مدخل كلما ظهرت الصورة المرتبطة به مجددًا، وسحب آلاف العينات السلبية من بنك الذاكرة في كل خطوة. ولأن إصدارات أقدم من المشفّر كانت تكتب هذه المدخلات، تقادمت السمات المخزنة وأصبحت غير متسقة مع النموذج الحالي.
عالجت طريقة التباين بالزخم (MoCo)، التي ابتكرها Kaiming He وزملاؤه في Facebook AI Research، هذه المشكلة باستخدام قائمة انتظار ومُشفّر ثانٍ. ويحتفظ البنك بمفاتيح أحدث الدفعات، وعددها الافتراضي 65,536، مضيفًا كل دفعة جديدة وحاذفًا الأقدم. وتأتي المفاتيح من مُشفّر زخم تتبع أوزانه أوزان المُشفّر الرئيسي ببطء؛ إذ تُحدّث لتساوي 0.999 من قيمتها القديمة مضافًا إليها 0.001 من أوزان المُشفّر الرئيسي، وبذلك تظل المفاتيح المكتوبة في خطوات مختلفة متسقة بعضها مع بعض.
بنوك الذاكرة في تقسيم الفيديو والتتبّع#
في الفيديو، يتيح بنك الذاكرة للنموذج التعامل مع الاحتجاب وتغير المظهر بالرجوع إلى الإطارات السابقة. خزّنت شبكات الذاكرة المكانية الزمنية (STM) سمات المفاتيح والقيم للإطارات السابقة مع أقنعتها، وقسّمت كل إطار جديد من خلال توجيه الانتباه إليها؛ ووسّعت XMem ذلك لتشمل مقاطع الفيديو الطويلة بذاكرتين منفصلة قصيرة وطويلة الأجل. يحتفظ SAM 2 من Meta ببنك ذاكرة للإطارات التي وجّهها المستخدم وأحدث الإطارات، ويكيّف انتباه الذاكرة سمات كل إطار جديد وفقًا لها؛ وهكذا يتبع القناع جسمًا يغادر مجال الرؤية ثم يعود إليه. وفي حزمة Ultralytics، يوجّه SAM 2 الانتباه افتراضيًا إلى الإطارات الموجّهة وأحدث 6 إطارات، ويضيف SAM2DynamicInteractivePredictor حالة جسم صورة موجّهة إلى بنك الذاكرة عند استدعائه باستخدام update_memory=True، ثم يقسّم الصور اللاحقة بالاستناد إلى ما خزّنه.
تستخدم متتبعات الأجسام المتعددة الفكرة نفسها في إعادة التعرّف: يحتفظ DeepSORT بمعرض يضم أحدث 100 واصف للمظهر لكل مسار، ويطابق الاكتشافات الجديدة بالمسار الذي تكون واصفاته المخزنة الأقرب.
بنوك الذاكرة لاكتشاف الحالات الشاذة#
يبني PatchCore، الذي قدّمه Karsten Roth وزملاؤه في CVPR 2022، بنك ذاكرة لسمات الرقع التي تستخرجها شبكة CNN مدرّبة مسبقًا على ImageNet من صور منتجات خالية من العيوب. وتُقيّم رقعة الاختبار بحسب بعدها عن أقرب سمة مخزنة، وتكون درجة الصورة هي أسوأ درجة للرقع؛ لذا تبرز أي رقعة تختلف عن جميع الرقع العادية. ويُبقي أخذ العينات الفرعي لمجموعة جوهرية بطريقة جشعة على نسبة صغيرة فقط من السمات مع الحفاظ على تغطية انتشارها، وحققت الطريقة AUROC على مستوى الصورة يصل إلى 99.6% في معيار MVTec AD الصناعي لـاكتشاف العيوب.
يطبّق مثال PyTorch هذا النهج نفسه على أرقام مكتوبة بخط اليد بحجم 8×8، مع استخدام وحدات البكسل الخام سماتٍ: تشكّل 100 صورة للرقم 3 بنك الذاكرة، ويُعدّ كل رقم آخر حالة شاذة:
import torch
from sklearn.datasets import load_digits
from sklearn.metrics import roc_auc_score
X, y = load_digits(return_X_y=True)
X, y = torch.tensor(X / 16, dtype=torch.float32), torch.tensor(y)
normal = X[y == 3] # images of the digit 3 play the role of defect-free parts
memory_bank = normal[:100] # memory bank: stored features of 100 normal images
test = torch.cat([normal[100:], X[y != 3]]) # unseen 3s plus every other digit as anomalies
is_anomaly = torch.cat([torch.zeros(len(normal) - 100), torch.ones(len(X) - len(normal))])
# Greedy coreset: repeatedly keep the stored feature farthest from everything kept so far
coreset = [0]
distance = torch.cdist(memory_bank, memory_bank[:1])[:, 0]
for _ in range(9):
coreset.append(int(distance.argmax()))
distance = torch.minimum(distance, torch.cdist(memory_bank, memory_bank[coreset[-1:]])[:, 0])
for name, bank in [("Full memory bank, 100 entries", memory_bank), ("Coreset, 10 entries", memory_bank[coreset])]:
scores = torch.cdist(test, bank).min(dim=1).values # anomaly score: distance to the nearest stored feature
print(f"{name}: AUROC {roc_auc_score(is_anomaly, scores):.3f}")في صور الاختبار البالغ عددها 1,697، يفصل بنك الذاكرة الكامل بين صور الرقم 3 البالغ عددها 83، التي لم تظهر سابقًا، وبين الأرقام الأخرى، محققًا مساحة تحت منحنى ROC (AUC) مقدارها 0.984؛ أما مجموعة الجوهر ذات المدخلات العشرة فتحقق 0.982، محتفظةً بمعظم جودة الاكتشاف باستخدام عُشر الذاكرة وعمليات البحث.
بنك الذاكرة والمفاهيم ذات الصلة#
- قاعدة بيانات المتجهات: تخزّن التضمينات باستمرار وتوفر البحث عن التشابه لتطبيقات عديدة. أما بنك الذاكرة فيوجد داخل حلقة تدريب نموذج واحد أو استدلاله، عادةً في ذاكرة GPU، ويُستبدل محتواه أثناء تشغيل النموذج.
- نافذة السياق: الرموز التي يوجّه إليها المحوّل الانتباه في تمريرة واحدة. ويحتفظ بنك الذاكرة بمتجهات خارج تلك النافذة، من دفعات أو إطارات أو صور أخرى.
- Transformer-XL: يخزّن الحالات المخفية لمقطع النص السابق بوصفها ذاكرة يوجّه المقطع التالي انتباهه إليها؛ أي بنك ذاكرة للتنشيطات يوسّع نطاق نموذج اللغة إلى ما يتجاوز نافذة واحدة.
- التنقيب عن الأمثلة السلبية الصعبة: يختار الأمثلة السلبية الأكثر إرباكًا للتدريب. ويوفر بنك الذاكرة مجموعة كبيرة من الأمثلة السلبية التي يمكن الاختيار منها.
- الذاكرة العرضية: مخزن للتجارب السابقة يُسترجع لتوجيه القرارات لدى وكلاء الذكاء الاصطناعي وفي التعلم المعزز. أما بنوك الذاكرة فتخزّن متجهات لحسابات النموذج نفسه، مثل الأمثلة السلبية أو الإطارات السابقة أو الرقع العادية.










