Vektoraddition und Skalarmultiplikation -- Geometrische Perspektive

Vektoraddition: Aneinanderreihung zweier Verschiebungen

Ein Vektor kann als Pfeil vom Ursprung ausgehend verstanden werden – er hat Länge und Richtung.

Zwei Vektoren zu addieren bedeutet, zwei Verschiebungen aneinanderzureihen.

Dreiecksregel

Verbinde den Anfang des zweiten Vektors b mit dem Ende des ersten Vektors a.

Die Strecke vom Anfang von a bis zum Ende von b ist a + b.

Intuition: "Zuerst entlang a gehen, dann entlang b gehen"

Parallelogrammregel

Zeichne ein Parallelogramm mit a und b als zwei benachbarten Seiten.

Die Diagonale vom Startpunkt aus ist a + b.

Intuition: Beide Regeln liefern genau dasselbe Ergebnis

Skalarmultiplikation: Strecken oder Stauchen eines Vektors

Multiplizieren eines Vektors mit einem Skalar (einer gewöhnlichen Zahl) führt zuÄndern der Länge des Vektors, während seine Linienrichtung unverändert bleibt。

|c| > 1

Strecken

z. B. 2v: Länge ×2

0 < |c| < 1

Stauchen

z. B. 0.5v: Länge ÷2

c < 0

Richtungsumkehr

z. B. -v: entgegengesetzte Richtung

c = 0

Stauchen zu einem Punkt

z. B. 0v = Nullvektor

Die Skalarmultiplikation ändert nur die "Länge" des Vektors, nicht die Richtung der Geraden, auf der er liegt (negative Zahlen kehren die Richtung um, aber er bleibt auf derselben Geraden).

Diese Eigenschaft heißtKollinearität– die beiden Vektoren vor und nach der Skalarmultiplikation liegen immer auf derselben Geraden.


Alltagsbeispiele

Vektoraddition: Mehrsegmentige Wege in der Navigation

Von zu Hause aus gehst du zuerst 300 m nach Osten (Vektor a = (300, 0)), dann 400 m nach Norden (Vektor b = (0, 400)).

Schließlich bist du 500 m in nordöstlicher Richtung von zu Hause entfernt – das ist a + b = (300, 400).

Skalarmultiplikation: Wiedergabegeschwindigkeit von Videos

Bei normaler Geschwindigkeit dauern 5 Schritte 5 Sekunden. Bei 2× Geschwindigkeit – gleiche Richtung, gleiche Anzahl Schritte – dauert es nur 2.5 Sekunden.

Der Verschiebungsvektor hat die Richtung nicht geändert, aber die "Größe pro Schritt" hat sich verdoppelt – das ist der Effekt von 2v.

Umkehr: den Weg zurückgehen, den du gekommen bist

Du gehst 100 m nach Osten (v = (100, 0)) und willst dann zum Ausgangspunkt zurückkehren – du musst 100 m nach Westen gehen (-v = (-100, 0)).

Das negative Vorzeichen ist der Befehl "Kehrtwende" für die Richtung des Vektors.


Mathematische Definitionen

Vektoraddition

Um zwei Vektoren derselben Dimension zu addieren, addiere die entsprechenden Elemente jeweils.

\[ \mathbf{a} + \mathbf{b} = \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} + \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix} = \begin{bmatrix} a_1 + b_1 \\ a_2 + b_2 \\ \vdots \\ a_n + b_n \end{bmatrix} \]

Voraussetzung: Die beiden Vektoren müssen dieselbe Dimension haben, sonst ist die Addition bedeutungslos.

Vektorsubtraktion

Vektorsubtraktion = Addition des entgegengesetzten Vektors: \( \mathbf{a} - \mathbf{b} = \mathbf{a} + (-\mathbf{b}) \)

Skalarmultiplikation von Vektoren

Ein Skalar c multipliziert mit einem Vektor bedeutet, jedes Element des Vektors mit c zu multiplizieren:

\[ c \cdot \mathbf{v} = c \cdot \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} = \begin{bmatrix} c \cdot v_1 \\ c \cdot v_2 \\ \vdots \\ c \cdot v_n \end{bmatrix} \]

Kurzübersicht der Operationseigenschaften

EigenschaftFormelIntuition
Kommutativgesetz\( \mathbf{a} + \mathbf{b} = \mathbf{b} + \mathbf{a} \)Egal, welches Teilstück du zuerst gehst, es ist dasselbe
Assoziativgesetz\( (\mathbf{a}+\mathbf{b})+\mathbf{c} = \mathbf{a}+(\mathbf{b}+\mathbf{c}) \)Egal, wie du die Wege gruppierst, es ist dasselbe
Distributivgesetz\( c(\mathbf{a}+\mathbf{b}) = c\mathbf{a} + c\mathbf{b} \)Erst addieren, dann strecken = erst strecken, dann addieren

Python-Praxis

Beispiel

import numpy as np

# Zwei Vektoren erstellen
a_example = np.array([3, 1])    # a = (3, 1)
b_example = np.array([1, 2])    # b = (1, 2)

# Vektoraddition: entsprechende Positionen addieren
add_result = a_example + b_example
print("a + b =", add_result)    # [4, 3]

# Vektorsubtraktion
sub_result = a_example - b_example
print("a - b =", sub_result)    # [2, -1]

# Skalarmultiplikation: jedes Element mit einem Skalar multiplizieren
c = 2.5
scale_result = c * a_example
print(f"{c} * a =", scale_result)  # [7.5, 2.5]

