Die Kosinusfunktion ist eines dieser mathematischen Konzepte, die zeitlos sind. Ursprünglich dazu gedacht, das Verhältnis zwischen den Seiten und Winkeln eines Dreiecks zu beschreiben, hat sie längst ihren Weg in die moderne Informatik gefunden. In ihrer einfachsten Form zeigt sie, wie zwei Richtungen zueinander stehen, ob sie in dieselbe Richtung zeigen, entgegengesetzt oder irgendwo dazwischen.
Man kann sich das bildlich vorstellen. Wenn zwei Autos in dieselbe Richtung fahren, ist der Winkel zwischen ihren Bewegungen null Grad, der Kosinus also 1. Fahren sie aufeinander zu, beträgt der Winkel 180 Grad, der Kosinus -1. Und wenn eines quer über die Kreuzung fährt, während das andere geradeaus weiterfährt, liegt der Kosinus genau bei 0.
Genau dieses Prinzip nutzt die Informatik. Ob zwei Vektoren in einem neuronalen Netz, zwei Wortbedeutungen in einem Sprachmodell oder zwei Bilder im selben semantischen Raum, der Kosinus verrät, wie ähnlich sie einander sind.
Diese geometrische Idee ist heute in vielen Bereichen unverzichtbar. Ob wir Bilder vergleichen, die Ähnlichkeit zwischen Wörtern messen, zeitliche Nähe zwischen Daten bestimmen oder geografische Entfernungen berechnen, der Kosinus liefert ein stabiles, skalierungsunabhängiges Maß für Nähe.
Von Dreiecken zu Vektoren
Wenn zwei Vektoren in dieselbe Richtung zeigen, ist der Kosinus des Winkels zwischen ihnen gleich 1. Stehen sie senkrecht aufeinander, ist er 0. Zeigen sie in entgegengesetzte Richtungen, ist er -1. Dieser einfache Wertebereich von -1 bis 1 macht den Kosinus zu einem natürlichen Maß für Ähnlichkeit.
In CardAI nutze ich genau diese Eigenschaft, um Einbettungsvektoren zu vergleichen, also die 512-dimensionalen numerischen Fingerabdrücke, die jede Postkarte beschreiben. Zwei Karten mit ähnlichem Motiv haben Vektoren, die fast in dieselbe Richtung zeigen, und ihre Kosinus-Ähnlichkeit liegt nahe bei 1. Völlig unterschiedliche Bilder weisen dagegen aufeinander orthogonale Richtungen auf, ihre Kosinus-Ähnlichkeit liegt nahe bei 0.
Warum Kosinus und nicht Abstand
Man könnte sich fragen, warum man nicht einfach den Abstand zwischen den Vektoren misst. Der Grund liegt in der Bedeutung der Einbettungen. Ihre Länge ist oft zufällig, ihre Richtung hingegen trägt die Bedeutung. Der Kosinus normalisiert beide Vektoren vor dem Vergleich und konzentriert sich nur auf ihre Orientierung. Dadurch ist er unempfindlich gegenüber Helligkeit, Kontrast oder Kalibrierungsunterschieden, genau das, was man bei der Analyse von Bildern oder semantischen Strukturen braucht.
Über Bilder hinaus, Daten und Orte
Dasselbe Prinzip funktioniert weit über Bilddaten hinaus.
Wenn man Zeit als zyklische Variable betrachtet, etwa indem man Kalendertage auf einem Einheitskreis abbildet, beschreibt der Kosinus elegant, wie nah zwei Daten zueinander liegen. Jeder Tag des Jahres entspricht dabei einem Punkt auf dem Kreis, dessen Winkel durch $\theta = 2\pi \cdot t / 365$ bestimmt wird.
Der Kosinus des Winkelunterschieds $\cos(\theta_1 - \theta_2)$ liefert dann ein Maß für die zeitliche Nähe zweier Daten. Der Unterschied zwischen dem 1. und dem 5. März ergibt einen Wert nahe 1, zwischen dem 1. März und dem 1. September liegt der Kosinus nahe 0, und zwischen dem 1. März und dem 1. Dezember wird er negativ.
Besonders deutlich wird der Vorteil dieser Darstellung am Jahresende. In einer linearen Skala liegt der 31. Dezember weit entfernt vom 1. Januar, obwohl beide Tage unmittelbar aufeinander folgen. Auf dem Einheitskreis dagegen liegen sie fast am selben Punkt, der Kosinus des Winkelunterschieds ist nahezu 1. Dadurch bleibt der Jahreszyklus mathematisch glatt und kontinuierlich, ohne die künstlichen Sprungstellen, die bei der einfachen Subtraktion von Datumswerten entstehen.
Auch geografische Berechnungen nutzen den Kosinus. Die Haversine-Formel, mit der Entfernungen auf der Erdoberfläche berechnet werden, basiert auf Kosinuswerten von Breiten- und Längengraden. Wieder ist es die Richtung im Raum, die zählt, nicht der rohe Zahlenwert der Koordinaten.
Die stille Konstante der Ähnlichkeit
Von der klassischen Geometrie bis zur modernen KI, die Kosinusfunktion ist überall. Sie verwandelt Messungen in Beziehungen, und Beziehungen sind die Grundlage von Bedeutung.
In CardAI verbindet sie Postkarten nach Motiv, in Sprachmodellen verbindet sie Wörter nach Bedeutung, in Geoinformationssystemen verbindet sie Orte nach Nähe. Die Kosinusfunktion ist ein stiller Vermittler zwischen Mathematik, Physik und maschinellem Lernen, ein universelles Maß für Ähnlichkeit.
Ein kleines Beispiel in Python
So lässt sich die Idee direkt ausprobieren:
import math
def day_angle(day_of_year):
return 2 * math.pi * day_of_year / 365
def date_similarity(day1, day2):
theta1, theta2 = day_angle(day1), day_angle(day2)
return math.cos(theta1 - theta2)
print(date_similarity(365, 1)) # Nähe zwischen 31. Dez und 1. Jan
print(date_similarity(60, 180)) # März vs. Juni
print(date_similarity(90, 270)) # Frühling vs. Herbst
Die Ausgabe zeigt, dass der 31. Dezember und der 1. Januar fast identisch bewertet werden, während Frühling und Herbst nahezu orthogonal zueinander liegen, genau das, was der Kosinus ausdrücken soll.
Wenn man das Ganze als Kreis betrachtet, liegen 31. Dezember und 1. Januar dicht beieinander, während sich März und September auf gegenüberliegenden Punkten des Einheitskreises befinden. Dadurch entsteht eine kontinuierliche, zyklische Darstellung von Zeit, bei der Anfang und Ende des Jahres nahtlos ineinander übergehen.