Inside X-ROCKET: Das erklärbare ROCKET-Modell
Felix Brunner
Willkommen auf der Brücke, Pilot! In diesem zweiten Teil unserer dreiteiligen Reise werden wir einen detaillierten Blick auf das Innere der X-ROCKET-Implementierung werfen. Nachdem in Teil eins die Voraussetzungen für die Klassifizierung von Zeitreihen und eine grundlegende Einführung in das ROCKET-Modell geschaffen wurden, bietet dieser Artikel einen Überblick über die notwendigen Mechanismen für erklärbare Einbettungen, bevor Teil drei X-ROCKET in ein holpriges Wettrennen auf einem realen Datensatz schickt.
Die Blaupause für Erklärbarkeit
Auch hier besteht unser Ziel darin, einen leistungsfähigen Zeitreihencodierer, das ROCKET, erklärbar zu machen. Eine Möglichkeit, dies zu erreichen, besteht darin, jedes Element der Einbettungsvektoren zu seinen Ursprüngen zurückzuverfolgen und ihnen damit eine Bedeutung zu verleihen. Anders ausgedrückt: Wenn es uns gelingt, jedes Einbettungselement sinnvoll zu benennen, verwandeln wir nachgelagerte Aufgaben effektiv in tabellarische Probleme. Angesichts der Komplexität und Nichtlinearität neuronaler Netze ist dies in der Regel leichter gesagt als getan. Im Fall von ROCKET ist die Architektur jedoch flach genug, um mit ein wenig Technik und Tricks Licht in ihr Innenleben zu bringen. Genauer gesagt wird das MiniROCKET von Dempster et al. (2021) als Ausgangspunkt dienen, dem wir Transparenz hinzufügen, indem wir seine Kodierungsmechanismen vollständig zurückverfolgen. Obwohl Faltungen nicht unbedingt in einem Deep-Learning-Framework implementiert werden müssen, kann dies die Rechengeschwindigkeit durch die Nutzung von GPUs erhöhen. Dementsprechend gibt es bereits gute Implementierungen von verschiedenen ROCKET-Varianten in Python. Zum Beispiel ist der Numpy-Code der Originalautoren Teil der sktime-Bibliothek, und tsai enthält eine GPU-fähige PyTorch-Version davon. Obwohl diese Implementierungen rechnerisch bereits sehr effizient sind, erfordern unsere Bemühungen einige Änderungen, die sich nach einer Umstrukturierung des Modells leichter erreichen lassen.
Gehen wir näher auf die technischen Details der X-ROCKET Implementierung ein. Wie bereits erwähnt, ähneln die ROCKET-Architekturen sehr einfachen CNNs, warum also nicht auch ihre Implementierung wie ein neuronales Netz strukturieren? Das heißt, wir behandeln die Berechnungsschritte als Schichtobjekte und fügen sie entsprechend den Ideen hinter ROCKET zusammen. Genauer gesagt, wir definieren Module für jeden Berechnungsschritt, so dass es einfacher ist, den zugrunde liegenden Berechnungsgraphen zu verstehen. Das folgende Diagramm zeigt schematisch die gesamte Architektur von X-ROCKET. Eine Eingangszeitreihe wird mehreren Dilatationsblöcken parallel zugeführt, von denen jeder aus einem Faltungsmodul, einem Kanalmischmodul und einem Schwellenwert-Pooling-Modul besteht. Nach der sequentiellen Verarbeitung der Daten in seinen Untermodulen gibt jeder Dilatationsblock einen Vektor von Einbettungen aus. Schließlich werden diese Einbettungen zusammengefügt, um die vollständige X-ROCKET-Ausgangseinbettung zu bilden, die von nachgelagerten Modellen aufgegriffen werden kann, um eine Vorhersage zu erstellen - in unserem Fall eine Klassifizierung. Beachten Sie, dass die Interpretierbarkeit der endgültigen Vorhersage davon abhängt, wie erklärbar das nachgelagerte Vorhersagemodell ist. Während erklärbare KI (XAI) ein sehr aktives Forschungsgebiet ist, mit einer ganzen Literatur, die sich damit beschäftigt, Algorithmen erklärbar zu machen, folgen wir dem Vorschlag der Originalautoren, relativ einfache Vorhersageköpfe zu verwenden, die ohne zusätzliche Raffinesse erklärbar sind.
Vollständiger Überblick über die X-ROCKET-Architektur.
Im Folgenden werde ich die verschiedenen Module, aus denen X-ROCKET besteht, näher erläutern.
ROCKET-Konvolutionen
Der erste Schritt bei der Verarbeitung der Daten besteht in der Anwendung von Faltungskernen, die nach festen Mustern in den Daten suchen. Da wir es mit Zeitreihen zu tun haben, sind 1-dimensionale Kerne die richtige Wahl. Die nachstehende Zeichnung veranschaulicht, wie die Faltungen angewendet werden. Bei einer Sequenz von Eingabedaten werden Faltungskerne angewandt, indem sie über die Eingabe geschoben und die elementweisen Produkte im jeweiligen Fenster summiert werden. Auf diese Weise wird die Eingabe nach dem Vorkommen des jeweiligen Musters durchsucht, was zu einer Ausgabe führt, die die gleiche Form wie die Eingabe hat. In der folgenden Abbildung ist zu erkennen, dass die Ausgabesequenz immer dann große Werte aufweist, wenn die Eingabe eine Spitze aufweist. Umgekehrt ist die Ausgabe negativ, wenn es eine Senke in der Eingabe gibt. Das liegt daran, dass in diesem Beispiel die Eingabe nach dem Muster [-1, 2, -1]
gefiltert wird, das selbst die Form eines Spikes hat. X-ROCKET verwendet dieselben 84 Filter mit einer Länge von neun Werten wie in Dempster et al. (2021) vorgeschlagen, aber im Gegensatz zu den Originalautoren polstern wir die Eingaben immer auf, um Ausgabesequenzen gleicher Länge zu erhalten. Um die Erklärbarkeit in diesem Schritt aufrechtzuerhalten, genügt es, die jeder Ausgangssequenz entsprechenden Kernel zu speichern.
Illustration einer 1D-Faltung.
Kanalmischung
Bei multivariaten Zeitreihen, d. h. bei Zeitreihen mit mehreren Kanälen, kann es sinnvoll sein, Korrelationen von Mustern in mehreren Kanälen zu berücksichtigen. Während sich die ursprüngliche Implementierung hauptsächlich auf den univariaten Fall konzentriert und vorschlägt, zufällige Kombinationen von ROCKET-Faltungen naiv zu addieren, möchten wir einen ausgewogenen Vergleich von Merkmalen bieten. Daher entfernt X-ROCKET die Zufälligkeit und bietet stattdessen die Möglichkeit, den Merkmalspool mit Kanalkombinationen bis zu einer bestimmten Reihenfolge zu erweitern. Als zusätzliche Option können Kanäle multiplikativ statt additiv kombiniert werden, um dem Konzept einer Korrelation näher zu kommen. Die Erklärbarkeit in diesem Schritt wird dadurch gewährleistet, dass die Kanäle, aus denen die gemischten Ergebnisse gebildet wurden, gespeichert werden.
Illustration von Kanalkombinationen.
PPV-Schwellenwert-Pooling
Die bisherigen Transformationen haben den Umfang der Daten keineswegs verringert. Das heißt, die Anwendung mehrerer Faltungsfilter auf jeden Kanal und das Hinzufügen von Kombinationen der Eingangskanäle zu den einkanaligen Faltungsausgängen führt zu einer weitaus größeren Anzahl von Ausgangskanälen gleicher Länge als ursprünglich eingegeben. Daher ist es an der Zeit, die zeitliche Dimension durch einen Pooling-Mechanismus zu reduzieren. In Anlehnung an die Vorschläge des Originalpapiers wendet X-ROCKET das Proportion-of-Positive-Values-Pooling (PPV) an. Genauer gesagt werden die Werte in jedem Zwischenkanal mit einem oder mehreren Schwellenwerten pro Kanal versehen, wobei die Schwellenwerte automatisch auf der Grundlage repräsentativer Beispiele in einem ersten Anpassungsschritt ausgewählt werden. Anschließend zählt PPV den Anteil der Werte, die den jeweiligen Schwellenwert über die Zeitachse hinweg überschreiten. Die sich daraus ergebenden Prozentsätze dienen schließlich direkt als Merkmalswerte im Einbettungsvektor. Zur Erklärung können die Elemente im Embedding also eindeutig mit einer Kombination aus Faltungs-Kernel, einem oder mehreren Eingangskanälen und einem Schwellenwert verknüpft werden.
Veranschaulichung der Zusammenführung der Anteile positiver Werte über Schwellenwerte.
Dilatationsblöcke
Da die betrachteten Faltungskerne nur neun Beobachtungen umfassen, ist die Kapazität des Modells bisher auf die Erkennung einer sehr engen Gruppe von Eingangsmerkmalen beschränkt. Um dies zu ändern, werden mehrere Dilatationswerte gleichzeitig auf identische Kernel angewandt, um deren rezeptive Felder zu erweitern. X-ROCKET erreicht dies in der Praxis, indem es die oben erwähnte Abfolge von Faltung, Kanalmischung und PPV-Schwellwertbildung in mehreren Dilatationsblöcken parallel ausführt. Im Prinzip sind Dilatationen ein Standardverfahren im Zusammenhang mit CNNs, aber die meisten Architekturen verwenden in jedem Schritt nur einen einzigen Wert. Eine ähnliche Idee hat sich jedoch kürzlich als vielversprechend erwiesen, um die kontextuellen Fähigkeiten von LLMs drastisch zu verbessern, indem Kontextfenster durch dilatierte Aufmerksamkeit vergrößert werden (siehe Ding et al. (2023)). Um besser zu verstehen, wie die Filterdilatation funktioniert, betrachten Sie die folgende Zeichnung. Die Anwendung eines Dilatationswerts bedeutet, dass der Kernel über einen längeren Zeitraum gestreckt wird und dadurch niedrigere Frequenzen nach den entsprechenden Mustern durchsucht werden. Beispielsweise zeigt die resultierende Aktivierung mit einem Dilatationswert von zwei das Auftreten des Musters bei der Hälfte der Datenfrequenz an. Für die Erklärbarkeit ist es daher wichtig, auch den Dilatationswert zu speichern, der jedem Einbettungselement entspricht.
Veranschaulichung von Frequenzdilatationen.
Das vollständige Modell
Um zum vollständigen Modell zurückzukehren, können wir nun die Teile zusammensetzen. Um den Encoder zu initialisieren, müssen wir einige Hyperparameter wählen, die die genaue Struktur des Modells bestimmen. Zunächst muss die Anzahl der Eingangskanäle in_channels
entsprechend der Anzahl der Kanäle in den Daten festgelegt werden. Zweitens muss für die automatische Auswahl der zu berücksichtigenden Dilatationswerte eine Obergrenze für die Breite der rezeptiven Faltungsfelder festgelegt werden, die sogenannte max_kernel_span
. Normalerweise wählt X-ROCKET dann 20-30 verschiedene Frequenzen aus, die berücksichtigt werden. Als nächstes bestimmt die combination_order
, wie viele Kanäle bei der Suche nach Korrelationen miteinander kombiniert werden. Standardmäßig ist dieses Schlüsselwortargument der Einfachheit halber auf 1 gesetzt. Schließlich begrenzt feature_cap
die Dimensionalität der Ausgabe standardmäßig auf 10.000 Merkmale. X-ROCKET baut dann den Feature-Pool deterministisch auf, d.h. es wird darauf geachtet, alle Kanal-Dilatations-Kernel-Kombinationen zu berücksichtigen. Daher muss die resultierende Anzahl von Merkmalen ein Vielfaches aller möglichen Kombinationen sein und liegt nicht notwendigerweise in der Nähe des angegebenen Wertes. Wenn innerhalb der Merkmalsobergrenze noch Platz ist, werden im Pooling-Schritt mehrere Schwellenwerte auf jede Kanal-Dilatations-Kernel-Kombination angewendet, um zusätzliche Merkmale zu erzeugen.
Um schließlich die Einbettungen in Vorhersagen umzuwandeln, muss der Encoder mit einem Vorhersagemodell kombiniert werden. Da wir an der Interpretierbarkeit interessiert sind, sind erklärbare Modelle hier die richtige Wahl. Nachdem das Problem durch den X-ROCKET-Encoder effektiv tabellarisch strukturiert wurde, sind viele Modelle für tabellarische Daten geeignete Kandidaten. Zum Beispiel bietet scikit-learn eine große Auswahl an aufschlussreichen Algorithmen für tabellarische Daten. Auch Gradient-Boosting-Algorithmen wie XGBoost sind leistungsstarke Alternativen. Beachten Sie, dass die Standardisierung der Einbettungsvektoren ein wesentlicher Zwischenschritt sein kann, um die Interpretierbarkeit einiger dieser Vorhersagealgorithmen zu gewährleisten. Schließlich ist es mit dem X-ROCKET-Code im PyTorch-Framework auch einfach, den Encoder mit einem tiefen neuronalen Feed-Forward-Netzwerk zu kombinieren. Alles, was über eine einzelne lineare Schicht hinausgeht, könnte jedoch auch in diesem Fall schwer zu interpretieren sein.
Im nächsten und letzten Teil werde ich ein einfaches Anwendungsbeispiel der X-ROCKET-Implementierung zeigen, das auch veranschaulicht, welche Art von Erkenntnissen man neben der reinen Vorhersageleistung aus X-ROCKET ableiten kann.
Referenzen
Dempster, A., Schmidt, D. F., & Webb, G. I. (2021, August). Minirocket: A very fast (almost) deterministic transform for time series classification. In Proceedings of the 27th ACM SIGKDD conference on knowledge discovery & data mining (pp. 248–257).
Ding, J., Ma, S., Dong, L., Zhang, X., Huang, S., Wang, W., & Wei, F. (2023). Longnet: Scaling transformers to 1,000,000,000 tokens. arXiv preprint arXiv:2307.02486.
Die Zeichnungen wurden in excalidraw erstellt.
Dieser Artikel entstand im Rahmen des vom Bundesministerium für Bildung und Forschung (BMBF) unter dem Förderkennzeichen 02P20A501 geförderten Projekts "AI-gent3D - KI-gestütztes, generatives 3D-Drucken" unter Koordination des PTKA Karlsruhe.