{"notes":[{"id":"graph-learning/graphormer","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Graphormer","subtitle":"Pas si mauvais, finalement","author":"Z. Yuan","paperDate":"2021-06-09","publishedOn":"2024-03-28","world":"external/graphormer","paperTitle":"Do Transformers Really Perform Bad for Graph Representation?","paperUrl":"https://arxiv.org/abs/2106.05234","bibliography":{"title":"Do Transformers Really Perform Bad for Graph Representation?","authors":["Chengxuan Ying","Tianle Cai","Shengjie Luo","Shuxin Zheng","Guolin Ke","Di He","Yanming Shen","Tie-Yan Liu"],"url":"https://arxiv.org/abs/2106.05234","pdfUrl":"https://arxiv.org/pdf/2106.05234v5","codeUrl":"https://github.com/Microsoft/Graphormer","preprint":{"id":"2106.05234","submittedOn":"2021-06-09","url":"https://arxiv.org/abs/2106.05234"},"publication":{"venue":"NeurIPS","year":2021,"kind":"conference","url":"https://proceedings.neurips.cc/paper/2021/hash/f1c1592588411002af340cbaedd6fc33-Abstract.html"},"citation":"@misc{graphlearninggraphormer2021,\n  title = {{Do Transformers Really Perform Bad for Graph Representation?}},\n  author = {Chengxuan Ying and Tianle Cai and Shengjie Luo and Shuxin Zheng and Guolin Ke and Di He and Yanming Shen and Tie-Yan Liu},\n  year = {2021},\n  eprint = {2106.05234},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2106.05234}\n}\n","citationPath":"/content/papers/citations/graph-learning/graphormer.23b94dbe8ef3.bib"},"thumbnail":{"src":"/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png","width":872,"height":620},"locale":"fr","path":"/content/papers/fr/graph-learning/graphormer.d3f350c38e71.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":"encodage-de-centralité","text":"Encodage de centralité","depth":3},{"id":"encodage-spatial","text":"Encodage spatial","depth":3},{"id":"encodage-des-arêtes","text":"Encodage des arêtes","depth":3},{"id":"autres-détails","text":"Autres détails","depth":3},{"id":"quels-gnn-peut-il-représenter-","text":"Quels GNN peut-il représenter ?","depth":3},{"id":"plus-fort-que-wl","text":"Plus fort que WL","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"pcqm4m-lsc","text":"PCQM4M-LSC","depth":3},{"id":"autres-jeux-de-données","text":"Autres jeux de données","depth":3},{"id":"lapport-de-chaque-encodage","text":"L'apport de chaque encodage","depth":3},{"id":"le-prix","text":"Le prix","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/graph-transformer","relation":"referenced","topic":""},{"id":"graph-learning/san","relation":"referenced","topic":""}]},{"id":"graph-learning/graph-transformer","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Graph Transformer","subtitle":"Tout connecter aggrave les choses","author":"Z. Yuan","paperDate":"2020-12-17","publishedOn":"2024-03-13","paperTitle":"A Generalization of Transformer Networks to Graphs","paperUrl":"https://arxiv.org/abs/2012.09699","bibliography":{"title":"A Generalization of Transformer Networks to Graphs","authors":["Vijay Prakash Dwivedi","Xavier Bresson"],"url":"https://arxiv.org/abs/2012.09699","pdfUrl":"https://arxiv.org/pdf/2012.09699v2","codeUrl":"https://github.com/graphdeeplearning/graphtransformer","preprint":{"id":"2012.09699","submittedOn":"2020-12-17","url":"https://arxiv.org/abs/2012.09699"},"publication":{"venue":"AAAI Workshop on Deep Learning on Graphs","shortVenue":"DLG-AAAI","year":2021,"kind":"workshop","url":"https://arxiv.org/abs/2012.09699v2"},"citation":"@misc{graphlearninggraphtransformer2020,\n  title = {{A Generalization of Transformer Networks to Graphs}},\n  author = {Vijay Prakash Dwivedi and Xavier Bresson},\n  year = {2020},\n  eprint = {2012.09699},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2012.09699}\n}\n","citationPath":"/content/papers/citations/graph-learning/graph-transformer.4e2f841bbbf0.bib"},"thumbnail":{"src":"/content/papers/assets/0540122812c6e6914f22240411cf2d172a94764bf8a0e6f6ab2cdae7c618f9fb.png","width":1324,"height":1000},"locale":"fr","path":"/content/papers/fr/graph-learning/graph-transformer.ef239bb32b2b.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":"lattention-entre-voisins-seulement","text":"L'attention entre voisins seulement","depth":3},{"id":"encodage-positionnel-laplacien","text":"Encodage positionnel laplacien","depth":3},{"id":"caractéristiques-darêtes-et-normalisation","text":"Caractéristiques d'arêtes et normalisation","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"protocole-expérimental","text":"Protocole expérimental","depth":3},{"id":"que-donne-la-connexion-complète-","text":"Que donne la connexion complète ?","depth":3},{"id":"encodage-positionnel-et-batchnorm","text":"Encodage positionnel et BatchNorm","depth":3},{"id":"comparaison-aux-gnn","text":"Comparaison aux GNN","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/san","relation":"referenced","topic":""},{"id":"graph-learning/graphgps","relation":"referenced","topic":""}]},{"id":"graph-learning/san","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"SAN","subtitle":"Entendre la forme du graphe","author":"Z. Yuan","paperDate":"2021-06-07","publishedOn":"2024-03-22","world":"external/san","paperTitle":"Rethinking Graph Transformers with Spectral Attention","paperUrl":"https://arxiv.org/abs/2106.03893","bibliography":{"title":"Rethinking Graph Transformers with Spectral Attention","authors":["Devin Kreuzer","Dominique Beaini","William L. Hamilton","Vincent Létourneau","Prudencio Tossou"],"url":"https://arxiv.org/abs/2106.03893","pdfUrl":"https://arxiv.org/pdf/2106.03893v3","codeUrl":"https://github.com/DevinKreuzer/SAN","preprint":{"id":"2106.03893","submittedOn":"2021-06-07","url":"https://arxiv.org/abs/2106.03893"},"publication":{"venue":"NeurIPS","year":2021,"kind":"conference","url":"https://proceedings.neurips.cc/paper/2021/hash/b4fd1d2cb085390fbbadae65e07876a7-Abstract.html"},"citation":"@misc{graphlearningsan2021,\n  title = {{Rethinking Graph Transformers with Spectral Attention}},\n  author = {Devin Kreuzer and Dominique Beaini and William L. Hamilton and Vincent Létourneau and Prudencio Tossou},\n  year = {2021},\n  eprint = {2106.03893},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2106.03893}\n}\n","citationPath":"/content/papers/citations/graph-learning/san.e69e469c3b91.bib"},"thumbnail":{"src":"/content/papers/assets/239f3ac016f803fed4fedec5cad345c48bc6b97791249f0e5cfdf2efd433b5c2.png","width":1280,"height":840},"locale":"fr","path":"/content/papers/fr/graph-learning/san.efc40fb3a1b7.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":"apprendre-les-positions","text":"Apprendre les positions","depth":3},{"id":"tout-connecter-avec-deux-attentions-distinctes","text":"Tout connecter, avec deux attentions distinctes","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"quelle-valeur-pour-gamma-","text":"Quelle valeur pour \\gamma ?","depth":3},{"id":"lapport-séparé-de-la-connexion-complète-et-du-lpe","text":"L'apport séparé de la connexion complète et du LPE","depth":3},{"id":"face-aux-meilleurs-modèles-de-lépoque","text":"Face aux meilleurs modèles de l'époque","depth":3},{"id":"le-prix","text":"Le prix","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/graph-transformer","relation":"referenced","topic":""}]}],"text":"En 2021, le Transformer domine déjà le traitement du langage et s'est installé en vision. Sur les classements de graphes, l'histoire est différente.\n\nPCQM4M-LSC, le défi à grande échelle d'OGB, contient plus de 3.8 millions de molécules dont il faut prédire une propriété de chimie quantique à partir du graphe. GT y atteint une MAE de validation de 0.1400 ; élargi à 83.2 millions de paramètres, sa MAE monte au contraire à 0.1408. Aucun ne bat GIN avec nœud virtuel (GIN-VN), à 0.1395 avec seulement 6.7 millions de paramètres.\n\nChengxuan Ying, Tianle Cai, Shengjie Luo et leurs collègues de l'université de technologie de Dalian, de Princeton, de l'université de Pékin et de Microsoft Research Asia mettent directement leur doute dans le titre : les Transformers sont-ils vraiment mauvais sur les graphes ?\n\nLeur Graphormer utilise un Transformer standard et remporte finalement l'épreuve au niveau des graphes de cette compétition.\n\n\n> [!TIP]\n> \n> Pour l'attention creuse et les positions laplaciennes de GT, ainsi que SAN paru le même mois, voir nos notes :\n> \n> - **[[20.12] Graph Transformer : Tout connecter aggrave les choses](/blog/papers/graph-learning/graph-transformer)**\n> - **[[21.06] SAN : Entendre la forme du graphe](/blog/papers/graph-learning/san)**\n\n\n## Poser le problème\n\nLes auteurs constatent que les adaptations efficaces du Transformer remplacent surtout un module du GNN, par exemple l'agrégation, par une attention softmax. Le squelette reste celui d'un GNN.\n\nLe blocage ? L'auto-attention ne calcule que la similarité sémantique entre caractéristiques de nœuds, sans structure. Elle ignore quels nœuds comptent, leur distance sur le graphe et les types d'arêtes du chemin.\n\nPour les auteurs, il faut encoder efficacement ces informations structurelles dans le modèle.\n\n## Résoudre le problème\n\n[![Figure 1 de l'article : à gauche, une couche d'auto-attention ajoute la centralité aux nœuds, projette Q, K et V, multiplie Q et K, redimensionne, ajoute un biais, applique softmax puis multiplie V. Au centre, deux grilles 5×5 d'encodages spatial et d'arêtes attribuent une valeur par paire, toutes deux ajoutées aux scores ; la centralité est ajoutée aux caractéristiques des nœuds en bas. À droite, un graphe à cinq nœuds : leur taille code l'importance et les pointillés leurs relations.](/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png)](/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png)\n\n*Figure 1 de l'article (Ying et al.), extraite de la [**page 3 du PDF**](https://arxiv.org/pdf/2106.05234v5#page=3), CC BY-SA 4.0. Légende originale omise.*\n\nGraphormer ajoute trois encodages : un sur les nœuds, deux entre les nœuds, dans les scores d'attention.\n\n### Encodage de centralité\n\nDans un réseau social, les personnes très suivies ont souvent plus d'influence. Les auteurs prennent la centralité la plus simple, le degré : degrés entrant et sortant indexent chacun un vecteur appris, ajouté aux caractéristiques d'entrée :\n\n$$\nh_i^{(0)}=x_i+z^-_{\\deg^-(v_i)}+z^+_{\\deg^+(v_i)}\n$$\n\nSur un graphe non orienté, les deux degrés coïncident et peuvent être réunis. Q et K portent ainsi l'importance des nœuds.\n\n### Encodage spatial\n\nDans une phrase, on doit préciser les positions des mots au Transformer. Le graphe n'a pas d'axe fixe : les auteurs décrivent plutôt la relation entre deux nœuds.\n\nLa distance de plus court chemin $\\phi(v_i,v_j)$ indexe un scalaire appris $b_{\\phi(v_i,v_j)}$, ajouté au score d'attention :\n\n$$\nA_{ij}=\\frac{(h_iW_Q)(h_jW_K)^\\top}{\\sqrt d}+b_{\\phi(v_i,v_j)}\n$$\n\nPour deux nœuds sans chemin entre eux, une valeur spéciale −1 a son propre biais. Ces biais sont partagés entre toutes les couches.\n\nSi $b$ apprend à décroître avec la distance, chaque nœud regarde davantage près de lui, tout en gardant accès au graphe entier.\n\n### Encodage des arêtes\n\nLes types de liaisons moléculaires sont des caractéristiques d'arêtes. Les méthodes antérieures les ajoutaient aux nœuds des extrémités ou les utilisaient dans l'agrégation : elles ne renseignaient que les nœuds reliés.\n\nGraphormer les ajoute aux scores d'attention. Pour chaque paire $(v_i,v_j)$, on choisit un plus court chemin $(e_1,\\dots,e_N)$, prend le produit scalaire des caractéristiques de chaque arête avec un vecteur appris, puis la moyenne :\n\n$$\nA_{ij}=\\frac{(h_iW_Q)(h_jW_K)^\\top}{\\sqrt d}+b_{\\phi(v_i,v_j)}+c_{ij},\\qquad\nc_{ij}=\\frac1N\\sum_{n=1}^N x_{e_n}\\big(w_n^E\\big)^\\top\n$$\n\n### Autres détails\n\nLayerNorm précède l'attention et le réseau feed-forward : c'est Pre-LN. Un nœud spécial `[VNode]`, relié à tous les nœuds, représente le graphe à la dernière couche, comme `[CLS]` dans BERT. Sa distance à chacun est 1, mais ces connexions étant virtuelles, il reçoit un biais spatial distinct.\n\n### Quels GNN peut-il représenter ?\n\nLes auteurs prouvent qu'avec les bons poids et la bonne distance, une couche Graphormer représente les agrégations et mises à jour de GIN, GCN et GraphSAGE. Pour une moyenne, fixons à 0 le biais de distance 1 et à moins l'infini les autres, puis $W_Q=W_K=0$ et $W_V=I$ : softmax répartit alors tout également entre voisins.\n\nVérifions sur cinq nœuds :\n\n```python\nimport numpy as np\nrng = np.random.default_rng(0)\n\ndef build(n, edges):\n    M = np.zeros((n, n))\n    for i, j in edges:\n        M[i, j] = M[j, i] = 1\n    return M\n\ndef shortest_paths(M):\n    n = len(M)\n    dist = np.full((n, n), -1)\n    for s in range(n):                       # Recherche en largeur depuis chaque nœud\n        dist[s, s], frontier, d = 0, [s], 0\n        while frontier:\n            d += 1\n            nxt = [v for u in frontier for v in range(n) if M[u, v] and dist[s, v] < 0]\n            for v in nxt:\n                dist[s, v] = d\n            frontier = list(dict.fromkeys(nxt))\n    return dist\n\nM = build(5, [(0, 1), (0, 2), (1, 2), (2, 3), (3, 4)])\nh = rng.normal(size=(5, 3))\nspd = shortest_paths(M)\n\nbias = np.where(spd == 1, 0.0, -np.inf)          # 0 à distance 1, moins l'infini ailleurs\nattn = np.exp(bias) / np.exp(bias).sum(1, keepdims=True)   # W_Q = W_K = 0 : seul le biais reste\nout = attn @ h                                   # W_V = I\n\nmean_nbrs = np.array([h[M[v] > 0].mean(0) for v in range(5)])\nprint(\"Attention du nœud 2:\", attn[2].round(2))\nprint(\"Identique à la moyenne des voisins:\", np.allclose(out, mean_nbrs))\n```\n\n```text\nAttention du nœud 2: [0.33 0.33 0.   0.33 0.  ]\nIdentique à la moyenne des voisins: True\n```\n\nLe nœud 2 a trois voisins, chacun reçoit un tiers ; lui-même et les nœuds à distance 2 reçoivent 0. Multiplier la moyenne par le degré donne la somme, et la centralité fournit ce degré. Pour un maximum, il faut une tête par dimension pour sélectionner les valeurs ; la démonstration est en annexe.\n\n### Plus fort que WL\n\nGraphormer voit aussi certaines choses qui échappent à WL. L'annexe donne cette paire :\n\n[![Figure 2 de l'annexe : à gauche, une échelle de deux rangées de trois nœuds, aux quatre coins roses et aux deux nœuds centraux bleus ; à droite, deux triangles reliés par un pont, avec les quatre nœuds extérieurs roses et les deux du pont bleus.](/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png)](/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png)\n\n*Figure 2 de l'annexe (Ying et al.), extraite de la [**page 14 du PDF**](https://arxiv.org/pdf/2106.05234v5#page=14), CC BY-SA 4.0. Légende originale omise.*\n\nÀ gauche une échelle, à droite deux triangles avec un pont. Chacun possède quatre nœuds de degré 2 et deux de degré 3 ; WL leur donne les mêmes couleurs à chaque tour. Mais leurs distances de plus court chemin diffèrent :\n\n```python\nfrom collections import Counter\n\ndef wl(M, rounds=3):\n    colors = [()] * len(M)                   # Une même couleur initiale\n    for _ in range(rounds):                  # Nouvelle couleur = soi-même + multiensemble des voisins\n        colors = [(colors[v], tuple(sorted(colors[u] for u in range(len(M)) if M[v, u])))\n                  for v in range(len(M))]\n    return Counter(colors)\n\nladder = build(6, [(0, 1), (1, 2), (3, 4), (4, 5), (0, 3), (1, 4), (2, 5)])\nbridge = build(6, [(0, 1), (0, 2), (1, 2), (2, 3), (3, 4), (3, 5), (4, 5)])\nprint(\"Mêmes statistiques de couleurs WL:\", wl(ladder) == wl(bridge))\nfor name, G in [(\"Échelle    \", ladder), (\"Deux triangles\", bridge)]:\n    print(name, sorted({tuple(sorted(row)) for row in shortest_paths(G).tolist()}))\n```\n\n```text\nMêmes statistiques de couleurs WL: True\nÉchelle     [(0, 1, 1, 1, 2, 2), (0, 1, 1, 2, 2, 3)]\nDeux triangles [(0, 1, 1, 1, 2, 2), (0, 1, 1, 2, 3, 3)]\n```\n\nChaque ligne donne les distances d'un type de nœud aux autres. Pour les bleus, c'est (0, 1, 1, 1, 2, 2) des deux côtés. Un coin rose de l'échelle n'a qu'un nœud à distance 3, contre deux pour un nœud extérieur des triangles. Voir les distances suffit donc à distinguer ces graphes.\n\nLes auteurs prouvent aussi que l'auto-attention sans encodage peut représenter une lecture par moyenne globale, comme un nœud virtuel à chaque couche. En pratique, approfondir et élargir fait baisser les erreurs d'entraînement et de validation, sans surlissage observé.\n\n## Discussion\n\n### PCQM4M-LSC\n\nLes principales expériences portent sur PCQM4M-LSC. Graphormer existe en version complète à 12 couches et 768 dimensions cachées (47.1 millions de paramètres), et petite à 6 couches et 512 dimensions (12.5 millions), entraînées environ deux jours sur 8 V100.\n\n| Modèle | Paramètres | MAE de validation ↓ |\n| --- | ---: | ---: |\n| GCN | 2.0M | 0.1691 |\n| GIN | 3.8M | 0.1537 |\n| GIN-VN | 6.7M | 0.1395 |\n| DeeperGCN-VN | 25.5M | 0.1398 |\n| GT | 0.6M | 0.1400 |\n| GT-Wide | 83.2M | 0.1408 |\n| Graphormer (petit) | 12.5M | 0.1264 |\n| Graphormer | 47.1M | **0.1234** |\n\nLa MAE baisse de 11.5% par rapport au meilleur précédent, GIN-VN. GT, élargi de plus de cent fois, ne progresse pas. Pour la compétition, les auteurs assemblent Graphormer et ExpC, atteignent 0.1200 sur le test complet et remportent l'épreuve au niveau des graphes.\n\n### Autres jeux de données\n\nZINC donne la comparaison la plus nette : environ 500,000 paramètres pour tous, entraînés de zéro. GraphormerSLIM, à 489,000 paramètres, obtient une MAE de test de 0.122, contre 0.139 pour SAN, 0.142 pour PNA et 0.226 pour GT.\n\nSur les deux jeux moléculaires OGB, il faut regarder les conditions. Graphormer atteint 31.39% de précision moyenne sur MolPCBA, contre 29.79% auparavant ; sur MolHIV, 80.51% de ROC-AUC contre 79.70%. Les modèles sont préentraînés sur PCQM4M-LSC, comptent respectivement 119.5 et 47 millions de paramètres, et utilisent FLAG contre le surapprentissage. Pour une comparaison équitable, GIN-VN est aussi préentraîné puis ajusté sur la même source : il obtient 29.02% et 77.80%.\n\n### L'apport de chaque encodage\n\nL'ablation sur PCQM4M-LSC utilise des modèles à 12 couches entraînés seulement 100,000 pas pour économiser le calcul :\n\n| Configuration | MAE de validation ↓ |\n| --- | ---: |\n| Sans encodage structurel | 0.2276 |\n| Positions laplaciennes | 0.1483 |\n| Encodage spatial par plus court chemin | 0.1427 |\n| Spatial + centralité | 0.1396 |\n| Puis arêtes ajoutées aux nœuds | 0.1328 |\n| Puis arêtes utilisées à l'agrégation | 0.1327 |\n| Puis arêtes comme biais d'attention | **0.1304** |\n\nSans structure, le Transformer reste à 0.2276 de MAE, loin des variantes encodées. La distance de plus court chemin dépasse les positions laplaciennes ; placer les arêtes dans les scores d'attention bat les deux insertions classiques.\n\n### Le prix\n\nLes auteurs concluent avec leurs limites : attention quadratique en nombre de nœuds, trop coûteuse pour les grands graphes ; besoin d'échantillonnage pour les tâches par nœud ; degrés et plus courts chemins restent génériques, et peuvent être remplacés par des encodages métier, comme les distances 3D entre atomes.\n\n## Conclusion\n\nLa réponse au titre : le Transformer n'est finalement pas mauvais sur les graphes, si l'on y inscrit la structure. Degrés sur les nœuds, distances et arêtes des chemins dans l'attention : un Transformer standard dépasse alors tous les GNN sur le plus grand jeu de l'époque au niveau des graphes.\n\nUn an plus tard, GraphGPS abaisse encore la MAE de validation sur PCQM4Mv2 : GPS-medium, à 19.4 millions de paramètres, obtient 0.0858, contre 0.0864 pour Graphormer à 48.3 millions, presque à égalité avec plus de deux fois moins de paramètres.\n\nPour utiliser un Transformer sur de petites molécules, ajoutez d'abord les encodages structurels. À 100,000 pas égaux, les retirer fait passer la MAE de 0.13 à 0.23.\n","imageSizes":{"/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png":{"width":872,"height":620},"/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png":{"width":908,"height":216}}}
