{"notes":[{"id":"graph-learning/deeper-insights","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Deeper Insights","subtitle":"Trop bien lissé","author":"Z. Yuan","paperDate":"2018-01-22","publishedOn":"2023-11-29","paperTitle":"Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning","paperUrl":"https://arxiv.org/abs/1801.07606","bibliography":{"title":"Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning","authors":["Qimai Li","Zhichao Han","Xiao-Ming Wu"],"url":"https://arxiv.org/abs/1801.07606","pdfUrl":"https://arxiv.org/pdf/1801.07606v1","codeUrl":null,"preprint":{"id":"1801.07606","submittedOn":"2018-01-22","url":"https://arxiv.org/abs/1801.07606"},"publication":{"venue":"AAAI","year":2018,"kind":"conference","url":"https://ojs.aaai.org/index.php/AAAI/article/view/11604"},"citation":"@misc{graphlearningdeeperinsights2018,\n  title = {{Deeper Insights into Graph Convolutional Networks for Semi-Supervised Learning}},\n  author = {Qimai Li and Zhichao Han and Xiao-Ming Wu},\n  year = {2018},\n  eprint = {1801.07606},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1801.07606}\n}\n","citationPath":"/content/papers/citations/graph-learning/deeper-insights.52354c86fac9.bib"},"thumbnail":{"src":"/content/papers/assets/2a13880b48fae6456e19c622cee1d7c7907f8c31d6890722d4980a381fddb06a.png","width":1396,"height":268},"locale":"fr","path":"/content/papers/fr/graph-learning/deeper-insights.3da7994e8311.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":"comparer-au-réseau-entièrement-connecté","text":"Comparer au réseau entièrement connecté","depth":3},{"id":"le-lissage-laplacien","text":"Le lissage laplacien","depth":3},{"id":"lisser-trop-souvent","text":"Lisser trop souvent","depth":3},{"id":"trop-peu-de-couches-pose-aussi-problème","text":"Trop peu de couches pose aussi problème","depth":3},{"id":"le-remède--donner-plus-détiquettes-à-gcn","text":"Le remède : donner plus d'étiquettes à GCN","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/appnp","relation":"referenced","topic":""},{"id":"graph-learning/sgc","relation":"referenced","topic":""}]},{"id":"graph-learning/appnp","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"APPNP","subtitle":"Penser à rentrer chez soi","author":"Z. Yuan","paperDate":"2018-10-14","publishedOn":"2024-01-17","world":"external/appnp","paperTitle":"Predict then Propagate: Graph Neural Networks meet Personalized PageRank","paperUrl":"https://arxiv.org/abs/1810.05997","bibliography":{"title":"Predict then Propagate: Graph Neural Networks meet Personalized PageRank","authors":["Johannes Gasteiger","Aleksandar Bojchevski","Stephan Günnemann"],"url":"https://arxiv.org/abs/1810.05997","pdfUrl":"https://arxiv.org/pdf/1810.05997v6","codeUrl":"https://www.kdd.in.tum.de/ppnp","preprint":{"id":"1810.05997","submittedOn":"2018-10-14","url":"https://arxiv.org/abs/1810.05997"},"publication":{"venue":"ICLR","year":2019,"kind":"conference","url":"https://arxiv.org/abs/1810.05997"},"citation":"@misc{graphlearningappnp2018,\n  title = {{Predict then Propagate: Graph Neural Networks meet Personalized PageRank}},\n  author = {Johannes Gasteiger and Aleksandar Bojchevski and Stephan Günnemann},\n  year = {2018},\n  eprint = {1810.05997},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1810.05997}\n}\n","citationPath":"/content/papers/citations/graph-learning/appnp.eae593f21b4d.bib"},"thumbnail":{"src":"/content/papers/assets/9ad06d29a0d48e1de136b4cd8560f14defc55b0aaf289f07b8319c40f033b844.png","width":908,"height":370},"locale":"fr","path":"/content/papers/fr/graph-learning/appnp.497491064447.md","headings":[{"id":"poser-le-problème","text":"Poser le problème","depth":2},{"id":"et-avec-une-infinité-de-couches-","text":"Et avec une infinité de couches ?","depth":3},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"personalized-pagerank","text":"Personalized PageRank","depth":3},{"id":"ppnp--prédire-puis-propager","text":"PPNP : prédire, puis propager","depth":3},{"id":"appnp--approcher-par-itération-de-puissance","text":"APPNP : approcher par itération de puissance","depth":3},{"id":"la-différence-avec-gcn","text":"La différence avec GCN","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"une-évaluation-rigoureuse","text":"Une évaluation rigoureuse","depth":3},{"id":"résultats-principaux","text":"Résultats principaux","depth":3},{"id":"combien-de-pas-et-quelle-fréquence-de-retour-","text":"Combien de pas et quelle fréquence de retour ?","depth":3},{"id":"où-appliquer-la-propagation-","text":"Où appliquer la propagation ?","depth":3},{"id":"quand-les-étiquettes-sont-rares","text":"Quand les étiquettes sont rares","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/deeper-insights","relation":"referenced","topic":""}]},{"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":""}]}],"text":"Dès sa sortie fin 2016, GCN devance largement les autres méthodes de classification semi-supervisée sur trois réseaux de citations. L'article explique pourtant peu pourquoi il fonctionne : il part de la convolution spectrale, accumule les approximations et aboutit à une courte règle de propagation.\n\nQimai Li, Zhichao Han et Xiao-Ming Wu, de l'université polytechnique de Hong Kong, veulent ouvrir cette ligne de formule. Que fait-elle exactement ? Dans quels cas échoue-t-elle ?\n\nLeur réponse : la convolution de GCN est un lissage laplacien. Lisser une fois aide ; lisser trop de fois rend tous les nœuds semblables. Ce phénomène est l'**over-smoothing**, le surlissage. APPNP et l'article sur l'over-squashing citeront ensuite ce travail pour parler des difficultés à approfondir les GNN.\n\n## Poser le problème\n\nLes auteurs relèvent deux problèmes pratiques de GCN.\n\nD'abord, GCN reste peu profond : deux couches dans l'article. Il ne voit donc que les voisins à deux sauts. Quand les étiquettes sont rares, la plupart des nœuds n'ont aucun nœud étiqueté à proximité, et l'information n'atteint pas tout le graphe.\n\nEnsuite, GCN dépend d'un jeu de validation. L'article d'origine utilise 20 étiquettes par classe pour l'entraînement — 140 en tout sur Cora — mais ajoute 500 nœuds étiquetés pour décider de l'arrêt. Une validation plus grande que l'entraînement contredit l'intention du semi-supervisé et rend la comparaison inégale face aux méthodes qui n'en demandent pas.\n\nLes auteurs cherchent d'abord à comprendre l'efficacité de GCN, puis à traiter ces deux difficultés.\n\n## Résoudre le problème\n\n### Comparer au réseau entièrement connecté\n\nLa seule différence entre GCN et un réseau entièrement connecté (FCN) est une multiplication à gauche des caractéristiques par $\\hat A=\\tilde D^{-1/2}\\tilde A\\tilde D^{-1/2}$. Les auteurs les comparent sur Cora, avec 20 étiquettes par classe :\n\n| FCN, une couche | FCN, deux couches | GCN, une couche | GCN, deux couches |\n| ---: | ---: | ---: | ---: |\n| 53.1% | 55.9% | 70.8% | 79.8% |\n\nÀ une couche déjà, GCN gagne presque 18 points sur FCN. Tout l'écart vient de $\\hat A$.\n\n### Le lissage laplacien\n\nDécomposons une couche de GCN : convolution sur graphe $Y=\\hat AX$, puis couche entièrement connectée. La première étape est manifestement la clé.\n\nLe lissage laplacien est une ancienne technique de lissage de maillages en infographie. Pour chaque canal, chaque nœud mélange sa valeur et celles de ses voisins :\n\n$$\n\\hat y_i=(1-\\gamma)x_i+\\gamma\\sum_j\\frac{\\tilde a_{ij}}{d_i}x_j,\\qquad 0<\\gamma\\le1\n$$\n\nSous forme matricielle, $\\hat Y=(I-\\gamma\\tilde D^{-1}\\tilde L)X$, avec $\\tilde L=\\tilde D-\\tilde A$. Prendre $\\gamma=1$ donne la moyenne des voisins, soi-même compris, $\\tilde D^{-1}\\tilde AX$. Remplacer ensuite $\\tilde D^{-1}\\tilde L$ par sa normalisation symétrique $\\tilde D^{-1/2}\\tilde L\\tilde D^{-1/2}$ donne exactement $\\tilde D^{-1/2}\\tilde A\\tilde D^{-1/2}X$, l'opérateur de GCN.\n\nLa convolution de GCN est donc un **lissage laplacien symétrique**. Elle remplace les caractéristiques d'un nœud par une moyenne pondérée avec ses voisins. Sur les réseaux de citations, les nœuds reliés tendent à partager leur classe ; la moyenne les rapproche et facilite le travail du classifieur. Les auteurs y voient la clé du succès de GCN.\n\n### Lisser trop souvent\n\nSi lisser est utile, pourquoi ne pas empiler davantage ?\n\nLes auteurs expérimentent sur le club de karaté de Zachary : 34 membres, 78 arêtes, puis une scission en deux camps. Ils initialisent GCN au hasard, sans entraînement, avec des caractéristiques one-hot, une couche cachée de 16 dimensions et une sortie de 2 dimensions, puis dessinent les sorties de 1 à 5 couches :\n\n[![Figure 2 de l'article : cinq nuages de points représentent les plongements 2D de GCN non entraînés de 1 à 5 couches. Jaune et noir codent les deux camps. À une couche, les couleurs se mêlent ; à deux, elles se séparent globalement ; de trois à cinq, elles se mélangent de nouveau, jusqu'à former une fine ligne à cinq couches.](/content/papers/assets/2a13880b48fae6456e19c622cee1d7c7907f8c31d6890722d4980a381fddb06a.png)](/content/papers/assets/2a13880b48fae6456e19c622cee1d7c7907f8c31d6890722d4980a381fddb06a.png)\n\n*Figure 2 de l'article (Li et al.), extraite de la [**page 4 du PDF**](https://arxiv.org/pdf/1801.07606v1#page=4). Légende principale omise.*\n\nUne couche sépare mal les camps ; deux les distinguent assez bien ; en ajouter les mélange de nouveau. Les auteurs précisent que le jeu est petit et les liens entre camps nombreux, ce qui accélère le mélange.\n\nRetirons les poids aléatoires pour observer le seul lissage. Lissons $k$ fois les caractéristiques one-hot, puis comparons les similarités cosinus entre membres d'un même camp et de camps différents :\n\n```python\nimport networkx as nx\nimport numpy as np\n\nG = nx.karate_club_graph()\nA = nx.to_numpy_array(G, weight=None) + np.eye(34)        # 34 membres, 78 arêtes et des boucles propres\nd = A.sum(1)\nA_hat = A / np.sqrt(np.outer(d, d))\nclub = np.array([G.nodes[v][\"club\"] == \"Mr. Hi\" for v in G])   # Le club se séparera en deux camps\nsame = club[:, None] == club[None, :]\n\nfor k in (1, 2, 4, 16, 64):\n    H = np.linalg.matrix_power(A_hat, k)                   # Caractéristiques identité : H = Â^k I\n    Hn = H / np.linalg.norm(H, axis=1, keepdims=True)\n    S = Hn @ Hn.T                                          # Similarités cosinus par paires\n    print(f\"k={k:>2}  Même camp {S[same].mean():.3f}   Camps différents {S[~same].mean():.3f}\")\n```\n\n```text\nk= 1  Même camp 0.273   Camps différents 0.054\nk= 2  Même camp 0.542   Camps différents 0.179\nk= 4  Même camp 0.818   Camps différents 0.424\nk=16  Même camp 0.990   Camps différents 0.942\nk=64  Même camp 1.000   Camps différents 1.000\n```\n\nAprès quelques lissages, les membres d'un même camp se ressemblent effectivement davantage : c'est l'utilité de GCN. Mais la similarité entre camps monte aussi. À 64 applications, les deux atteignent 1.000 ; toutes les caractéristiques pointent dans la même direction et les camps deviennent indiscernables.\n\nLes auteurs en font un théorème. Si le graphe n'a aucune composante connexe bipartie, les lissages laplaciens répétés font converger les caractéristiques vers une valeur commune dans chaque composante ; la version symétrique les fait converger vers des valeurs proportionnelles à la racine carrée des degrés. Un graphe avec boucles propres n'est jamais biparti : un GCN assez profond finit donc par y arriver.\n\n### Trop peu de couches pose aussi problème\n\nImpossible d'empiler indéfiniment : il faut rester peu profond. Mais cela a aussi son prix.\n\n[![Figure 1 de l'article : sur Cora, l'axe horizontal est la proportion d'entraînement de 0.01 à 0.05 et le vertical l'exactitude de test. La propagation d'étiquettes, en bleu, monte lentement de 0.62 à 0.70 ; GCN avec validation, en orange, passe d'environ 0.62 à 0.79 ; sans validation, en vert, il n'est qu'à environ 0.54 pour 0.01 ; la méthode proposée, en rouge, reste en tête, d'environ 0.70 à 0.82.](/content/papers/assets/86813b55f0a68265d57576c54dda7b6262bacae68112a45c8924d330103ed687.png)](/content/papers/assets/86813b55f0a68265d57576c54dda7b6262bacae68112a45c8924d330103ed687.png)\n\n*Figure 1 de l'article (Li et al.), extraite de la [**page 2 du PDF**](https://arxiv.org/pdf/1801.07606v1#page=2). Légende originale omise.*\n\nQuand les étiquettes se raréfient, GCN baisse plus vite que la propagation d'étiquettes, qui n'utilise pourtant que la structure. Selon les auteurs, deux couches ne propagent les étiquettes qu'à deux sauts, sans voir le graphe entier ; la propagation d'étiquettes diffuse, elle, partout. Sans validation, GCN baisse encore davantage.\n\n### Le remède : donner plus d'étiquettes à GCN\n\nLes auteurs changent les données d'entraînement, en élargissant l'ensemble étiqueté de GCN :\n\n- **Co-training** : un modèle de marches aléatoires partiellement absorbantes, qui voit tout le graphe, cherche pour chaque classe les nœuds les plus proches des étiquettes connues et les ajoute à l'entraînement.\n- **Self-training** : entraîner un GCN, ajouter ses prédictions les plus sûres au jeu d'entraînement, puis continuer. Cela aide particulièrement quand le graphe contient de nombreuses petites composantes isolées, hors de portée des marches aléatoires.\n- **Union** et **Intersection** : prendre l'union ou l'intersection des étiquettes trouvées par les deux méthodes. L'union diversifie les étiquettes ; l'intersection ne conserve que les décisions sûres pour les deux, plus précises.\n\nCes quatre méthodes entraînent directement sur l'ensemble élargi, sans jeu de validation supplémentaire.\n\n## Discussion\n\nSur Cora, CiteSeer et PubMed, les auteurs abaissent les proportions étiquetées bien en dessous du protocole de GCN. Pour Cora :\n\n| Proportion étiquetée | 0.5% | 1% | 2% | 3% | 4% | 5% |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| Propagation d'étiquettes | 56.4 | 62.3 | 65.4 | 67.5 | 69.0 | 70.2 |\n| ChebNet | 38.0 | 52.0 | 62.4 | 70.8 | 74.1 | 77.6 |\n| GCN, sans validation | 42.6 | 56.9 | 67.8 | 74.9 | 77.6 | 79.3 |\n| GCN, avec validation | 50.9 | 62.3 | 72.2 | 76.5 | 78.4 | 79.7 |\n| Union | **58.5** | **69.9** | **75.9** | **78.5** | **80.4** | **81.7** |\n\nLes chiffres sont les exactitudes (%). Avec seulement 0.5% d'étiquettes, GCN sans validation tombe à 42.6%, derrière les 56.4% de la propagation d'étiquettes ; Union atteint 58.5%. Les auteurs rapportent des gains de 23% et 28% sur GCN sans validation à 1% d'étiquettes sur Cora et CiteSeer ; à 0.05% d'étiquettes sur PubMed, le gain atteint 37%.\n\nAvec assez d'étiquettes, les écarts disparaissent : les étiquettes fournies suffisent alors à entraîner un bon GCN. ChebNet fonctionne mal dans la plupart des configurations, ce que les auteurs attribuent à un possible surapprentissage.\n\nAutre résultat marquant : sur Cora, Union avec 2% des étiquettes seulement, soit 54, dépasse tous les modèles de référence du tableau GCN original, entraînés avec 140 étiquettes.\n\n## Conclusion\n\nL'article interprète la convolution de GCN comme un lissage laplacien symétrique. Il rapproche les nœuds d'une même classe, d'où son efficacité ; répété trop souvent, il fait converger tous les nœuds vers une forme déterminée par les degrés : l'over-smoothing. Ce sont les deux faces de la même opération.\n\nGCN doit donc rester peu profond, mais propage alors mal les rares étiquettes. Les auteurs élargissent celles-ci avec marches aléatoires et auto-entraînement et creusent nettement l'écart dans les régimes très peu étiquetés.\n\nPlus de deux ans plus tard, Alon et Yahav présenteront le surlissage comme l'explication admise de la difficulté à approfondir les GNN dans leur travail sur l'over-squashing. APPNP, plus tard la même année que cet article, puis SGC l'année suivante, prendront deux voies : éviter que la propagation ne brouille tout, ou ne garder que le lissage.\n\n\n> [!TIP]\n> \n> Pour ces deux suites, voir nos notes :\n> \n> - **[[18.10] APPNP : Penser à rentrer chez soi](/blog/papers/graph-learning/appnp)**\n> - **[[19.02] SGC : Le linéaire suffit-il ?](/blog/papers/graph-learning/sgc)**\n\n\nLa prochaine fois que votre GCN se dégrade en profondeur, ne blâmez pas trop vite l'optimiseur. Sortez les caractéristiques intermédiaires et calculez leurs similarités par paires : tout est peut-être déjà lissé.\n","imageSizes":{"/content/papers/assets/2a13880b48fae6456e19c622cee1d7c7907f8c31d6890722d4980a381fddb06a.png":{"width":1396,"height":268},"/content/papers/assets/86813b55f0a68265d57576c54dda7b6262bacae68112a45c8924d330103ed687.png":{"width":628,"height":302}}}
