Die Texte in diesem Artikel wurden teilweise mit Hilfe künstlicher Intelligenz erarbeitet und von uns korrigiert und überarbeitet. Für die Generierung wurden folgende Dienste verwendet:
Wie wir maschinelles Lernen bei der Erstellung unserer Artikel einsetzenEinführung
Ob ChatGPT (mit dem zugrunde liegenden GPT4) oder Forschungsprojekte zum autonomen Fahren, eines haben diese Projekte gemeinsam: große Datenmengen. Große Datenmengen stellen die Entwickler von “Deep Learning”-Modellen vor verschiedene Herausforderungen, wie z.B. enormer Hardwarebedarf, schwierige oder unmögliche Visualisierung, (extrem) lange Trainingszeiten oder schlechte Trainingsergebnisse aufgrund des Fluchs der Dimensionalität. Um die Dimensionalität eines Datensatzes zu reduzieren und dennoch relevante Informationen zu erhalten, wurde die Dimensionalitätsreduktion mit verschiedenen Algorithmen entwickelt. In diesem Beitrag möchte ich das Prinzip der Random Projections vorstellen.
Mathematische Grundlagen
Um über die mathematischen Grundlagen der Random Projections zu sprechen, nehmen wir an das wir Daten aus einem euklidischen Raum mit hoher Dimension haben, beispielsweise wobei .
Die euklidische Eigenschaft des Vektorraums ist notwendig, um Abstände zwischen zwei (oder mehreren) Punkten in unserem Vektorraum berechnen zu können.
Weiter nehmen wir an, dass groß genug ist und wir Daten aus in einen Raum kleiner Dimension bringen wollen, also mit und . In diesem Fall können wir auf das Johnson–Lindenstrauss-Lemma zurückgreifen.
Das Johnson–Lindenstrauss-Lemma besagt, dass wir den oben beschriebenen Prozess umsetzen können uns ein solches existiert, welches die Punkten aus in einbetten kann und die Distanzen zwischen den Punkten aus ungefähr in beibehält. 1 2 3 4
Die Erhaltung der Distanzen zwischen den einzelnen Punkten ist hierbei von großer Wichtigkeit, da diese die Unterschiedlichkeit der einzelnen Datenpunkt beschreibt. Würden Distanzen nicht (grob) erhalten bleiben, könnten so zwei (potenziell) sehr unterschiedliche Datenpunkte in sehr ähnlich erscheinen, obwohl diese objektiv sich nicht ähnlich sind.
Der noch fehlende Schritt zum reduzieren des Datensatzes beinhaltet die Auswahl der Datenpunkte. Dies wird bei Random Projections erreicht, indem wir eine Zufallsmatrix generieren, wobei die Anzahl der Datenpunkte im Datensatz darstellt.
Eine Zufallsmatrix ist kurzgesagt eine Matrix, deren Elemente Zufallsvariablen sind.
Zur Generierung der Elemente können nun viele Ansätze verwendet werden. Häufig werden als Elemente einer Gauss’schen Normalverteilung angenommen. Hierzu gibt es effiziente Methoden zur Generierung dieser Elemente. Alternativ wurde gezeigt, dass die Generierung durch eine bedeutend einfachere Verteilung erzeugt werden können: 1 5 6 7
Mit der hier vorgestellten Methode der Zufallszahlenziehung kann eine höhere Effizienz in Bezug auf die benötigte Zeit erreicht werden, auch wenn die Ergebnisse möglicherweise etwas schlechter ausfallen.
Anwendungsbeispiel
Als Anwendungsbeispiel verwenden wir einen Datensatz, der im Idealfall relativ viele Eingabedimensionen aufweisen kann. Bilder eignen sich hierfür ideal, da sie bereits bei kleinen Bildgrößen eine hohe Anzahl an Eingansdimensionen aufweisen. Im Rahmen dieser Arbeit haben wir uns entschieden, mit dem Datensatz colorectal_histology zu arbeiten. Dieser Datensatz enthält Bilder von verschiedenen Gewebearten, wobei der Schwerpunkt des Datensatzes auf Darmkrebs liegt. Ein Algorithmus soll diesen Datensatz in insgesamt acht verschiedene Gewebetypen klassifizieren. 8
Die Bilder des Datensatzes sind insgesamt Pixel hoch, Pixel breit und auf drei verschiedene Farbkanäle verteilt, liegen also als RBG-Bilder vor. Wir erhalten also einen Datensatz, der insgesamt die Eingabedimensionen hat.
Unser Ziel wird es nun sein zu zeigen, dass Random Projections die Klassifikation verbessern können. Um ein Beispiel zu schreiben, beginnen wir mit allen notwendigen Imports:
Hinweis: Dieses Skript läuft auf Tensorflow mit der Version 2.12.0.
Anschließend laden wir den Datensatz aus dem Tensorflow-Datensatz und verarbeiten ihn, so dass wir alle Bilder und alle Labels haben:
Um interessante Ergebnisse zu erhalten, wird im nächsten Schritt ein Train-Test-Split mit einem Verhältnis von erstellt.
Wichtig: der Tag
replace=False
innerhalb vonnp.random.choice(...)
verhindert die Doppelung von Indizes. Ohne diesen Zusatz erhalten wir keinen korrekten Train-Test-Split.
Der nächste Schritt besteht darin, ein Modell zu erstellen, das alle Eingabedaten verwendet, um eine Klassifizierung auf der Grundlage des Datensatzes durchzuführen. Dabei handelt es sich nicht um ein speziell optimiertes Modell, sondern um ein einfaches neuronales Netz zur Veranschaulichung des Prozesses. In der Realität wäre dies ein für die Aufgabe optimiertes Modell.
Dann trainieren wir dieses Modell. Die Auswertung des Modells kann automatisch erfolgen.
Aus dieser Grafik können wir erkennen, dass unser Training leider nicht sehr stabil ist. Dafür kann es es mehrere Gründe geben:
- Fehlerhafte Einstellung der Trainingsepochen,
- Fehlerhafte Einstellung der Batch Size,
- Fehlerhafte Architektur des neuronalen Netzes,
- Ein zu kleiner Datensatz oder
- Zu hohe Eingangsdimensionen des Datensatzes.
Letztendlich kann dies leider auf viele Faktoren zurückzuführen sein. Wir können jedoch die Eingangsdimensionen des Datensatzes sehr gut beeinflussen. Dazu verwenden wir nun die bereits besprochenen Random Projections.
Eine genauere Betrachtung der Daten des reduzierten Datensatzes zeigt, dass die Anzahl der Merkmale von insgesamt auf Merkmale reduziert werden konnte. Dies entspricht einer Reduktion von der Daten. Um den Effekt der Dimensionalitätsreduktion zu demonstrieren, verwenden wir ein Neuronales Netz mit identischen Merkmalen und trainieren es vollständig auf dem reduzierten Datensatz:
Die Trainingsgenauigkeit und Testgenauigkeit haben wir zur Veranschaulichung einmal visualisert:
Anschließend können wir alle hier produzierten Ergebnisse miteinander vergleichen.
Name | Vollständiger Datensatz | Reduzierter Datensatz |
---|---|---|
Maximale Trainingsgenauigkeit | ||
Finale Trainingsgenauigkeit | ||
Maximale Testgenauigkeit | ||
Finale Testgenauigkeit | ||
Anzahl von Eingangspixeln | ||
Ausführungszeit | ||
Trainingsszeit |
Alle Berechnungen wurden mittels der Hardware von Google Colab durchgeführt. Experimente können dort wiederholt werden, obwohl beispielsweise die Ausführungszeit aufgrund der Verfügbarkeit von Hardware bei Google Colab schwanken kann.
Der Parameter Ausführungszeit spezifiziert uns, wieviel Zeit die Dimensionality Reduction unter Verwendung der Random Projections in Anspruch genommen hat.
Alles in allem zeigt sich, dass eine Dimensionality Reduction im Rahmen des Preprocessings sehr gut dabei helfen kann, die Genauigkeit eines Modells zu verbessern. Dies ist grundsätzlich nicht auf neuronale Netze beschränkt, sondern kann auch bei anderen “Machine Learning”-Techniken hilfreich sein. Ebenso wichtig ist die Reduzierung der Trainingszeit, welches Kosten spart.
Die Verbesserung des Trainings- und Testverhaltes beim Training mit dem reduzierten Datensatz kann auf den Fluch der Dimensionalität zurückgeführt werden.
Vor- und Nachteile von Random Projections
Random Projections haben eine Reihe von Vor- und Nachteilen aufgrund der stochastischen Natur des Algorithmus. Als Gegenpart für Vergleiche zu diesem Algorithmus wird häufig vor allem Principal Component Analysis (PCA) genannt.
Vorteile
Das Verfahren zeichnet sich durch eine Reihe positiver Eigenschaften aus: 1 7 9
-
Random Projections sind unheimlich schnell. Die Zeitkomplexität von Random Projections liegt bei , was bedeutend geringer ist als bei der Principal Component Analysis.
-
Random Projections sind nicht so stark durch Ausreißer beeinflusst. Dies ist vermutlich ein Resultat der stochastischen Natur des Verfahrens.
Nachteile
Im Vergleich mit der Principal Component Analysis weisen die Random Projections eine Reihe von Nachteilen auf: 9 10
- Random Projections sind nicht so effizient wie dies die Principal Component Analysis ist. In der Theorie ist diese das optimale Verfahren zur Reduzierung der Dimension eines Datensatzes.
Anwendungsgebiete
Random Projections werden bereits in einigen Bereichen von Big Data verwendet. Hier sind einige Beispiele: 9 11
-
Sprach- und Stimmverarbeitung: In diesem Bereich kann es durch Tonaufnahmen zur Verrauschung der Eingangsdaten kommen. Die Projektion der Daten auf einen zufälligen niedrigerdimensionalen Unterraum liefert Ergebnisse, die mit herkömmlichen Dimensionsreduktionsmethoden wie der Principal Component Analysis vergleichbar sind.
-
Bild- und Videoverarbeitung: Bei sowohl der Bild- als auch Videobearbeitung sind wir bei sehr großen Datenmengen, bei welcher die Effizienz von Random Projections vorteilhaft sind.
-
Bioinformatik: Bioinformatik: Genexpressionsprofile können als Matrizen mit mehr als zehntausend kontinuierlichen Werten betrachtet werden. Hohe Dimensionalität führt zu belastenden Berechnungen und Problemen mit dem Fluch der Dimensionalität. Daher werden Dimensionsreduktionstechniken oft in maschinellen Lernaufgaben angewendet, um diese Probleme zu mildern.