Zum Hauptinhalt springen

CooLWJ durchsuchen

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

Sprache

Was ist eine Vektordatenbank?

I. Der gesamte Geschäftsprozess mit großen Sprachmodellen

1.png

  1. Aufbau eines KI-Clusters:Aufbau von Rechen-, Kommunikations- und Speicherinfrastruktur

  2. Daten für große Modelle: Datensätze für große Modelle, Datenverarbeitung, Vektordatenbanken

  3. Algorithmen großer Modelle: von traditioneller NLP zu vortrainierten großen Sprachmodellen (LLMs)

  4. Training großer Modelle: gängige algorithmische Methoden und Stabilitätsanalyse beim Training großer Modelle

  5. Verteilte Parallelverarbeitung:Modellparallelität, Datenparallelität, Optimiererparallelität usw.

  6. Feinabstimmung großer Modelle: Algorithmen zur Vollparameter-, parameterarmen und Instruktionsfeinabstimmung

  7. Inferenz großer Modelle:Quantisierungskompression, Inferenz mit erweiterten langen Sequenzen, Cacheverfahren

  8. Evaluierung großer Modelle: nachgelagerte NLP-Aufgaben, nachgelagerte CV-Aufgaben, Evaluierungsverfahren

  9. Agenten großer Modelle: RLHF-Ablauf, Agenten, lebenslanges Lernen

II、Vektoren

Wer sich mit Hunden auskennt, kann ihre Rassen schnell unterscheiden. Das gelingt uns, weil wir ihre Merkmale aus verschiedenen Blickwinkeln betrachten, etwa ihre Körpergröße.
2.pngWenn wir ihre Größe auf einer Koordinatenachse darstellen, liegen diese Hunde an unterschiedlichen Positionen. Es reicht jedoch nicht aus, sich allein auf das Merkmal Körpergröße zu stützen, denn manche sind nahezu gleich groß.
3.pngDann betrachten wir weitere Merkmale, etwa die Felllänge, und legen eine weitere Koordinatenachse an. So lassen sich bereits einige Hunde unterscheiden, die dieselbe Größe haben
4.pngEinige überschneiden sich jedoch weiterhin. Deshalb müssen wir sie aus weiteren Blickwinkeln betrachten, etwa anhand der Schnauzenlänge.
5.pngWir können noch weitere Dimensionen hinzufügen, etwa die Größe der Augen. Im vierdimensionalen Raum können wir zwar keine Zeichnung anfertigen, doch bei den Zahlenwerten der Koordinatenpunkte ist das ganz einfach: Man hängt einfach weitere Werte an.
6.pngWir können die Merkmale eines Hundes auch aus weiteren Blickwinkeln, also Dimensionen, betrachten, etwa die Dicke seiner Beine, die Lockigkeit seines Fells oder sogar abstrakte Aspekte wie Gehorsam und Eignung als Arbeitstier. Je mehr Dimensionen wir verwenden, desto besser können wir Hunde voneinander unterscheiden. Gleichzeitig steigt damit auch die Dimensionalität des Raums, in dem sich der Koordinatenpunkt befindet.
7.pngNicht nur Hunde, sondern tatsächlich fast alle Dinge lassen sich auf diese Weise darstellen. Das können konkrete Dinge sein, aber auch abstrakte Gefühle wie Freude, Zorn, Trauer und Glück oder die Wechselfälle von Zusammensein und Trennung. Unterschiedliche Dinge weisen in den verschiedenen Merkmalsdimensionen unterschiedliche Ausprägungen beziehungsweise Werte auf und entsprechen daher letztlich jeweils einem Koordinatenpunkt in einem hochdimensionalen Merkmalsraum. Bei diesen größeren Betrachtungsbereichen brauchen wir allerdings möglicherweise mehr Merkmalsdimensionen, um die Dinge gut voneinander unterscheiden zu können. Vielleicht einige Hundert oder Tausend, vielleicht auch mehr als zehntausend.
8.pngDa wir jedoch keine Abbildungen mit mehr als drei Dimensionen darstellen können, erläutern wir dies anhand zweidimensionaler Koordinaten.
9.pngWir werden feststellen, dass Punkte, die sich begrifflich näherstehen, im Raum stärker beieinanderliegen, während begrifflich sehr unterschiedliche Punkte weit voneinander entfernt sind. Gehen wir einen Schritt weiter und nehmen den Koordinatenursprung als Ausgangspunkt und diese Koordinatenpunkte als Endpunkte. So entstehen Vektoren mit Richtung und Betrag.

