{"notes":[{"id":"graph-learning/gcn","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"GCN","subtitle":"Un seul paramètre suffit-il ?","author":"Z. Yuan","paperDate":"2016-09-09","publishedOn":"2023-10-01","world":"external/gcn","paperTitle":"Semi-Supervised Classification with Graph Convolutional Networks","paperUrl":"https://arxiv.org/abs/1609.02907","bibliography":{"title":"Semi-Supervised Classification with Graph Convolutional Networks","authors":["Thomas N. Kipf","Max Welling"],"url":"https://arxiv.org/abs/1609.02907","pdfUrl":"https://arxiv.org/pdf/1609.02907v4","codeUrl":"https://github.com/tkipf/gcn","preprint":{"id":"1609.02907","submittedOn":"2016-09-09","url":"https://arxiv.org/abs/1609.02907"},"publication":{"venue":"ICLR","year":2017,"kind":"conference","url":"https://arxiv.org/abs/1609.02907"},"citation":"@misc{graphlearninggcn2016,\n  title = {{Semi-Supervised Classification with Graph Convolutional Networks}},\n  author = {Thomas N. Kipf and Max Welling},\n  year = {2016},\n  eprint = {1609.02907},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1609.02907}\n}\n","citationPath":"/content/papers/citations/graph-learning/gcn.43058ec3e77e.bib"},"thumbnail":{"src":"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png","width":1122,"height":400},"locale":"fr","path":"/content/papers/fr/graph-learning/gcn.92d7953d0185.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"le-graphe-comme-terme-de-régularisation","text":"Le graphe comme terme de régularisation","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"simplifier-depuis-le-domaine-spectral","text":"Simplifier depuis le domaine spectral","depth":3},{"id":"une-couche-de-gcn","text":"Une couche de GCN","depth":3},{"id":"deux-couches-suffisent","text":"Deux couches suffisent","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"résultats-principaux","text":"Résultats principaux","depth":3},{"id":"quelle-propagation-fonctionne-le-mieux-","text":"Quelle propagation fonctionne le mieux ?","depth":3},{"id":"que-se-passe-t-il-en-profondeur-","text":"Que se passe-t-il en profondeur ?","depth":3},{"id":"le-lien-avec-lalgorithme-wl","text":"Le lien avec l'algorithme WL","depth":3},{"id":"une-critique-quatre-jours-plus-tard","text":"Une critique, quatre jours plus tard","depth":3},{"id":"les-limites-relevées-par-larticle","text":"Les limites relevées par l'article","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/chebnet","relation":"referenced","topic":""}]},{"id":"graph-learning/spectral-networks","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Spectral Networks","subtitle":"Détour par le domaine spectral","author":"Z. Yuan","paperDate":"2013-12-21","publishedOn":"2023-09-06","paperTitle":"Spectral Networks and Locally Connected Networks on Graphs","paperUrl":"https://arxiv.org/abs/1312.6203","bibliography":{"title":"Spectral Networks and Locally Connected Networks on Graphs","authors":["Joan Bruna","Wojciech Zaremba","Arthur Szlam","Yann LeCun"],"url":"https://arxiv.org/abs/1312.6203","pdfUrl":"https://arxiv.org/pdf/1312.6203v3","codeUrl":null,"preprint":{"id":"1312.6203","submittedOn":"2013-12-21","url":"https://arxiv.org/abs/1312.6203"},"publication":{"venue":"ICLR","year":2014,"kind":"conference","url":"https://iclr.cc/archive/2014/conference-proceedings/"},"citation":"@misc{graphlearningspectralnetworks2013,\n  title = {{Spectral Networks and Locally Connected Networks on Graphs}},\n  author = {Joan Bruna and Wojciech Zaremba and Arthur Szlam and Yann LeCun},\n  year = {2013},\n  eprint = {1312.6203},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1312.6203}\n}\n","citationPath":"/content/papers/citations/graph-learning/spectral-networks.ea286632c50d.bib"},"thumbnail":{"src":"/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png","width":1210,"height":448},"locale":"fr","path":"/content/papers/fr/graph-learning/spectral-networks.bc4294bc5139.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"construction-spatiale--connexions-locales-et-regroupement","text":"Construction spatiale : connexions locales et regroupement","depth":3},{"id":"construction-spectrale--les-vecteurs-propres-du-laplacien","text":"Construction spectrale : les vecteurs propres du laplacien","depth":3},{"id":"retrouver-les-cnn","text":"Retrouver les CNN","depth":3},{"id":"des-coefficients-lisses-des-filtres-locaux","text":"Des coefficients lisses, des filtres locaux","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"mnist-sous-échantillonné","text":"MNIST sous-échantillonné","depth":3},{"id":"mnist-sur-une-sphère","text":"MNIST sur une sphère","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/chebnet","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/chebnet","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ChebNet","subtitle":"Un polynôme suffit","author":"Z. Yuan","paperDate":"2016-06-30","publishedOn":"2023-09-16","world":"external/chebnet","paperTitle":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","paperUrl":"https://arxiv.org/abs/1606.09375","bibliography":{"title":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","authors":["Michaël Defferrard","Xavier Bresson","Pierre Vandergheynst"],"url":"https://arxiv.org/abs/1606.09375","pdfUrl":"https://arxiv.org/pdf/1606.09375v3","codeUrl":"https://github.com/mdeff/cnn_graph","preprint":{"id":"1606.09375","submittedOn":"2016-06-30","url":"https://arxiv.org/abs/1606.09375"},"publication":{"venue":"NeurIPS","year":2016,"kind":"conference","url":"https://papers.nips.cc/paper_files/paper/2016/hash/04df4d434d481c5bb723be1b6df1ee65-Abstract.html"},"citation":"@misc{graphlearningchebnet2016,\n  title = {{Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering}},\n  author = {Michaël Defferrard and Xavier Bresson and Pierre Vandergheynst},\n  year = {2016},\n  eprint = {1606.09375},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1606.09375}\n}\n","citationPath":"/content/papers/citations/graph-learning/chebnet.52e0fac25946.bib"},"thumbnail":{"src":"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png","width":1144,"height":484},"locale":"fr","path":"/content/papers/fr/graph-learning/chebnet.df907f539bbb.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"la-translation-échappe-à-une-définition-spatiale","text":"La translation échappe à une définition spatiale","depth":3},{"id":"le-domaine-spectral-coûte-trop-cher","text":"Le domaine spectral coûte trop cher","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"des-polynômes-pour-assurer-la-localité","text":"Des polynômes pour assurer la localité","depth":3},{"id":"la-récurrence-de-chebyshev-pour-gagner-en-vitesse","text":"La récurrence de Chebyshev pour gagner en vitesse","depth":3},{"id":"le-pooling-sur-graphe","text":"Le pooling sur graphe","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"commencer-par-vérifier-sur-une-grille","text":"Commencer par vérifier sur une grille","depth":3},{"id":"comparer-trois-filtres","text":"Comparer trois filtres","depth":3},{"id":"la-qualité-du-graphe","text":"La qualité du graphe","depth":3},{"id":"la-suite","text":"La suite","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]}],"text":"Vous avez 2,708 articles, chacun décrit par un sac de mots, avec 5,429 relations de citation entre eux. Seuls 140 portent une étiquette de sujet, soit 20 pour chacun des sept sujets. Au modèle de deviner le reste.\n\nC'est la classification semi-supervisée des nœuds de Cora. Intuitivement, des articles qui se citent devraient partager un sujet ; encore faut-il inscrire cette intuition dans le modèle.\n\nThomas Kipf et Max Welling, de l'université d'Amsterdam, donnent une réponse très courte. À chaque couche, chaque nœud calcule une moyenne pondérée de ses caractéristiques et de celles de ses voisins, avec des proportions fixes, puis multiplie par une matrice de poids. Deux couches suffisent. Sur Cora, le modèle obtient 81.5%, contre 75.7% pour le meilleur prédécesseur.\n\nCe modèle s'appelle GCN ; il deviendra presque synonyme de réseau neuronal sur graphes.\n\n## Poser le problème\n\n### Le graphe comme terme de régularisation\n\nAvant GCN, on intégrait souvent le graphe dans la fonction de perte :\n\n$$\n\\mathcal{L}=\\mathcal{L}_0+\\lambda\\,\\mathcal{L}_{\\text{reg}},\\qquad\n\\mathcal{L}_{\\text{reg}}=\\sum_{i,j}A_{ij}\\left\\|f(X_i)-f(X_j)\\right\\|^2\n$$\n\n$\\mathcal{L}_0$ est la perte supervisée des nœuds étiquetés ; $\\mathcal{L}_{\\text{reg}}$ pénalise des sorties trop différentes entre nœuds reliés. La propagation d'étiquettes et la régularisation de variété appartiennent à cette famille.\n\nLes auteurs soulignent que ces méthodes assimilent une arête à une similarité. Cela convient souvent aux citations, mais une arête peut porter d'autres informations ; lui imposer ce sens restreint ce que le modèle peut apprendre.\n\nD'autres méthodes, comme DeepWalk, réalisent d'abord des marches aléatoires sur le graphe pour apprendre un vecteur par nœud, puis entraînent un classifieur sur ces vecteurs. Ces étapes sont optimisées séparément : une étape mal réglée reste hors de portée du classifieur final.\n\nLes auteurs veulent un modèle $f(X,A)$ qui absorbe directement le graphe. $X$ contient les caractéristiques des nœuds, $A$ la matrice d'adjacence, et la perte ne porte que sur les nœuds étiquetés. Le gradient circule par $A$ jusqu'aux nœuds sans étiquette et apprend aussi leurs représentations.\n\n## Résoudre le problème\n\n### Simplifier depuis le domaine spectral\n\nLa dérivation commence par la convolution spectrale sur graphes. Le laplacien normalisé $L=I_N-D^{-1/2}AD^{-1/2}$ se décompose en $U\\Lambda U^\\top$ ; chaque colonne de $U$ correspond à une « fréquence » du graphe. Convoluer un signal de nœuds $x$ consiste à passer en fréquence, multiplier par un filtre, puis revenir :\n\n$$\ng_\\theta\\star x=U g_\\theta U^\\top x\n$$\n\nLa voie est coûteuse. Un produit par $U$ demande $O(N^2)$, et sur les grands graphes, la seule décomposition spectrale devient prohibitive. ChebNet remplaçait le filtre par une approximation polynomiale de Chebyshev d'ordre $K$, sans décomposition et avec une portée limitée à $K$ sauts.\n\n\n> [!TIP]\n> \n> Pour les origines de la convolution spectrale sur graphes et les filtres polynomiaux de ChebNet, voir nos notes :\n> \n> - **[[13.12] Spectral Networks : Détour par le domaine spectral](/blog/papers/graph-learning/spectral-networks)**\n> - **[[16.06] ChebNet : Un polynôme suffit](/blog/papers/graph-learning/chebnet)**\n\n\nKipf et Welling donnent alors trois coups de ciseaux supplémentaires.\n\nPremier coup : ne garder que le premier ordre, $K=1$. Chaque couche regarde un saut ; pour aller plus loin, on empile. Les auteurs invoquent la distribution très étalée des degrés dans les réseaux sociaux et de citations : un filtre trop souple risque de surapprendre les structures locales.\n\nDeuxième coup : estimer directement $\\lambda_{\\max}$ à 2, puis laisser les paramètres du réseau absorber les différences d'échelle. Le filtre devient :\n\n$$\ng_{\\theta'}\\star x\\approx\\theta'_0x-\\theta'_1D^{-\\frac12}AD^{-\\frac12}x\n$$\n\nTroisième coup : lier les deux paramètres en un, $\\theta=\\theta'_0=-\\theta'_1$ :\n\n$$\ng_\\theta\\star x\\approx\\theta\\left(I_N+D^{-\\frac12}AD^{-\\frac12}\\right)x\n$$\n\nLes valeurs propres de la matrice entre parenthèses se situent dans $[0,2]$. En empilant beaucoup de couches, la plus grande, 2, amplifie sans cesse sa composante ; instabilité numérique, explosion ou disparition des gradients peuvent suivre. Les auteurs appliquent donc une **astuce de renormalisation** : ajouter les boucles propres $\\tilde A=A+I_N$, puis normaliser avec les nouveaux degrés $\\tilde D_{ii}=\\sum_j\\tilde A_{ij}$ :\n\n$$\nI_N+D^{-\\frac12}AD^{-\\frac12}\\;\\rightarrow\\;\\tilde D^{-\\frac12}\\tilde A\\tilde D^{-\\frac12}\n$$\n\nComparons les valeurs propres des deux opérateurs sur un petit graphe à cinq nœuds :\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\n\n# Citations entre cinq articles, traitées comme non orientées : 0-1, 0-2, 1-2, 2-3, 3-4\nA = np.zeros((5, 5))\nfor i, j in [(0, 1), (0, 2), (1, 2), (2, 3), (3, 4)]:\n    A[i, j] = A[j, i] = 1\n\nd = A.sum(1)\nS = np.eye(5) + A / np.sqrt(np.outer(d, d))     # Équation 7 : I + D^-1/2 A D^-1/2\nA_t = A + np.eye(5)                             # Ajouter les boucles propres\nd_t = A_t.sum(1)\nA_hat = A_t / np.sqrt(np.outer(d_t, d_t))       # Renormaliser : D̃^-1/2 Ã D̃^-1/2\n\nprint(\"Valeurs propres de l'équation 7:\", np.linalg.eigvalsh(S))\nprint(\"Valeurs propres de Â:   \", np.linalg.eigvalsh(A_hat))\n```\n\n```text\nValeurs propres de l'équation 7: [0.14 0.5  0.7  1.65 2.  ]\nValeurs propres de Â:    [-0.21  0.    0.17  0.79  1.  ]\n```\n\nLa plus grande valeur propre de l'équation 7 est 2 : dix applications amplifient la composante correspondante de plus de mille fois. Celles de $\\hat A$ ne dépassent pas 1, ce qui permet d'empiler sereinement.\n\n### Une couche de GCN\n\nGénéralisons le signal unique à $C$ caractéristiques par nœud, $X\\in\\mathbb{R}^{N\\times C}$, avec $F$ filtres :\n\n$$\nZ=\\hat AX\\Theta,\\qquad \\hat A=\\tilde D^{-\\frac12}\\tilde A\\tilde D^{-\\frac12}\n$$\n\n$\\Theta\\in\\mathbb{R}^{C\\times F}$ contient les poids appris. Ajouter une non-linéarité et empiler les couches donne l'équation 2 de l'article :\n\n$$\nH^{(l+1)}=\\sigma\\left(\\hat AH^{(l)}W^{(l)}\\right)\n$$\n\nPour un nœud seul, $\\hat A_{ij}=1/\\sqrt{\\tilde d_i\\tilde d_j}$ : la part reçue par $i$ du voisin $j$ dépend uniquement de leurs degrés, et tous les voisins partagent le même $W$. On calcule $\\hat AX$ par un produit matrice creuse-matrice dense ; une couche coûte $O(|E|FC)$, linéairement en nombre d'arêtes.\n\n### Deux couches suffisent\n\nEn classification semi-supervisée, l'article n'empile que deux couches :\n\n$$\nZ=f(X,A)=\\mathrm{softmax}\\left(\\hat A\\,\\mathrm{ReLU}\\left(\\hat AXW^{(0)}\\right)W^{(1)}\\right)\n$$\n\n$\\hat A$ est précalculée une fois. La perte est l'entropie croisée des seuls nœuds étiquetés.\n\n[![Figure 1 de l'article : à gauche, un GCN multicouche. Les nœuds X1 à X4, avec C canaux en entrée, sont reliés par les arêtes du graphe ; après les couches cachées, ils produisent F cartes de caractéristiques, certains nœuds portant une étiquette Y. À droite, le t-SNE des sorties cachées d'un GCN à deux couches sur Cora : les couleurs correspondent aux sujets et forment des groupes distincts.](/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png)](/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png)\n\n*Figure 1 de l'article (Kipf et Welling), extraite de la [**page 4 du PDF**](https://arxiv.org/pdf/1609.02907v4#page=4). Légende originale omise.*\n\nÀ gauche, le même graphe est partagé entre toutes les couches : seules les caractéristiques changent. À droite, après un entraînement sur seulement 5% des étiquettes de Cora, le t-SNE de la couche cachée regroupe déjà les sept couleurs.\n\nReprenons le petit graphe et parcourons une propagation avant à deux couches. Chaque nœud a 4 caractéristiques, la couche cachée 3, et la sortie 2 classes ; seuls les nœuds 0 et 4 sont étiquetés :\n\n```python\nrng = np.random.default_rng(0)\nX = rng.random((5, 4))            # 5 nœuds à 4 caractéristiques chacun (C = 4)\nW0 = rng.normal(size=(4, 3))      # Entrée → couche cachée (H = 3)\nW1 = rng.normal(size=(3, 2))      # Couche cachée → 2 classes (F = 2)\n\nH1 = np.maximum(A_hat @ X @ W0, 0)                     # ReLU(ÂXW0)\nlogits = A_hat @ H1 @ W1                               # Â H W1\nZ = np.exp(logits) / np.exp(logits).sum(1, keepdims=True)\nprint(\"H1:\", H1.shape, \" Z:\", Z.shape)\nprint(Z)\n\nlabeled, y = [0, 4], np.array([0, 1])                  # Seuls 0 et 4 portent une étiquette\nprint(\"loss:\", -np.log(Z[labeled, y]).mean().round(3))\n```\n\n```text\nH1: (5, 3)  Z: (5, 2)\n[[0.47 0.53]\n [0.47 0.53]\n [0.47 0.53]\n [0.47 0.53]\n [0.48 0.52]]\nloss: 0.7\n```\n\nLes poids ne sont pas entraînés : les probabilités des deux classes restent proches de 0.5 pour tous les nœuds, et la perte est voisine de $\\ln 2$. À l'entraînement, seules les pertes de 0 et 4 sont rétropropagées, mais $\\hat A$ les relie à leurs voisins : les représentations de 1, 2 et 3 sont mises à jour elles aussi.\n\nL'article entraîne le graphe entier par descente de gradient en lot complet. À chaque pas, tout $\\hat A$ et tout $X$ sont en mémoire ; le dropout est l'unique source de hasard.\n\n## Discussion\n\n### Protocole expérimental\n\nLes expériences reprennent le protocole de Planetoid. Les réseaux de citations Citeseer, Cora et Pubmed ont respectivement 3,327, 2,708 et 19,717 nœuds, avec 20 étiquettes par classe. Le graphe de connaissances NELL en a 65,755, avec une seule étiquette par classe. Les 500 nœuds de validation servent uniquement au réglage des hyperparamètres ; le test compte 1,000 nœuds.\n\nLe modèle est un GCN à deux couches, avec 16 dimensions cachées, un dropout de 0.5, une régularisation L2 de $5\\times10^{-4}$ sur la première couche, Adam à 0.01 et 200 époques au maximum. L'entraînement s'arrête après 10 époques sans baisse de la perte de validation. Les hyperparamètres sont réglés sur Cora seulement, puis repris tels quels pour Citeseer et Pubmed.\n\n### Résultats principaux\n\n| Méthode | Citeseer | Cora | Pubmed | NELL |\n| --- | ---: | ---: | ---: | ---: |\n| ManiReg | 60.1 | 59.5 | 70.7 | 21.8 |\n| LP | 45.3 | 68.0 | 63.0 | 26.5 |\n| DeepWalk | 43.2 | 67.2 | 65.3 | 58.1 |\n| ICA | 69.1 | 75.1 | 73.9 | 23.1 |\n| Planetoid* | 64.7 | 75.7 | 77.2 | 61.9 |\n| **GCN** | **70.3** | **81.5** | **79.0** | **66.0** |\n| GCN (partitions aléatoires) | 67.9 ± 0.5 | 80.1 ± 0.5 | 78.9 ± 0.7 | 58.4 ± 1.7 |\n\nLes nombres sont les exactitudes de classification (%), la ligne GCN étant la moyenne de 100 initialisations aléatoires. Sur la même machine, GCN converge plus vite que Planetoid sur Citeseer, Cora et NELL (7, 4 et 48 secondes contre 26, 13 et 185) ; sur Pubmed, il lui faut 38 secondes contre 25.\n\nLa dernière ligne utilise 10 partitions aléatoires de même taille. L'exactitude baisse un peu ; NELL subit la plus forte chute, de 66.0% à 58.4%.\n\n### Quelle propagation fonctionne le mieux ?\n\nLes auteurs remplacent la propagation des deux couches par les différentes variantes de la dérivation, sans rien changer d'autre :\n\n| Propagation | Citeseer | Cora | Pubmed |\n| --- | ---: | ---: | ---: |\n| Chebyshev, $K=3$ | 69.8 | 79.5 | 74.4 |\n| Chebyshev, $K=2$ | 69.6 | 81.2 | 73.8 |\n| Premier ordre, deux paramètres (équation 6) | 68.3 | 80.0 | 77.5 |\n| Premier ordre, un paramètre (équation 7) | 69.3 | 79.2 | 77.4 |\n| **Renormalisation (équation 8)** | **70.3** | **81.5** | **79.0** |\n| Terme du premier ordre seul | 68.7 | 80.5 | 77.8 |\n| MLP (sans graphe) | 46.5 | 55.1 | 71.4 |\n\nSimplifier ne dégrade pas les résultats. La variante renormalisée, avec le moins de paramètres et d'opérations, est la meilleure sur les trois jeux de données ; Chebyshev d'ordre supérieur descend au contraire vers 74% sur Pubmed. Sans graphe, le MLP n'atteint que 55.1% sur Cora : l'apport de la structure saute aux yeux.\n\n### Que se passe-t-il en profondeur ?\n\nL'annexe B passe de 1 à 10 couches, avec toutes les étiquettes et une validation croisée en 5 plis, en comparant aussi la présence de connexions résiduelles :\n\n[![Figure 5 de l'article : trois panneaux pour Citeseer, Cora et Pubmed. L'axe horizontal va de 1 à 10 couches, l'axe vertical indique l'exactitude. Les courbes d'entraînement et de test culminent vers 2 à 3 couches ; après 7 couches, les pointillés sans connexions résiduelles plongent, tandis que les traits pleins avec connexions résiduelles restent globalement stables.](/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png)](/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png)\n\n*Figure 5 de l'article (Kipf et Welling), extraite de la [**page 14 du PDF**](https://arxiv.org/pdf/1609.02907v4#page=14). Légende originale omise.*\n\nSur les trois jeux de données, 2 à 3 couches donnent les meilleurs résultats. Au-delà de 7, même l'exactitude d'entraînement baisse sans connexions résiduelles : les auteurs disent que l'optimisation devient difficile. Les connexions résiduelles stabilisent la courbe, sans améliorer les résultats.\n\n### Le lien avec l'algorithme WL\n\nL'annexe A propose une autre lecture de GCN. Weisfeiler-Lehman (WL) teste l'isomorphisme de graphes : à chaque tour, la couleur d'un nœud devient le hachage de la combinaison de sa couleur et de celles de ses voisins. Remplacer ce hachage par une couche neuronale apprise et choisir $\\sqrt{d_id_j}$ comme constante de normalisation donne la propagation de GCN. Les auteurs parlent d'une généralisation différentiable et paramétrée de WL, en ajoutant eux-mêmes « loosely speaking ».\n\nIls explorent l'analogie sur les 34 membres du club de karaté de Zachary. Un GCN à trois couches, aux poids entièrement aléatoires et sans entraînement, reçoit seulement la matrice identité comme caractéristiques. Ses plongements 2D ressemblent déjà aux communautés ; les auteurs les jugent comparables aux résultats de DeepWalk, qui demande un entraînement. Avec une étiquette par communauté et 300 pas d'entraînement, le modèle sépare linéairement les quatre communautés.\n\n### Une critique, quatre jours plus tard\n\nQuatre jours après le dépôt arXiv, Ferenc Huszár publie une critique intitulée « How powerful are Graph Convolutions? ». Sur une grille d'image à 8 voisins, il constate que chaque couche et chaque canal utilisent un noyau 3×3 de forme fixe, à un facteur scalaire près. À ses yeux, un tel modèle ne peut apprendre ni détecteur de contours ni filtre de Gabor ; la simplification réduit fortement sa généralité, tandis que les polynômes d'ordre supérieur de ChebNet semblent plus prometteurs. [inFERENCe, 2016-09-13](https://www.inference.vc/how-powerful-are-graph-convolutions-review-of-kipf-welling-2016-2/)\n\nNous l'avons vérifié avec la version finale de $\\hat A$ : à l'intérieur de la grille, le pixel central prélève 1/9 de chacune des 9 cases, lui-même compris. C'est un filtre moyenneur.\n\nKipf répond dans son blog à la fin du mois. Il reconnaît que les modèles destinés à des graphes quelconques dégénèrent tous en opérations simples sur une grille régulière ; il propose de les évaluer sur d'autres données, en assumant ce compromis. [Kipf, 2016-09-30](https://tkipf.github.io/graph-convolutional-networks/)\n\nLes deux ont raison. Sur une image, GCN perd bien la capacité des CNN à pondérer selon la position ; sur un réseau de citations sans direction et aux degrés très dispersés, le tableau de propagation précédent montre que simplifier peut aider.\n\n### Les limites relevées par l'article\n\n- **Mémoire** : l'entraînement en lot complet consomme une mémoire linéaire en taille de données. En mini-lots, un modèle de $K$ couches doit charger tous les voisins à $K$ sauts de chaque nœud.\n- **Types d'arêtes** : seuls les graphes non orientés sont pris en charge, sans caractéristiques d'arêtes. Les arêtes orientées et étiquetées de NELL sont d'abord transformées en graphe biparti.\n- **Poids de la boucle propre** : le modèle suppose implicitement que soi-même et ses voisins ont la même importance. Les auteurs suggèrent $\\tilde A=A+\\lambda I_N$, avec un $\\lambda$ appris.\n\nLe premier point sera traité par des méthodes d'échantillonnage comme GraphSAGE. GraphSAGE propose aussi une autre réponse au troisième : appliquer des poids distincts au nœud lui-même et à ses voisins.\n\n## Conclusion\n\nPartant de la convolution spectrale sur graphes, GCN réduit tout au premier ordre et à un seul paramètre, puis stabilise le calcul par renormalisation. Sa règle de propagation tient sur une ligne. Deux couches dépassent largement les méthodes de l'époque sur trois réseaux de citations, avec un entraînement rapide.\n\nLe prix est clair : les poids des voisins dépendent uniquement des degrés ; sur une grille d'image, il ne reste qu'un filtre moyenneur. Au-delà de deux ou trois couches, les résultats se dégradent. GraphSAGE, GAT et GIN partiront souvent de ces deux limites.\n\nPour essayer, `GCNConv` de PyTorch Geometric implémente cette propagation. Reprenez les deux couches de l'article, avec 16 dimensions cachées et un dropout de 0.5 ; la convergence sur Cora n'y demandait que 4 secondes.\n\nCommencez par deux couches : en empiler davantage n'aide pas forcément.\n","imageSizes":{"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png":{"width":1122,"height":400},"/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png":{"width":1132,"height":454}}}
