Vai al contenuto principale

Cerca su CooLWJ

选择搜索范围,输入关键词后按回车。

Lingua

Che cos'è un database vettoriale?

I、L'intero processo operativo dei modelli di grandi dimensioni

1.png

  1. Realizzazione di cluster AI: infrastrutture di calcolo, comunicazione e archiviazione

  2. Dati per modelli di grandi dimensioni: dataset, elaborazione dei dati, database vettoriali

  3. Algoritmi dei grandi modelli: dall'NLP tradizionale ai grandi modelli linguistici LLM preaddestrati

  4. Addestramento di modelli di grandi dimensioni: metodi algoritmici comuni e analisi della stabilità

  5. Parallelismo distribuito:parallelismo del modello, dei dati, dell’ottimizzatore, ecc.

  6. Fine-tuning dei modelli di grandi dimensioni: algoritmi di fine-tuning di tutti i parametri, di pochi parametri e basato su istruzioni

  7. Inferenza dei modelli di grandi dimensioni: compressione tramite quantizzazione, inferenza con estensione delle sequenze lunghe, metodi di cache

  8. Valutazione dei modelli di grandi dimensioni: attività a valle di NLP, attività a valle di visione artificiale e piani di valutazione

  9. Agenti basati su grandi modelli: processo RLHF, agenti, apprendimento permanente

II、Vettori

Chi conosce bene i cani riesce a distinguerne rapidamente le razze; questo è possibile perché ne osserviamo le caratteristiche da diversi punti di vista, per esempio le dimensioni corporee.
2.pngSe usassimo un asse di coordinate per rappresentare la loro taglia, questi cani si collocherebbero in posizioni diverse. Tuttavia, basarsi unicamente sulla taglia non basta, perché alcuni hanno dimensioni molto simili.
3.pngOsserviamo poi un’altra sua caratteristica, per esempio la lunghezza del pelo, e creiamo un altro asse di coordinate: così possiamo distinguere una parte dei cani che hanno la stessa taglia
4.pngMa ci sono ancora alcune sovrapposizioni, quindi bisogna continuare a osservare da più punti di vista, per esempio la lunghezza del naso.
5.pngPossiamo aggiungere altre dimensioni, per esempio la grandezza degli occhi. Non possiamo disegnare nello spazio quadridimensionale, ma rappresentarlo nei valori delle coordinate è davvero semplice: basta continuare ad aggiungere valori in fondo.
6.pngPossiamo osservare le caratteristiche di un cane da più punti di vista, o dimensioni: per esempio lo spessore delle zampe, l'arricciatura del pelo e persino aspetti astratti come l'obbedienza, l'utilità pratica e così via. Più dimensioni utilizziamo, maggiore sarà la nostra capacità di distinguere i cani. Allo stesso tempo, aumenterà anche il numero di dimensioni dello spazio in cui si trovano i punti delle coordinate.
7.pngNon solo i cani: in realtà quasi ogni cosa può essere rappresentata in questo modo. Può trattarsi di qualcosa di concreto, oppure di emozioni astratte come gioia, rabbia, tristezza e felicità, dolori e gioie, separazioni e ricongiungimenti. Oggetti diversi presentano manifestazioni diverse, o valori diversi, lungo le varie dimensioni delle caratteristiche, perciò ciascuno finisce per corrispondere a un punto in uno spazio di caratteristiche ad alta dimensionalità. Su scale più ampie, però, potremmo aver bisogno di un numero maggiore di dimensioni per distinguere bene gli oggetti. Potrebbero essere centinaia, migliaia o persino decine di migliaia.
8.pngTuttavia, poiché non possiamo realizzare grafici con più di tre dimensioni, useremo coordinate bidimensionali per la spiegazione.
9.pngOsserveremo che i punti concettualmente più vicini si raggruppano maggiormente nello spazio, mentre quelli concettualmente molto diversi si trovano a grande distanza. Facendo un passo ulteriore, prendiamo l'origine delle coordinate come punto iniziale e questi punti come estremi finali. Otteniamo così vettori dotati di direzione e modulo.

Convertendo le immagini in vettori e cercando vettori simili, si può realizzare una funzione di ricerca per immagini
Se si trasformano i video in vettori, cercando vettori simili si possono consigliare video simili
Se si rappresentano i prodotti mediante vettori, cercando vettori simili si possono fornire raccomandazioni pertinenti al prodotto che l'utente sta visualizzando
Vettorizzando il testo, in un sistema intelligente di domande e risposte è possibile trovare, in base alla domanda attuale dell'utente, domande simili già risolte da usare come riferimento

