{"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-hant","path":"/content/papers/zh-hant/graph-learning/san.e84a43ca7dce.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-hant","path":"/content/papers/zh-hant/graph-learning/graph-transformer.1a6743ef39d8.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/239f3ac016f803fed4fedec5cad345c48bc6b97791249f0e5cfdf2efd433b5c2.png)](/content/papers/assets/239f3ac016f803fed4fedec5cad345c48bc6b97791249f0e5cfdf2efd433b5c2.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/239f3ac016f803fed4fedec5cad345c48bc6b97791249f0e5cfdf2efd433b5c2.png":{"width":1280,"height":840}}}
