Matryoshka Representation Learning (MRL)
Scopri come il Matryoshka Representation Learning (MRL) permette di creare embedding a granularità multiple. Scopri come ottimizzare la ricerca e la distribuzione edge di Ultralytics YOLO26.
Il Matryoshka Representation Learning (MRL) è una tecnica di addestramento nell'intelligenza artificiale (AI) e nel machine learning (ML) che induce una rete neurale ad apprendere embedding a granularità diverse all'interno di un unico vettore di output. Ispirato alle matrioske russe, MRL struttura l'embedding mettendo in primo piano le informazioni semantiche più importanti. Ciò significa che un vettore ad alta dimensionalità (per esempio, 1024 dimensioni) può essere troncato in sottoinsiemi annidati più piccoli (come 512, 256 o 64 dimensioni) senza perdere la rappresentazione sottostante. Questa flessibilità riduce drasticamente il carico computazionale tipicamente associato alle attività di recupero delle informazioni.
Come funziona il Matryoshka Representation Learning#
Tradizionalmente, un modello di embedding viene addestrato per ottimizzare una specifica funzione di loss per una dimensione di output fissa. Se un sistema richiede un vettore più piccolo per risparmiare memoria, è necessario addestrare un modello completamente nuovo. MRL risolve il problema applicando una funzione di loss annidata durante l'addestramento e ottimizzando congiuntamente la rappresentazione completa e i suoi sottoinsiemi annidati. Organizzazioni come OpenAI hanno adottato MRL per le proprie moderne API di embedding, consentendo agli sviluppatori di rimuovere dinamicamente le dimensioni finali di un vettore e mantenere punteggi accurati di similarità coseno.
Applicazioni nel mondo reale#
MRL offre vantaggi concreti quando devi bilanciare la precisione con i costi di archiviazione e la larghezza di banda della memoria.
- Ricerca adattiva nei vettori per gli LLM: Nelle pipeline di generazione aumentata dal recupero (RAG), i modelli linguistici di grandi dimensioni (LLMs) si basano spesso su enormi database vettoriali. Con MRL, un'azienda può eseguire una rapida ricerca semantica approssimativa usando le prime 64 dimensioni degli embedding e riordinare poi i risultati migliori con i vettori completi a 1024 dimensioni. Questo approccio in due passaggi accelera notevolmente la ricerca vettoriale e riduce i costi di archiviazione dei database.
- Visione artificiale scalabile sull'edge: Quando distribuisci sistemi di visione artificiale con la Ultralytics Platform, i vincoli hardware possono variare notevolmente. Un modello che utilizza MRL può trasmettere embedding visivi completi a un potente server di distribuzione nel cloud, ma passare senza problemi all'invio di embedding troncati a 128 dimensioni sui dispositivi a basso consumo per edge computing, ottimizzando la latenza senza riaddestrare il modello.
Distinguere i concetti correlati#
Per usare MRL correttamente, è utile distinguerlo dalle tecniche meno recenti utilizzate per comprimere i dati.
- MRL e riduzione della dimensionalità: Algoritmi come PCA (analisi delle componenti principali) o t-SNE vengono applicati dopo l'addestramento per comprimere i dati. MRL, invece, è integrato nativamente nell'architettura della rete neurale durante l'addestramento e preserva le relazioni non lineari più profonde.
- MRL e potatura dei modelli: La potatura rimuove pesi e livelli dalla rete neurale vera e propria per accelerare l'inferenza, per esempio creando una variante più piccola di un modello Ultralytics YOLO. MRL non modifica le dimensioni del modello: cambia solo quelle del vettore di output prodotto dal modello.
Implementazione pratica#
Troncare un embedding MRL è estremamente semplice e non richiede una logica complessa di indicizzazione semantica. Poiché le caratteristiche più importanti hanno un peso maggiore nelle dimensioni iniziali, ti basta selezionare una porzione dell'array. Il seguente esempio mostra come troncare un output multimodale simulato di YOLO26 usando le operazioni di base sui tensori PyTorch.
import torch
# Simulate a full 1024-dimensional MRL embedding returned by a model
full_embedding = torch.rand(1, 1024)
# To deploy on memory-constrained hardware, simply slice the first 256 dimensions
# Because the model was trained with MRL, this subset remains highly accurate
truncated_embedding = full_embedding[:, :256]
print(f"Original size: {full_embedding.shape[1]}, Compressed size: {truncated_embedding.shape[1]}")