Wenn Bilder in Vektoren umgewandelt werden, lässt sich durch die Suche nach ähnlichen Vektoren eine Bildersuche anhand von Bildern umsetzen
Wenn Videos in Vektoren umgewandelt werden, lassen sich durch die Suche nach ähnlichen Vektoren ähnliche Videos empfehlen
Wenn man Produkte vektorisiert, lassen sich durch die Suche nach ähnlichen Vektoren passende Empfehlungen zu dem Produkt geben, das sich der Nutzer gerade ansieht
Wenn Text in Vektoren umgewandelt wird, lassen sich in einem intelligenten Frage-Antwort-System anhand der aktuellen Frage des Nutzers ähnliche, bereits gelöste Fragen als Referenz finden

III. Vektordatenbanken

Mit dem Aufkommen der KI werden Vektoren zu einer wichtigen Datenform. Herkömmliche Datenbanken eignen sich jedoch nicht gut zum Speichern und Durchsuchen von Vektordaten. Deshalb braucht es eine speziell entwickelte Datenbank, die diese Aufgaben bewältigt und künftig möglicherweise zur grundlegenden Dateninfrastruktur gehört. Anders als herkömmliche Datenbanken, die Datentabellen speichern und anschließend über Abfragen präzise durchsucht werden, speichern Vektordatenbanken Vektordaten. Bei der Abfrage werden diejenigen Vektoren aus der Datenbank gesucht, die dem Abfragevektor am ähnlichsten sind; die Suche besitzt somit eine gewisse Unschärfe.

Schematische Darstellung von Vektordatenpunkten im dreidimensionalen Raum

1、Vektorabfrage

Ein wichtiges Anwendungsgebiet von Vektordaten besteht darin, zu einem gegebenen Abfragevektor aus einer Vielzahl von Vektoren einige der ähnlichsten zu finden. Dies ist das sogenannte Nächste-Nachbarn-Problem; ein Verfahren zu seiner Lösung nennt man Nächste-Nachbarn-Algorithmus. Eine der naheliegendsten Methoden ist wohl die Brute-Force-Suche: Man vergleicht nacheinander die Ähnlichkeit aller Vektoren mit dem Abfragevektor und wählt die ähnlichsten aus. Für den konkreten Ähnlichkeitsvergleich zweier Vektoren gibt es viele Methoden,Euklidische Distanz und Kosinusähnlichkeit.
10.png

  • Die euklidische Distanz bezeichnet den geradlinigen Abstand zwischen zwei Vektoren. Angenommen, es gibt in einem zweidimensionalen Koordinatensystem zwei Vektoren p und q, dann berechnet die euklidische Distanz die Länge der geraden Verbindung von p nach q. In einem dreidimensionalen Koordinatensystem enthält jeder Vektor die drei Koordinaten x, y und z; anhand der Formel wird der Abstand zwischen zwei beliebigen Punkten berechnet. In einem n-dimensionalen Koordinatensystem gibt es 100 Koordinatenpunkte; anhand der Formel wird der Abstand zwischen zwei beliebigen Punkten berechnet. Je kürzer der Abstand, desto größer ist die Ähnlichkeit dieser beiden Vektoren in bestimmten Dimensionen
    11.png

  • Eine weitere Möglichkeit ist die Kosinusähnlichkeit. Neben dem Abstand können wir auch den Winkel zwischen Vektoren verwenden, um ihre Beziehung zueinander zu beschreiben. In einem zweidimensionalen Koordinatensystem gilt: Je kleiner der Winkel, desto stärker hängen die beiden Vektoren zusammen. Mit einer Formel können wir die Kosinusähnlichkeit zwischen zwei beliebigen Vektoren berechnen. In einem dreidimensionalen Koordinatensystem lassen sich nach demselben Prinzip ebenfalls der Winkel und die Kosinusähnlichkeit zwischen zwei beliebigen Vektoren berechnen.
    12.png
    Wenn jedoch zu viele Vektordaten vorliegen, führt diese technisch anspruchslose Brute-Force-Methode zu extrem langen Suchzeiten. Die Qualität dieser Suche ist allerdings tatsächlich perfekt, weil wirklich jeder einzelne Vektor verglichen wird. Ist der Datenbestand in der Datenbank klein und die für das Durchlaufen aller Vektoren benötigte Zeit vertretbar, ist dies durchaus eine gute Methode. In praktischen Anwendungen sind die Datenbestände jedoch meist nicht besonders klein, weshalb Optimierungsmöglichkeiten gefunden werden müssen.

