Inhaltsverzeichnis[Ausblenden][Zeigen]
Die als „Graph Neural Networks“ (GNNs) bekannten Deep-Learning-Techniken arbeiten im Graphenbereich. Diese Netzwerke haben in letzter Zeit in einer Vielzahl von Bereichen Verwendung gefunden, darunter Computervision, Empfehlungssysteme und kombinatorische Optimierung, um nur einige zu nennen.
Darüber hinaus können diese Netzwerke verwendet werden, um komplexe Systeme darzustellen, darunter soziale Netzwerke, Protein-Protein-Interaktionsnetzwerke, Wissensgraphen und andere in mehreren Studienbereichen.
Der nicht-euklidische Raum ist der Ort, an dem Graphdaten im Gegensatz zu anderen Datentypen wie Bildern operieren. Um Knoten zu klassifizieren, Verbindungen vorherzusagen und Clusterdaten zu erstellen, wird die Graphanalyse verwendet.
In diesem Artikel untersuchen wir den Graphen Neurales Netzwerk im Detail, seine Typen, sowie praktische Beispiele mit PyTorch.
Also, was ist Graph?
Ein Graph ist eine Art Datenstruktur, die aus Knoten und Scheitelpunkten besteht. Die Verbindungen zwischen den verschiedenen Knoten werden durch die Knoten bestimmt. Wenn die Richtung in den Knoten angegeben ist, wird der Graph als gerichtet bezeichnet; andernfalls ist es ungerichtet.
Eine gute Anwendung von Graphen ist die Modellierung der Beziehungen zwischen verschiedenen Individuen in a Social Network. Beim Umgang mit komplexen Sachverhalten wie Links und Austausch sind Diagramme sehr hilfreich.
Sie werden von Empfehlungssystemen, semantischer Analyse, Analyse sozialer Netzwerke und Mustererkennung verwendet
. Das Erstellen graphbasierter Lösungen ist ein brandneues Gebiet, das ein aufschlussreiches Verständnis komplexer und miteinander verknüpfter Daten bietet.
Graph Neuronales Netzwerk
Neuronale Graphnetzwerke sind spezialisierte neuronale Netzwerktypen, die mit einem Graphdatenformat arbeiten können. Graph Embedding und Convolutional Neural Networks (CNNs) haben einen erheblichen Einfluss auf sie.
Graph Neural Networks werden in Aufgaben eingesetzt, die das Vorhersagen von Knoten, Kanten und Graphen umfassen.
- CNNs werden verwendet, um Bilder zu klassifizieren. In ähnlicher Weise werden zur Vorhersage einer Klasse GNNs auf das Pixelgitter angewendet, das die Graphstruktur darstellt.
- Textkategorisierung mit wiederkehrenden neuronalen Netzen. GNNs werden auch mit Grapharchitekturen verwendet, bei denen jedes Wort in einer Phrase ein Knoten ist.
Um Knoten, Kanten oder vollständige Graphen vorherzusagen, werden neuronale Netze verwendet, um GNNs zu erstellen. Eine Vorhersage auf Knotenebene kann beispielsweise ein Problem wie die Spam-Erkennung lösen.
Die Linkvorhersage ist ein typischer Fall in Empfehlungssystemen und könnte ein Beispiel für ein kantenweises Vorhersageproblem sein.
Graph neuronale Netzwerktypen
Es gibt zahlreiche neuronale Netzwerktypen, und Convolutional Neural Networks sind in den meisten von ihnen vorhanden. In diesem Teil lernen wir die bekanntesten GNNs kennen.
Graph Convolutional Networks (GCNs)
Sie sind vergleichbar mit klassischen CNNs. Es erwirbt Eigenschaften, indem es nahe gelegene Knoten betrachtet. Die Aktivierungsfunktion wird von GNNs verwendet, um Nichtlinearität hinzuzufügen, nachdem Knotenvektoren aggregiert und die Ausgabe an die dichte Schicht gesendet wurden.
Es besteht im Wesentlichen aus einer Graph-Faltung, einer linearen Schicht und einer Nicht-Lerner-Aktivierungsfunktion. GCNs gibt es in zwei Hauptvarianten: Spectral Convolutional Networks und Spatial Convolutional Networks.
Graph Auto-Encoder-Netzwerke
Es verwendet einen Encoder, um zu lernen, wie man Graphen darstellt, und einen Decoder, um zu versuchen, Eingabegraphen zu rekonstruieren. Es gibt eine Flaschenhalsschicht, die den Encoder und den Decoder verbindet.
Da Auto-Encoder eine hervorragende Arbeit beim Umgang mit dem Klassengleichgewicht leisten, werden sie häufig bei der Link-Vorhersage verwendet.
Rekurrente Graph Neural Networks (RGNNs)
In multirelationalen Netzwerken, in denen ein einzelner Knoten zahlreiche Beziehungen hat, lernt er das optimale Diffusionsmuster und kann die Graphen verwalten. Um die Glätte zu erhöhen und eine Überparametrisierung zu reduzieren, werden Regularisierer in dieser Form eines neuronalen Graphnetzwerks verwendet.
Um bessere Ergebnisse zu erzielen, benötigen RGNNs weniger Rechenleistung. Sie werden für die Textgenerierung, Spracherkennung, maschinelle Übersetzung, Bildbeschreibung, Video-Tagging und Textzusammenfassung verwendet.
Gated Neural Graph Networks (GGNNs)
Wenn es um langfristig abhängige Aufgaben geht, übertreffen sie RGNNs. Durch das Einbeziehen von Knoten-, Kanten- und Temporal-Gates in langfristige Abhängigkeiten verbessern Gated-Graph-Neuronalnetzwerke rekurrente Graph-Neuronalnetzwerke.
Die Gates funktionieren ähnlich wie Gated Recurrent Units (GRUs), da sie zum Abrufen und Vergessen von Daten in verschiedenen Phasen verwendet werden.
Implementieren von Graph Neural Network mit Pytorch
Das spezifische Problem, auf das wir uns konzentrieren werden, ist ein allgemeines Problem bei der Kategorisierung von Knoten. Wir haben ein beträchtliches soziales Netzwerk namens musae-github, das aus der offenen API kompiliert wurde, für GitHub-Entwickler.
Kanten zeigen die gegenseitigen Follower-Beziehungen zwischen den Knoten, die Entwickler (Plattformbenutzer) darstellen, die in mindestens 10 Repositories mit Sternchen gespielt haben (beachten Sie, dass das Wort gegenseitig auf eine ungerichtete Beziehung hinweist).
Basierend auf dem Standort des Knotens, den markierten Repositories, dem Arbeitgeber und der E-Mail-Adresse werden die Knoteneigenschaften abgerufen. Vorhersagen, ob ein GitHub-Benutzer ein Webentwickler oder ein Entwickler von maschinellem Lernen ist unsere Aufgabe.
Als Basis für diese Targeting-Funktion diente die Berufsbezeichnung des jeweiligen Nutzers.
PyTorch installieren
Um zu beginnen, müssen wir zuerst installieren PyTorch. Sie können es entsprechend Ihrer Maschine konfigurieren hier. Hier ist mein:
Module importieren
Jetzt importieren wir die notwendigen Module
Importieren und Erkunden der Daten
Der folgende Schritt besteht darin, die Daten zu lesen und die ersten fünf Zeilen und die letzten fünf Zeilen aus der Etikettendatei zu zeichnen.
Nur zwei der vier Spalten – die ID des Knotens (d. h. der Benutzer) und ml_target, die 1 ist, wenn der Benutzer Mitglied der Community für maschinelles Lernen ist, und andernfalls 0 – sind in dieser Situation für uns relevant.
Da es nur zwei Klassen gibt, können wir jetzt sicher sein, dass unsere Aufgabe eine Frage der binären Klassifizierung ist.
Aufgrund erheblicher Klassenungleichgewichte kann der Klassifikator einfach annehmen, welche Klasse die Mehrheit ist, anstatt die unterrepräsentierte Klasse zu bewerten, wodurch das Klassengleichgewicht zu einem weiteren entscheidenden Faktor wird, den es zu berücksichtigen gilt.
Das Zeichnen des Histogramms (Häufigkeitsverteilung) zeigt ein gewisses Ungleichgewicht, da es weniger Klassen aus dem maschinellen Lernen (Label = 1) als aus den anderen Klassen gibt.
Feature-Codierung
Die Eigenschaften der Knoten informieren uns über das Merkmal, das jedem Knoten zugeordnet ist. Durch die Implementierung unserer Methode zur Codierung von Daten können wir diese Merkmale sofort codieren.
Wir möchten diese Methode verwenden, um einen kleinen Teil des Netzwerks (z. B. 60 Knoten) für die Anzeige zu kapseln. Der Code ist hier aufgeführt.
Diagramme entwerfen und darstellen
Wir verwenden Fackelgeometrie. Daten, um unser Diagramm zu erstellen.
Um einen einzelnen Graphen mit unterschiedlichen (optionalen) Eigenschaften zu modellieren, werden Daten verwendet, die ein einfaches Python-Objekt sind. Durch die Verwendung dieser Klasse und der folgenden Attribute – die alle Fackeltensoren sind – erstellen wir unser Graphobjekt.
Die Form des Wertes x, der den codierten Knotenmerkmalen zugeordnet wird, ist [Anzahl Knoten, Anzahl Merkmale].
Die Form von y ist [Anzahl der Knoten] und wird auf die Knotenbeschriftungen angewendet.
Kantenindex: Um einen ungerichteten Graphen zu beschreiben, müssen wir die ursprünglichen Kantenindizes erweitern, um die Existenz von zwei unterschiedlichen gerichteten Kanten zu ermöglichen, die dieselben zwei Knoten verbinden, aber in entgegengesetzte Richtungen zeigen.
Beispielsweise wird zwischen den Knoten 100 und 200 ein Kantenpaar benötigt, von dem eine von Knoten 200 auf 100 und die andere von 100 auf 200 zeigt. Wenn die Kantenindizes angegeben sind, kann der ungerichtete Graph auf diese Weise dargestellt werden. [2,2*Anzahl der ursprünglichen Kanten] wird die Tensorform sein.
Wir erstellen unsere Draw-Graph-Methode, um einen Graphen anzuzeigen. Der erste Schritt besteht darin, unser homogenes Netzwerk in einen NetworkX-Graphen umzuwandeln, der dann mit NetworkX.draw gezeichnet werden kann.
Erstellen Sie unser GNN-Modell und trainieren Sie es
Wir beginnen damit, den gesamten Datensatz zu codieren, indem wir encode data mit light=False ausführen und dann construct graph mit light=False aufrufen, um den gesamten Graphen zu erstellen. Wir werden nicht versuchen, dieses große Diagramm zu zeichnen, da ich annehme, dass Sie einen lokalen Computer mit begrenzten Ressourcen verwenden.
Masken, die binäre Vektoren sind, die unter Verwendung der Ziffern 0 und 1 identifizieren, welche Knoten zu jeder spezifischen Maske gehören, können verwendet werden, um der Trainingsphase mitzuteilen, welche Knoten während des Trainings enthalten sein sollten, und um der Inferenzphase mitzuteilen, welche Knoten die Testdaten sind. Fackel geometrisch.transformiert.
Eine Teilung auf Knotenebene kann mit den Eigenschaften training mask, val mask und test mask der Klasse AddTrainValTestMask hinzugefügt werden, die verwendet werden können, um ein Diagramm zu erstellen und es uns zu ermöglichen, anzugeben, wie unsere Masken konstruiert werden sollen.
Wir verwenden nur 10 % für das Training und verwenden 60 % der Daten als Testsatz, während wir 30 % als Validierungssatz verwenden.
Jetzt stapeln wir zwei GCNConv-Layer, von denen der erste eine Ausgabe-Feature-Anzahl von hat, die der Anzahl der Features in unserem Diagramm als Eingabe-Features entspricht.
In der zweiten Schicht, die Ausgangsknoten gleich der Anzahl unserer Klassen enthält, wenden wir eine Relu-Aktivierungsfunktion an und liefern die latenten Merkmale.
Kantenindex und Kantengewicht sind zwei der vielen Optionen x, die GCNConv in der Vorwärtsfunktion akzeptieren kann, aber in unserer Situation benötigen wir nur die ersten beiden Variablen.
Trotz der Tatsache, dass unser Modell in der Lage sein wird, die Klasse jedes Knotens im Diagramm vorherzusagen, müssen wir dennoch die Genauigkeit und den Verlust für jeden Satz separat in Abhängigkeit von der Phase bestimmen.
Beim Training wollen wir zum Beispiel nur das Trainingsset nutzen, um die Genauigkeit und den Trainingsverlust zu ermitteln, und da kommen unsere Masken ins Spiel.
Um den angemessenen Verlust und die Genauigkeit zu berechnen, definieren wir die Funktionen des maskierten Verlusts und der maskierten Genauigkeit.
Das Modell trainieren
Jetzt haben wir den Trainingszweck definiert, für den die Taschenlampe verwendet werden soll. Adam ist ein Meisteroptimierer.
Wir werden das Training für eine bestimmte Anzahl von Epochen durchführen und dabei die Validierungsgenauigkeit im Auge behalten.
Wir zeichnen auch die Verluste und Genauigkeiten des Trainings über verschiedene Epochen hinweg auf.
Nachteile von Graph Neural Network
Die Verwendung von GNNs hat einige Nachteile. Wann wir GNNa einsetzen und wie wir die Leistung unserer Modelle für maschinelles Lernen verbessern können, wird uns klar, nachdem wir sie besser verstanden haben.
- Während GNNs flache Netzwerke sind, typischerweise mit drei Schichten, können die meisten neuronalen Netzwerke tief gehen, um die Leistung zu verbessern. Aufgrund dieser Einschränkung sind wir nicht in der Lage, bei großen Datensätzen Spitzenleistungen zu erbringen.
- Es ist schwieriger, ein Modell auf Graphen zu trainieren, da ihre strukturelle Dynamik dynamisch ist.
- Aufgrund der hohen Rechenkosten dieser Netzwerke stellt die Skalierung des Modells für die Produktion eine Herausforderung dar. Das Skalieren der GNNs für die Produktion wird schwierig, wenn Ihre Diagrammstruktur riesig und kompliziert ist.
Zusammenfassung
In den letzten Jahren haben sich GNNs zu leistungsstarken und effektiven Werkzeugen für Fragen des maschinellen Lernens im Graphenbereich entwickelt. In diesem Artikel wird ein grundlegender Überblick über graphische neuronale Netze gegeben.
Danach können Sie mit der Erstellung des Datasets beginnen, das zum Trainieren und Testen des Modells verwendet wird. Um zu verstehen, wie es funktioniert und wozu es in der Lage ist, können Sie auch viel weiter gehen und es mit einer anderen Art von Datensatz trainieren.
Viel Spaß beim Codieren!
Hinterlassen Sie uns einen Kommentar