Datentabellen und Transformationen (Matrizen)
Das 2D-Zahlenraster, in dem jede ML-Bibliothek hauptsächlich denkt.
Du kennst bereits Vektoren — geordnete Listen von Zahlen, die Datenpunkte repräsentieren. Aber was passiert, wenn du viele Vektoren übereinander stapelst? Du bekommst eine Matrix — ein rechteckiges Raster aus Zahlen. Jede Tabellenkalkulation, jeder Datensatz, jede Schicht eines neuronalen Netzes basiert auf Matrizen.
In diesem Artikel lernst du, was Matrizen sind, wie man sie multipliziert (und warum die Definition nicht willkürlich ist) und warum diese eine Operation das rechnerische Herzstück moderner KI ist.
Was ist eine Matrix?
Matrix
Zeilen = Datenpunkte, Spalten = Merkmale. Eine 1000×5-Matrix speichert 1000 Häuser mit je 5 Eigenschaften.
Die Matrix definiert, WIE ein Eingabevektor in einen Ausgabevektor umgewandelt wird. Gewichtsmatrizen in neuronalen Netzen sind Transformationen.
Drei Häuser mit den Merkmalen Fläche, Zimmer und Baujahr bilden eine 3×3-Matrix. Jede Zeile ist ein Haus, jede Spalte ein Merkmal.
import numpy as np
# Drei Häuser als 3x3-Matrix
haeuser = np.array([
[120, 4, 1990],
[85, 3, 2005],
[200, 6, 1975]
])
print(haeuser.shape) # (3, 3)
print(haeuser[1, 2]) # 2005 — Baujahr von Haus 2Irrtum: Matrizen sind nur Tabellen
Jeder Datensatz im maschinellen Lernen ist eine Matrix: Zeilen sind Beispiele, Spalten sind Features. Und jede Netzwerk-Schicht ist eine Matrixtransformation.
Matrizenmultiplikation — Warum genau so?
Die Matrizenmultiplikation sieht auf den ersten Blick kompliziert aus — aber sie hat einen tiefen Grund: Sie beschreibt exakt die Hintereinanderausführung zweier Transformationen. Erst Matrix B, dann Matrix A anwenden, ergibt die Matrix AB.
Jedes Element c_ij des Ergebnisses ist das Skalarprodukt der i-ten Zeile von A mit der j-ten Spalte von B. Die Verbindung zum Vektoren-Artikel: Matrizenmultiplikation besteht aus vielen Skalarprodukten.
Die inneren Dimensionen müssen übereinstimmen. Eine (m×n)-Matrix mal eine (n×p)-Matrix ergibt eine (m×p)-Matrix. Stimmen die inneren Dimensionen nicht überein, ist die Multiplikation nicht definiert.
import numpy as np
# Gewichtsmatrix W (2x3) mal Eingabevektor x (3x1)
W = np.array([[0.5, -0.3, 0.8],
[0.1, 0.7, -0.2]])
x = np.array([1, 2, 3])
print(W @ x) # [2.3, 0.9]
print(W.shape, '@', x.shape, '→', (W @ x).shape)
# (2, 3) @ (3,) → (2,)Irrtum: A × B = B × A
Deep Dive: Hadamard-Produkt vs. Matrizenmultiplikation
Matrizen in neuronalen Netzen — Warum GPUs rechnen
Jede vollverbundene Schicht (fully connected layer) eines neuronalen Netzes berechnet genau eine Matrizenmultiplikation: Gewichtsmatrix mal Eingabe plus Bias. Training bedeutet: die Einträge der Gewichtsmatrix so verändern, dass der Fehler kleiner wird.
Shape-Kette durch ein Mini-Netzwerk
Statt einen Vektor nach dem anderen zu verarbeiten, stapelt man viele Eingaben zu einer Matrix. So wird ein ganzer Batch (z.B. 32 Bilder) in EINER Matrizenmultiplikation verarbeitet. Das ist dramatisch schneller.
Warum sind GPUs dabei so schnell? Weil bei der Matrizenmultiplikation jedes Skalarprodukt völlig unabhängig von den anderen berechnet wird. Eine CPU hat wenige, sehr schnelle Kerne (z. B. 16). Eine GPU hat Tausende langsamere Kerne (z. B. 10.000). Für Matrizen, wo Tausende einfache Rechnungen gleichzeitig anfallen, ist die GPU dramatisch überlegen.
import numpy as np
# Mini-Netzwerk: 5 Datenpunkte, 3 Features
X = np.random.randn(5, 3) # Eingabe: (5, 3)
W1 = np.random.randn(3, 4) # Schicht 1: (3, 4)
W2 = np.random.randn(4, 2) # Schicht 2: (4, 2)
hidden = X @ W1 # (5, 3) @ (3, 4) = (5, 4)
output = hidden @ W2 # (5, 4) @ (4, 2) = (5, 2)
print(f'Eingabe: {X.shape} → Verborgen: {hidden.shape} → Ausgabe: {output.shape}')Deep Dive: Die Shape-Kette im Detail
Interaktiv: Die berühmteste 2×2-Matrix im ML
Ein neuronales Netz klassifiziert Eingaben in Kategorien — aber wie gut? Die Qualität misst man mit einer Konfusionsmatrix: einer 2×2-Matrix aus Richtig-Positiv, Falsch-Negativ, Falsch-Positiv und Richtig-Negativ. Ändere die Parameter und beobachte, wie sich die vier Zellen der Matrix verschieben — besonders bei seltenen Ereignissen (niedrige Prävalenz) passiert Überraschendes.
Eine Krankheit betrifft einen bestimmten Anteil der Bevölkerung. Ein Test erkennt die Krankheit mit einer bestimmten Trefferquote, erzeugt aber auch falsch-positive Ergebnisse bei Gesunden. Wie wahrscheinlich ist die Krankheit bei positivem Testergebnis wirklich?
Eingabewerte
Berechnung nach Bayes
Ergebnis
Obwohl der Test 95% Sensitivität hat, liegt die Wahrscheinlichkeit bei positivem Ergebnis nur bei 16.1%. Das liegt an der niedrigen Grundwahrscheinlichkeit (1%): Bei 1.000 Getesteten gibt es 50 Fehlalarme, aber nur 10 echte Treffer. Die Falsch-Positiven überschwemmen die echten Fälle.
Anschaulich: 1.000 Personen getestet
Von 60 positiv Getesteten sind nur 10 tatsächlich krank. Das ergibt P(A|B) = 10/60 = 16.1%.
Das Wichtigste
Quiz: Matrizen
Checkpoint: Matrizen
- Ich kann zwei verschiedene Interpretationen einer 100×5-Matrix im KI-Kontext benennen.
- Ich kann erklären, warum eine (3×4)-Matrix mal eine (4×2)-Matrix eine (3×2)-Matrix ergibt und was mit der inneren Dimension 4 passiert.
- Ich kann erklären, warum GPUs für neuronale Netze so viel schneller sind als CPUs, obwohl CPUs höhere Taktfrequenzen haben.