III、Database vettoriali

Con l'avvento dell'IA, i vettori diventeranno una forma importante di dati. I database tradizionali, però, non sono adatti a memorizzare e ricercare dati vettoriali: occorre quindi un database progettato appositamente per affrontare questi problemi, che potrebbe diventare un'infrastruttura fondamentale per i dati in futuro. A differenza dei database tradizionali, che memorizzano tabelle di dati e consentono ricerche precise tramite istruzioni di query, i database vettoriali memorizzano dati vettoriali; la ricerca consiste nel trovare nel database alcuni dei vettori più simili al vettore della query e presenta quindi un certo grado di approssimazione.

Schema di punti di dati vettoriali nello spazio tridimensionale

1、Ricerca vettoriale

Uno dei principali scenari di utilizzo dei dati vettoriali è questo: dato un vettore di ricerca, trovare tra molti vettori quelli più simili. È il cosiddetto problema dei vicini più prossimi, risolto mediante algoritmi dei vicini più prossimi. Uno dei metodi più immediati è probabilmente la ricerca esaustiva, che confronta uno dopo l'altro tutti i vettori con il vettore di ricerca e seleziona quelli con la maggiore similarità. Esistono molti metodi specifici per confrontare la similarità tra due vettori,Distanza euclidea e similarità del coseno.
10.png

  • La distanza euclidea misura la distanza in linea retta tra due vettori. In un sistema di coordinate bidimensionale, dati due vettori p e q, la distanza euclidea è la lunghezza del segmento che congiunge p a q. In un sistema tridimensionale, ogni vettore comprende tre coordinate x, y, z e la distanza tra due punti qualsiasi viene calcolata mediante la formula. In un sistema a n dimensioni ci sono 100 coordinate e si usa la formula per calcolare la distanza tra due punti qualsiasi. Quanto più breve è la distanza, tanto maggiore è la somiglianza tra i due vettori in determinate dimensioni
    11.png

  • Un altro metodo è la similarità del coseno. Oltre alla distanza, possiamo descrivere la relazione tra i vettori anche attraverso l’angolo che formano. In un sistema di coordinate bidimensionale, quanto più piccolo è l’angolo, tanto maggiore è la correlazione tra i due vettori. Possiamo utilizzare una formula per calcolare la similarità del coseno tra due vettori qualsiasi. Anche in un sistema di coordinate tridimensionale possiamo applicare lo stesso principio per calcolare l’angolo e la similarità del coseno tra due vettori qualsiasi.
    12.png
    Se però i dati vettoriali sono troppo numerosi, questo metodo a forza bruta, privo di particolare sofisticazione tecnica, comporta tempi di ricerca estremamente elevati. La qualità di questa ricerca è effettivamente perfetta, perché confronta davvero ogni singolo vettore. Quindi, se il database contiene pochi dati e il tempo necessario a esaminare tutti i vettori è accettabile, anche questo può essere un buon metodo. Nelle applicazioni reali, tuttavia, i dati sono spesso tutt'altro che pochi, perciò occorre trovare metodi di ottimizzazione.

2、Indice vettoriale

Abbiamo illustrato il principio della ricerca nei database vettoriali, ma nella pratica, quando vi si confrontano le similarità, non è possibile affidarsi interamente al calcolo mediante formule, perché questi database contengono solitamente grandi quantità di dati con un numero elevato di dimensioni. Calcolare mediante formula la similarità tra due vettori di 1000 dimensioni richiede molti calcoli e impone alla CPU un carico computazionale elevato. Se poi ci sono cento milioni di vettori e bisogna effettuare il calcolo per ciascuno, i costi in termini di tempo e di elaborazione aumentano ulteriormente. Introduciamo quindi un concetto chiamato indice vettoriale.
Gli indici vettoriali sono simili agli indici dei database relazionali, ma con una differenza. In un database vettoriale, un indice vettoriale restituisce risultati approssimativi, anziché risultati accurati al 100%.L’indice vettoriale descrive il grado maggiore o minore di somiglianza. Per questo lo chiamiamo ricerca approssimata dei vicini più prossimi (ANS). Senza un indice vettoriale, la ricerca della similarità di un vettore è analoga a una scansione completa della tabella in un database relazionale. Tuttavia, alla scansione completa si aggiunge un ulteriore livello di calcolo, perciò il costo è molto più elevato rispetto a una scansione completa in un database relazionale.
In base alla modalità di implementazione, gli indici vettoriali ANNS possono essere suddivisi in quattro grandi categorie:

  • Indice basato su alberi

  • Indice basato su grafi

  • Indice basato su hash

  • Indice basato sulla quantizzazione