2、Vektorindex

Zuvor wurde das Suchprinzip von Vektordatenbanken erläutert. In der Praxis lässt sich die Ähnlichkeitssuche in einer Vektordatenbank jedoch nicht vollständig anhand der Formel durchführen, da Vektordatenbanken in der Regel sehr große Datenmengen mit sehr hoher Dimensionalität enthalten. Berechnet man die Ähnlichkeit zweier 1000-dimensionaler Vektoren mit der Formel, ist der Rechenaufwand beträchtlich und die CPU wird stark beansprucht. Bei hundert Millionen Vektoren, für die diese Berechnung jeweils durchgeführt werden müsste, wären Zeitaufwand und Rechenkosten noch höher. Deshalb führen wir hier den Begriff des Vektorindex ein.
Ein Vektorindex ähnelt einem Index in einer relationalen Datenbank, unterscheidet sich jedoch in einem Punkt. In einer Vektordatenbank liefert die Suche über den Vektorindex Näherungsergebnisse, keine zu 100% exakten Ergebnisse.Ein Vektorindex beschreibt den Grad der Ähnlichkeit. Daher nennen wir dies approximative Nächste-Nachbarn-Suche (ANS).  Ohne Vektorindex ähnelt die Suche nach ähnlichen Vektoren einem vollständigen Tabellenscan in einer relationalen Datenbank. Zusätzlich zum vollständigen Tabellenscan kommt jedoch noch eine weitere Berechnungsebene hinzu, weshalb der Aufwand deutlich höher ist als bei einem vollständigen Tabellenscan in einer relationalen Datenbank.
Je nach Implementierungsweise lassen sich ANNS-Vektorindizes in vier Hauptkategorien unterteilen:

  • Baumbasierter Index

  • Graphbasierter Index

  • Hashbasierte Indizes

  • Quantisierungsbasierte Indizes

1、Baumbasierte Methoden

Die Grundidee baumbasierter Verfahren besteht darin, die Daten ähnlich wie bei einem binären Suchbaum aufzuteilen. Dadurch wird bei der Suche der Suchraum verkleinert und ein schneller Abruf ermöglicht. Für hochdimensionale Räume eignet sich dieses Verfahren jedoch nicht. Zu den wichtigsten baumbasierten Verfahren zählen KDTree (K-Dimensional Tree) und Annoy (Approximate Nearest Neighbors Oh Yeah).
1.1 KDTree
Auch der Aufbau eines KDTree beruht auf der Idee der rekursiven Unterteilung. Zunächst wählt man die Dimension mit der größten Varianz und verwendet den Median aller Daten in dieser Dimension als Trennpunkt, um den hyperrechteckigen Bereich in zwei Teilbereiche zu zerlegen. Werte unterhalb des Medians werden links eingeordnet, Werte unterhalb des Medians rechts. Anschließend werden der linke und der rechte Teilbaum rekursiv aufgebaut, bis alle Daten aufgeteilt sind.
13.png

Suchablauf auf Grundlage eines KDTree:
1、Für den Abfragedatenpunkt p und die Teilungsdimension d des aktuellen Knotens wird der Koordinatenwert von p in Dimension d mit dem Knotenwert verglichen. Ist er größer, geht es zum linken Kindknoten, ist er kleiner, zum rechten Kindknoten;
2、Bis zu einem Blattknoten weiterlaufen, ihn als besucht markieren und die Entfernung zu diesem Blattknoten als kürzeste Entfernung berechnen;
3、An den Blattknoten zurückverfolgen und bei jedem Rückschritt den Abstand zwischen p und den noch nicht besuchten Zweigen des Elternknotens prüfen.
a)Ist die Entfernung dieses Verzweigungsknotens zu p größer als die derzeit kürzeste Entfernung, wird weiter nach oben zurückgegangen, bis zum Wurzelknoten;
b)Wenn die Entfernung zwischen diesem Verzweigungsknoten und p kleiner als die derzeit kürzeste Entfernung ist, wird dieser Zweig verwendet. Die Schritte 1 und 2 werden bis zu einem Blattknoten ausgeführt, und die kürzeste Entfernung zwischen dem Blatt und Q wird aktualisiert.
14.png

