Garden of KnowledgeApplied Sciences › Computer Science › Software › Data Science › Machine Learning › DeepLearning
March 22, 2026

Graph Neural Networks

Les Graph Neural Networks sont des réseaux de neurones conçus pour opérer directement sur des structures de graphes. La plupart des données du monde réel sont naturellement des graphes : réseaux sociaux, molécules, codes source, connaissances, routage réseau.

Pourquoi les graphes ?§

Les architectures classiques (CNN, RNN) supposent des données structurées (grilles, séquences). Les graphes brisent ces hypothèses :

PropriétéGrille (image)Séquence (texte)Graphe
StructureRégulière, fixeOrdonnéeIrrégulière, variable
VoisinageFixe (3×3)Fixe (gauche/droite)Variable (degrés différents)
OrdreDéfiniDéfiniArbitraire (permutation-invariant)

Applications :

Représentation d’un graphe§

Un graphe G = (V, E) comprend :

Principe fondamental : Message Passing§

L’idée centrale de la plupart des GNN est le message passing : chaque nœud agrège les informations de ses voisins pour mettre à jour sa représentation.

graph LR
    subgraph "Itération t"
        v[Nœud v\nhᵥᵗ]
        u1[Voisin u₁\nhᵤ₁ᵗ] -->|message| agg
        u2[Voisin u₂\nhᵤ₂ᵗ] -->|message| agg
        u3[Voisin u₃\nhᵤ₃ᵗ] -->|message| agg
        agg[Agrégation\nmᵥᵗ] --> upd[Mise à jour\nhᵥᵗ⁺¹]
        v --> upd
    end

Formule générale :

mᵥᵗ = AGGREGATE({hᵤᵗ : u ∈ N(v)})   # Agrégation des voisins
hᵥᵗ⁺¹ = UPDATE(hᵥᵗ, mᵥᵗ)            # Mise à jour du nœud

Après K couches, chaque nœud encode l’information de son voisinage à distance K.

GCN — Graph Convolutional Network (Kipf & Welling, 2017)§

Variante spectrale simplifiée. Agrégation par somme pondérée normalisée.

H⁽ˡ⁺¹⁾ = σ( D̃⁻¹/² Ã D̃⁻¹/² H⁽ˡ⁾ W⁽ˡ⁾ )
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class GCN(torch.nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.conv1 = GCNConv(input_dim, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, output_dim)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

Limitation : agrégation non différenciée → tous les voisins ont le même poids.

GAT — Graph Attention Network (Veličković et al., 2018)§

Introduit un mécanisme d’attention pour pondérer différemment les voisins.

αᵢⱼ = softmax( LeakyReLU( aᵀ [Whᵢ ‖ Whⱼ] ) )
h'ᵢ = σ( Σⱼ αᵢⱼ · Whⱼ )

Avantage : apprend quels voisins sont importants, interprétable.

GraphSAGE (Hamilton et al., 2017)§

Conçu pour l’inductive learning : capable de généraliser à des nœuds non vus pendant l’entraînement (scalable aux grands graphes).

hᵥˡ = σ( W · CONCAT(hᵥˡ⁻¹, AGG({hᵤˡ⁻¹ : u ∈ N(v)})) )

Agrégateurs disponibles : Mean, Max, LSTM (sur voisins ordonnés aléatoirement)

Neighborhood sampling : au lieu d’utiliser tous les voisins (potentiellement très nombreux), échantillonne un nombre fixe de voisins par couche → passage à l’échelle.

Tâches sur les graphes§

graph TD
    taches[Tâches GNN]
    taches --> node[Classification de nœuds\nex: type d'utilisateur\ndans un réseau social]
    taches --> link[Prédiction de lien\nex: recommandation\nconnexion future]
    taches --> graph[Classification de graphes\nex: molécule toxique\nou non]
    taches --> gen[Génération de graphes\nex: molécule optimale]

Readout (graph-level prediction) : pour obtenir une représentation du graphe entier, agréger toutes les représentations de nœuds :

h_G = READOUT({hᵥ : v ∈ V})

(Somme, moyenne, max, ou attention hiérarchique)

Limites des GNN§

Surissage (Over-smoothing) : avec trop de couches, toutes les représentations de nœuds convergent vers la même valeur → perte de discrimination. En pratique, 2-3 couches suffisent souvent.

Goulot d’étranglement (Bottleneck) : pour atteindre des nœuds distants, l’information doit passer par tous les nœuds intermédiaires, se compressant à chaque couche.

Over-squashing : l’information de voisinages exponentiellement larges est compressée dans un vecteur de taille fixe.

Expressivité : les GNN à base de message passing ne peuvent pas distinguer certains graphes non-isomorphes (théorème de Weisfeiler-Lehman).

GNN avancés§

ModèleInnovationUsage
GIN (Graph Isomorphism Network)Maximise l’expressivité (WL-test)Classification de graphes
MPNNFramework général pour chimiePropriétés moléculaires
DiffPoolPooling hiérarchique différentiableGraphes complexes
Graph TransformerSelf-attention globale sur grapheLongues dépendances
SchNet, DimeNetGNN sur molécules 3DDrug discovery

Comparaison des variantes§

ModèleAgrégationPoints fortsLimitation
GCNSomme normaliséeSimple, efficacePoids égaux
GATAttention appriseInterprétable, sélectifCoût mémoire
GraphSAGEMean/Max/LSTMScalable, inductifPas d’attention
GINSomme + MLPMaximalement expressifPlus complexe
—The Gardener