Table des matières[Cacher][Montrer]
Les techniques d'apprentissage en profondeur connues sous le nom de «réseaux de neurones graphiques» (GNN) fonctionnent dans le domaine des graphes. Ces réseaux ont récemment trouvé une utilisation dans une variété de domaines, y compris la vision par ordinateur, les systèmes de recommandation et l'optimisation combinatoire, pour n'en nommer que quelques-uns.
De plus, ces réseaux peuvent être utilisés pour représenter des systèmes complexes, notamment des réseaux sociaux, des réseaux d'interaction protéine-protéine, des graphes de connaissances et d'autres dans plusieurs domaines d'étude.
L'espace non euclidien est l'endroit où les données graphiques fonctionnent, contrairement à d'autres types de données comme les images. Afin de classer les nœuds, de prédire les liens et les données de cluster, l'analyse graphique est utilisée.
Dans cet article, nous allons examiner le graphique Réseau neuronal en détail, ses types, ainsi que des exemples pratiques utilisant PyTorch.
Alors, qu'est-ce que Graph ?
Un graphe est un type de structure de données composée de nœuds et de sommets. Les connexions entre les différents nœuds sont déterminées par les sommets. Si la direction est indiquée aux nœuds, le graphe est dit orienté ; sinon, il n'est pas dirigé.
Une bonne application des graphiques consiste à modéliser les relations entre divers individus dans un réseaux sociaux. Lorsqu'il s'agit de circonstances complexes, telles que des liens et des échanges, les graphiques sont très utiles.
Ils sont utilisés par les systèmes de recommandation, l'analyse sémantique, l'analyse des réseaux sociaux et la reconnaissance de formes
. La création de solutions basées sur des graphes est un tout nouveau domaine qui offre une compréhension approfondie des données complexes et interdépendantes.
Réseau neuronal graphique
Les réseaux de neurones de graphes sont des types de réseaux de neurones spécialisés qui peuvent fonctionner sur un format de données de graphe. L'incorporation de graphes et les réseaux de neurones convolutifs (CNN) ont un impact significatif sur eux.
Les réseaux de neurones graphiques sont utilisés dans des tâches qui incluent la prédiction de nœuds, d'arêtes et de graphiques.
- Les CNN sont utilisés pour classer les images. De même, pour prédire une classe, les GNN sont appliqués à la grille de pixels qui représente la structure du graphe.
- Catégorisation de texte à l'aide de réseaux de neurones de récurrence. Les GNN sont également utilisés avec des architectures de graphes où chaque mot d'une phrase est un nœud.
Afin de prévoir des nœuds, des arêtes ou des graphiques complets, des réseaux de neurones sont utilisés pour créer des GNN. Une prédiction au niveau du nœud, par exemple, peut résoudre un problème comme la détection de spam.
La prédiction de lien est un cas typique dans les systèmes de recommandation et peut être un exemple de problème de prédiction par contour.
Graphique des types de réseaux neuronaux
De nombreux types de réseaux de neurones existent, et les réseaux de neurones convolutifs sont présents dans la majorité d'entre eux. Nous découvrirons les GNN les plus connus dans cette partie.
Réseaux à convolution graphique (GCN)
Ils sont comparables aux CNN classiques. Il acquiert des caractéristiques en regardant les nœuds voisins. La fonction d'activation est utilisée par les GNN pour ajouter de la non-linéarité après l'agrégation des vecteurs de nœuds et l'envoi de la sortie à la couche dense.
Il est essentiellement composé d'une convolution de graphe, d'une couche linéaire et d'une fonction d'activation non apprenante. Les GCN se déclinent en deux variétés principales : les réseaux convolutifs spectraux et les réseaux convolutifs spatiaux.
Réseaux d'encodeurs automatiques de graphes
Il utilise un encodeur pour apprendre à représenter des graphes et un décodeur pour essayer de reconstruire des graphes d'entrée. Il existe une couche de goulot d'étranglement reliant l'encodeur et le décodeur.
Étant donné que les encodeurs automatiques font un excellent travail de gestion de l'équilibre des classes, ils sont fréquemment utilisés dans la prédiction de lien.
Réseaux de neurones à graphes récurrents (RGNN)
Dans les réseaux multi-relationnels, où un seul nœud a de nombreuses relations, il apprend le modèle de diffusion optimal et peut gérer les graphes. Afin d'augmenter la fluidité et de réduire la sur-paramétrisation, des régularisateurs sont utilisés dans cette forme de réseau de neurones de graphe.
Afin d'obtenir de meilleurs résultats, les RGNN nécessitent moins de puissance de traitement. Ils sont utilisés pour la génération de texte, la reconnaissance vocale, la traduction automatique, la description d'images, le balisage vidéo et la synthèse de texte.
Réseaux de graphes neuronaux fermés (GGNN)
En ce qui concerne les tâches dépendantes à long terme, elles surpassent les RGNN. En incluant des nœuds, des bords et des portes temporelles sur les dépendances à long terme, les réseaux de neurones à graphes contrôlés améliorent les réseaux de neurones à graphes récurrents.
Les portes fonctionnent de la même manière que les unités récurrentes fermées (GRU) en ce sens qu'elles sont utilisées pour rappeler et oublier des données à différentes étapes.
Implémentation d'un réseau de neurones graphiques à l'aide de Pytorch
Le problème spécifique sur lequel nous allons nous concentrer est un problème commun de catégorisation des nœuds. Nous avons un important réseau social appelé musae-github, qui a été compilé à partir de l'API ouverte, pour les développeurs GitHub.
Les bords montrent les relations de suiveurs mutuels entre les nœuds, qui représentent les développeurs (utilisateurs de la plate-forme) qui ont joué dans au moins 10 référentiels (notez que le mot mutuel indique une relation non dirigée).
En fonction de l'emplacement du nœud, des référentiels favoris, de l'employeur et de l'adresse e-mail, les caractéristiques du nœud sont récupérées. Prédire si un utilisateur GitHub est un développeur Web ou un développeur d'apprentissage automatique est notre tâche.
L'intitulé du poste de chaque utilisateur a servi de base à cette fonction de ciblage.
Installer PyTorch
Pour commencer, nous devons d'abord installer PyTorch. Vous pouvez le configurer en fonction de votre machine à partir de ici. Voici le mien:
Importation de modules
Maintenant, nous importons les modules nécessaires
Importation et exploration des données
L'étape suivante consiste à lire les données et à tracer les cinq premières lignes et les cinq dernières lignes du fichier d'étiquettes.
Seules deux des quatre colonnes - l'identifiant du nœud (c'est-à-dire l'utilisateur) et ml_target, qui vaut 1 si l'utilisateur est membre de la communauté d'apprentissage automatique et 0 sinon - sont pertinentes pour nous dans cette situation.
Étant donné qu'il n'y a que deux classes, nous pouvons maintenant être certains que notre tâche est un problème de classification binaire.
En raison de déséquilibres de classe importants, le classificateur peut simplement supposer quelle classe est majoritaire plutôt que d'évaluer la classe sous-représentée, ce qui fait de l'équilibre des classes un autre facteur crucial à prendre en compte.
Le tracé de l'histogramme (distribution de fréquence) révèle un certain déséquilibre car il y a moins de classes issues de l'apprentissage automatique (étiquette = 1) que des autres classes.
Codage des fonctionnalités
Les caractéristiques des nœuds nous informent de la fonctionnalité associée à chaque nœud. En implémentant notre méthode pour coder les données, nous pouvons coder instantanément ces caractéristiques.
Nous voulons utiliser cette méthode pour encapsuler une petite partie du réseau (par exemple, 60 nœuds) pour l'affichage. Le code est répertorié ici.
Concevoir et afficher des graphiques
Nous utiliserons la torche géométrique. données pour construire notre graphique.
Pour modéliser un seul graphique avec différentes propriétés (facultatives), des données qui sont un simple objet Python sont utilisées. En utilisant cette classe et les attributs suivants, qui sont tous des tenseurs de torche, nous allons créer notre objet graphique.
La forme de la valeur x, qui sera attribuée aux caractéristiques des nœuds codés, est [nombre de nœuds, nombre de caractéristiques].
La forme de y est [nombre de nœuds], et elle sera appliquée aux étiquettes de nœud.
indice d'arête : Afin de décrire un graphe non orienté, nous devons développer les indices d'arête d'origine afin de permettre l'existence de deux arêtes dirigées distinctes qui relient les deux mêmes nœuds mais pointent dans des directions opposées.
Une paire d'arêtes, l'une pointant du nœud 100 à 200 et l'autre de 200 à 100, est requise, par exemple, entre les nœuds 100 et 200. Si les indices d'arête sont fournis, alors c'est ainsi que le graphe non orienté peut être représenté. [2,2*nombre d'arêtes d'origine] sera la forme du tenseur.
Nous créons notre méthode de dessin de graphique pour afficher un graphique. La première étape consiste à transformer notre réseau homogène en un graphe NetworkX, qui peut ensuite être dessiné à l'aide de NetworkX.draw.
Créer notre modèle GNN et l'entraîner
Nous commençons par encoder l'ensemble des données en exécutant encode data avec light=False puis en appelant construct graph avec light=False pour construire le graphe entier. Nous n'essaierons pas de dessiner ce grand graphique car je suppose que vous utilisez une machine locale qui dispose de ressources limitées.
Les masques, qui sont des vecteurs binaires qui identifient les nœuds appartenant à chaque masque spécifique à l'aide des chiffres 0 et 1, peuvent être utilisés pour indiquer à la phase d'apprentissage quels nœuds doivent être inclus pendant l'apprentissage et pour indiquer à la phase d'inférence quels nœuds sont les données de test. Torche géométrique.transforms.
Une division au niveau du nœud peut être ajoutée à l'aide des propriétés de masque d'entraînement, de masque val et de masque de test de la classe AddTrainValTestMask, qui peuvent être utilisées pour prendre un graphique et nous permettre de spécifier comment nous voulons que nos masques soient construits.
Nous n'utilisons que 10 % pour la formation et utilisons 60 % des données comme ensemble de test tout en utilisant 30 % comme ensemble de validation.
Maintenant, nous allons empiler deux couches GCNConv, dont la première a un nombre d'entités en sortie égal au nombre d'entités dans notre graphique en tant qu'entités en entrée.
Dans la deuxième couche, qui contient des nœuds de sortie égaux au nombre de nos classes, nous appliquons une fonction d'activation relu et fournissons les caractéristiques latentes.
L'indice d'arête et le poids d'arête sont deux des nombreuses options x que GCNConv peut accepter dans la fonction forward, mais dans notre situation, nous n'avons besoin que des deux premières variables.
Malgré le fait que notre modèle sera capable de prédire la classe de chaque nœud du graphique, nous devons encore déterminer la précision et la perte pour chaque ensemble séparément en fonction de la phase.
Par exemple, pendant l'entraînement, nous voulons uniquement utiliser l'ensemble d'entraînement pour déterminer la précision et la perte d'entraînement, et c'est donc là que nos masques sont utiles.
Pour calculer la perte et la précision appropriées, nous définirons les fonctions de perte masquée et de précision masquée.
Former le modèle
Maintenant que nous avons défini le but de la formation pour lequel la torche sera utilisée. Adam est un maître optimiseur.
Nous effectuerons la formation pour un certain nombre d'époques tout en gardant un œil sur la précision de la validation.
Nous traçons également les pertes et les précisions de la formation à différentes époques.
Inconvénients du réseau neuronal graphique
L'utilisation des GNN présente quelques inconvénients. Quand utiliser GNNa et comment améliorer les performances de nos modèles d'apprentissage automatique nous seront clairement expliqués une fois que nous les aurons mieux compris.
- Alors que les GNN sont des réseaux peu profonds, généralement à trois couches, la plupart des réseaux de neurones peuvent aller en profondeur pour améliorer les performances. Nous ne sommes pas en mesure d'être à la pointe de la technologie sur de grands ensembles de données en raison de cette limitation.
- Il est plus difficile d'entraîner un modèle sur des graphes, car leur dynamique structurelle est dynamique.
- En raison des coûts de calcul élevés de ces réseaux, la mise à l'échelle du modèle pour la production présente des défis. La mise à l'échelle des GNN pour la production sera difficile si la structure de votre graphique est énorme et compliquée.
Conclusion
Au cours des dernières années, les GNN sont devenus des outils puissants et efficaces pour les problèmes d'apprentissage automatique dans le domaine des graphes. Un aperçu fondamental des réseaux de neurones de graphes est donné dans cet article.
Après cela, vous pouvez commencer à créer le jeu de données qui sera utilisé pour entraîner et tester le modèle. Pour comprendre comment il fonctionne et ce dont il est capable, vous pouvez également aller beaucoup plus loin et l'entraîner à l'aide d'un autre type de jeu de données.
Codage heureux!
Soyez sympa! Laissez un commentaire