{"notes":[{"id":"graph-learning/sgc","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"SGC","subtitle":"Le linéaire suffit-il ?","author":"Z. Yuan","paperDate":"2019-02-19","publishedOn":"2024-02-09","world":"external/sgc","paperTitle":"Simplifying Graph Convolutional Networks","paperUrl":"https://arxiv.org/abs/1902.07153","bibliography":{"title":"Simplifying Graph Convolutional Networks","authors":["Felix Wu","Tianyi Zhang","Amauri Holanda de Souza","Christopher Fifty","Tao Yu","Kilian Q. Weinberger"],"url":"https://arxiv.org/abs/1902.07153","pdfUrl":"https://arxiv.org/pdf/1902.07153v2","codeUrl":"https://github.com/Tiiiger/SGC","preprint":{"id":"1902.07153","submittedOn":"2019-02-19","url":"https://arxiv.org/abs/1902.07153"},"publication":{"venue":"ICML","year":2019,"kind":"conference","url":"https://proceedings.mlr.press/v97/wu19e.html"},"citation":"@misc{graphlearningsgc2019,\n  title = {{Simplifying Graph Convolutional Networks}},\n  author = {Felix Wu and Tianyi Zhang and Amauri Holanda de Souza and Christopher Fifty and Tao Yu and Kilian Q. Weinberger},\n  year = {2019},\n  eprint = {1902.07153},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1902.07153}\n}\n","citationPath":"/content/papers/citations/graph-learning/sgc.5b3815dbf17c.bib"},"thumbnail":{"src":"/content/papers/assets/42da0472259826c266fe1b1b617041ef7cb3aa49eda3558ac91dcd15aa5272e0.png","width":1366,"height":612},"locale":"fr","path":"/content/papers/fr/graph-learning/sgc.f9484828d823.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":"retirer-les-non-linéarités","text":"Retirer les non-linéarités","depth":3},{"id":"lecture-spectrale--un-filtre-passe-bas","text":"Lecture spectrale : un filtre passe-bas","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"réseaux-de-citations-et-reddit","text":"Réseaux de citations et Reddit","depth":3},{"id":"combien-de-temps-gagne-t-on-","text":"Combien de temps gagne-t-on ?","depth":3},{"id":"tâches-en-aval","text":"Tâches en aval","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/gin","relation":"referenced","topic":""}]},{"id":"graph-learning/gin","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"GIN","subtitle":"C'est la somme qui compte","author":"Z. Yuan","paperDate":"2018-10-01","publishedOn":"2023-12-28","world":"external/gin","paperTitle":"How Powerful are Graph Neural Networks?","paperUrl":"https://arxiv.org/abs/1810.00826","bibliography":{"title":"How Powerful are Graph Neural Networks?","authors":["Keyulu Xu","Weihua Hu","Jure Leskovec","Stefanie Jegelka"],"url":"https://arxiv.org/abs/1810.00826","pdfUrl":"https://arxiv.org/pdf/1810.00826v3","codeUrl":"https://github.com/weihua916/powerful-gnns","preprint":{"id":"1810.00826","submittedOn":"2018-10-01","url":"https://arxiv.org/abs/1810.00826"},"publication":{"venue":"ICLR","year":2019,"kind":"conference","url":"https://arxiv.org/abs/1810.00826"},"citation":"@misc{graphlearninggin2018,\n  title = {{How Powerful are Graph Neural Networks?}},\n  author = {Keyulu Xu and Weihua Hu and Jure Leskovec and Stefanie Jegelka},\n  year = {2018},\n  eprint = {1810.00826},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1810.00826}\n}\n","citationPath":"/content/papers/citations/graph-learning/gin.f2b31912b576.bib"},"thumbnail":{"src":"/content/papers/assets/1062d104bcaae50e5f8c9abf6c72f574a014c68e6a7bb4c6705f663336773b4f.png","width":960,"height":214},"locale":"fr","path":"/content/papers/fr/graph-learning/gin.0cdca52c61bc.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"la-forme-commune-de-lagrégation-des-voisins","text":"La forme commune de l'agrégation des voisins","depth":3},{"id":"les-voisins-forment-un-multiensemble","text":"Les voisins forment un multiensemble","depth":3},{"id":"le-test-wl","text":"Le test WL","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"le-plafond-des-gnn","text":"Le plafond des GNN","depth":3},{"id":"somme-moyenne-et-maximum","text":"Somme, moyenne et maximum","depth":3},{"id":"gin","text":"GIN","depth":3},{"id":"moins-expressif-mais-parfois-utile","text":"Moins expressif, mais parfois utile","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"peut-on-ajuster-lentraînement-","text":"Peut-on ajuster l'entraînement ?","depth":3},{"id":"exactitude-de-test","text":"Exactitude de test","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/sgc","relation":"citing","topic":""},{"id":"graph-learning/gnn-plus","relation":"citing","topic":""}]}],"text":"GCN a repris tout l'attirail de l'apprentissage profond : des couches successives, chacune avec une matrice de poids, des ReLU entre elles, puis un softmax.\n\nFelix Wu, Tianyi Zhang, Kilian Weinberger et leurs collègues de Cornell soupçonnent certains éléments d'être superflus. L'introduction rappelle que l'apprentissage automatique part généralement du simple et n'ajoute de complexité qu'au besoin : les limites du perceptron linéaire ont conduit au perceptron multicouche ; les filtres fixes comme Sobel ont ensuite évolué en CNN appris. GCN fait exception : né après le renouveau des réseaux neuronaux, il s'est construit d'emblée sur plusieurs couches, sans version linéaire plus simple.\n\nLes auteurs ajoutent une remarque pratique : dans les applications réelles, les classifieurs restent majoritairement linéaires, souvent des régressions logistiques, faciles à optimiser et à interpréter.\n\nIls démontent donc GCN jusqu'au plus simple, pour voir ce qui reste.\n\n## Poser le problème\n\nReprenons une couche de GCN. Avec $S=\\tilde D^{-1/2}\\tilde A\\tilde D^{-1/2}$, l'adjacence normalisée avec boucles propres, la couche $k$ effectue trois opérations :\n\n1. **Propagation des caractéristiques** : $\\bar H^{(k)}\\leftarrow SH^{(k-1)}$, une moyenne pondérée avec les voisins.\n2. **Transformation linéaire** : $\\bar H^{(k)}\\leftarrow\\bar H^{(k)}\\Theta^{(k)}$.\n3. **Non-linéarité** : $H^{(k)}\\leftarrow\\mathrm{ReLU}(\\bar H^{(k)})$.\n\nAprès $K$ couches, un softmax classifie :\n\n$$\n\\hat Y_{\\text{GCN}}=\\mathrm{softmax}\\left(SH^{(K-1)}\\Theta^{(K)}\\right)\n$$\n\nLaquelle explique les bons résultats de GCN sur les citations ? Les auteurs parient sur la première. Les voisins y partagent souvent leur classe ; moyenner leurs caractéristiques rapproche les nœuds similaires et facilite la classification.\n\n## Résoudre le problème\n\n### Retirer les non-linéarités\n\nSi elles ne sont pas décisives, retirons-les toutes et ne gardons que le softmax final :\n\n$$\n\\hat Y=\\mathrm{softmax}\\left(S\\cdots SSX\\Theta^{(1)}\\Theta^{(2)}\\cdots\\Theta^{(K)}\\right)\n$$\n\nLes produits de $S$ deviennent $S^K$, et les matrices de poids se fondent en une seule $\\Theta$ :\n\n$$\n\\hat Y_{\\text{SGC}}=\\mathrm{softmax}\\left(S^KX\\Theta\\right)\n$$\n\nC'est SGC, Simple Graph Convolution. $\\bar X=S^KX$ n'a aucun paramètre et se précalcule une fois avant l'entraînement. Ensuite, il reste une régression logistique multiclasse sur $\\bar X$, à perte convexe, optimisable par méthode du second ordre ou descente de gradient stochastique.\n\n[![Figure 1 de l'article : en haut, GCN applique K cycles de propagation des caractéristiques, transformation linéaire et non-linéarité, puis softmax. En bas, SGC regroupe la propagation sur K pas au début, puis applique une régression logistique. Les deux lignes montrent les mêmes entrées et prédictions.](/content/papers/assets/42da0472259826c266fe1b1b617041ef7cb3aa49eda3558ac91dcd15aa5272e0.png)](/content/papers/assets/42da0472259826c266fe1b1b617041ef7cb3aa49eda3558ac91dcd15aa5272e0.png)\n\n*Figure 1 de l'article (Wu et al.), extraite de la [**page 2 du PDF**](https://arxiv.org/pdf/1902.07153v2#page=2). Légende originale omise.*\n\nEn haut, chaque couche GCN retourne propager sur le graphe. En bas, SGC réalise toute la propagation au départ ; le classifieur suivant n'a plus besoin de connaître le graphe.\n\nEssayons sur le chemin 0-1-2-3-4-5 : les trois premiers nœuds forment une classe, les trois derniers une autre.\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\n\nn = 6\nA = np.zeros((n, n))\nfor i in range(n - 1):                      # Un chemin de 6 nœuds\n    A[i, i + 1] = A[i + 1, i] = 1\n\ndef sym_norm(M):\n    d = M.sum(1)\n    return M / np.sqrt(np.outer(d, d))\n\nrng = np.random.default_rng(0)\nX = rng.random((n, 4))                      # 6 nœuds, 4 caractéristiques chacun\nS = sym_norm(A + np.eye(n))\nX_bar = np.linalg.matrix_power(S, 2) @ X    # K = 2 : précalcul, puis plus d'accès au graphe\nprint(\"X̄:\", X_bar.shape)\n\n# Il ne reste qu'une régression logistique multiclasse : softmax(X̄ Θ)\nTheta = np.zeros((4, 2))\ny = np.array([0, 0, 0, 1, 1, 1])\nfor _ in range(500):\n    logits = X_bar @ Theta\n    P = np.exp(logits - logits.max(1, keepdims=True))\n    P /= P.sum(1, keepdims=True)\n    Theta -= 0.5 * X_bar.T @ (P - np.eye(2)[y]) / n      # Gradient de l'entropie croisée\nprint(\"Prédictions:\", P.argmax(1), \" Étiquettes:\", y)\n```\n\n```text\nX̄: (6, 4)\nPrédictions: [0 0 0 1 1 1]  Étiquettes: [0 0 0 1 1 1]\n```\n\nCe n'est qu'une démonstration du déroulement : six points d'entraînement ne donnent pas une mesure d'exactitude. Le détail à regarder est l'absence complète de $S$ dans la boucle ; le graphe n'intervient qu'au début.\n\n### Lecture spectrale : un filtre passe-bas\n\nPourquoi le lissage suffit-il ? Les auteurs répondent dans le domaine spectral.\n\nGCN part du laplacien $\\Delta_{\\text{sym}}=I-D^{-1/2}AD^{-1/2}$, dont les valeurs propres $\\lambda$ sont les fréquences du graphe, dans $[0,2]$. Sans boucles propres, la propagation est $S_{\\text{adj}}=D^{-1/2}AD^{-1/2}=I-\\Delta_{\\text{sym}}$ ; l'appliquer $K$ fois revient à filtrer par :\n\n$$\ng(\\lambda)=(1-\\lambda)^K\n$$\n\nLa difficulté se trouve dans les hautes fréquences proches de 2. $1-\\lambda$ approche $-1$ ; son coefficient est négatif pour $K$ impair, positif pour $K$ pair. Les hautes fréquences ne sont pas atténuées.\n\nLes auteurs prouvent au théorème 1 que les boucles propres réduisent nécessairement la plus grande valeur propre du laplacien, tandis que la plus petite reste 0. Sur Cora, le maximum passe d'environ 2 à 1.5 : $(1-\\lambda)^K$ reste alors plus petit sur tout le spectre et $S^K$ devient un filtre de type passe-bas. Cela explique aussi l'astuce de renormalisation de GCN.\n\nRevenons au chemin. Étant biparti, il a une fréquence maximale exactement égale à 2 sans boucles propres :\n\n```python\nlam = np.linalg.eigvalsh(np.eye(n) - sym_norm(A)).clip(0)     # Fréquences de S_adj\nlam_t = np.linalg.eigvalsh(np.eye(n) - sym_norm(A + np.eye(n))).clip(0)  # Avec boucles propres\nprint(\"Sans boucles propres:\", lam)\nprint(\"Avec boucles propres:\", lam_t)\nfor K in (1, 2, 3):\n    print(f\"K={K}  Coefficient de fréquence maximale  Sans boucles: {(1 - lam.max()) ** K:5.2f}\"\n          f\"   Avec boucles: {(1 - lam_t.max()) ** K:5.2f}\")\n```\n\n```text\nSans boucles propres: [0.   0.19 0.69 1.31 1.81 2.  ]\nAvec boucles propres: [0.   0.11 0.41 0.78 1.09 1.28]\nK=1  Coefficient de fréquence maximale  Sans boucles: -1.00   Avec boucles: -0.28\nK=2  Coefficient de fréquence maximale  Sans boucles:  1.00   Avec boucles:  0.08\nK=3  Coefficient de fréquence maximale  Sans boucles: -1.00   Avec boucles: -0.02\n```\n\nSans boucles, la composante de plus haute fréquence garde une amplitude de 1, quel que soit le nombre de produits, et change seulement de signe. Les boucles ramènent la fréquence maximale à 1.28 ; après deux produits, son coefficient n'est plus que 0.08.\n\n[![Figure 2 de l'article : trois panneaux pour le filtre de Chebyshev du premier ordre, l'adjacence normalisée sans boucles et celle avec boucles. L'axe horizontal donne les valeurs propres de 0 à 2, les courbes bleues les coefficients pour K=1 à 6 et le rouge le spectre de la troisième caractéristique de Cora. Chebyshev dépasse 8 aux basses fréquences ; sans boucles, les hautes fréquences proches de 2 restent à ±1 ; avec boucles, le spectre s'arrête vers 1.5 et les coefficients décroissent avec la fréquence.](/content/papers/assets/8025ac636ebdc23923398f9d8902317850a9937978d6dc393b96103e730fce8d.png)](/content/papers/assets/8025ac636ebdc23923398f9d8902317850a9937978d6dc393b96103e730fce8d.png)\n\n*Figure 2 de l'article (Wu et al.), extraite de la [**page 5 du PDF**](https://arxiv.org/pdf/1902.07153v2#page=5). Légende originale omise.*\n\nChaque panneau représente une propagation. À gauche, le filtre du premier ordre $I+D^{-1/2}AD^{-1/2}$ de la dérivation GCN a pour coefficients $(2-\\lambda)^K$ : les basses fréquences explosent avec $K$, source d'instabilité déjà relevée par GCN. Au milieu, sans boucles, l'extrémité haute alterne entre $+1$ et $-1$. À droite, les boucles réduisent le spectre vers 1.5 ; la courbe descend régulièrement et donne un passe-bas net.\n\nL'annexe confirme ce dessin : sur la validation, la propagation avec boucles est plus précise et stable pour plusieurs $K$ ; sans elles, les $K$ impairs dégradent nettement l'exactitude.\n\n## Discussion\n\n### Réseaux de citations et Reddit\n\n| Méthode | Cora | Citeseer | Pubmed |\n| --- | ---: | ---: | ---: |\n| GCN | 81.4 ± 0.4 | 70.9 ± 0.5 | 79.0 ± 0.4 |\n| GAT | 83.3 ± 0.7 | 72.6 ± 0.6 | 78.5 ± 0.3 |\n| FastGCN | 79.8 ± 0.3 | 68.8 ± 0.6 | 77.4 ± 0.3 |\n| GIN | 77.6 ± 1.1 | 66.1 ± 0.9 | 77.0 ± 1.2 |\n| **SGC** | 81.0 ± 0.0 | **71.9 ± 0.1** | 78.9 ± 0.0 |\n\nCes résultats sont les réexécutions des auteurs, moyennées sur 10 essais, en exactitude (%), avec $K=2$ pour SGC. SGC égale presque GCN et gagne environ 1 point sur Citeseer, ce que les auteurs attribuent au moindre risque de surapprentissage de ses rares paramètres. GAT reste meilleur sur Cora et Citeseer. GIN, réimplémenté puis réglé par les auteurs, fonctionne ici moins bien à cause du surapprentissage.\n\nL'écart-type de SGC est presque nul. Son objectif convexe conduit les différentes initialisations à des solutions presque identiques.\n\nSur Reddit et ses 230,000 nœuds, le GCN complet manque de mémoire. SGC obtient un micro-F1 de 94.9, devant SAGE-GCN (93.0) et FastGCN (93.7), qui traitent l'échelle par échantillonnage, mais derrière SAGE-mean (95.0), SAGE-LSTM (95.4) et GaAN (96.4). Avec L-BFGS et sans régularisation, il converge en deux étapes.\n\n### Combien de temps gagne-t-on ?\n\nSur GTX 1080 Ti, les auteurs comparent les temps à SGC, précalcul de $S^KX$ inclus. Sur Pubmed, GCN demande 28 fois son temps et FastGCN 6 fois. Sur Reddit, SAGE-GCN prend 32 fois, SAGE-LSTM 180 fois et FastGCN 100 fois.\n\n### Tâches en aval\n\nSGC remplace le GCN dans cinq applications :\n\n1. **Classification de textes** : dans TextGCN, dont les nœuds sont documents et mots, SGC avec $K=2$ atteint des résultats comparables sur 5 jeux, jusqu'à 83.6 fois plus vite.\n2. **Géolocalisation d'utilisateurs** : il dépasse le GCN à connexions highway sur GEOTEXT, TWITTER-US et TWITTER-WORLD, économisant plus de 30 heures sur ce dernier.\n3. **Extraction de relations** : remplacer le GCN de C-GCN donne 67.0% d'exactitude sur TACRED, contre 66.4% pour C-GCN.\n4. **Classification d'images zéro-shot** : remplacer GCNZ par MLP puis SGC réduit les paramètres de 55%, avec une exactitude légèrement meilleure.\n5. **Classification de graphes** : ici, cela ne suffit plus. Dans DCGCN, SGC obtient 71.0% sur NCI1 et 76.2% sur COLLAB, près de la version GCN, mais loin derrière GIN. Sur le jeu de chimie quantique QM8, son MAE est de 0.03, contre 0.01 pour les méthodes plus avancées.\n\nLes quatre premières tâches partagent une propriété : les éléments voisins du graphe tendent déjà à se ressembler, et le lissage aide. Pour classifier des graphes, il faut distinguer la structure elle-même ; le lissage seul ne suffit plus.\n\n\n> [!TIP]\n> \n> Pour comprendre l'avantage de GIN sur les modèles par moyenne en classification de graphes, voir notre note :\n> \n> - **[[18.10] GIN : C'est la somme qui compte](/blog/papers/graph-learning/gin)**\n\n\n## Conclusion\n\nSGC réduit GCN à deux étapes : lisser $K$ fois sur le graphe, puis appliquer une régression logistique. Sur les citations et plusieurs tâches en aval, il égale GCN en exactitude tout en gagnant un ou deux ordres de grandeur à l'entraînement. Spectralement, les boucles propres réduisent le spectre et font de $S^K$ un filtre passe-bas, éclairant l'astuce de renormalisation de GCN.\n\nCes résultats délimitent aussi GCN. Sur les citations, son ingrédient utile est surtout le lissage ; quand la tâche dépend de la structure elle-même, comme la classification de graphes, SGC et GCN sont tous deux distancés.\n\nQuand on vous propose une nouvelle variante de GCN, ajoutez SGC à la référence. Quelques secondes d'entraînement : si la variante ne le bat pas, les non-linéarités attendront.\n","imageSizes":{"/content/papers/assets/42da0472259826c266fe1b1b617041ef7cb3aa49eda3558ac91dcd15aa5272e0.png":{"width":1366,"height":612},"/content/papers/assets/8025ac636ebdc23923398f9d8902317850a9937978d6dc393b96103e730fce8d.png":{"width":1080,"height":396}}}
