Vektoren und Matrizen
Warum jedes KI-Modell im Kern eine Kette von Matrixmultiplikationen ist, was ein Skalarprodukt über Ähnlichkeit aussagt und wie man den Speicherbedarf daraus ableitet.
Die Idee
Ein Computer kann mit dem Wort „Hund" nichts anfangen. Er kann aber mit der
Liste [0,82; −0,13; 0,44; …] rechnen. Der ganze Trick der modernen KI besteht
darin, Dinge so in Zahlenlisten zu übersetzen, dass Nähe in der Liste
Ähnlichkeit in der Bedeutung entspricht.
Eine solche Zahlenliste heißt Vektor. Eine Tabelle aus vielen Vektoren heißt Matrix. Mehr Vokabular braucht man zunächst nicht.
Wozu es gut ist
Wenn Bedeutung zu Richtung wird, werden Fragen zu Geometrie:
- „Welches Dokument passt zu meiner Frage?" wird zu „Welcher Vektor zeigt in fast dieselbe Richtung?"
- „Welches Wort kommt als Nächstes?" wird zu „Welcher Vektor hat das größte Skalarprodukt mit dem aktuellen Zustand?"
- „Sind diese zwei Gesichter dieselbe Person?" wird zu „Ist der Abstand zwischen den beiden Vektoren kleiner als eine Schwelle?"
Die drei Rechnungen, die man braucht
Skalarprodukt. Elementweise multiplizieren, dann alles addieren. Ergebnis ist eine einzelne Zahl. Groß heißt „zeigen in dieselbe Richtung".
Norm. Die Länge eines Vektors, also die Wurzel aus dem Skalarprodukt mit sich selbst. Braucht man, um Ähnlichkeit von Länge zu trennen.
Matrixmultiplikation. Jede Zeile der ersten Matrix mit jeder Spalte der zweiten skalar multiplizieren. Das ist die eine Operation, die eine Grafikkarte zehntausendfach parallel ausführt.
import numpy as np
a = np.array([0.8, 0.1, 0.6]) # "Kündigung"
b = np.array([0.7, 0.2, 0.5]) # "Vertragsauflösung"
c = np.array([-0.4, 0.9, 0.1]) # "Grillfest"
def cosine(x, y):
# Die Norm herauszurechnen ist der ganze Unterschied zwischen
# "wie ähnlich" und "wie ähnlich und wie lang".
return float(x @ y / (np.linalg.norm(x) * np.linalg.norm(y)))
print(round(cosine(a, b), 3)) # 0.993 -> fast dieselbe Richtung
print(round(cosine(a, c), 3)) # -0.055 -> praktisch unabhängigTypische Fehler
- Rohes Skalarprodukt statt Kosinus benutzen: dann gewinnen lange Dokumente immer.
- Vektoren aus zwei verschiedenen Modellen vergleichen. Das ergibt Zahlen, aber keine Bedeutung.
- Vergessen zu normalisieren, bevor man in eine Vektordatenbank schreibt.
- Dimensionen verwechseln:
(n, d) @ (d, m)geht,(n, d) @ (m, d)nicht.
Was man messen kann
Die Verteilung der Kosinuswerte im eigenen Bestand ist eine gute Diagnose. Wenn zufällige Dokumentpaare im Mittel bei 0,7 liegen, ist das Embedding für diesen Bestand zu unspezifisch, und jede Suche darauf wird beliebig wirken.
Die Formeln
Durchgerechnet
Mit a = [3, 4] und b = [4, 3]:
a · b = 3·4 + 4·3 = 24‖a‖ = √(9 + 16) = 5,‖b‖ = √(16 + 9) = 5cos = 24 / 25 = 0,96
Ein Winkel von rund 16 Grad. Zum Vergleich c = [−4, 3]: a · c = −12 + 12 = 0,
also cos = 0 und exakt 90 Grad. Orthogonal heißt hier: die beiden Merkmale
sagen nichts übereinander aus.
Aufwand und Speicher
Durchgerechnet für eine typische Schicht mit n = 1 (ein Token), k = 4096,
m = 16384: 2 × 1 × 4096 × 16384 ≈ 1,34e8 FLOPs. Bei 32 Schichten und zwei
solchen Matrizen je Schicht sind das rund 8,6 Milliarden Operationen je
Token. Genau deshalb ist Inferenz teuer, obwohl kein einzelner Rechenschritt
schwierig ist.
Speicher, ebenso direkt: eine 4096 × 16384-Matrix hat 67,1 Millionen Einträge.
In float16 sind das 134 MB, in int8 67 MB, in int4 34 MB. Die Tabelle in
Speicher und Bandbreite rechnet das für
ganze Modelle durch.
Fallstricke der Numerik
Matrixmultiplikation ist nicht assoziativ, wenn man in Gleitkomma rechnet: die
Reihenfolge der Additionen ändert das letzte Bit. Bei 4096 Summanden in
float16 sammelt sich das messbar an, weshalb Bibliotheken intern in float32
akkumulieren, auch wenn die Gewichte in float16 liegen. Wer das abschaltet,
bekommt Modelle, die auf zwei Karten unterschiedliche Antworten geben.
Passende Kurse und Quellen
Essence of Linear Algebra
Fünfzehn kurze Filme, die zeigen, was eine Matrix mit dem Raum macht. Wer Vektoren bisher nur als Zahlenlisten kannte, sieht danach etwas anderes.
Für alle, die Vektoren bisher nur als Zahlenlisten kannten und eine Anschauung brauchen.
Mathematics for Machine Learning
Genau die Mathematik, die maschinelles Lernen braucht, ohne den Rest. Lineare Algebra, Analysis und Wahrscheinlichkeit in einem Band, frei als PDF.
Für alle, die genau die Mathematik wollen, die maschinelles Lernen braucht, und nicht mehr.
MIT 18.06 Lineare Algebra
Gilbert Strangs Vorlesung, vollständig als Video mit Übungen. Wer Vektoren, Matrizen und Projektionen einmal wirklich verstehen will, findet hier die Referenz.
Für alle, die lineare Algebra einmal wirklich verstehen wollen statt sie nachzuschlagen.
MIT 18.065 Matrixmethoden
Singulärwertzerlegung, Hauptkomponenten und Optimierung, angewandt auf Daten. Die Brücke zwischen linearer Algebra und dem, was Modelle tatsächlich rechnen.
Für den Schritt von der reinen Mathematik zu dem, was Modelle tatsächlich rechnen.
NumPy
Die Grundlage aller Rechnung mit Feldern in Python. Wer lineare Algebra nachrechnen will, braucht sonst nichts weiter.
Für alle, die Formeln aus den Technikartikeln selbst nachrechnen wollen.