1.2Annoy
Annoy unterteilt den Raum mithilfe von Hyperebenen. Dazu werden mit KMeans(k=2) zwei Clusterzentren ermittelt. Die Ebene senkrecht zu ihrer Verbindungslinie bildet die trennende Hyperebene. Dieser Vorgang wird fortlaufend wiederholt, bis die Anzahl der Datenpunkte in jedem Teilraum unter dem vorgegebenen Schwellenwert liegt.
 15.png16.png17.png

18.png

Um einen beliebigen Punkt in diesem Raum zu suchen, kann man den Binärbaum von der Wurzel aus durchlaufen. Jeder innere Knoten (die kleinen Quadrate im obigen Baum) definiert eine Hyperebene. Anhand dieser Hyperebene lässt sich entscheiden, ob die Suche beim linken oder rechten Kindknoten weitergeht. Die Suche nach einem Punkt lässt sich in logarithmischer Zeit durchführen, entsprechend der Höhe des Baums.

Vorteil: relativ hohe Genauigkeit bei niedrigdimensionalen Daten Nachteil: Die Komplexität der Daten lässt sich nicht vollständig erfassen, geringe Genauigkeit bei hochdimensionalen Daten

2、Graphbasierte Methoden

Graphbasierte Verfahren verwenden vor allem die Datenstruktur Graph und nutzen die Verbindungen zwischen benachbarten Knoten, um Schnellwege aufzubauen. Dabei wird das Problem in eine Graphtraversierung überführt, wodurch sich der Suchbereich rasch eingrenzen und die Suche beschleunigen lässt. Diese Datenstruktur ist jedoch recht komplex. Um eine möglichst hohe Suchgeschwindigkeit zu erreichen, wird in der Regel der gesamte Graph in den Arbeitsspeicher geladen, was zu einem sehr hohen Speicherbedarf führt. Dafür sind die Suche schnell und der Recall hoch.

Der derzeit hauptsächlich verwendete Algorithmus für die Graphensuche ist HNSW(Hierarchical Navigating Small World). NSW(Navigating Small World)ist sein Vorläuferalgorithmus, den man ebenfalls kennenlernen sollte.
2.1 NSW
NSW ergänzt die naive Graphkonstruktion um folgende Vorgaben:Jeder Knoten muss benachbarte Knoten haben; benachbarte Knoten müssen durch Kanten verbunden sein; die Anzahl der benachbarten Knoten wird vom Benutzer als Hyperparameter festgelegt. Dies dient hauptsächlich dazu, einige Einschränkungen der naiven Graphkonstruktion zu beheben.
19.pngAufbau des NSW-Graphen:
Beim Einfügen eines neuen Knotens werden zunächst die m nächstgelegenen Knoten gesucht und anschließend mit dem neuen Knoten verbunden.
Ablauf der NSW-Suche:
Für die Suchdaten q wird im Graphen zufällig ein entry point-Knoten samt seinen Nachbarknoten gewählt. Dann werden die Abstände des entry point und der Nachbarknoten zu p berechnet. Liegt ein Nachbar näher an p als der entry point, wird der Punkt mit dem kleinsten Abstand gewählt. Dies wird fortgesetzt, bis schließlich ein point gefunden ist, dessen sämtliche Nachbarn weiter von query entfernt sind als dieser point.
Wie in der obigen Abbildung dargestellt, beginnt die Suche nach dem Knoten, der dem grünen Knoten query im aufgebauten Nachbarschaftsgraphen am nächsten liegt, bei zufällig ausgewählten entry points. Zunächst gelangt man über die roten long-link-Verbindungen rasch zu Knoten in der Nähe von query und findet anschließend über die schwarzen short-link-Verbindungen einen passenden Punkt.
Auch NSW ist ein Näherungsverfahren und kann nicht garantieren, die tatsächlich nächsten Nachbarn zu finden. Früher eingefügte Punkte haben mehr redundante Kanten und bilden daher eher Schnellverbindungen. Je später ein Punkt eingefügt wird, desto geringer ist die Wahrscheinlichkeit, dass er solche Schnellverbindungen besitzt.
2.1 HNSW
HNSW ist eine Weiterentwicklung von NSW, die hauptsächlich auf der Idee von Skip-Listen beruht und eine hierarchische Struktur verwendet. Jede Ebene ist ein NSW, weshalb man auch von einem hierarchischen NSW-Verfahren sprechen kann. Je höher die Ebene liegt, desto dünner sind die Knoten verteilt und desto größer sind ihre Abstände zueinander. Weiter unten gibt es mehr Knoten und Verbindungen, und der durchschnittliche Abstand nimmt ab.
20.png

