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
| Eigenschaft | Formel | Intuition |
|---|---|---|
| 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
# 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 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