Memory Bank
Erfahre, was eine Memory Bank im Deep Learning ist. Entdecke, wie Memory Banks Embeddings für kontrastives Lernen, Objektverfolgung und Videoverständnis speichern.
Eine Memory Bank ist eine Datenstruktur, die in Algorithmen des maschinellen Lernens verwendet wird, um Informationen aus vergangenen Iterationen oder verarbeiteten Stichproben zu speichern und darauf zu verweisen. Dadurch wird die Speicherkapazität des Modells effektiv von seinen unmittelbaren Rechenbeschränkungen entkoppelt. Im Kontext von Deep Learning (DL) dient eine Memory Bank typischerweise als Ablage für Embeddings oder Merkmalsvektoren. So kann ein Modell die aktuelle Eingabe mit einer umfangreichen Historie vorheriger Eingaben vergleichen, ohne all diese Daten gleichzeitig erneut verarbeiten oder im aktiven Direktzugriffsspeicher (RAM) vorhalten zu müssen. Durch die Aufrechterhaltung eines Puffers mit Repräsentationen können Modelle aus einem breiteren Kontext lernen und ihre Leistung bei Aufgaben verbessern, die langfristige Konsistenz oder Vergleiche mit großen Datensätzen erfordern.
Funktionsweise einer Memory Bank#
Die Hauptfunktion einer Memory Bank besteht darin, die verfügbaren Informationen über die aktuelle Batch-Größe hinaus zu erweitern. Während des Trainings werden die resultierenden Merkmalsrepräsentationen in die Bank eingefügt, sobald Daten das neuronale Netzwerk durchlaufen. Wenn die Bank ihre maximale Kapazität erreicht, werden normalerweise die ältesten Merkmale entfernt, um Platz für neue zu schaffen – ein Prozess, der als First-In-First-Out-Warteschlange (FIFO) bezeichnet wird.
Dieser Mechanismus ist besonders wichtig, da der Speicher der GPU begrenzt ist. Ohne eine Memory Bank würde der Vergleich eines einzelnen Bildes mit einer Million anderer Bilder eine Batch-Größe erfordern, die auf übliche Hardware nicht passen würde. Mit einer Memory Bank kann das Modell kompakte Vektoren dieser Millionen Bilder speichern und mithilfe von Verfahren zur Ähnlichkeitssuche wie Skalarprodukt oder Kosinusähnlichkeit effizient darauf zugreifen.
Anwendungen in der Praxis#
Memory Banks sind zu einem zentralen Bestandteil verschiedener fortgeschrittener Workflows in den Bereichen Computer Vision (CV) und Verarbeitung natürlicher Sprache geworden:
- Kontrastives Lernen (selbstüberwachtes Lernen): Eine der bekanntesten Anwendungen findet sich im kontrastiven Lernen, insbesondere in Algorithmen wie Kontrast mit Impuls (MoCo). Dabei soll das Modell lernen, ein bestimmtes Bild von vielen „negativen“ Stichproben (anderen Bildern) zu unterscheiden. Eine Memory Bank speichert die Repräsentationen Tausender negativer Stichproben, sodass das Modell robuste Merkmale lernen kann, ohne beschriftete Trainingsdaten zu benötigen. Für ausführliche technische Details verweisen Forschende häufig auf das MoCo-Paper, durch das dieser Ansatz populär wurde.
- Langzeitobjektverfolgung: Bei der Videoanalyse kann ein Objekt (etwa ein Auto oder eine Person) vorübergehend durch ein Hindernis verdeckt werden. Standard-Tracker verlieren während dieser Verdeckung möglicherweise die Identität (ID) des Objekts. Fortschrittliche Tracker verwenden eine Memory Bank, um die visuellen Merkmale zuvor erkannter Objekte zu speichern. Wenn das Objekt wieder erscheint, fragt das System die Bank ab, um die korrekte ID wiederherzustellen. Nutzer, die Ultralytics YOLO26 für die Objektverfolgung einsetzen, profitieren von einer ähnlichen internen Logik, die die Konsistenz der Identität über mehrere Bilder hinweg gewährleistet.
- Videoverständnis: Um Handlungen zu erkennen, die sich über mehrere Sekunden oder Minuten erstrecken, benötigen Modelle zeitlichen Kontext. Eine Memory Bank fungiert als Puffer für vergangene Bilder oder Videoclips und ermöglicht es dem Netzwerk, sich beim Verarbeiten des Endes eines Videos daran zu „erinnern“, was an dessen Anfang geschehen ist. Dies ist entscheidend für eine präzise Handlungserkennung.
Verwandte Konzepte unterscheiden#
Es ist hilfreich, die Memory Bank von anderen im Glossar behandelten Konzepten zur Speicherung und Verarbeitung zu unterscheiden:
- Memory Bank im Vergleich zur Vektordatenbank: Beide speichern Embeddings zum Abrufen. Eine Memory Bank ist jedoch typischerweise eine vorübergehende, speicherinterne Struktur, die während des Trainings oder der aktiven Inferenz einer einzelnen Modellsitzung dynamisch verwendet wird. Eine Vektordatenbank (wie sie etwa in RAG eingesetzt wird) ist eine dauerhafte, skalierbare Speicherlösung, die unbegrenzt bestehen und mehrere Anwendungen bedienen soll.
- Memory Bank im Vergleich zum Kontextfenster: Ein Kontextfenster (häufig bei Transformern) legt die maximale Länge der Eingabesequenz fest, die das Modell gleichzeitig verarbeitet (z. B. 32.000 Token). Eine Memory Bank ist ein externer Puffer, der komprimierte Repräsentationen außerhalb des aktiven Verarbeitungsfensters speichert und theoretisch eine unbegrenzte Speichertiefe ermöglicht, wie bei Architekturen wie Transformer-XL.
- Memory Bank im Vergleich zur Batch-Größe: Die Batch-Größe bestimmt, wie viele Stichproben für Gradientenaktualisierungen parallel verarbeitet werden. Eine Memory Bank erhöht die effektive Anzahl der Stichproben, die das Modell zu Vergleichszwecken „sehen“ kann, ohne die Rechenkosten der Vorwärts- und Rückwärtsdurchläufe zu erhöhen.
Codebeispiel: Simulation einer Merkmalsbank#
Das folgende Python-Snippet veranschaulicht das Konzept einer First-In-First-Out-Memory-Bank (FIFO) mithilfe von torch. Diese Struktur wird häufig verwendet, um während benutzerdefinierter Trainingsschleifen oder komplexer Inferenzaufgaben eine fortlaufend aktualisierte Historie von Merkmalsvektoren zu verwalten.
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])Herausforderungen und Überlegungen#
Memory Banks sind zwar leistungsfähig, bringen jedoch die Herausforderung einer „Drift der Repräsentationen“ mit sich. Da sich das Encodernetzwerk mit jedem Trainingsschritt geringfügig verändert, können die vor 100 Schritten in der Bank gespeicherten Merkmale „veraltet“ oder nicht mit dem aktuellen Modellzustand konsistent sein. Verfahren wie die Verwendung eines Momentum-Encoders (eines sich langsam aktualisierenden Mittelwerts des Modells) helfen, dieses Problem zu mildern.
Für Teams, die Datensatzversionen und Modellartefakte verwalten möchten, die diese fortgeschrittenen Verfahren nutzen, bietet die Ultralytics Platform eine zentrale Anlaufstelle zum Organisieren von Daten, Nachverfolgen von Experimenten und effizienten Bereitstellen von Modellen. Die Komplexität der Speicherung und des Abrufs von Merkmalen zu bewältigen, ist entscheidend für den Übergang von experimenteller künstlicher Intelligenz (AI) zu robusten Produktionssystemen.









