Una banca dati è una struttura di dati utilizzata negli algoritmi di apprendimento automatico per memorizzare e fare riferimento alle informazioni provenienti da iterazioni passate o campioni elaborati, separando efficacemente la capacità di memoria del modello dai suoi vincoli computazionali immediati . Nel contesto dell'apprendimento profondo (DL), una banca dati funge tipicamente da archivio per incorporamenti o vettori di caratteristiche. Ciò consente a un modello di confrontare l'input corrente con una vasta cronologia di input precedenti senza dover rielaborare o conservare contemporaneamente tutti quei dati nella memoria ad accesso casuale (RAM) attiva. Mantenendo un buffer di rappresentazioni, i modelli possono apprendere da un contesto più ampio, migliorando le prestazioni in attività che richiedono coerenza a lungo termine o confronti con grandi set di dati.
La funzione primaria di una banca dati è quella di estendere le informazioni disponibili oltre la dimensione attuale del batch. Durante l'addestramento, mentre i dati fluiscono attraverso la rete neurale, le rappresentazioni delle caratteristiche risultanti vengono inserite nella banca dati. Se la banca dati raggiunge la sua capacità massima , le caratteristiche più vecchie vengono solitamente rimosse per fare spazio a quelle nuove, un processo noto come coda First-In, First-Out (FIFO).
Questo meccanismo è particolarmente importante perché GPU è limitata. Senza un banco di memoria, il confronto di una singola immagine con un milione di altre immagini richiederebbe una dimensione di batch impossibile da adattare all'hardware standard . Con un banco di memoria, il modello può memorizzare vettori leggeri di quel milione di immagini e fare riferimento ad essi in modo efficiente utilizzando tecniche di ricerca di similarità, come il prodotto scalare o la similarità coseno.
Le banche dati di memoria sono diventate una pietra miliare in diversi flussi di lavoro avanzati di visione artificiale (CV) e linguaggio naturale :
È utile distinguere la banca di memoria dagli altri concetti relativi all'archiviazione e all'elaborazione presenti nel glossario:
Il seguente Python Questo frammento di codice illustra il concetto di banco di memoria First-In, First-Out
(FIFO) utilizzando torch. Questa struttura viene spesso utilizzata per mantenere una cronologia continua dei vettori di caratteristiche
durante cicli di addestramento personalizzati o attività di inferenza complesse.
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])
Sebbene potenti, i banchi di memoria introducono la sfida della "deriva di rappresentazione". Poiché la rete dell'encoder cambia leggermente ad ogni fase di addestramento, le caratteristiche memorizzate nel banco da 100 fasi prima potrebbero essere "obsolete" o incoerenti con lo stato attuale del modello. Tecniche come l'uso di un encoder momentum (una media del modello che si aggiorna lentamente ) aiutano a mitigare questo problema.
Per i team che desiderano gestire le versioni dei set di dati e gli artefatti dei modelli che utilizzano queste tecniche avanzate, Ultralytics fornisce un hub centralizzato per organizzare i dati, track gli esperimenti e implementare i modelli in modo efficiente. La gestione della complessità dell'archiviazione e del recupero delle caratteristiche è essenziale per passare dall'intelligenza artificiale (AI) sperimentale a sistemi di produzione robusti .