Das Skalarprodukt: Mehr als nur Zahlen multiplizieren

Ich bin dem Skalarprodukt (englisch: dot product) in verschiedenen Kontexten begegnet - in der Physik, beim Machine Learning, in Grafik-Engines. Die algebraische Definition als “Vektoren komponentenweise multiplizieren und aufsummieren” ist einfach genug. Interessant wird es erst durch die verschiedenen geometrischen und praktischen Interpretationen.

Drei Perspektiven

1. Geometrisch: Richtungsähnlichkeit

Das Skalarprodukt misst, wie stark zwei Vektoren in die gleiche Richtung zeigen. Bei einem Wanderweg nach Nordosten und Wind von Westen wäre das Skalarprodukt dieser beiden Vektoren negativ (Gegenwind). Käme der Wind von hinten, wäre es positiv (Rückenwind). Bei Seitenwind wäre es nahe Null.

Diese Interpretation ist oft intuitiver als die algebraische Definition.

2. Physikalisch: Arbeit = Kraft · Weg

In der Physik ist Arbeit definiert als:

$$ W = \vec{F} \cdot \vec{s} $$

Nur die Kraftkomponente in Bewegungsrichtung verrichtet Arbeit. Wenn ich einen Koffer schräg nach oben ziehe, während er horizontal rollt, trägt nur die horizontale Komponente zur Arbeit bei.

Das Skalarprodukt filtert automatisch die relevante Komponente heraus.

3. Machine Learning: Ähnlichkeit quantifizieren

Im Machine Learning wird das Skalarprodukt verwendet, um Ähnlichkeit zu messen:

  • Suchmaschinen: Relevanz eines Dokuments zur Suchanfrage
  • Recommender Systems: Ähnlichkeit zwischen Nutzern oder Items
  • Neuronale Netze: Jedes Neuron berechnet ein Skalarprodukt aus Input und Gewichten

Die Cosine-Similarity, eine normalisierte Variante, ist ein Standardwerkzeug.

Definition

Für zwei Vektoren \(\vec{a}\) und \(\vec{b}\) im \(\mathbb{R}^n\):

$$ \vec{a} \cdot \vec{b} = \sum_{i=1}^{n} a_i b_i = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n $$

Beispiel in 2D

$$ \vec{a} = \begin{pmatrix} 3 \\\\ 4 \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} 1 \\\\ 2 \end{pmatrix} $$$$ \vec{a} \cdot \vec{b} = 3 \cdot 1 + 4 \cdot 2 = 3 + 8 = 11 $$

Beispiel in 3D

$$ \vec{a} = \begin{pmatrix} 1 \\\\ 0 \\\\ -1 \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} 2 \\\\ 3 \\\\ 4 \end{pmatrix} $$$$ \vec{a} \cdot \vec{b} = 1 \cdot 2 + 0 \cdot 3 + (-1) \cdot 4 = 2 + 0 - 4 = -2 $$

Geometrische Formel

Das Skalarprodukt lässt sich auch geometrisch ausdrücken:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos(\theta) $$

wobei \(\theta\) der Winkel zwischen den Vektoren ist.

Diese Darstellung zeigt: Das Skalarprodukt kodiert den Winkel zwischen Vektoren.

  • \(\theta = 0°\) (parallel): \(\cos(0°) = 1\) → Maximum
  • \(\theta = 90°\) (senkrecht): \(\cos(90°) = 0\) → Null
  • \(\theta = 180°\) (entgegengesetzt): \(\cos(180°) = -1\) → Maximal negativ

Algebraische und geometrische Definition sind äquivalent.

Beweis der Äquivalenz (2D-Fall)

Der Zusammenhang zwischen beiden Definitionen lässt sich direkt zeigen. Im 2D-Fall:

Zwei Vektoren in Komponentendarstellung:

$$ \vec{a} = \begin{pmatrix} a_1 \\\\ a_2 \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} b_1 \\\\ b_2 \end{pmatrix} $$

Diese Vektoren lassen sich auch über Betrag und Winkel ausdrücken:

$$ \vec{a} = \begin{pmatrix} |\vec{a}| \cos(\alpha) \\\\ |\vec{a}| \sin(\alpha) \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} |\vec{b}| \cos(\beta) \\\\ |\vec{b}| \sin(\beta) \end{pmatrix} $$

wobei \(\alpha\) und \(\beta\) die Winkel zur x-Achse sind.

Das algebraische Skalarprodukt:

$$ \vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 $$

Einsetzen der Winkeldarstellung:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cos(\alpha) \cdot |\vec{b}| \cos(\beta) + |\vec{a}| \sin(\alpha) \cdot |\vec{b}| \sin(\beta) $$$$ = |\vec{a}| \cdot |\vec{b}| \cdot [\cos(\alpha)\cos(\beta) + \sin(\alpha)\sin(\beta)] $$

Mit dem Additionstheorem \(\cos(\alpha - \beta) = \cos(\alpha)\cos(\beta) + \sin(\alpha)\sin(\beta)\):

$$ = |\vec{a}| \cdot |\vec{b}| \cdot \cos(\alpha - \beta) $$

Der Winkel zwischen den Vektoren ist \(\theta = \alpha - \beta\), also:

$$ \vec{a} \cdot \vec{b} = |\vec{a}| \cdot |\vec{b}| \cdot \cos(\theta) $$

Damit ist gezeigt: Die algebraische Definition führt direkt zur geometrischen Formel. Der Beweis für höhere Dimensionen funktioniert analog, ist aber aufwendiger.

Wichtige Eigenschaften

Kommutativität

$$ \vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a} $$

Die Reihenfolge ist egal.

Distributivität