1、Metodi basati su alberi

L'idea principale dei metodi basati su alberi è suddividere i dati, in modo simile a un albero binario di ricerca, riducendo lo spazio da esplorare durante la ricerca per consentire un recupero rapido. Questo approccio, però, non è adatto agli spazi ad alta dimensionalità. I principali metodi basati su alberi sono KDTree(K-Dimensional Tree)e Annoy(Approximate Nearest Neighbors Oh Yeah).
1.1 KDTree
Anche la costruzione di un KDTree si basa sul principio della suddivisione ricorsiva: si sceglie innanzitutto la dimensione con la varianza maggiore e si usa come punto di divisione la mediana di tutti i dati lungo tale dimensione, suddividendo la regione iperrettangolare in due sottoregioni; i valori inferiori alla mediana vengono assegnati a sinistra e quelli inferiori alla mediana a destra. Si costruiscono ricorsivamente i sottoalberi sinistro e destro, finché tutti i dati non sono stati suddivisi.
13.png

Procedura di ricerca basata su KDTree:
1、Per il dato p da cercare, considerare la dimensione di suddivisione d del nodo corrente e confrontare la coordinata di p nella dimensione d con il valore del nodo; se è maggiore, passare al figlio sinistro, se è minore, al figlio destro;
2、Proseguire la visita fino a raggiungere un nodo foglia, contrassegnarlo come visitato e calcolare la distanza dal nodo foglia come distanza minima;
3、Eseguire il backtracking a partire dai nodi foglia, valutando a ogni risalita la distanza tra p e il ramo non ancora visitato del nodo padre.
a)Se la distanza tra questo nodo di diramazione e p è maggiore della distanza minima corrente, continuare a risalire fino al nodo radice;
b)Se la distanza tra questo nodo di diramazione e p è inferiore alla distanza minima attuale, si segue questo ramo, eseguendo il passaggio 1 e il passaggio 2 fino al nodo foglia, e si aggiorna la distanza minima tra la foglia e Q。
14.png

1.2Annoy
Annoy usa iperpiani per suddividere lo spazio. Per individuare l'iperpiano, si serve di KMeans(k=2) per trovare due centroidi; il piano perpendicolare al segmento che li collega costituisce l'iperpiano di suddivisione. Il procedimento viene ripetuto finché il numero di dati in ciascun sottospazio non scende sotto la soglia specificata.
 15.png16.png17.png

18.png

Per cercare un qualsiasi punto in questo spazio, si può percorrere l'albero binario partendo dalla radice. Ogni nodo intermedio (i quadratini nell'albero sopra) definisce un iperpiano, che permette quindi di stabilire se proseguire nel figlio sinistro o in quello destro. La ricerca di un punto può essere completata in tempo logaritmico, pari all'altezza dell'albero.

Vantaggi: precisione relativamente elevata sui dati a bassa dimensionalità Svantaggi: non riesce a cogliere pienamente la complessità dei dati, precisione relativamente bassa sui dati ad alta dimensionalità

2、Metodi basati sui grafi

I metodi basati sui grafi usano principalmente questa struttura dati e sfruttano la connettività tra nodi vicini per costruire autostrade, trasformando il problema in un attraversamento del grafo: questo permette di restringere rapidamente lo spazio di ricerca e velocizzare il recupero dei risultati. Tuttavia, il grafo è una struttura dati piuttosto complessa e, per ottenere la massima velocità di ricerca, in genere viene caricato interamente in memoria, con un consumo di memoria molto elevato, ma con ricerche rapide e un richiamo elevato.