Vorteile: Findet ähnliche nächste Nachbarn in hochdimensionalen Daten und verbessert so die Suchleistung. Nachteile: Der Graphaufbau ist komplex und beeinträchtigt die Speichereffizienz.

3、Hashbasierte Methode

Hashbasierte Verfahren nutzen vor allem die Eigenschaft von Hashfunktionen, dass stark ähnliche Daten auch ähnliche Hashwerte haben. Hashfunktionen können hochdimensionale Daten in niedrigdimensionale Daten umwandeln und so die Effizienz des Aufbaus erheblich steigern. Sie haben jedoch noch eine weitere Einschränkung:Daten mit ähnlichen Hashwerten sind nicht zwangsläufig ähnlich, weshalb diese Verfahren keine besonders hohe Trefferabdeckung erzielen. Das wichtigste hashbasierte Verfahren ist LSH(Locality-Sensitive Hashing, lokalitätssensitives Hashing). Dabei wird angenommen, dass zwei ähnliche Vektoren auch ähnliche Hashwerte haben. Mithilfe einer Hashfunktion werden ähnliche Vektoren demselben Bucket zugeordnet. Bei einer Abfrage wird zunächst der Bucket gesucht, der dem Abfragevektor am ähnlichsten ist. Anschließend werden die Daten in diesem Bucket durchsucht und die ähnlichsten topk berechnet.
21.pngLSH (Locality-Sensitive Hashing) ist ebenfalls ein Verfahren auf Grundlage räumlicher Aufteilung. Die Umsetzung funktioniert wie in der folgenden Abbildung: Man erzeugt zufällig eine Gerade, die eine positive und eine negative Seite unterscheidet. Liegt ein Vektor auf der positiven Seite, erhält er 1, auf der negativen Seite 0. Anschließend erzeugt man zufällig eine weitere Gerade; auch hier erhält die positive Seite 1 und die negative Seite 0; auf diese Weise erzeugen wir mehrere solcher Geraden, und berechnen für jeden Vektor 4 Werte, jeweils 0 oder 1. So erhält jeder einen Binärcode mit 4 Stellen. Betrachten wir nun die Ähnlichkeit dieser 4 Binärcodes.
22.png23.png24.png25.png26.png27.png

Vorteil: Bei der Skalierung auf große Datenmengen sehr schnell, Nachteil: mäßige Genauigkeit

5、Index auf Basis von Quantisierung(Quantized)

5.1、Clusteranalyse
Wenn sich für den Anfragevektor ein ungefährer Suchbereich eingrenzen lässt und die Suche anschließend darin erfolgt, kann dies die Suchgeschwindigkeit erheblich erhöhen. Zunächst legen wir die gewünschte Anzahl an Gruppen fest, beispielsweise die 4 Gruppen in der folgenden Abbildung, und erzeugen zufällig 4 Mittelpunkte. Jeder Vektor wird dem Mittelpunkt zugeordnet, der ihm am nächsten liegt. Anschließend berechnen wir aus den Vektoren jeder Gruppe einen Mittelwertvektor und verschieben ihren Mittelpunkt auf diesen Mittelwert. Danach prüfen wir erneut, welchem Mittelpunkt jeder Vektor am nächsten liegt, und ordnen die Vektoren neu zu. Dieser wiederholte Vorgang heißt Training. Schließlich werden die Mittelpunkte stabil, sie konvergieren. Bei der Suche muss dann nur noch das Clusterzentrum ermittelt werden, das dem Anfragevektor am nächsten liegt; anschließend werden die Vektoren dieses Clusters durchsucht. Damit ist das Ziel erreicht, den Suchbereich einzugrenzen
29.png29.png

5.2、Quantisierung(Quantization)
Bei riesigen Mengen an Vektordaten stellt neben der Suchgeschwindigkeit auch der Speicherbedarf eine enorme Herausforderung dar. Tatsächlich sind in realen Anwendungen Tausende von Vektordimensionen und Hunderte Millionen Vektoren keine Seltenheit, weshalb der Speicherbedarf sehr hoch sein kann.
30.png