# Negativer Vektor: genau entgegengesetzte Richtung
neg = -a_example
print("-a =", neg)              # [-3, -1]

# NumPy-Broadcasting: Skalar wirkt direkt auf jedes Element des Vektors
print("a + 10 =", a_example + 10)   # Addiere 10 zu jedem Element
print("a * 3  =", a_example * 3)    # Multipliziere jedes Element mit 3
a + b = [4 3]
a - b = [2 -1]
2.5 * a = [7.5 2.5]
-a = [-3 -1]
a + 10 = [13 11]
a * 3  = [9 3]

Beispiel

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

example_a = np.array([3, 1])
example_b = np.array([1, 2])
example_sum = example_a + example_b

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# Linke Abbildung: Dreiecksregel
for ax, title in zip(axes, ['Dreiecksregel', 'Parallelogrammregel']):
    ax.set_xlim(-1, 6); ax.set_ylim(-1, 5)
    ax.axhline(y=0, color='gray', lw=0.5); ax.axvline(x=0, color='gray', lw=0.5)
    ax.set_aspect('equal'); ax.grid(True, alpha=0.3); ax.set_title(title)

# Dreiecksregel zeichnen
ax = axes[0]
ax.arrow(0, 0, example_a[0], example_a[1], head_width=0.2, head_length=0.2,
         fc='#e74c3c', ec='#e74c3c', lw=2, label='a')
ax.arrow(example_a[0], example_a[1], example_b[0], example_b[1],
         head_width=0.2, head_length=0.2, fc='#3498db', ec='#3498db', lw=2, label='b')
ax.arrow(0, 0, example_sum[0], example_sum[1], head_width=0.2, head_length=0.2,
         fc='#2E7DCC', ec='#2E7DCC', lw=2, ls='dashed', label='a+b')
ax.legend()

# Parallelogrammregel zeichnen
ax = axes[1]
ax.arrow(0, 0, example_a[0], example_a[1], head_width=0.2, head_length=0.2,
         fc='#e74c3c', ec='#e74c3c', lw=2, label='a')
ax.arrow(0, 0, example_b[0], example_b[1], head_width=0.2, head_length=0.2,
         fc='#3498db', ec='#3498db', lw=2, label='b')
ax.arrow(example_a[0], example_a[1], example_b[0], example_b[1],
         head_width=0.2, head_length=0.2, fc='#3498db', ec='#3498db', lw=1.5, ls='dotted', alpha=0.6)
ax.arrow(example_b[0], example_b[1], example_a[0], example_a[1],
         head_width=0.2, head_length=0.2, fc='#e74c3c', ec='#e74c3c', lw=1.5, ls='dotted', Alpha=0.6)
ax.arrow(0, 0, example_sum[0], example_sum[1], head_width=0.2, head_length=0.2,
         fc='#2E7DCC', ec='#2E7DCC', lw=2, ls='dashed', label='a+b')
ax.legend()
plt.tight_layout(); plt.show()

Interaktive Demo zur Vektoraddition

Ziehen Sie die Endpunkte des roten Vektors a und des blauen Vektors b unten und beobachten Sie, wie sich der grüne resultierende Vektor a+b in Echtzeit ändert. Erleben Sie die Dreiecksregel und die Parallelogrammregel:


Anwendungsszenarien in der KI

Semantische Operationen mit Wortvektoren

Die berühmteste Entdeckung von Word-Embedding-Modellen wie Word2Vec und GloVe: Vektoraddition und -subtraktion haben eine semantische Bedeutung.

\[ \text{vec}(\text{König}) - \text{vec}(\text{Mann}) + \text{vec}(\text{Frau}) \approx \text{vec}(\text{Königin}) \]

Subtraktion entfernt die Merkmalskomponente "männlich", und Addition fügt die Merkmalskomponente "weiblich" hinzu. Der resultierende Vektor liegt im Embedding-Raum am nächsten bei "Königin".

Diese Art von semantischer Operation ist nicht auf das Geschlecht beschränkt — "Paris - Frankreich + Italien ≈ Rom" funktioniert nach demselben Prinzip. Vektoraddition und -subtraktion wirken hier als "Merkmalsbearbeitung".

Bias in neuronalen Netzen

In der Berechnung jedes Neurons \( y = Wx + b \) ist +b eine Vektoraddition — der Bias verschiebt das Ergebnis von wx als Ganzes.

Ohne den Bias b wäre die Ausgabe des Modells bei x=0 notwendigerweise 0, was die Ausdruckskraft des Modells stark einschränkt. Der Bias entspricht der Zuweisung eines "Standardaktivierungswerts" an jedes Neuron.

Gradientenaktualisierung

Die Parameteraktualisierung während des Trainings \( \theta_{new} = \theta_{old} - \eta \nabla J \) ist eine Kombination aus Skalarmultiplikation (Lernrate × Gradient) und Vektorsubtraktion.

Die Skalarmultiplikation steuert die Größe jeder Aktualisierung (je größer die Lernrate, desto größer der Schritt), und die Subtraktion bewegt die Parameter in Richtung abnehmenden Verlusts.

Datenvorverarbeitung: Mittelwertzentrierung

Vor dem Training eines neuronalen Netzes wird häufig eine "Mittelwertsubtraktion" auf die Daten angewendet: \( x_{norm} = x - \mu \). Dies ist eine Vektorsubtraktion — sie verschiebt das Datenzentrum zum Ursprung, was dem Gradientenabstieg hilft, schneller zu konvergieren.


Weitere Erweiterungen