KI‑Kompass
Kompass

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.

·3 Min. Lesezeit·Von Fachredaktion Technik
DETAILGRAD
3 Abschnitte

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ängig

Typische 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

Skalarprodukt und Kosinusähnlichkeit

a · b = Σᵢ aᵢ bᵢ cos(a,b) = (a · b) / (‖a‖ · ‖b‖)

Das Skalarprodukt ist die Summe der Produkte der Komponenten; der Kosinus teilt es durch beide Längen und liegt daher immer zwischen minus eins und eins.

a, b
zwei Vektoren gleicher Dimension d
aᵢ
die i-te Komponente von a
‖a‖
die euklidische Norm, also die Länge von a

Durchgerechnet

Mit a = [3, 4] und b = [4, 3]:

  • a · b = 3·4 + 4·3 = 24
  • ‖a‖ = √(9 + 16) = 5, ‖b‖ = √(16 + 9) = 5
  • cos = 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

Aufwand einer Matrixmultiplikation

A (n×k) · B (k×m) → ≈ 2 · n · k · m FLOPs

Für jedes Element des Ergebnisses fallen k Multiplikationen und k Additionen an, also insgesamt rund zwei mal n mal k mal m Operationen.

A
Matrix mit n Zeilen und k Spalten
B
Matrix mit k Zeilen und m Spalten

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

VideoKostenlos180 Min.EN

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.

3Blue1BrownZum Angebot
BuchKostenlosEN

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.

KursKostenlos2400 Min.EN

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 OpenCourseWareZum Angebot
KursKostenlos2400 Min.EN

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.

MIT OpenCourseWareZum Angebot
WerkzeugKostenlosEN

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.

War diese Seite hilfreich?
Vektoren und Matrizen