{"notes":[{"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":""}]},{"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":""}]}],"text":"En 1966, le mathématicien Mark Kac publie « Can One Hear the Shape of a Drum? ». La forme d'une membrane détermine ses fréquences de vibration ; en les écoutant seules, peut-on retrouver sa forme ?\n\nUn graphe possède aussi ses fréquences : valeurs et vecteurs propres du laplacien. Devin Kreuzer, Dominique Beaini, William L. Hamilton et leurs collègues de McGill, Mila et Valence Discovery veulent laisser le Transformer les « écouter » pour apprendre la position de chaque nœud.\n\nIls veulent aussi renverser un verdict. Six mois auparavant, GT avait essayé de faire regarder tous les nœuds à chacun, avec de fortes dégradations sur trois jeux, puis préconisé l'attention locale. SAN, Spectral Attention Network, entend montrer que la connexion complète peut fonctionner.\n\n\n> [!TIP]\n> \n> Pour l'attention creuse, les positions laplaciennes et les essais entièrement connectés de GT, voir notre note :\n> \n> - **[[20.12] Graph Transformer : Tout connecter aggrave les choses](/blog/papers/graph-learning/graph-transformer)**\n\n\n## Poser le problème\n\nLes auteurs recensent les limites connues du passage de messages : discrimination bornée par WL, surlissage en profondeur, over-squashing à longue portée. Toutes sont liées au fait que la structure du graphe dicte directement le trajet des calculs.\n\nLe Transformer laisse au contraire toutes les positions interagir, et indique la structure par une information « souple », comme l'encodage positionnel. Sur les graphes, celui-ci devient donc la clé.\n\nGT utilisait déjà les vecteurs propres du laplacien, mais les auteurs relèvent plusieurs points inachevés :\n\n- **Les valeurs propres sont informatives.** GT ne fournit que les vecteurs. Dans une séquence, les fréquences sont fixes et leur ordre les identifie ; celles d'un graphe changent d'un graphe à l'autre. L'ordre seul fait perdre la fréquence associée au vecteur.\n- **Valeurs propres multiples.** En cas de répétition, toute combinaison dans l'espace propre correspondant est un vecteur propre valide.\n- **Nombre variable.** Un graphe a au plus autant de vecteurs propres que de nœuds. GT en prend toujours $k$ : leur part décroît avec la taille du graphe.\n- **Signes.** $k$ vecteurs admettent $2^k$ combinaisons de signes. Les inversions aléatoires suffisent pour un petit $k$, moins pour un grand.\n\nDeux triangles reliés par un pont suffisent à voir la multiplicité : A, B, C à gauche, D, E, F à droite, et le pont C–D. Le laplacien normalisé a deux valeurs propres égales à 1.5 :\n\n```python\nimport numpy as np\n\nedges = [(0, 1), (0, 2), (1, 2), (2, 3), (3, 4), (3, 5), (4, 5)]\nA = np.zeros((6, 6))\nfor i, j in edges:\n    A[i, j] = A[j, i] = 1\nd = A.sum(1)\nL = np.eye(6) - A / np.sqrt(np.outer(d, d))\nlam = np.clip(np.linalg.eigvalsh(L), 0, None)     # Valeurs propres non négatives : retirer l'erreur numérique\nprint(\"Valeurs propres:\", lam.round(2))\n\nu1 = np.array([1, -1, 0, 0, 0, 0]) / np.sqrt(2)   # Non nul sur A et B, à gauche, seulement\nu2 = np.array([0, 0, 0, 0, 1, -1]) / np.sqrt(2)   # Non nul sur E et F, à droite, seulement\nmix = (u1 + u2) / np.sqrt(2)                      # Combinaison des deux\nfor name, v in [(\"u1  \", u1), (\"u2  \", u2), (\"mix\", mix)]:\n    print(name, \"vecteur propre de valeur 1.5:\", np.allclose(L @ v, 1.5 * v), \"  Valeur sur A:\", round(v[0], 2))\n```\n\n```text\nValeurs propres: [0.   0.2  1.17 1.5  1.5  1.63]\nu1   vecteur propre de valeur 1.5: True   Valeur sur A: 0.71\nu2   vecteur propre de valeur 1.5: True   Valeur sur A: 0.0\nmix vecteur propre de valeur 1.5: True   Valeur sur A: 0.5\n```\n\nLes trois réponses sont valides, mais A reçoit 0.71, 0 ou 0.5 selon le choix de la bibliothèque. Prendre directement cette valeur comme position rend ce que le modèle apprend dépendant de ce choix.\n\n## Résoudre le problème\n\nSAN procède en deux étapes : apprendre un encodage positionnel par nœud, le concaténer aux caractéristiques, puis envoyer le tout dans un Transformer entièrement connecté.\n\n[![Schéma original de synthèse. À gauche, deux triangles reliés par C–D : les traits pleins sont les 7 arêtes initiales, les pointillés bleus les 8 connexions ajoutées. La légende donne les facteurs 1/(1+γ) pour les arêtes initiales et γ/(1+γ) pour les ajouts ; γ=0 ne garde que les arêtes initiales, γ=1 équilibre les deux types. À droite, pour le nœud j, m paires (valeur propre, composante du vecteur propre en j) traversent couche linéaire, Transformer et somme pour produire LPE, concaténé aux caractéristiques.](/content/papers/assets/61b14d337f27e58e92e61c2f7fce6c11f7f1fdf4ce256f2e13da3b4de90b83a3.png)](/content/papers/assets/61b14d337f27e58e92e61c2f7fce6c11f7f1fdf4ce256f2e13da3b4de90b83a3.png)\n\n*Synthèse originale, dessinée à partir des équations des sections 3.1 et 3.3 de l'article.*\n\n### Apprendre les positions\n\nLa moitié droite est l'encodage positionnel appris de SAN, learned positional encoding ou LPE.\n\nPour un nœud $j$, les $m$ plus petites valeurs propres forment une séquence de paires $(\\lambda_i,\\phi_{i,j})$, où $\\phi_{i,j}$ est la composante du vecteur propre correspondant sur $j$. Les vecteurs sont vus sur un « axe des fréquences », dont les valeurs propres donnent les positions.\n\nUne couche linéaire projette chaque paire en dimension $k$ ; un encodeur Transformer applique l'attention aux $m$ éléments, puis leur somme donne un vecteur de dimension $k$, le LPE de $j$. Si le graphe a moins de $m$ nœuds, les positions restantes sont masquées.\n\nTrois des quatre points précédents sont traités. Valeurs et vecteurs propres vont par paires ; la longueur varie, $m$ pouvant couvrir le plus grand graphe du jeu et tout son spectre ; le Transformer peut apprendre à combiner ou ignorer les vecteurs d'une valeur multiple. Les signes restent ouverts : comme GT, SAN les inverse aléatoirement à l'entraînement.\n\nL'annexe propose aussi une version sur arêtes, utilisant des quantités invariantes au signe, telles $|\\phi_{i,j_1}-\\phi_{i,j_2}|$ et $\\phi_{i,j_1}\\phi_{i,j_2}$, pour décrire une paire de nœuds. Théoriquement plus forte, elle coûte jusqu'à $O(N^4)$ en connexion complète ; le corps de l'article retient les positions par nœud.\n\n### Tout connecter, avec deux attentions distinctes\n\nLa moitié gauche est le Transformer principal. Toute paire sans arête reçoit une connexion et son propre plongement d'arête. Deux attentions sont séparées : $Q^1$, $K^1$, $E^1$ pour les arêtes initiales, $Q^2$, $K^2$, $E^2$ pour les ajouts. L'hyperparamètre $\\gamma$ en règle les poids :\n\n$$\nw_{ij}=\n\\begin{cases}\n\\dfrac{1}{1+\\gamma}\\cdot\\mathrm{softmax}\\big(\\hat w_{ij}\\big) & i,j\\ \\text{déjà reliés}\\\\[2mm]\n\\dfrac{\\gamma}{1+\\gamma}\\cdot\\mathrm{softmax}\\big(\\hat w_{ij}\\big) & \\text{autres paires}\n\\end{cases}\n$$\n\nAvec $\\gamma=0$, les ajouts ne pèsent plus rien : retour à l'attention locale. Avec $\\gamma=1$, les deux types sont équilibrés. Ce réglage arbitre entre structure locale et accès au lointain. Le reste suit GT : résidus, normalisation, réseau feed-forward. Les arêtes ne sont pas mises à jour : selon les auteurs, cela compliquait beaucoup pour très peu de gain.\n\n## Discussion\n\n### Quelle valeur pour $\\gamma$ ?\n\nLes auteurs explorent $\\gamma$ sur ZINC, PATTERN, CLUSTER et MolHIV. Sur les molécules ZINC et MolHIV, le meilleur $\\log\\gamma$ se situe entre −7 et −5 : les ajouts reçoivent très peu de poids. PATTERN et CLUSTER préfèrent un $\\gamma$ plus grand.\n\nSelon les auteurs, les petits graphes moléculaires dépendent de structures locales comme les cycles et les liaisons ; quelques couches creuses couvrent déjà le graphe entier. CLUSTER est semi-supervisé : certains nœuds portent leur vraie étiquette, et la connexion complète les rend visibles à tous à chaque couche.\n\n### L'apport séparé de la connexion complète et du LPE\n\nÀ $\\gamma$ fixé et environ 500,000 paramètres, les auteurs séparent les deux choix :\n\n| Attention | LPE | ZINC (MAE ↓) | PATTERN | CLUSTER | MolHIV (ROC-AUC) |\n| --- | --- | ---: | ---: | ---: | ---: |\n| Creuse | Non | 0.267 | 83.61% | 75.68% | 73.46% |\n| Creuse | Oui | 0.198 | 81.33% | 75.74% | 76.61% |\n| Complète | Non | 0.392 | 86.32% | 76.45% | 73.84% |\n| Complète | Oui | **0.157** | **86.44%** | **76.69%** | **77.57%** |\n\nLes deux aspects doivent être lus ensemble. Sur ZINC, tout connecter sans LPE fait passer la MAE de 0.267 à 0.392, comme chez GT. Avec LPE, la connexion complète atteint au contraire le meilleur 0.157. Le LPE aide surtout les molécules, peut-être grâce à sa détection des sous-structures selon les auteurs ; PATTERN et CLUSTER, tâches de regroupement plus simples, en dépendent moins.\n\n### Face aux meilleurs modèles de l'époque\n\nAprès réglage, SAN obtient une MAE ZINC de 0.139, devant PNA à 0.142 ; ses 86.58% sur PATTERN et 76.69% sur CLUSTER sont aussi les meilleurs du tableau. Le GT entièrement connecté y reste à 0.598 sur ZINC. À leur connaissance, SAN est le premier modèle entièrement connecté performant sur les benchmarks de graphes.\n\nLes molécules OGB sont moins brillantes. Le ROC-AUC de test MolHIV est de 77.85%, derrière DGN à 79.70%. Les auteurs soulignent pourtant leur validation à 85.30%, devant PNA à 84.25% et DGN à 84.70%, et invoquent la faible corrélation validation-test de ce jeu. Sur MolPCBA, la précision moyenne est de 27.65%, contre 28.85% pour DGN.\n\n### Le prix\n\nL'attention complète coûte $O(N^2)$ et le LPE $O(m^2N)$, bien plus que le $O(|E|)$ du passage de messages, comme l'article le reconnaît. Les travaux suivants chiffreront mieux ce coût : GraphGPS rapporte 196 secondes par époque pour GPS à environ 6 millions de paramètres sur ogbg-molpcba, contre 883 secondes pour SAN sur un même type de GPU. Sur COCO-SP de LRGB, plus de 120,000 graphes de près de 480 nœuds en moyenne, SAN n'a toujours pas convergé après 60 heures sur A100.\n\n## Conclusion\n\nSAN montre qu'un Transformer entièrement connecté peut bien fonctionner sur les graphes, à condition de soigner le spectre dans les positions et de séparer les scores des arêtes initiales et ajoutées, dosés par $\\gamma$. L'ablation éclaire aussi GT : sans bonnes positions, tout connecter aggrave les choses.\n\nL'année suivante, GraphGPS, auquel participe aussi Beaini, fera de cette attention complète un module interchangeable à côté du passage de messages dans chaque couche. Il proposera aussi des positions comme SignNet, conçues spécialement pour les signes.\n\nSur quelques dizaines de nœuds, SAN mérite un essai. Quand le graphe grandit, le coût quadratique devient le premier obstacle.\n","imageSizes":{"/content/papers/assets/61b14d337f27e58e92e61c2f7fce6c11f7f1fdf4ce256f2e13da3b4de90b83a3.png":{"width":1280,"height":840}}}