Attualmente, tra gli algoritmi di ricerca su grafi si usa soprattutto HNSW (Hierarchical Navigating Small World), mentre NSW (Navigating Small World) è il suo predecessore e merita anch’esso di essere conosciuto.
2.1 NSW
Partendo dalla costruzione ingenua del grafo, NSW aggiunge le seguenti convenzioni:tutti i nodi devono avere nodi adiacenti;i nodi adiacenti devono essere collegati da archi;il numero di vicini è un iperparametro specificato dall'utente. Serve principalmente a superare alcuni limiti del metodo ingenuo di costruzione del grafo.
19.pngProcesso di costruzione del grafo NSW:
Quando si inserisce un nuovo nodo, si cercano prima gli m nodi più vicini e si collega il nuovo nodo a questi m nodi.
Procedura di ricerca NSW:
Per il dato q da cercare, scegliere casualmente nel grafo un nodo di ingresso e i suoi nodi vicini, calcolare la distanza da p del nodo di ingresso e dei vicini; se un vicino ha una distanza da p inferiore a quella tra p e il nodo di ingresso, impostarlo come punto a distanza minima, fino a trovare un punto i cui vicini abbiano tutti una distanza dalla query maggiore rispetto a quella di questo punto.
Come mostrato nella figura sopra, per cercare nel grafo di prossimità già costruito i nodi più vicini al nodo verde query, si parte da entry points scelti casualmente; inizialmente i long-link rossi permettono di raggiungere rapidamente i nodi vicini alla query, poi gli short-link neri permettono di trovare i punti che soddisfano i criteri.
Anche NSW è un metodo di calcolo approssimato e non garantisce di trovare i veri vicini più prossimi. I punti inseriti per primi hanno più archi ridondanti e maggiori probabilità di formare autostrade; più tardi vengono inseriti i punti, minore è la probabilità che dispongano di autostrade.
2.1 HNSW
HNSW è una soluzione migliorata basata su NSW, che sfrutta principalmente il principio delle skip list ed è realizzata mediante livelli. Ogni livello è un NSW, perciò può essere chiamato anche metodo NSW gerarchico. Più si sale, più i nodi sono radi e distanti tra loro;più si scende, più aumentano i nodi e i collegamenti e più si riduce la distanza media.
20.png

Vantaggi: consente di trovare vicini simili nei dati ad alta dimensionalità, migliorando le prestazioni della ricerca; svantaggi: la costruzione del grafo è complessa e influisce sull'efficienza della memoria.

3、Metodi basati sull’hashing

I metodi basati sull'hashing sfruttano principalmente le proprietà delle funzioni hash: dati molto simili hanno anche valori hash simili. Le funzioni hash possono trasformare dati ad alta dimensionalità in dati a bassa dimensionalità, aumentando notevolmente l'efficienza della costruzione dell'indice. Tuttavia, hanno anche un altro limite: dati con valori hash simili non sono necessariamente simili, per cui il richiamo di questi metodi non è molto elevato. Il principale metodo basato sull'hashing è LSH(Locality-Sensitive Hashing, hashing sensibile alla località). Si assume che, se due vettori sono simili, anche i loro valori hash siano simili. Si usa una funzione hash per assegnare vettori simili allo stesso contenitore. Durante la ricerca, si individua prima il contenitore più simile al vettore di ricerca, poi si esaminano i dati al suo interno per calcolare i topk più simili。
21.pngAnche LSH (hashing sensibile alla località) è un metodo basato sulla suddivisione dello spazio. Si implementa come mostrato nella figura seguente: si genera casualmente una retta che distingue un lato positivo e uno negativo. Se un vettore si trova sul lato positivo, gli si assegna 1; sul lato negativo, 0. Poi si genera casualmente un'altra retta, assegnando ancora 1 al lato positivo e 0 a quello negativo; generando più rette di questo tipo, si calcolano per ogni vettore 4 valori pari a 0 oppure 1, ottenendo per ciascuno un codice binario di 4 bit. Osserviamo ora quanto si somigliano questi 4 codici binari.
22.png23.png24.png25.png26.png27.png

Vantaggi: molto veloce quando si passa a grandi volumi di dati, svantaggi: accuratezza mediocre

5、Indici basati sulla quantizzazione (Quantized)

5.1、Clustering
Se si potesse delimitare un’area approssimativa in cui cercare il vettore di query, per poi effettuare la ricerca al suo interno, la velocità aumenterebbe notevolmente. Per prima cosa scegliamo il numero di gruppi desiderato, per esempio i 4 gruppi della figura seguente, e generiamo casualmente 4 punti centrali; ciascun vettore viene poi assegnato al centro più vicino. Quindi calcoliamo un punto vettoriale medio usando i vettori attualmente assegnati a ciascun gruppo, spostiamo il centro in quel punto medio e determiniamo nuovamente quale centro sia più vicino a ogni vettore, riassegnandolo a un gruppo. Questo processo ripetuto si chiama addestramento; alla fine i centri tenderanno a stabilizzarsi, ovvero a convergere. Durante la ricerca basta individuare il centro del cluster più vicino al vettore di query e cercare tra i vettori di quel cluster. In questo modo si ottiene lo scopo di restringere l’area di ricerca
29.png29.png

