{"notes":[{"id":"graph-learning/san","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"SAN","subtitle":"听见图的形状","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":"zh-hans","path":"/content/papers/zh-hans/graph-learning/san.2705d642b9c9.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"学出来的位置编码","text":"学出来的位置编码","depth":3},{"id":"全连接但分开两套注意力","text":"全连接，但分开两套注意力","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"gamma-该设多大","text":"\\gamma 该设多大？","depth":3},{"id":"全连接和-lpe-各自的贡献","text":"全连接和 LPE 各自的贡献","depth":3},{"id":"和当时最好的模型比","text":"和当时最好的模型比","depth":3},{"id":"代价","text":"代价","depth":3},{"id":"结论","text":"结论","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":"连满反而糟","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":"zh-hans","path":"/content/papers/zh-hans/graph-learning/graph-transformer.1ebf78897bd9.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"只在邻居之间算注意力","text":"只在邻居之间算注意力","depth":3},{"id":"拉普拉斯位置编码","text":"拉普拉斯位置编码","depth":3},{"id":"边特征与归一化","text":"边特征与归一化","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"实验设置","text":"实验设置","depth":3},{"id":"全连接会怎样","text":"全连接会怎样？","depth":3},{"id":"位置编码与-batchnorm","text":"位置编码与 BatchNorm","depth":3},{"id":"和-gnn-比","text":"和 GNN 比","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/san","relation":"referenced","topic":""},{"id":"graph-learning/graphgps","relation":"referenced","topic":""}]}],"text":"1966 年，数学家 Mark Kac 写了一篇文章，题目叫〈Can One Hear the Shape of a Drum?〉。鼓面会用哪些频率振动，由它的形状决定；反过来，只听这些频率，能不能推回鼓的形状？\n\n图也有自己的频率，就是拉普拉斯矩阵的特征值与特征向量。McGill、Mila 与 Valence Discovery 的 Devin Kreuzer、Dominique Beaini、William L. Hamilton 等人想让 Transformer 去「听」这些频率，从中学出每个节点在图上的位置。\n\n他们还想翻一个案。半年前的 Graph Transformer（GT）试过让每个节点看所有节点，结果三个数据集都大幅变差，作者因此主张只看邻居。SAN（Spectral Attention Network）要证明，全连接其实可以用。\n\n\n> [!TIP]\n> \n> GT 的稀疏注意力、拉普拉斯位置编码与全连接实验，可以参考我们的笔记：\n> \n> - **[[20.12] Graph Transformer：连满反而糟](/blog/papers/graph-learning/graph-transformer)**\n\n\n## 定义问题\n\n作者先列出消息传递的几个已知限制。分辨图的能力受 WL 测试限制，叠深会 over-smoothing，传远会 over-squashing。这些问题都和「图的结构直接决定了计算的路线」有关。\n\nTransformer 的做法不同。它让所有位置互相看，结构只通过位置编码这种「软」的方式告诉模型。换到图上，关键就是位置编码。\n\nGT 已经用拉普拉斯特征向量当位置编码，作者认为还有几个地方没处理好：\n\n- **特征值也有信息**。GT 只给特征向量，不给特征值。序列的频率是固定的，照顺序排就知道是哪个频率；每张图的频率却不一样，只照顺序排，会丢掉「这条向量对应哪个频率」。\n- **重根**。特征值重复时，对应的特征空间里，任何组合都是合法的特征向量。\n- **数量不固定**。一张图最多有和节点数一样多条特征向量。GT 每张图取固定的 $k$ 条，图越大，用到的比例越小。\n- **正负号**。$k$ 条向量有 $2^k$ 种正负号组合；随机翻号在 $k$ 小时还行，$k$ 一大就顾不过来。\n\n重根这件事，用一张两个三角形以一座桥相连的小图就看得到。A、B、C 在左，D、E、F 在右，C 和 D 是桥。它的归一化拉普拉斯有两个特征值都是 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)     # 特征值不会小于 0，裁掉浮点误差\nprint(\"特征值:\", lam.round(2))\n\nu1 = np.array([1, -1, 0, 0, 0, 0]) / np.sqrt(2)   # 只在左三角形的 A、B 上有值\nu2 = np.array([0, 0, 0, 0, 1, -1]) / np.sqrt(2)   # 只在右三角形的 E、F 上有值\nmix = (u1 + u2) / np.sqrt(2)                      # 两者的组合\nfor name, v in [(\"u1  \", u1), (\"u2  \", u2), (\"混合\", mix)]:\n    print(name, \"是特征值 1.5 的特征向量:\", np.allclose(L @ v, 1.5 * v), \"  A 上的值:\", round(v[0], 2))\n```\n\n```text\n特征值: [0.   0.2  1.17 1.5  1.5  1.63]\nu1   是特征值 1.5 的特征向量: True   A 上的值: 0.71\nu2   是特征值 1.5 的特征向量: True   A 上的值: 0.0\n混合 是特征值 1.5 的特征向量: True   A 上的值: 0.5\n```\n\n三条都是合法的答案，A 拿到的值却是 0.71、0 或 0.5，看程序库挑了哪一条。把这个值直接当成 A 的位置，模型学到的东西就可能随程序库而变。\n\n## 解决问题\n\nSAN 分两步。先替每个节点学出一个位置编码，再把它接到节点特征后面，送进一个全连接的 Transformer。\n\n[![本文整理的示意图。左边是两个三角形以 C–D 相连的小图，实线是原本的 7 条边，蓝色虚线是补上的 8 条连接；图例写着原本的边权重乘 1/(1+γ)，补上的连接权重乘 γ/(1+γ)，γ 等于 0 时只看原本的边，γ 等于 1 时两边不偏袒。右边是节点 j 的位置编码流程，m 组（特征值、特征向量在 j 上的值）依序经过线性层、Transformer 与加总，得到 LPE，再接到节点特征后面。](/content/papers/assets/5a05b9595d27cd8c047f32c7614b04e9ae99c595a1ee2119977618eaec139c74.png)](/content/papers/assets/5a05b9595d27cd8c047f32c7614b04e9ae99c595a1ee2119977618eaec139c74.png)\n\n*本文整理，依原论文 §3.1、§3.3 的公式绘制。*\n\n### 学出来的位置编码\n\n右半边是 SAN 的学习式位置编码（learned positional encoding，LPE）。\n\n对节点 $j$，取最小的 $m$ 个特征值，每个特征值 $\\lambda_i$ 配上节点 $j$ 在对应特征向量上的值 $\\phi_{i,j}$，排成一串长度 $m$ 的序列。作者把特征向量看成摆在「频率轴」上的东西，特征值就是它在这条轴上的位置。\n\n这串序列先经过一层线性层，把每组两个数字变成 $k$ 维，再交给一个 Transformer 编码器在 $m$ 个元素之间做注意力，最后加总成一个 $k$ 维的向量，就是节点 $j$ 的 LPE。图的节点少于 $m$ 个时，多出来的位置用遮罩补齐。\n\n前面列的四点，这个设计处理了三点。特征值和特征向量配成一对；序列长度可以变，$m$ 甚至可以取到数据集里最大的节点数，用上整个频谱；Transformer 也有机会学着把重根的那几条组合起来或忽略。正负号仍然没解决，SAN 和 GT 一样在训练时随机翻号。\n\n论文附录另外提了一个边上的版本，用 $|\\phi_{i,j_1}-\\phi_{i,j_2}|$ 和 $\\phi_{i,j_1}\\phi_{i,j_2}$ 这类不受正负号影响的量当成两个节点之间的特征。理论上更强，但计算量在全连接时会到 $O(N^4)$，所以正文用的是节点上的版本。\n\n### 全连接，但分开两套注意力\n\n左半边是主要的 Transformer。图上没有边的节点对，全部补上一条连接，给它自己的边嵌入。注意力分两套，原本的边用 $Q^1$、$K^1$、$E^1$，补上的连接用 $Q^2$、$K^2$、$E^2$，两者的权重再用超参数 $\\gamma$ 调配：\n\n$$\nw_{ij}=\n\\begin{cases}\n\\dfrac{1}{1+\\gamma}\\cdot\\mathrm{softmax}\\big(\\hat w_{ij}\\big) & i,j\\ \\text{原本就相连}\\\\[2mm]\n\\dfrac{\\gamma}{1+\\gamma}\\cdot\\mathrm{softmax}\\big(\\hat w_{ij}\\big) & \\text{其他节点对}\n\\end{cases}\n$$\n\n$\\gamma=0$ 时，补上的连接完全没有份量，退回只看邻居的注意力；$\\gamma=1$ 时，两边不偏袒。这个旋钮让模型在「保留局部结构」和「打通远方」之间取舍。其余的部分和 GT 一样，接残差、归一化和前馈网络；边的表示不更新，作者说更新它增加复杂度，却几乎没有帮助。\n\n## 讨论\n\n### $\\gamma$ 该设多大？\n\n作者在 ZINC、PATTERN、CLUSTER 和 MolHIV 上扫过 $\\gamma$。分子数据集 ZINC 和 MolHIV 最好的 $\\log\\gamma$ 落在 −7 到 −5 之间，补上的连接只分到一点点；PATTERN 和 CLUSTER 则偏好大一点的 $\\gamma$。\n\n作者的解释是，分子图小，任务又依赖环、特定的键这类局部结构，几层稀疏的注意力就能把信息传到全图。CLUSTER 是半监督的设置，每张图里有部分节点带着真实标签，全连接让每个节点每一层都看得到这些有标签的节点。\n\n### 全连接和 LPE 各自的贡献\n\n固定 $\\gamma$、参数维持在 50 万左右，作者拆开比较两个设计：\n\n| 注意力 | LPE | ZINC（MAE ↓） | PATTERN | CLUSTER | MolHIV（ROC-AUC） |\n| --- | --- | ---: | ---: | ---: | ---: |\n| 稀疏 | 无 | 0.267 | 83.61% | 75.68% | 73.46% |\n| 稀疏 | 有 | 0.198 | 81.33% | 75.74% | 76.61% |\n| 全连接 | 无 | 0.392 | 86.32% | 76.45% | 73.84% |\n| 全连接 | 有 | **0.157** | **86.44%** | **76.69%** | **77.57%** |\n\n两件事一起看才完整。在 ZINC 上，只把注意力改成全连接、不加 LPE，MAE 从 0.267 退到 0.392，和 GT 看到的现象一致；加上 LPE 之后，全连接反而变成最好的 0.157。LPE 对分子数据集的帮助最大，作者认为和它能检测子结构有关；PATTERN、CLUSTER 本身是比较单纯的聚类任务，LPE 的影响就小得多。\n\n### 和当时最好的模型比\n\n调过超参数的 SAN，ZINC 的 MAE 是 0.139，比 PNA 的 0.142 好；PATTERN 86.58%、CLUSTER 76.69%，也都是表中最高。同一张表里，全连接的 GT 在 ZINC 上是 0.598。作者说，就他们所知，SAN 是第一个在图基准上表现好的全连接模型。\n\nOGB 的分子数据集上就没那么亮眼。MolHIV 的测试 ROC-AUC 是 77.85%，低于 DGN 的 79.70%；作者指出它的验证分数 85.30% 其实高于 PNA 的 84.25% 和 DGN 的 84.70%，并归因于这个数据集的验证和测试分数相关性很低。MolPCBA 的平均精确率是 27.65%，DGN 是 28.85%。\n\n### 代价\n\n全连接的注意力是 $O(N^2)$，LPE 是 $O(m^2N)$，比消息传递的 $O(|E|)$ 贵得多，作者在论文里也这么写。后来的研究把这个代价量得更清楚。GraphGPS 论文提到，在 ogbg-molpcba 上，约 600 万参数的 GPS 每个 epoch 要 196 秒，同型 GPU 上的 SAN 要 883 秒；LRGB 的 COCO-SP 有 12 万多张、平均近 480 个节点的图，SAN 在 A100 上跑了 60 小时还没收敛。\n\n## 结论\n\nSAN 证明了全连接的 Transformer 可以在图上表现得好，条件是位置编码要认真处理频谱，并让补上的连接和原本的边各自计分、用 $\\gamma$ 调配比重。消融也说明了 GT 看到的现象，没有好的位置编码，全连接只会更糟。\n\n隔年，Beaini 也参与的 GraphGPS 把这类全连接的注意力当成可替换的一个模块，和消息传递放在同一层；GraphGPS 也把 SignNet 这类专门处理正负号的位置编码列为可选的组件。\n\n图只有几十个节点时，SAN 的做法很值得一试。图一大，平方成长的计算量会先撑不住。\n","imageSizes":{"/content/papers/assets/5a05b9595d27cd8c047f32c7614b04e9ae99c595a1ee2119977618eaec139c74.png":{"width":1280,"height":840}}}
