{"notes":[{"id":"graph-learning/graphormer","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Graphormer","subtitle":"実は悪くない","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":"ja","path":"/content/papers/ja/graph-learning/graphormer.4902f54c82d1.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":3},{"id":"どの-gnn-を表せるか","text":"どの GNN を表せるか","depth":3},{"id":"wl-より強い","text":"WL より強い","depth":3},{"id":"議論","text":"議論","depth":2},{"id":"pcqm4m-lsc","text":"PCQM4M-LSC","depth":3},{"id":"ほかのデータセット","text":"ほかのデータセット","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/san","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":"ja","path":"/content/papers/ja/graph-learning/graph-transformer.41cd0606ebf1.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":""}]},{"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":"ja","path":"/content/papers/ja/graph-learning/san.e02e8dcf7c2d.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":""}]}],"text":"2021 年、Transformer は NLP の主流となり、ビジョンでも地歩を固めました。しかしグラフのランキングは別でした。\n\nOGB 大規模チャレンジ PCQM4M-LSC は 380 万超分子の量子化学的性質を予測します。GT の検証 MAE は 0.1400、8,320 万パラメーターへ広げても 0.1408。どちらも仮想ノード付きの 670 万パラメーター GIN-VN（0.1395）に勝てません。\n\n大連理工大学、Princeton、北京大学、Microsoft Research Asia の Chengxuan Ying、Tianle Cai、Shengjie Luo らは、Transformer は本当にグラフで悪いのかを題名にしました。\n\n標準 Transformer を使う Graphormer は、最終的にグラフレベル部門で優勝します。\n\n\n> [!TIP]\n> \n> GT の疎注意と位置符号化、同月の SAN は、こちらのノートをどうぞ。\n> \n> - **[[20.12] Graph Transformer：全部つなぐと、かえって悪い](/blog/papers/graph-learning/graph-transformer)**\n> - **[[21.06] SAN：グラフの形を聴く](/blog/papers/graph-learning/san)**\n\n\n## 問題設定\n\n従来の有効な試みの多くは、GNN の集約などを softmax 注意に替えても、骨組みは GNN だと観察します。\n\n自己注意は二ノードの特徴量の意味的類似度を計算し、構造が入っていません。重要なノード、距離、経路のエッジ種類を見られません。\n\n鍵は、構造を有効に符号化することだと考えます。\n\n## 解決方法\n\n[![原論文 Figure 1：左は中心性を加えたノード特徴量から Q、K、V を作り、QK をスケーリングし、バイアス、softmax、V との積を計算する。中央の 5×5 格子は空間・エッジ符号化で、両方をスコアに加える。下の中心性はノード特徴量に加える。右は重要度を大きさで、ノード間関係を破線で示す五ノードのグラフ。](/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png)](/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png)\n\n*原論文 Figure 1（Ying ら）、[**PDF 3 ページ**](https://arxiv.org/pdf/2106.05234v5#page=3)より、CC BY-SA 4.0。原キャプションは省略。*\n\n三つの符号化のうち、一つはノードに、二つはノード間の注意スコアに加えます。\n\n### 中心性符号化\n\nSNS では一般に、フォロワーの多い人ほど影響力があります。単純な次数中心性として、入次数・出次数に応じた学習可能なベクトルを参照し、入力に加えます。\n\n$$\nh_i^{(0)}=x_i+z^-_{\\deg^-(v_i)}+z^+_{\\deg^+(v_i)}\n$$\n\n無向なら入出次数は同じで、一つにまとめます。Q、K に重要度が入ります。\n\n### 空間符号化\n\n文では単語位置を別途伝えますが、グラフに固定軸はありません。二ノードの関係を記述します。\n\n最短経路距離 $\\phi(v_i,v_j)$ ごとに学習可能なスカラー $b_{\\phi(v_i,v_j)}$ を持ち、スコアに加えます。\n\n$$\nA_{ij}=\\frac{(h_iW_Q)(h_jW_K)^\\top}{\\sqrt d}+b_{\\phi(v_i,v_j)}\n$$\n\n非連結なら特別な距離 −1 と専用バイアスを使います。バイアスは全層で共有します。\n\n距離とともに $b$ が減るよう学べば、近くを多く、遠くを少なく見ます。それでも全グラフは見えます。\n\n### エッジ符号化\n\n化学結合はエッジ特徴量です。従来は両端ノードに足すか集約で使い、接続先にしか情報が届きません。\n\nGraphormer はスコアに入れます。各 $(v_i,v_j)$ で最短経路 $(e_1,\\dots,e_N)$ を選び、各エッジ特徴量と学習可能なベクトルの内積を平均します。\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### ほかの細部\n\n注意と FFN の前に LayerNorm を置く Pre-LN です。全ノードにつながる `[VNode]` を足し、BERT の `[CLS]` のように最終状態をグラフ表現にします。各ノードとの距離は 1 ですが本物のエッジではないため、空間符号化は専用バイアスです。\n\n### どの GNN を表せるか\n\n重みと距離関数を選べば、一層で GIN、GCN、GraphSAGE の集約・更新を表せます。平均なら距離 1 のバイアスを 0、ほかを負の無限大、$W_Q=W_K=0$、$W_V=I$ とすると、softmax は隣だけへ均等に配ります。\n\n五ノードで確かめます。\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):                       # 各ノードから幅優先探索\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)          # 距離 1 は 0、それ以外は負の無限大\nattn = np.exp(bias) / np.exp(bias).sum(1, keepdims=True)   # W_Q = W_K = 0、バイアスだけ\nout = attn @ h                                   # W_V = I\n\nmean_nbrs = np.array([h[M[v] > 0].mean(0) for v in range(5)])\nprint(\"ノード 2 の注意:\", attn[2].round(2))\nprint(\"隣の平均と一致:\", np.allclose(out, mean_nbrs))\n```\n\n```text\nノード 2 の注意: [0.33 0.33 0.   0.33 0.  ]\n隣の平均と一致: True\n```\n\nノード 2 の三つの隣は各三分の一、自分と距離 2 は 0 です。平均に中心性から得る次数を掛ければ総和です。最大値は次元ごとのヘッドで選ぶ方法で、証明は付録にあります。\n\n### WL より強い\n\n逆に WL に見えないものも見えます。付録の一対です。\n\n[![原論文付録 Figure 2：左は三ノードずつ二行のはしごで、四隅が桃色、中央二つが青。右は橋でつながる二つの三角形で、外四つが桃、橋二つが青。](/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png)](/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png)\n\n*原論文付録 Figure 2（Ying ら）、[**PDF 14 ページ**](https://arxiv.org/pdf/2106.05234v5#page=14)より、CC BY-SA 4.0。原キャプションは省略。*\n\n左ははしご、右は二三角形と橋です。どちらも次数 2 が四つ、3 が二つで、WL の毎ラウンドの色も同じです。距離では異なります。\n\n```python\nfrom collections import Counter\n\ndef wl(M, rounds=3):\n    colors = [()] * len(M)                   # 最初は全員同色\n    for _ in range(rounds):                  # 新色 = 自分の色 + 隣の色の多重集合\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(\"WL の色の統計が同じ:\", wl(ladder) == wl(bridge))\nfor name, G in [(\"はしご    \", ladder), (\"二つの三角形\", bridge)]:\n    print(name, sorted({tuple(sorted(row)) for row in shortest_paths(G).tolist()}))\n```\n\n```text\nWL の色の統計が同じ: True\nはしご     [(0, 1, 1, 1, 2, 2), (0, 1, 1, 2, 2, 3)]\n二つの三角形 [(0, 1, 1, 1, 2, 2), (0, 1, 1, 2, 3, 3)]\n```\n\n各行は一種類のノードからの距離です。青は双方 (0, 1, 1, 1, 2, 2)。桃では、はしごの角は距離 3 が一つ、三角形の外側は二つあります。距離が見えれば区別できます。\n\n符号化なしの自己注意でも全グラフ平均の読み出しを表せ、各層に仮想ノードが付くのと同じ、とも証明します。深く・広くすると訓練・検証誤差が減り続け、over-smoothing は観察されませんでした。\n\n## 議論\n\n### PCQM4M-LSC\n\n完全版は 12 層、768 次元、4,710 万パラメーター、小型は 6 層、512 次元、1,250 万です。8 枚の V100 で約二日訓練します。\n\n| モデル | パラメーター | 検証 MAE ↓ |\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（小） | 12.5M | 0.1264 |\n| Graphormer | 47.1M | **0.1234** |\n\nGIN-VN より MAE が 11.5% 下がります。GT は百倍以上に広げても改善しません。提出では ExpC とアンサンブルし、全テストで 0.1200、グラフレベル部門首位です。\n\n### ほかのデータセット\n\nZINC は条件がよくそろい、全モデル約 50 万で最初から訓練します。48.9 万の GraphormerSLIM はテスト MAE 0.122、SAN 0.139、PNA 0.142、GT 0.226 です。\n\nOGB の分子二つは条件に注目します。MolPCBA の平均適合率 31.39%（従来 29.79%）、MolHIV の ROC-AUC 80.51%（79.70%）は、PCQM4M-LSC で事前学習し、各 1.195 億、4,700 万パラメーターに FLAG 拡張も使います。公平に同じ事前学習・微調整をした GIN-VN も載せ、29.02%、77.80% です。\n\n### 各符号化の寄与\n\n計算節約のため、12 層、10 万ステップの PCQM4M-LSC アブレーションです。\n\n| 設定 | 検証 MAE ↓ |\n| --- | ---: |\n| 構造符号化なし | 0.2276 |\n| ラプラシアン位置符号化 | 0.1483 |\n| 最短経路の空間符号化 | 0.1427 |\n| 空間 + 中心性 | 0.1396 |\n| さらにエッジ符号化（ノードに加算） | 0.1328 |\n| さらにエッジ符号化（集約で使用） | 0.1327 |\n| さらにエッジ符号化（注意バイアス） | **0.1304** |\n\n構造なしの 0.2276 は大きく劣ります。空間符号化はラプラシアンよりよく、エッジを注意スコアに入れると従来の二方法を上回ります。\n\n### 代償\n\n注意はノード数の二乗で、大規模グラフは難しいと著者自身が述べます。ノードタスクにはサンプリングが必要です。次数と最短経路は汎用の選択なので、分子の 3D 原子間距離など領域に適した符号化に替えられます。\n\n## 結論\n\nTransformer は、構造を入れればグラフでも悪くありません。次数をノードに、距離と経路のエッジを注意スコアに加えるだけで、当時最大のグラフレベルデータセットの全 GNN を上回りました。\n\n一年後の GraphGPS は PCQM4Mv2 で、1,940 万の GPS-medium が検証 MAE 0.0858、4,830 万 Graphormer が 0.0864 と、半分未満のパラメーターでほぼ同等になります。\n\n小分子で使うなら、まず構造符号化です。同じ 10 万ステップでも、外すと MAE は 0.13 から 0.23 に戻ります。\n","imageSizes":{"/content/papers/assets/c2a2e0893f98e2ed6d93e1f4ee87040eeffbc63c4b955e6a319700c5e87f1847.png":{"width":872,"height":620},"/content/papers/assets/d1eea7bfd57f2de038ba9731f8dc42dbfbd673a11b997cc87811b35cb03be60f.png":{"width":908,"height":216}}}