5.2、Quantizzazione (Quantization)
Tuttavia, per enormi volumi di dati vettoriali, oltre alla velocità di ricerca, anche il consumo di memoria rappresenta una sfida enorme. Negli scenari applicativi reali, infatti, non sono affatto rari vettori con migliaia di dimensioni e raccolte di centinaia di milioni di vettori, perciò il consumo di memoria può essere molto elevato.
30.png

Dal raggruppamento precedente abbiamo individuato il punto centrale, che in realtà si chiama centroide. Possiamo usare il centroide per rappresentare i punti del gruppo? Dovrebbe essere possibile; in effetti, questo metodo è un tipico esempio di Compressione con perdita ,un esempio illustrato sarebbe il seguente:
31.png32.png

Sebbene questo comporti la perdita di alcuni valori dei vettori, la correlazione tra il centroide di un cluster e i vettori che vi appartengono permette di conservare in larga misura alcune informazioni originali. E i vantaggi ottenuti sono considerevoli rispetto alla perdita di parte dei dettagli dovuta a questa compressione con perdita. I dati possono essere memorizzati come illustrato nella figura seguente: quando occorre usare un vettore, il suo codice consente di trovare il centroide corrispondente nel dizionario dei codici e quindi di ricostruirne i valori effettivi. Rappresentare un vettore tramite il codice di un centroide è ciò che viene chiamato quantizzazione vettoriale(Quantizzazione)
33.png

5.3、Quantizzazione del prodotto PQ(Product Quantization)
La quantizzazione dei vettori introduce però un codebook aggiuntivo: il consumo di memoria dei vettori stessi diminuisce certamente, ma il codebook comporta un nuovo consumo di memoria, peraltro considerevole. Questo effetto è poco evidente con poche dimensioni, ma nelle situazioni reali, con vettori di centinaia o migliaia di dimensioni, il codebook può diventare spaventosamente grande. A parità di quantità, per garantire la qualità della quantizzazione, più la distribuzione dei vettori è sparsa, maggiore è il numero di vettori rappresentativi dei cluster necessario.
34.png35.png36.png37.png39.png39.png


Con vettori di centinaia o migliaia di dimensioni nelle applicazioni reali, i dati risultano molto sparsi; pertanto, negli spazi ad alta dimensionalità, per garantire la qualità della quantizzazione potrebbe essere necessario un numero molto elevato di cluster. Un caso tipico è illustrato nella figura seguente: un vettore di 128 dimensioni potrebbe richiedere 2 elevato alla 64 centri di cluster, il che rende enorme il codebook usato per registrare le codifiche dei centroidi. E la memoria consumata per conservare questo codebook supera già di gran lunga quella risparmiata dalla quantizzazione stessa
40.pngLa soluzione consiste nel suddividere prima il vettore ad alta dimensionalità in diversi sottovettori a bassa dimensionalità, per poi quantizzarli indipendentemente. Per esempio, si suddivide un vettore di 128 dimensioni in 8 sottovettori da 16 bit, quindi si esegue separatamente l'addestramento del clustering su ciascuno degli 8 sottovettori di 16 dimensioni.
42.png42.png

Quindi ogni vettore può usare i risultati dell'addestramento di 8 sottospazi per quantizzare i propri 8 sottovettori corrispondenti; inoltre, ogni sottovettore ha 16 dimensioni, un numero non molto elevato, perciò per ciascun sottospazio a 16 dimensioni bastano 256 cluster per ottenere una quantizzazione piuttosto buona. Il codice di ciascun sottovettore rientra dunque nell'intervallo 0-255; unendo i codici di quantizzazione degli 8 sottovettori si ottiene il codice di quantizzazione finale del vettore originale, ovvero un vettore viene ora quantizzato in 8 codici. Analogamente, ogni sottospazio costruisce il proprio sotto-codebook; durante l'utilizzo, gli 8 codici permettono di recuperare dai rispettivi sotto-codebook 8 sottovettori a 16 dimensioni, che vengono poi uniti per ricostruire un vettore a 128 dimensioni
45.png45.png45.png46.png


Commenti

Invio in corso

Scegli il tema

Il tema si applica a tutto il sito.