$$ \vec{a} \cdot (\vec{b} + \vec{c}) = \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c} $$

Orthogonalität

Zwei Vektoren sind orthogonal (senkrecht), wenn:

$$ \vec{a} \cdot \vec{b} = 0 $$

Beispiel:

$$ \vec{a} = \begin{pmatrix} 1 \\\\ 2 \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} -2 \\\\ 1 \end{pmatrix} $$$$ \vec{a} \cdot \vec{b} = 1 \cdot (-2) + 2 \cdot 1 = -2 + 2 = 0 $$

Die Vektoren sind orthogonal.

Praktische Anwendungen

1. Winkel zwischen Vektoren berechnen

Aus der geometrischen Formel folgt:

$$ \cos(\theta) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| \cdot |\vec{b}|} $$$$ \theta = \arccos\left(\frac{\vec{a} \cdot \vec{b}}{|\vec{a}| \cdot |\vec{b}|}\right) $$

2. Projektion eines Vektors

Die Projektion von \(\vec{b}\) auf \(\vec{a}\):

$$ \text{proj}_{\vec{a}}(\vec{b}) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}|^2} \vec{a} $$

Die Länge der Projektion (skalare Komponente):

$$ \text{comp}_{\vec{a}}(\vec{b}) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}|} $$

3. Cosine-Similarity

Ähnlichkeit zwischen zwei Vektoren, unabhängig von ihrer Länge:

$$ \text{similarity}(\vec{a}, \vec{b}) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| \cdot |\vec{b}|} $$

Werte zwischen -1 (entgegengesetzt) und +1 (identisch). Wird häufig bei Text- und Bild-Embeddings verwendet.

4. Physik: Arbeit

Arbeit einer Kraft \(\vec{F}\) über eine Strecke \(\vec{s}\):

$$ W = \vec{F} \cdot \vec{s} $$

Beispiel: 50 N Kraft unter 30° zur Bewegungsrichtung, 10 m Weg:

$$ W = 50 \cdot 10 \cdot \cos(30°) = 500 \cdot 0.866 = 433 \text{ J} $$

Rechnenbeispiel

Gegeben:

$$ \vec{a} = \begin{pmatrix} 1 \\\\ 2 \\\\ 2 \end{pmatrix}, \quad \vec{b} = \begin{pmatrix} 2 \\\\ 1 \\\\ 2 \end{pmatrix} $$

Skalarprodukt:

$$ \vec{a} \cdot \vec{b} = 1 \cdot 2 + 2 \cdot 1 + 2 \cdot 2 = 2 + 2 + 4 = 8 $$

Beträge:

$$ |\vec{a}| = \sqrt{1^2 + 2^2 + 2^2} = \sqrt{9} = 3 $$$$ |\vec{b}| = \sqrt{2^2 + 1^2 + 2^2} = \sqrt{9} = 3 $$

Winkel:

$$ \cos(\theta) = \frac{8}{3 \cdot 3} = \frac{8}{9} \approx 0.889 $$$$ \theta = \arccos(0.889) \approx 27.3° $$

Die Vektoren schließen einen Winkel von etwa 27° ein.

Code-Beispiele

Python mit NumPy

import numpy as np

# Vektoren definieren
a = np.array([1, 2, 2])
b = np.array([2, 1, 2])

# Skalarprodukt
dot_product = np.dot(a, b)
print(f"Skalarprodukt: {dot_product}")  # 8

# Winkel berechnen
cos_theta = dot_product / (np.linalg.norm(a) * np.linalg.norm(b))
theta_rad = np.arccos(cos_theta)
theta_deg = np.degrees(theta_rad)
print(f"Winkel: {theta_deg:.1f}°")  # 27.3°

# Orthogonalität prüfen
c = np.array([1, -2, 0])
d = np.array([2, 1, 0])
is_orthogonal = np.isclose(np.dot(c, d), 0)
print(f"Orthogonal: {is_orthogonal}")  # True

Java

public class DotProduct {
    public static double dot(double[] a, double[] b) {
        double sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i] * b[i];
        }
        return sum;
    }

    public static double norm(double[] v) {
        return Math.sqrt(dot(v, v));
    }

    public static double angleDegrees(double[] a, double[] b) {
        double cosTheta = dot(a, b) / (norm(a) * norm(b));
        return Math.toDegrees(Math.acos(cosTheta));
    }

    public static void main(String[] args) {
        double[] a = {1, 2, 2};
        double[] b = {2, 1, 2};

        System.out.println("Skalarprodukt: " + dot(a, b));  // 8.0
        System.out.println("Winkel: " + angleDegrees(a, b) + "°");  // 27.3°
    }
}

Zusammenfassung

Das Skalarprodukt ist ein grundlegendes Werkzeug, weil es:

  1. Winkel zwischen Vektoren misst
  2. Orthogonalität prüft (\(\vec{a} \cdot \vec{b} = 0\))
  3. Ähnlichkeit quantifiziert (Cosine-Similarity)
  4. Projektionen berechnet
  5. In Physik (Arbeit, Energie) und ML (Neuronale Netze) zentral ist

Merkregeln

  • \(\vec{a} \cdot \vec{b} > 0\): Ähnliche Richtungen
  • \(\vec{a} \cdot \vec{b} = 0\): Orthogonal
  • \(\vec{a} \cdot \vec{b} < 0\): Entgegengesetzte Richtungen

Weiterführende Themen

  • Kreuzprodukt (cross product) für 3D-Vektoren
  • Matrix-Vektor-Multiplikation als Sammlung von Skalarprodukten
  • Innere Produkträume in der funktionalen Analysis
  • Attention-Mechanismen in Transformern (GPT, BERT)

Quellen