{"notes":[{"id":"graph-learning/gcn","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"GCN","subtitle":"一個參數夠嗎？","author":"Z. Yuan","paperDate":"2016-09-09","publishedOn":"2023-10-01","world":"external/gcn","paperTitle":"Semi-Supervised Classification with Graph Convolutional Networks","paperUrl":"https://arxiv.org/abs/1609.02907","bibliography":{"title":"Semi-Supervised Classification with Graph Convolutional Networks","authors":["Thomas N. Kipf","Max Welling"],"url":"https://arxiv.org/abs/1609.02907","pdfUrl":"https://arxiv.org/pdf/1609.02907v4","codeUrl":"https://github.com/tkipf/gcn","preprint":{"id":"1609.02907","submittedOn":"2016-09-09","url":"https://arxiv.org/abs/1609.02907"},"publication":{"venue":"ICLR","year":2017,"kind":"conference","url":"https://arxiv.org/abs/1609.02907"},"citation":"@misc{graphlearninggcn2016,\n  title = {{Semi-Supervised Classification with Graph Convolutional Networks}},\n  author = {Thomas N. Kipf and Max Welling},\n  year = {2016},\n  eprint = {1609.02907},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1609.02907}\n}\n","citationPath":"/content/papers/citations/graph-learning/gcn.43058ec3e77e.bib"},"thumbnail":{"src":"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png","width":1122,"height":400},"locale":"zh-hant","path":"/content/papers/zh-hant/graph-learning/gcn.66a3d9542810.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"把圖當成正則項","text":"把圖當成正則項","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"從頻域一路簡化","text":"從頻域一路簡化","depth":3},{"id":"一層-gcn","text":"一層 GCN","depth":3},{"id":"兩層就夠","text":"兩層就夠","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"實驗設定","text":"實驗設定","depth":3},{"id":"主要結果","text":"主要結果","depth":3},{"id":"哪一種傳播最好","text":"哪一種傳播最好","depth":3},{"id":"疊深一點會怎樣","text":"疊深一點會怎樣","depth":3},{"id":"和-wl-演算法的關係","text":"和 WL 演算法的關係","depth":3},{"id":"四天後的一篇評論","text":"四天後的一篇評論","depth":3},{"id":"論文自己列的限制","text":"論文自己列的限制","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/chebnet","relation":"referenced","topic":""}]},{"id":"graph-learning/spectral-networks","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Spectral Networks","subtitle":"繞道頻域","author":"Z. Yuan","paperDate":"2013-12-21","publishedOn":"2023-09-06","paperTitle":"Spectral Networks and Locally Connected Networks on Graphs","paperUrl":"https://arxiv.org/abs/1312.6203","bibliography":{"title":"Spectral Networks and Locally Connected Networks on Graphs","authors":["Joan Bruna","Wojciech Zaremba","Arthur Szlam","Yann LeCun"],"url":"https://arxiv.org/abs/1312.6203","pdfUrl":"https://arxiv.org/pdf/1312.6203v3","codeUrl":null,"preprint":{"id":"1312.6203","submittedOn":"2013-12-21","url":"https://arxiv.org/abs/1312.6203"},"publication":{"venue":"ICLR","year":2014,"kind":"conference","url":"https://iclr.cc/archive/2014/conference-proceedings/"},"citation":"@misc{graphlearningspectralnetworks2013,\n  title = {{Spectral Networks and Locally Connected Networks on Graphs}},\n  author = {Joan Bruna and Wojciech Zaremba and Arthur Szlam and Yann LeCun},\n  year = {2013},\n  eprint = {1312.6203},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1312.6203}\n}\n","citationPath":"/content/papers/citations/graph-learning/spectral-networks.ea286632c50d.bib"},"thumbnail":{"src":"/content/papers/assets/81c18ce1b25b0675fa18b9922bab2a4316a1582ec2824475056e04b90cda9baa.png","width":1210,"height":448},"locale":"zh-hant","path":"/content/papers/zh-hant/graph-learning/spectral-networks.31f7482724ab.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"id":"空間建構局部連接加分群","text":"空間建構：局部連接加分群","depth":3},{"id":"頻域建構拉普拉斯的特徵向量","text":"頻域建構：拉普拉斯的特徵向量","depth":3},{"id":"重新發現-cnn","text":"重新發現 CNN","depth":3},{"id":"平滑的係數局部的濾波器","text":"平滑的係數，局部的濾波器","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"次取樣的-mnist","text":"次取樣的 MNIST","depth":3},{"id":"球面上的-mnist","text":"球面上的 MNIST","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"graph-learning/chebnet","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]},{"id":"graph-learning/chebnet","category":"graph-learning","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"ChebNet","subtitle":"多項式就好","author":"Z. Yuan","paperDate":"2016-06-30","publishedOn":"2023-09-16","world":"external/chebnet","paperTitle":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","paperUrl":"https://arxiv.org/abs/1606.09375","bibliography":{"title":"Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering","authors":["Michaël Defferrard","Xavier Bresson","Pierre Vandergheynst"],"url":"https://arxiv.org/abs/1606.09375","pdfUrl":"https://arxiv.org/pdf/1606.09375v3","codeUrl":"https://github.com/mdeff/cnn_graph","preprint":{"id":"1606.09375","submittedOn":"2016-06-30","url":"https://arxiv.org/abs/1606.09375"},"publication":{"venue":"NeurIPS","year":2016,"kind":"conference","url":"https://papers.nips.cc/paper_files/paper/2016/hash/04df4d434d481c5bb723be1b6df1ee65-Abstract.html"},"citation":"@misc{graphlearningchebnet2016,\n  title = {{Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering}},\n  author = {Michaël Defferrard and Xavier Bresson and Pierre Vandergheynst},\n  year = {2016},\n  eprint = {1606.09375},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1606.09375}\n}\n","citationPath":"/content/papers/citations/graph-learning/chebnet.52e0fac25946.bib"},"thumbnail":{"src":"/content/papers/assets/f924fc7fdf6829dd352c02c0062d56fef579382aee9d8de9a76c29aa312325ef.png","width":1144,"height":484},"locale":"zh-hant","path":"/content/papers/zh-hant/graph-learning/chebnet.6954c188a205.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"空間上定義不出平移","text":"空間上定義不出平移","depth":3},{"id":"頻域上算不起","text":"頻域上算不起","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"用多項式換局部性","text":"用多項式換局部性","depth":3},{"id":"用-chebyshev-遞迴換速度","text":"用 Chebyshev 遞迴換速度","depth":3},{"id":"圖上的池化","text":"圖上的池化","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"先在網格上驗證","text":"先在網格上驗證","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/spectral-networks","relation":"referenced","topic":""},{"id":"graph-learning/gcn","relation":"referenced","topic":""}]}],"text":"手上有 2,708 篇論文，每篇有一份詞袋特徵，彼此之間有 5,429 條引用關係。其中只有 140 篇標了主題，七個主題各 20 篇，剩下的要靠模型猜。\n\n這是 Cora 資料集上的半監督節點分類。直覺上，引用彼此的論文應該是同一個主題，問題是這份直覺要怎麼放進模型裡。\n\n阿姆斯特丹大學的 Thomas Kipf 與 Max Welling 給了一個很短的答案。每一層，每個節點把自己和鄰居的特徵照固定比例加權平均，再乘一個權重矩陣，疊兩層就結束。在 Cora 上，這個模型拿到 81.5%，前一代最好的方法是 75.7%。\n\n這個模型叫 GCN，後來幾乎成了圖神經網路的代名詞。\n\n## 定義問題\n\n### 把圖當成正則項\n\n在 GCN 之前，常見的做法是把圖放進損失函數裡：\n\n$$\n\\mathcal{L}=\\mathcal{L}_0+\\lambda\\,\\mathcal{L}_{\\text{reg}},\\qquad\n\\mathcal{L}_{\\text{reg}}=\\sum_{i,j}A_{ij}\\left\\|f(X_i)-f(X_j)\\right\\|^2\n$$\n\n$\\mathcal{L}_0$ 是有標籤節點的監督損失，$\\mathcal{L}_{\\text{reg}}$ 懲罰相連節點的輸出差太多。label propagation、manifold regularization 都屬於這一類。\n\n作者指出，這類方法假設「有邊就代表相似」。引用關係裡確實有很多這種情形，但邊也可能帶著別的資訊，硬把它寫成相似度，模型能學的東西就被限制住了。\n\n另一類做法是 DeepWalk 這類圖嵌入，先在圖上做隨機遊走，學出每個節點的向量，再拿去訓練分類器。步驟分開最佳化，中間任何一步沒調好，最後的分類器也救不回來。\n\n作者想要的是一個直接吃進圖的模型 $f(X, A)$。$X$ 是節點特徵，$A$ 是鄰接矩陣，損失只算有標籤的節點；梯度透過 $A$ 流到沒有標籤的節點，讓它們的表示也一起被學出來。\n\n## 解決問題\n\n### 從頻域一路簡化\n\n論文的推導從頻域的圖卷積開始。正規化拉普拉斯矩陣 $L=I_N-D^{-1/2}AD^{-1/2}$ 可以拆成 $U\\Lambda U^\\top$，$U$ 的每一行是圖上的一個「頻率」。對節點訊號 $x$ 做卷積，就是先轉到頻域，乘上濾波器，再轉回來：\n\n$$\ng_\\theta\\star x=U g_\\theta U^\\top x\n$$\n\n這條路很貴。乘一次 $U$ 是 $O(N^2)$，大圖光是做特徵分解就吃不消。前一篇 ChebNet 把濾波器換成 Chebyshev 多項式，用 $K$ 階多項式近似，不必特徵分解，也只看 $K$ 步以內的鄰居。\n\n\n> [!TIP]\n> \n> 頻域圖卷積的起點與 ChebNet 的多項式濾波器，可以參考我們的筆記：\n> \n> - **[[13.12] Spectral Networks：繞道頻域](/blog/papers/graph-learning/spectral-networks)**\n> - **[[16.06] ChebNet：多項式就好](/blog/papers/graph-learning/chebnet)**\n\n\nKipf 和 Welling 在這個基礎上再砍三刀。\n\n第一刀，多項式只留到一階，$K=1$。一層只看一步，要看遠一點就疊層數。作者的理由是，社群網路、引用網路這類圖的度數分布很寬，濾波器越靈活，越容易對局部結構過擬合。\n\n第二刀，最大特徵值 $\\lambda_{\\max}$ 直接估成 2，交給網路參數去適應尺度上的差異。濾波器變成：\n\n$$\ng_{\\theta'}\\star x\\approx\\theta'_0x-\\theta'_1D^{-\\frac12}AD^{-\\frac12}x\n$$\n\n第三刀，兩個參數綁成一個，$\\theta=\\theta'_0=-\\theta'_1$：\n\n$$\ng_\\theta\\star x\\approx\\theta\\left(I_N+D^{-\\frac12}AD^{-\\frac12}\\right)x\n$$\n\n括號裡這個矩陣的特徵值落在 $[0,2]$。疊很多層時，最大的那個 2 會一路放大，數值不穩、梯度爆炸或消失都可能出現。作者於是用了一個 **renormalization trick**，先加自環 $\\tilde A=A+I_N$，再用新的度數 $\\tilde D_{ii}=\\sum_j\\tilde A_{ij}$ 正規化：\n\n$$\nI_N+D^{-\\frac12}AD^{-\\frac12}\\;\\rightarrow\\;\\tilde D^{-\\frac12}\\tilde A\\tilde D^{-\\frac12}\n$$\n\n拿一張五個節點的小圖比一比兩者的特徵值：\n\n```python\nimport numpy as np\nnp.set_printoptions(precision=2, suppress=True)\n\n# 五篇論文的引用關係，當成無向圖：0-1、0-2、1-2、2-3、3-4\nA = np.zeros((5, 5))\nfor i, j in [(0, 1), (0, 2), (1, 2), (2, 3), (3, 4)]:\n    A[i, j] = A[j, i] = 1\n\nd = A.sum(1)\nS = np.eye(5) + A / np.sqrt(np.outer(d, d))     # 式 7：I + D^-1/2 A D^-1/2\nA_t = A + np.eye(5)                             # 加自環\nd_t = A_t.sum(1)\nA_hat = A_t / np.sqrt(np.outer(d_t, d_t))       # 重新正規化：D̃^-1/2 Ã D̃^-1/2\n\nprint(\"式 7 的特徵值:\", np.linalg.eigvalsh(S))\nprint(\"Â 的特徵值:   \", np.linalg.eigvalsh(A_hat))\n```\n\n```text\n式 7 的特徵值: [0.14 0.5  0.7  1.65 2.  ]\nÂ 的特徵值:    [-0.21  0.    0.17  0.79  1.  ]\n```\n\n式 7 的最大特徵值是 2，套用十次就會把對應的成分放大一千多倍。$\\hat A$ 的特徵值都不超過 1，可以放心疊。\n\n### 一層 GCN\n\n把單一訊號推廣到每個節點 $C$ 維的特徵 $X\\in\\mathbb{R}^{N\\times C}$，再用 $F$ 個濾波器，就是：\n\n$$\nZ=\\hat AX\\Theta,\\qquad \\hat A=\\tilde D^{-\\frac12}\\tilde A\\tilde D^{-\\frac12}\n$$\n\n$\\Theta\\in\\mathbb{R}^{C\\times F}$ 是可學的權重。加上非線性、一層一層疊上去，就是論文的式 2：\n\n$$\nH^{(l+1)}=\\sigma\\left(\\hat AH^{(l)}W^{(l)}\\right)\n$$\n\n拆回單一節點來看，$\\hat A_{ij}=1/\\sqrt{\\tilde d_i\\tilde d_j}$，節點 $i$ 收到鄰居 $j$ 的份量只由兩人的度數決定，所有鄰居共用同一個 $W$。$\\hat AX$ 可以用稀疏矩陣乘稠密矩陣來算，一層的成本是 $O(|E|FC)$，隨邊數線性成長。\n\n### 兩層就夠\n\n用在半監督分類時，論文只疊兩層：\n\n$$\nZ=f(X,A)=\\mathrm{softmax}\\left(\\hat A\\,\\mathrm{ReLU}\\left(\\hat AXW^{(0)}\\right)W^{(1)}\\right)\n$$\n\n$\\hat A$ 事先算好一次。損失是交叉熵，只算有標籤的節點。\n\n[![原論文 Figure 1：左圖是多層 GCN 的示意，輸入層有 C 個通道，節點 X1 到 X4 依圖的邊相連，經過隱藏層後輸出 F 個特徵圖，部分節點帶有標籤 Y；右圖是兩層 GCN 在 Cora 上隱藏層輸出的 t-SNE，不同顏色是不同主題，各自聚成一團。](/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png)](/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png)\n\n*原論文 Figure 1（Kipf 與 Welling），取自 [**PDF 第 4 頁**](https://arxiv.org/pdf/1609.02907v4#page=4)。圖說未收錄。*\n\n左圖的重點是同一張圖在每一層共用，只有特徵在變；右圖是 Cora 上只用 5% 標籤訓練後，隱藏層輸出的 t-SNE，七種顏色已經各自聚在一起。\n\n接著上面的小圖，把兩層 GCN 的前向傳遞走一次。每個節點 4 維特徵，隱藏層 3 維，分成 2 類，只有 0 號和 4 號有標籤：\n\n```python\nrng = np.random.default_rng(0)\nX = rng.random((5, 4))            # 5 個節點，每個 4 維特徵（C = 4）\nW0 = rng.normal(size=(4, 3))      # 輸入 → 隱藏層（H = 3）\nW1 = rng.normal(size=(3, 2))      # 隱藏層 → 2 個類別（F = 2）\n\nH1 = np.maximum(A_hat @ X @ W0, 0)                     # ReLU(ÂXW0)\nlogits = A_hat @ H1 @ W1                               # Â H W1\nZ = np.exp(logits) / np.exp(logits).sum(1, keepdims=True)\nprint(\"H1:\", H1.shape, \" Z:\", Z.shape)\nprint(Z)\n\nlabeled, y = [0, 4], np.array([0, 1])                  # 只有 0 號和 4 號有標籤\nprint(\"loss:\", -np.log(Z[labeled, y]).mean().round(3))\n```\n\n```text\nH1: (5, 3)  Z: (5, 2)\n[[0.47 0.53]\n [0.47 0.53]\n [0.47 0.53]\n [0.47 0.53]\n [0.48 0.52]]\nloss: 0.7\n```\n\n權重還沒訓練，每個節點對兩類的機率都在 0.5 附近，損失約等於 $\\ln 2$。訓練時只有 0 號和 4 號的損失會回傳，但 $\\hat A$ 把它們和鄰居綁在一起，1、2、3 號的表示也會跟著更新。\n\n論文用整張圖做全批次梯度下降，每一步都把整個 $\\hat A$ 和 $X$ 放進記憶體；隨機性只來自 dropout。\n\n## 討論\n\n### 實驗設定\n\n實驗沿用 Planetoid 論文的設定。三個引用網路 Citeseer、Cora、Pubmed 各有 3,327、2,708、19,717 個節點，每類只給 20 個標籤；另外一個 NELL 知識圖譜有 65,755 個節點，每類只有 1 個標籤。驗證集 500 個節點只用來調超參數，測試集 1,000 個節點。\n\n模型是兩層 GCN，隱藏層 16 維，dropout 0.5，第一層 L2 正則 $5\\times10^{-4}$，Adam 學習率 0.01，最多 200 個 epoch，驗證損失連續 10 個 epoch 沒下降就停。超參數只在 Cora 上調，再原封不動搬到 Citeseer 和 Pubmed。\n\n### 主要結果\n\n| 方法 | Citeseer | Cora | Pubmed | NELL |\n| --- | ---: | ---: | ---: | ---: |\n| ManiReg | 60.1 | 59.5 | 70.7 | 21.8 |\n| LP | 45.3 | 68.0 | 63.0 | 26.5 |\n| DeepWalk | 43.2 | 67.2 | 65.3 | 58.1 |\n| ICA | 69.1 | 75.1 | 73.9 | 23.1 |\n| Planetoid* | 64.7 | 75.7 | 77.2 | 61.9 |\n| **GCN** | **70.3** | **81.5** | **79.0** | **66.0** |\n| GCN（隨機切分） | 67.9 ± 0.5 | 80.1 ± 0.5 | 78.9 ± 0.7 | 58.4 ± 1.7 |\n\n數字是分類準確率（%），GCN 那一列是 100 次隨機初始化的平均。在同一台機器上，GCN 收斂所需的時間在 Citeseer、Cora、NELL 都比 Planetoid 短（7、4、48 秒對 26、13、185 秒），Pubmed 則是 38 秒對 25 秒。\n\n最後一列換成 10 組大小相同的隨機切分，GCN 的準確率掉了一些，NELL 從 66.0% 掉到 58.4%，掉得最多。\n\n### 哪一種傳播最好\n\n作者把兩層的傳播方式換成推導過程中的各種版本，其他設定不動：\n\n| 傳播方式 | Citeseer | Cora | Pubmed |\n| --- | ---: | ---: | ---: |\n| Chebyshev，$K=3$ | 69.8 | 79.5 | 74.4 |\n| Chebyshev，$K=2$ | 69.6 | 81.2 | 73.8 |\n| 一階，兩個參數（式 6） | 68.3 | 80.0 | 77.5 |\n| 一階，一個參數（式 7） | 69.3 | 79.2 | 77.4 |\n| **重新正規化（式 8）** | **70.3** | **81.5** | **79.0** |\n| 只用一階項 | 68.7 | 80.5 | 77.8 |\n| MLP（不用圖） | 46.5 | 55.1 | 71.4 |\n\n越往下簡化，結果沒有變差。重新正規化的版本參數最少、運算也最少，在三個資料集上都最好；高階的 Chebyshev 在 Pubmed 上反而掉到 74% 左右。不用圖的 MLP 在 Cora 上只有 55.1%，圖結構的貢獻一目瞭然。\n\n### 疊深一點會怎樣\n\n附錄 B 把層數從 1 疊到 10，用全部標籤做 5 折交叉驗證，同時比較加不加殘差連接：\n\n[![原論文 Figure 5：三張子圖分別是 Citeseer、Cora、Pubmed，橫軸是 1 到 10 層，縱軸是準確率。訓練與測試曲線在 2 到 3 層附近最高；沒有殘差的虛線在 7 層之後急速下降，有殘差的實線則大致持平。](/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png)](/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png)\n\n*原論文 Figure 5（Kipf 與 Welling），取自 [**PDF 第 14 頁**](https://arxiv.org/pdf/1609.02907v4#page=14)。圖說未收錄。*\n\n三個資料集都是 2 到 3 層最好。超過 7 層，沒有殘差的模型連訓練準確率都往下掉，作者說這時訓練會變得很困難；加了殘差之後，曲線大致持平，但也沒有變得更好。\n\n### 和 WL 演算法的關係\n\n附錄 A 從另一個角度解讀 GCN。Weisfeiler-Lehman（WL）演算法是一種圖同構檢查法，每一輪把節點的顏色更新成「自己和鄰居顏色組合的雜湊」。把雜湊函數換成可學的神經網路層，正規化常數取 $\\sqrt{d_id_j}$，就是 GCN 的傳播規則。作者稱 GCN 是 WL 演算法的可微分、帶參數的推廣（他自己加了一句 loosely speaking）。\n\n順著這個類比，作者拿 Zachary 空手道俱樂部的 34 位成員做實驗。三層 GCN、權重完全隨機、不訓練，節點特徵只用單位矩陣，輸出的二維嵌入已經和社群結構很像，作者說這和需要額外訓練的 DeepWalk 結果相當。每個社群各給一個標籤、訓練 300 步之後，模型就能把四個社群線性分開。\n\n### 四天後的一篇評論\n\n論文上傳 arXiv 四天後，Ferenc Huszár 在部落格寫了一篇評論，標題叫〈How powerful are Graph Convolutions?〉。他把模型放到 8 鄰接的影像網格上檢查，發現每一層、每一個通道用的都是同一個固定形狀的 3×3 核，彼此只差一個純量倍數。他認為這樣的模型學不出邊緣偵測器或 Gabor 濾波器，簡化讓模型的通用性大打折扣，反而 ChebNet 的高階多項式比較有前景。[inFERENCe，2016-09-13](https://www.inference.vc/how-powerful-are-graph-convolutions-review-of-kipf-welling-2016-2/)\n\n我們用定稿的 $\\hat A$ 驗證過，在網格內部，正中間的像素對周圍 9 格（含自己）各取 1/9，就是一個平均濾波器。\n\nKipf 在月底的部落格文章回應。他同意在規則網格上退化成簡單運算，是處理任意圖的模型共同的缺點；評估這類模型時，應該看規則網格以外的資料，並承認其中的取捨。[Kipf，2016-09-30](https://tkipf.github.io/graph-convolutional-networks/)\n\n兩人說的都對。在影像上，GCN 確實失去了 CNN 依位置分配權重的能力；在引用網路這種沒有方向、度數又很分散的圖上，前面那張傳播方式的比較顯示，簡化反而比較好。\n\n### 論文自己列的限制\n\n- **記憶體**：全批次訓練的記憶體隨資料量線性成長。改成小批次時，$K$ 層模型得把每個節點 $K$ 步以內的鄰居全部載入。\n- **邊的種類**：只支援無向圖，也不支援邊特徵。NELL 是先把有向、有標記的邊改寫成二部圖，才放得進來。\n- **自環的份量**：模型隱含假設自己和鄰居一樣重要。作者建議改成 $\\tilde A=A+\\lambda I_N$，讓 $\\lambda$ 也能學。\n\n第一點後來由 GraphSAGE 這類取樣方法處理。第三點也可以從 GraphSAGE 的設計看到另一種做法，它把自己和鄰居分開乘權重。\n\n## 結論\n\nGCN 從頻域圖卷積出發，砍到只剩一階、一個參數，再用重新正規化穩住數值，得到一個一行寫得完的傳播規則。兩層模型在三個引用網路上大幅超過當時的方法，訓練也快。\n\n代價也很清楚。每個鄰居分到的權重只由度數決定，放到影像網格上就只剩一個平均核；疊超過兩三層就開始變差。後來的 GraphSAGE、GAT、GIN，很多都是從這兩點出發。\n\n如果你想自己試，PyTorch Geometric 的 `GCNConv` 實作的就是這篇的傳播規則。照論文的設定疊兩層，隱藏層 16 維、dropout 0.5；論文在 Cora 上收斂只花了 4 秒。\n\n先從兩層開始吧，多疊未必比較好。\n","imageSizes":{"/content/papers/assets/ded600c9ca8f4eda09d39ffb16b3c9b0ec730780063e55948b29924d00f14794.png":{"width":1122,"height":400},"/content/papers/assets/8678c3fe0abb2cce0863dc23cf622ad78187872d1ddebf951b3a6a7385d15405.png":{"width":1132,"height":454}}}