Bei der obigen Clusterbildung haben wir den Mittelpunkt kennengelernt, der eigentlich Zentroid heißt. Könnten wir die Punkte eines Clusters durch seinen Zentroiden repräsentieren? Das sollte möglich sein. Tatsächlich ist dieses Verfahren ein typisches Beispiel für Verlustbehaftete Komprimierung ,anhand eines Bildes veranschaulicht sieht das wie folgt aus:
31.png32.png

Dabei gehen zwar einige Vektorwerte verloren, doch aufgrund des Zusammenhangs zwischen dem Clusterzentrum und den Vektoren seines Clusters bleiben viele ursprüngliche Informationen erhalten. Trotz des Verlusts einiger Details durch diese verlustbehaftete Komprimierung sind die daraus entstehenden Vorteile beträchtlich. Die Speicherung kann wie in der folgenden Abbildung erfolgen. Wenn ein Vektor benötigt wird, lässt sich anhand seines Codes das entsprechende Clusterzentrum im Codebuch finden und anschließend dessen konkreter Wert rekonstruieren. Einen Vektor durch den Code eines Clusterzentrums darzustellen, bezeichnet man als Vektorquantisierung(Quantization)
33.png

5.3、Produktquantisierung PQ (Product Quantization)
Nach der Vektorquantisierung kommt allerdings ein Codebuch hinzu. Der Speicherbedarf der Vektoren selbst sinkt zwar eindeutig, doch das Codebuch verursacht zusätzlichen, beträchtlichen Speicherbedarf. Bei niedrigen Dimensionen fällt dies noch kaum auf, aber bei den Hunderten oder Tausenden Vektordimensionen realer Anwendungen kann dieses Codebuch erschreckende Ausmaße annehmen. Bei gleichbleibender Anzahl werden zur Sicherung der Quantisierungsqualität umso mehr Clustervektoren benötigt, je dünner die Vektoren verteilt sind.
34.png35.png36.png37.png39.png39.png


Bei den in der Praxis üblichen Hunderten oder Tausenden von Vektordimensionen sind die Daten sehr dünn besetzt. Um in hochdimensionalen Räumen die Qualität der Quantisierung sicherzustellen, benötigen wir daher möglicherweise sehr viele Cluster. Ein typischer Fall ist in der folgenden Abbildung dargestellt: Ein 128-dimensionaler Vektor benötigt möglicherweise 2 hoch 64 Clusterzentren, wodurch das Codebuch zur Speicherung der Zentroidencodierungen enorm groß wird. Der Speicherbedarf dieses Codebuchs übersteigt dann bei Weitem den durch die Quantisierung selbst eingesparten Speicher
40.pngDie Lösung dieses Problems besteht darin, den hochdimensionalen Vektor zunächst in mehrere niedrigdimensionale Teilvektoren aufzuteilen und diese anschließend unabhängig voneinander zu quantisieren. Beispielsweise wird ein 128-dimensionaler Vektor in 8 Teilvektoren mit jeweils 16 Dimensionen aufgeteilt. Anschließend wird für jeden der 8 Teilvektoren mit jeweils 16 Dimensionen unabhängig ein Clustering-Training durchgeführt.
42.png42.png

Damit kann jeder Vektor anhand der Trainingsergebnisse aus 8 Teilräumen seine entsprechenden 8 Teilvektoren quantisieren. Da jeder Teilvektor mit 16 Dimensionen nicht besonders hochdimensional ist, reichen für jeden 16-dimensionalen Teilraum 256 Cluster aus, um eine recht gute Quantisierung zu erzielen. Der Codewert jedes Teilvektors liegt daher im Bereich 0-255. Durch das Zusammenfügen der Quantisierungscodes der 8 Teilvektoren erhält man den endgültigen Quantisierungscode des ursprünglichen Vektors. Ein Vektor wird also nun auf 8 Codewerte quantisiert. Ebenso erstellt jeder Teilraum sein eigenes Teilcodebuch. Bei der Verwendung werden anhand der 8 Codewerte aus den jeweiligen Teilcodebüchern 8 Teilvektoren mit jeweils 16 Dimensionen nachgeschlagen und anschließend zusammengefügt, um einen Vektor mit 128 Dimensionen wiederherzustellen
45.png45.png45.png46.png


Kommentare

Wird gesendet

Design auswählen

Das Design gilt für die gesamte Website.