Paper · 2020-06-14 · cs.LG, stat.ML
Adaptive Universal Generalized PageRank Graph Neural Network
GPR-GNN learns one weight per propagation step (K=10) of a normalised-adjacency sum, trained jointly with a 2-layer MLP, so the weights can turn negative and act as a high-pass filter on heterophilic graphs. Author-reported: best mean accuracy on 7 of 10 benchmarks, e.g. Texas 92.92 vs 92.26 for MLP.
Graph neural networkGeneralized PageRank propagationSemi-supervised learningStochastic block modelgraph-neural-networknode-classificationheterophilyover-smoothingpagerank
arXivPDFCodeMarkdown23 min read
AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Many graph neural networks work by letting each node average information from its neighbours. That helps when neighbours tend to share a label, as in a citation network. It hurts when neighbours tend to have different labels, as in a dating graph, and stacking many such layers blurs every node's features into one another.
The paper's idea is to keep the neighbour averaging, but to let the model learn how much weight each distance from a node gets. Information from direct neighbours, neighbours of neighbours, and so on each gets its own weight. The weights are trained together with the rest of the network, and they may be negative. The weights may be negative, which the paper ties to heterophilic graphs (see the filter view in the Method).
The authors argue that this makes one model work across both kinds of graph, and that it avoids the blurring problem even when many steps are used. They show what the learned weights look like on different graphs, and they report better accuracy than the baselines on most of their benchmarks.
TL;DR
- GPR-GNN feeds a 2-layer MLP's output through K+1 weighted propagation steps and learns the weights end to end eq. 1 §3.
- The weights are not restricted to be positive, which lets the filter pass high frequencies and suits heterophilic graphs §3 §4.
- Author-reported: best mean accuracy on 7 of 10 benchmark datasets (Table 2), and best at 17 of 18 settings on the authors' synthetic cSBM graphs (sparse and dense splits) tab. 2 tab. 5 tab. 6.
- The official code is public, but the repository has no LICENSE file, so no reuse right is granted; this card cites it only for the design.
- Relevant when you build a node classifier and do not know whether your graph is homophilic.
Problem
Graph neural networks have two weaknesses that the paper targets §1. First, most are built for homophilic graphs, where linked nodes share a label, and they fail on heterophilic graphs §1 §3. Second, stacking many layers causes over-smoothing: node features converge towards values set by node degree, so the features lose discriminative power §1 §3.
The paper shows that fixed propagation weights make the problem worse. APPNP and SGC use fixed Personalized PageRank (PPR) weights §3. The paper's theorem says that non-negative weights summing to one give a low-pass filter §4, which removes the high-frequency part of the signal that a heterophilic graph carries.
Assumptions: the graph is undirected and the task is semi-supervised node classification in the transductive setting §5. The theory assumes a connected graph and a training set with nodes from every class §4 app. A.4.
Method
GPR-GNN separates feature extraction from propagation. A neural network f_θ turns each node's features into a first representation. Then the model combines propagated versions of this representation with learned weights γ_k §3 eq. 1.
- Feature network f_θ. A 2-layer MLP with 64 hidden units and ReLU §5 app. A.9. In the official code the second layer outputs one value per class, so the representation that gets propagated is the class-logit matrix GNN_models.py.
- Propagation operator. Ã = A + I adds self-loops, D̃ is its degree matrix, and Ã_sym = D̃^(-1/2) Ã D̃^(-1/2) §2. The code uses PyTorch Geometric's gcn_norm, called with its default self-loop setting GNN_models.py.
- Weighted sum of propagated features. The model sums the K+1 terms γ_k H^(k), where H^(0) is the network output and each further term applies Ã_sym once more eq. 1 §3. The paper uses K = 10 §5.
- Prediction and loss. P̂ is the row-wise softmax of Z. The loss is the cross-entropy summed over training nodes app. A.4. The code uses the negative log-likelihood of log-softmax outputs, which is the same loss train_model.py.
- Joint training. γ_k and θ are learned together, end to end, by gradient descent §3 fig. 1. The paper uses Adam app. A.9.
- Initialisation of γ. Four choices: PPR-like weights γ_k = α(1-α)^k with γ_K = (1-α)^K for α in {0.1, 0.2, 0.5, 0.9}; the one-hot weights γ_k = δ_0k; the one-hot weights γ_k = δ_Kk; and random initialisation §5. The paper shows learned weights under random initialisation for Cora and Texas and says the patterns are not forced by the initialisation §3 fig. 1.
- Special cases. APPNP is the case γ_k = α(1-α)^k with γ_K = (1-α)^K. SGC is the case γ_k = δ_Kk §3.
- Filter view. Let Ã_sym = U Λ U^T. Then Σ_k γ_k Ã_sym^k = U g(Λ) U^T with g(λ) = Σ_k γ_k λ^k, so learning γ means learning a polynomial graph filter §4.
Formula, in the paper's notation eq. 1:
\hat{P} = \mathrm{softmax}(Z), \quad Z = \sum_{k=0}^{K} \gamma_k H^{(k)}, \quad H^{(k)} = \tilde{A}_{sym} H^{(k-1)}, \quad H^{(0)}_{i:} = f_\theta(X_{i:}) eq. 1
Theory, informal §4 app. A.3 app. A.4:
- If every γ_k is non-negative, the γ_k sum to one, and some γ_k is positive, the filter is low-pass. With γ_k = (-α)^k for α in (0, 1) and large K, it acts as a high-pass filter §4 app. A.3.
- Over-smoothing: for large k, the gradient with respect to γ_k has the same sign as γ_k, so |γ_k| shrinks when those steps hurt the loss. The result assumes an optimizer with a decreasing learning rate, such as SGD §4 app. A.4.
The synthetic graphs come from a contextual stochastic block model (cSBM) §5 app. A.5. The paper gives the homophily knob φ in terms of λ and μ, where ξ = n/f and ε is a margin:
\phi = \frac{2}{\pi}\arctan\!\left(\frac{\lambda\sqrt{\xi}}{\mu}\right), \qquad \lambda^2 + \frac{\mu^2}{\xi} = 1 + \epsilon §5
The paper sets n = 5000, f = 2000 (so ξ = 2.5) and ε = 3.25 app. A.5.
Pseudocode for the forward pass eq. 1 §3:
# GPR-GNN forward pass [eq. 1] [§3]
# Input: features (n, f); adj (n, n) = A~_sym; gammas (K+1,)
# Output: log-probabilities (n, C)
def gpr_gnn_forward(features, adj, gammas, training):
# Feature network f_theta: dropout, linear, ReLU, dropout, linear
# [app. A.9] [code: src/GNN_models.py#L109-L115]
hidden = dropout(features, 0.5, training) # (n, f)
hidden = relu(linear_1(hidden)) # (n, 64)
hidden = dropout(hidden, 0.5, training) # (n, 64)
first = linear_2(hidden) # H^(0), (n, C)
# Optional dropout on the propagated input, rate searched
# [app. A.9] [code: src/GNN_models.py#L117-L122]
first = dropout(first, dprate, training) # (n, C)
# Start the weighted sum with gamma_0 * H^(0) [eq. 1]
# [code: src/GNN_models.py#L76]
propagated = gammas[0] * first # (n, C)
step = first
for k in range(1, K + 1):
# H^(k) = A~_sym H^(k-1) [eq. 1]
step = adj @ step # (n, C)
# Z = sum_k gamma_k H^(k) [eq. 1] [code: src/GNN_models.py#L77-L80]
propagated = propagated + gammas[k] * step
# P = softmax(Z), returned in log form [eq. 1]
return log_softmax(propagated) # (n, C)Training loop with validation-based selection app. A.9 §5:
# Training with validation-based model selection
# [app. A.9] [code: src/train_model.py#L82-L106]
# Input: graph with train, val and test masks; max_epochs = 1000
# Output: test accuracy at the epoch with the lowest validation loss
def train_one_run(graph, max_epochs):
# Adam with a searched learning rate; no scheduler in the code
# [app. A.9] [code: src/train_model.py#L57-L71]
optimizer = adam(parameters, learning_rate)
best_val_loss = infinity
selected_test_acc = 0.0
val_loss_history = []
for epoch in range(max_epochs):
# Full-batch step; NLL on training nodes only
# [code: src/train_model.py#L24-L33]
train_step(graph, optimizer)
val_loss, test_acc = evaluate(graph) # eval mode, no dropout
# Keep the test accuracy of the best validation loss so far
# [code: src/train_model.py#L88-L97]
if val_loss < best_val_loss:
best_val_loss = val_loss
selected_test_acc = test_acc
# Stop when the loss is above the mean of the last 200 epochs
# Paper: checked after half of max_epochs; code: after epoch 200
# [app. A.9] [code: src/train_model.py#L99-L106]
if epoch > 200 and val_loss > mean(val_loss_history[-200:]):
break
val_loss_history.append(val_loss)
return selected_test_accHyperparameters
Values stated in the paper are cited to the paper. Values taken from the repository are marked as code-only, because the paper does not state them.
| Name | Value | Where | Notes |
|---|---|---|---|
| Propagation steps K | 10 | §5 train_model.py | Paper: "usually K ≤ 20" §5. |
| Hidden units of f_θ | 64 (2 layers) | §5 app. A.9 train_model.py | Second layer outputs the C class logits in the code. |
| Dropout in f_θ | 0.5 | app. A.9 train_model.py | Paper: fixed as in APPNP. |
| Dropout on the propagated input (dprate) | searched over {0, 0.5, 0.7} | app. A.9 train_model.py | Paper does not say where it is applied; code applies it to the logits. |
| Learning rate | searched over {0.002, 0.01, 0.05} | §5 | Per-dataset choices below. Code default is 0.002 train_model.py. |
| Weight decay | searched over {0.0, 0.0005} | §5 | Code applies it to the MLP only, not to γ train_model.py. |
| PPR α (PPR initialisation) | searched over {0.1, 0.2, 0.5, 0.9} | §5 | Code also accepts α = 0 and α = 1 (see Paper vs code). |
| Initialisation of γ | PPR α; δ_0k; δ_Kk; random | §5 | Paper names the random one "GPR-GNN(rand)". |
| Max epochs | 1000 | app. A.9 train_model.py | |
| Early stopping | 200-epoch mean rule | app. A.9 train_model.py | See Paper vs code. |
| Optimizer | Adam, all models | app. A.9 | Code: no learning-rate scheduler train_model.py. |
| Repetitions | 100 random splits and initialisations | §5 Reproduce_GPRGNN.sh | |
| Split, homophilic datasets | 2.5% train / 2.5% val / 95% test | §5 app. A.9 | Code rounds the training count per class train_model.py. |
| Split, heterophilic datasets | 60% train / 20% val / 20% test | §5 app. A.9 | |
| Metric | accuracy (micro-F1) | §5 | |
| Baseline sizes | GCN: 2 layers, 64 units; GAT: 8 heads × 8 units, then 1 head × 64 units; GCN-Cheby: 2 steps per layer, 32 units; JK-Net: 2 GCN layers, 16 units, LSTM 16 channels, 4 layers; MLP: 2 layers, 64 units; APPNP: 10 steps; SGC: K ∈ {2, 3}; SAGE: 2 layers, 64 units | app. A.9 | Code differs for GAT and JK-Net (see Paper vs code). |
| cSBM size | n = 5000, f = 2000, ξ = 2.5, ε = 3.25 | app. A.5 | Average degree d is not stated in the paper. Code uses 5 create_cSBM_dataset.sh. |
| cSBM classes and splits | 2 equal classes; sparse and dense splits | app. A.5 §5 |
Per-dataset GPR-GNN settings (code-only: the paper does not give them, and they come from the repository's reproduction script, whose settings the README repeats). Unset values use the code defaults: weight decay 0.0005 train_model.py and GPR dropout 0.5 train_model.py.
| Dataset | Split | Learning rate | α | Weight decay | GPR dropout | Source |
|---|---|---|---|---|---|---|
| Cora | sparse | 0.01 | 0.1 | default | default | Reproduce_GPRGNN.sh |
| Citeseer | sparse | 0.01 | 0.1 | default | default | Reproduce_GPRGNN.sh |
| PubMed | sparse | 0.05 | 0.2 | default | default | Reproduce_GPRGNN.sh |
| Computers | sparse | 0.05 | 0.5 | 0.0 | default | Reproduce_GPRGNN.sh |
| Photo | sparse | 0.01 | 0.5 | 0.0 | default | Reproduce_GPRGNN.sh |
| Chameleon | dense | 0.05 | 1.0 | 0.0 | 0.7 | Reproduce_GPRGNN.sh |
| Actor (repo name: film) | dense | 0.01 | 0.9 | 0.0 | default | Reproduce_GPRGNN.sh |
| Squirrel | dense | 0.05 | 0.0 | 0.0 | 0.7 | Reproduce_GPRGNN.sh |
| Texas | dense | 0.05 | 1.0 | default | default | Reproduce_GPRGNN.sh |
| Cornell | dense | 0.05 | 0.9 | default | default | Reproduce_GPRGNN.sh |
Results
Author-reported. Setup: GPR-GNN and nine baselines, each run 100 times with random splits and initialisations, on five homophilic and five heterophilic benchmarks §5. The paper gives mean accuracy with a 95% confidence interval tab. 2. The bold marking below follows the paper, which also underlines cells within the interval of the best result; the underline is not shown. Hardware: one NVIDIA Tesla P100 GPU app. A.9.
Dataset statistics tab. 1:
| Cora | Citeseer | PubMed | Computers | Photo | Chameleon | Squirrel | Actor | Texas | Cornell | |
|---|---|---|---|---|---|---|---|---|---|---|
| Classes | 7 | 6 | 5 | 10 | 8 | 5 | 5 | 5 | 5 | 5 |
| Features | 1433 | 3703 | 500 | 767 | 745 | 2325 | 2089 | 932 | 1703 | 1703 |
| Nodes | 2708 | 3327 | 19717 | 13752 | 7650 | 2277 | 5201 | 7600 | 183 | 183 |
| Edges | 5278 | 4552 | 44324 | 245861 | 119081 | 31371 | 198353 | 26659 | 279 | 277 |
| H(G) | 0.825 | 0.718 | 0.792 | 0.802 | 0.849 | 0.247 | 0.217 | 0.215 | 0.057 | 0.301 |
Main results, mean accuracy (%) ± 95% CI, real benchmarks tab. 2:
| Method | Cora | Citeseer | PubMed | Computers | Photo | Chameleon | Actor | Squirrel | Texas | Cornell |
|---|---|---|---|---|---|---|---|---|---|---|
| GPRGNN | 79.51 ± 0.36 | 67.63 ± 0.38 | 85.07 ± 0.09 | 82.90 ± 0.37 | 91.93 ± 0.26 | 67.48 ± 0.40 | 39.30 ± 0.27 | 49.93 ± 0.53 | 92.92 ± 0.61 | 91.36 ± 0.70 |
| APPNP | 79.41 ± 0.38 | 68.59 ± 0.30 | 85.02 ± 0.09 | 81.99 ± 0.26 | 91.11 ± 0.26 | 51.91 ± 0.56 | 38.86 ± 0.24 | 34.77 ± 0.34 | 91.18 ± 0.70 | 91.80 ± 0.63 |
| MLP | 50.34 ± 0.48 | 52.88 ± 0.51 | 80.57 ± 0.12 | 70.48 ± 0.28 | 78.69 ± 0.30 | 46.72 ± 0.46 | 38.58 ± 0.25 | 31.28 ± 0.27 | 92.26 ± 0.71 | 91.36 ± 0.70 |
| SGC | 70.81 ± 0.67 | 58.98 ± 0.47 | 82.09 ± 0.11 | 76.27 ± 0.36 | 83.80 ± 0.46 | 63.02 ± 0.43 | 29.39 ± 0.20 | 43.14 ± 0.28 | 55.18 ± 1.17 | 47.80 ± 1.50 |
| GCN | 75.21 ± 0.38 | 67.30 ± 0.35 | 84.27 ± 0.01 | 82.52 ± 0.32 | 90.54 ± 0.21 | 60.96 ± 0.78 | 30.59 ± 0.23 | 45.66 ± 0.39 | 75.16 ± 0.96 | 66.72 ± 1.37 |
| GAT | 76.70 ± 0.42 | 67.20 ± 0.46 | 83.28 ± 0.12 | 81.95 ± 0.38 | 90.09 ± 0.27 | 63.90 ± 0.46 | 35.98 ± 0.23 | 42.72 ± 0.33 | 78.87 ± 0.86 | 76.00 ± 1.01 |
| SAGE | 70.89 ± 0.54 | 61.52 ± 0.44 | 81.30 ± 0.10 | 83.11 ± 0.23 | 90.51 ± 0.25 | 62.15 ± 0.42 | 36.37 ± 0.21 | 41.26 ± 0.26 | 79.03 ± 1.20 | 71.41 ± 1.24 |
| JKNet | 73.22 ± 0.64 | 60.85 ± 0.76 | 82.91 ± 0.11 | 77.80 ± 0.97 | 87.70 ± 0.70 | 62.92 ± 0.49 | 33.41 ± 0.25 | 44.72 ± 0.48 | 75.53 ± 1.16 | 66.73 ± 1.73 |
| GCN-Cheby | 71.39 ± 0.51 | 65.67 ± 0.38 | 83.83 ± 0.12 | 82.41 ± 0.28 | 90.09 ± 0.28 | 59.96 ± 0.51 | 38.02 ± 0.23 | 40.67 ± 0.31 | 86.08 ± 0.96 | 85.33 ± 1.04 |
| GeomGCN | 20.37 ± 1.13 | 20.30 ± 0.90 | 58.20 ± 1.23 | NA | NA | 61.06 ± 0.49 | 31.81 ± 0.24 | 38.28 ± 0.27 | 58.56 ± 1.77 | 55.59 ± 1.59 |
Reading of Table 2 tab. 2 §5: GPR-GNN has the best mean on seven datasets (Cora, PubMed, Photo, Chameleon, Actor, Squirrel, Texas). On Computers and Cornell it is within the interval of the best mean (SAGE and APPNP). On Citeseer, APPNP is higher. The MLP is close to the GNNs on Texas and Cornell, where the paper conjectures that the graph topology is weakly informative §5.
Homophilic results with dense splits tab. 7:
| Method | Cora | Citeseer | PubMed |
|---|---|---|---|
| GPRGNN | 88.65 ± 0.28 | 80.01 ± 0.28 | 89.18 ± 0.15 |
| APPNP | 88.1 ± 0.23 | 80.5 ± 0.26 | 89.15 ± 0.13 |
| MLP | 76.44 ± 0.30 | 76.25 ± 0.28 | 86.43 ± 0.13 |
| SGC | 86.58 ± 0.26 | 76.23 ± 0.29 | 83.52 ± 0.10 |
| GCN | 86.87 ± 0.25 | 79.28 ± 0.25 | 86.97 ± 0.12 |
| GAT | 87.52 ± 0.24 | 80.56 ± 0.31 | 86.64 ± 0.11 |
| SAGE | 86.58 ± 0.26 | 78.24 ± 0.30 | 86.85 ± 0.11 |
| JKNet | 86.97 ± 0.27 | 77.69 ± 0.35 | 87.38 ± 0.13 |
| GCN-Cheby | 86.46 ± 0.26 | 78.66 ± 0.26 | 88.2 ± 0.09 |
| GeomGCN | 85.4 ± 0.26 | 76.42 ± 0.37 | 88.51 ± 0.08 |
Synthetic cSBM, sparse split: mean accuracy (%) ± 95% CI tab. 5. The paper's Figure 2 shows the same comparison fig. 2.
| Method | φ=-1 | φ=-0.75 | φ=-0.5 | φ=-0.25 | φ=0 | φ=0.25 | φ=0.5 | φ=0.75 | φ=1 |
|---|---|---|---|---|---|---|---|---|---|
| GPRGNN | 97.19 ± 0.16 | 95.54 ± 0.15 | 81.54 ± 0.73 | 60.65 ± 0.31 | 62.16 ± 0.23 | 68.83 ± 0.28 | 89.31 ± 0.16 | 96.98 ± 0.08 | 96.71 ± 0.13 |
| GPRGNN(random) | 88.39 ± 3.31 | 88.54 ± 3.01 | 66.91 ± 2.93 | 56.35 ± 0.98 | 58.09 ± 0.71 | 64.01 ± 1.39 | 81.93 ± 1.68 | 94.59 ± 0.29 | 93.69 ± 1.04 |
| APPNP | 49.57 ± 0.11 | 52.45 ± 0.27 | 56.32 ± 0.40 | 59.55 ± 0.48 | 61.21 ± 0.23 | 68.41 ± 0.30 | 85.66 ± 0.22 | 94.37 ± 0.09 | 90.02 ± 0.16 |
| MLP | 49.88 ± 0.10 | 53.40 ± 0.34 | 57.14 ± 0.41 | 60.55 ± 0.41 | 62.15 ± 0.33 | 61.26 ± 0.21 | 57.91 ± 0.35 | 53.36 ± 0.32 | 49.92 ± 0.11 |
| SGC | 54.41 ± 0.37 | 59.74 ± 0.29 | 55.57 ± 0.33 | 51.84 ± 0.23 | 53.95 ± 0.28 | 65.65 ± 0.27 | 85.51 ± 0.20 | 93.99 ± 0.10 | 88.50 ± 0.18 |
| GCN | 55.24 ± 0.35 | 61.04 ± 0.39 | 56.40 ± 0.39 | 52.23 ± 0.24 | 54.43 ± 0.32 | 67.23 ± 0.29 | 84.56 ± 0.20 | 90.19 ± 0.14 | 78.67 ± 0.19 |
| GAT | 53.97 ± 0.32 | 57.18 ± 0.45 | 53.39 ± 0.34 | 51.23 ± 0.19 | 53.26 ± 0.27 | 64.45 ± 0.36 | 81.94 ± 0.34 | 88.45 ± 0.26 | 78.06 ± 0.30 |
| SAGE | 62.30 ± 0.50 | 75.10 ± 0.50 | 72.84 ± 0.44 | 63.88 ± 0.37 | 58.62 ± 0.30 | 63.55 ± 0.47 | 73.50 ± 0.50 | 75.26 ± 0.52 | 62.61 ± 0.44 |
| JKNet | 51.70 ± 0.39 | 55.83 ± 0.75 | 52.67 ± 0.51 | 50.27 ± 0.15 | 52.02 ± 0.35 | 65.67 ± 0.44 | 86.35 ± 0.19 | 95.13 ± 0.09 | 90.32 ± 0.17 |
| GCN-Cheby | 61.44 ± 0.51 | 73.91 ± 0.75 | 71.96 ± 0.60 | 63.96 ± 0.43 | 59.70 ± 0.34 | 64.00 ± 0.38 | 72.34 ± 0.63 | 73.56 ± 0.65 | 60.88 ± 0.58 |
Synthetic cSBM, dense split: mean accuracy (%) ± 95% CI tab. 6.
| Method | φ=-1 | φ=-0.75 | φ=-0.5 | φ=-0.25 | φ=0 | φ=0.25 | φ=0.5 | φ=0.75 | φ=1 |
|---|---|---|---|---|---|---|---|---|---|
| GPRGNN | 98.83 ± 0.06 | 98.19 ± 0.08 | 94.23 ± 0.14 | 86.06 ± 0.20 | 82.22 ± 0.20 | 86.48 ± 0.20 | 94.34 ± 0.13 | 98.46 ± 0.08 | 98.84 ± 0.06 |
| GPRGNN(random) | 98.75 ± 0.05 | 98.08 ± 0.08 | 94.22 ± 0.14 | 86.06 ± 0.20 | 81.57 ± 0.23 | 86.36 ± 0.20 | 94.09 ± 0.14 | 98.38 ± 0.08 | 98.77 ± 0.07 |
| APPNP | 48.94 ± 0.29 | 63.87 ± 0.29 | 73.30 ± 0.26 | 79.30 ± 0.20 | 82.41 ± 0.23 | 86.47 ± 0.18 | 94.20 ± 0.14 | 97.96 ± 0.10 | 98.53 ± 0.08 |
| MLP | 49.79 ± 0.29 | 66.69 ± 0.27 | 75.36 ± 0.26 | 80.30 ± 0.24 | 82.19 ± 0.24 | 80.88 ± 0.22 | 76.07 ± 0.24 | 66.61 ± 0.25 | 49.65 ± 0.29 |
| SGC | 78.95 ± 0.23 | 81.79 ± 0.24 | 75.15 ± 0.25 | 59.40 ± 0.28 | 63.75 ± 0.26 | 80.81 ± 0.22 | 93.04 ± 0.15 | 98.05 ± 0.08 | 97.80 ± 0.09 |
| GCN | 78.50 ± 0.28 | 83.68 ± 0.22 | 75.98 ± 0.25 | 59.98 ± 0.25 | 64.09 ± 0.26 | 81.89 ± 0.19 | 93.91 ± 0.12 | 97.78 ± 0.08 | 96.29 ± 0.11 |
| GAT | 82.39 ± 0.41 | 80.37 ± 0.22 | 71.01 ± 0.26 | 57.68 ± 0.29 | 62.95 ± 0.28 | 80.61 ± 0.24 | 93.26 ± 0.14 | 97.99 ± 0.08 | 98.40 ± 0.09 |
| SAGE | 91.33 ± 0.23 | 95.72 ± 0.12 | 93.23 ± 0.17 | 84.52 ± 0.20 | 78.99 ± 0.24 | 84.87 ± 0.20 | 92.90 ± 0.15 | 95.75 ± 0.11 | 91.19 ± 0.24 |
| JKNet | 96.11 ± 0.37 | 95.33 ± 0.25 | 87.98 ± 0.56 | 59.61 ± 0.49 | 63.28 ± 0.10 | 80.23 ± 0.36 | 93.28 ± 0.15 | 98.33 ± 0.07 | 98.22 ± 0.07 |
| GCN-Cheby | 90.94 ± 0.16 | 94.82 ± 0.13 | 91.83 ± 0.17 | 85.18 ± 0.21 | 80.80 ± 0.25 | 85.28 ± 0.21 | 92.70 ± 0.16 | 95.06 ± 0.13 | 90.34 ± 0.18 |
Oversmoothing test: GPR weights initialised at δ_Kk, dense cSBM at φ = -1 (mean accuracy at epoch 0 and at the final epoch) tab. 8 app. A.10.
| Dataset | Accuracy at epoch 0 (%) | Accuracy at final epoch (%) | Over-smoothing ratio (%) |
|---|---|---|---|
| Cora | 12.75 | 88.25 | 84 |
| Computers | 9.41 | 85.93 | 89 |
| Squirrel | 19.87 | 52.06 | 97 |
| Texas | 21.05 | 90.05 | 100 |
The text gives a cSBM run for φ = -1 with dense split: 96 of 100 runs predict one label for all nodes at epoch 0, and the final accuracy is 98.79% against 50.07% at epoch 0 §5.
Efficiency, average time per epoch and total time, selected datasets tab. 3. The table and the appendix tables disagree in several cells (see Pitfalls), so use these as rough orders of magnitude only.
| Method | Cora | Pubmed | Computers | Chameleon | Actor | Squirrel | Texas |
|---|---|---|---|---|---|---|---|
| GPRGNN | 17.62ms / 3.74s | 20.19ms / 5.53s | 39.93ms / 11.40s | 16.74ms / 3.40s | 19.31ms / 4.49s | 25.28ms / 5.12s | 17.56ms / 3.55s |
| APPNP | 17.16ms / 4.00s | 18.47ms / 6.29s | 39.59ms / 20.00s | 17.01ms / 3.44s | 16.32ms / 4.04s | 22.93ms / 4.63s | 15.96ms / 3.24s |
| MLP | 4.14ms / 0.92s | 5.43ms / 2.86s | 5.33ms / 2.77s | 3.41ms / 0.69s | 4.84ms / 0.98s | 5.19ms / 1.05s | 3.81ms / 1.04s |
| SGC | 3.31ms / 3.31s | 3.81ms / 3.81s | 4.36ms / 4.36s | 3.13ms / 3.13s | 3.98ms / 1.00s | 4.79ms / 4.79s | 2.86ms / 2.09s |
| GCN | 9.25ms / 1.97s | 14.11ms / 4.17s | 32.45ms / 16.29s | 13.83ms / 2.79s | 12.39ms / 2.50s | 27.11ms / 5.56s | 10.22ms / 2.06s |
| GAT | 14.78ms / 3.42s | 21.52ms / 6.70s | 61.45ms / 24.28s | 16.63ms / 3.63s | 18.91ms / 3.86s | 47.46ms / 10.05s | 15.50ms / 3.13s |
| SAGE | 12.06ms / 2.44s | 28.82ms / 6.32s | 171.36ms / 71.94s | 64.43ms / 13.02s | 27.95ms / 5.65s | 343.47ms / 69.38s | 6.08ms / 1.28s |
| JKNet | 18.97ms / 4.41s | 24.48ms / 6.61s | 35.02ms / 14.96s | 20.03ms / 5.15s | 23.52ms / 4.75s | 29.89ms / 6.67s | 19.67ms / 4.01s |
| GCN-cheby | 22.96ms / 4.75s | 45.76ms / 12.02s | 218.82ms / 96.58s | 89.41ms / 18.06s | 43.94ms / 8.88s | 440.55ms / 88.99s | 12.34ms / 3.08s |
Efficiency, homophilic datasets tab. 9:
| Method | Cora | Citeseer | Pubmed | Computers | Photo |
|---|---|---|---|---|---|
| GPRGNN | 17.62ms / 3.74s | 19.28ms / 3.89s | 20.19ms / 5.53s | 39.93ms / 11.40s | 21.61ms / 6.18s |
| APPNP | 17.16ms / 4.00s | 15.97ms / 3.26s | 18.47ms / 6.29s | 39.59ms / 20.00s | 20.10ms / 10.93s |
| MLP | 4.14ms / 0.92s | 5.30ms / 1.13s | 5.43ms / 2.86s | 5.33ms / 2.77s | 4.63ms / 2.72s |
| SGC | 3.31ms / 3.31s | 11.45ms / 2.31s | 3.81ms / 3.81s | 4.36ms / 4.36s | 19.12ms / 8.75s |
| GCN | 9.25ms / 1.97s | 17.46ms / 3.53s | 14.11ms / 4.17s | 32.45ms / 16.29s | 32.56ms / 11.33s |
| GAT | 14.78ms / 3.42s | 19.94ms / 4.47s | 21.52ms / 6.70s | 61.45ms / 24.28s | 24.57ms / 11.61s |
| SAGE | 12.06ms / 2.44s | 41.40ms / 8.36s | 28.82ms / 6.32s | 171.36ms / 71.94s | 108.88ms / 42.18s |
| JKNet | 18.97ms / 4.41s | 3.99ms / 3.99s | 24.48ms / 6.61s | 35.02ms / 14.96s | 3.66ms / 3.66s |
| GCN-cheby | 22.96ms / 4.75s | 23.16ms / 4.68s | 45.76ms / 12.02s | 218.82ms / 96.58s | 82.38ms / 30.48s |
Efficiency, heterophilic datasets tab. 10:
| Method | Chameleon | Squirrel | Actor | Texas | Cornell |
|---|---|---|---|---|---|
| GPRGNN | 16.74ms / 3.40s | 25.28ms / 5.12s | 19.31ms / 4.49s | 17.56ms / 3.55s | 18.42ms / 3.72s |
| APPNP | 17.01ms / 3.44s | 22.93ms / 4.63s | 16.32ms / 4.04s | 15.96ms / 3.24s | 14.66ms / 3.09s |
| MLP | 3.41ms / 0.69s | 5.19ms / 1.05s | 4.84ms / 0.98s | 3.81ms / 1.04s | 3.46ms / 0.89s |
| SGC | 13.83ms / 2.79s | 27.11ms / 5.56s | 12.39ms / 2.50s | 10.22ms / 2.06s | 10.38ms / 2.10s |
| GCN | 16.63ms / 3.63s | 47.46ms / 10.05s | 18.91ms / 3.86s | 15.50ms / 3.13s | 13.67ms / 2.76s |
| GAT | 20.03ms / 5.15s | 29.89ms / 6.67s | 23.52ms / 4.75s | 19.67ms / 4.01s | 19.35ms / 3.91s |
| SAGE | 89.41ms / 18.06s | 440.55ms / 88.99s | 43.94ms / 8.88s | 12.34ms / 3.08s | 12.15ms / 2.69s |
| JKNet | 3.13ms / 3.13s | 4.79ms / 4.79s | 3.98ms / 1.00s | 2.86ms / 2.09s | 2.81ms / 1.18s |
| GCN-cheby | 64.43ms / 13.02s | 343.47ms / 69.38s | 27.95ms / 5.65s | 6.08ms / 1.28s | 6.05ms / 1.44s |
Other reported results §5 fig. 3 fig. 4:
- The learned weights are positive on the homophilic datasets PubMed and Photo and include negative values on the heterophilic Actor and Squirrel §5 fig. 4.
- On cSBM with random initialisation, the weights decrease at φ = 0.25, increase at φ = 0.75, and shrink in size at φ = -0.25. For heterophilic graphs in general, the paper reports a zig-zag shape §5 fig. 3.
- The learned γ_0 has the largest magnitude on Actor, which the paper reads as most of the information lying in the node features §5 fig. 4.
Paper vs code
The official repository is jianhao2016/GPRGNN at commit
4e0a7ee5435058b70eaec3c23c55fb96dc37f2d5. The paper's footnote links it
directly, its README names the ICLR 2021 paper as the source, and the owner
name matches author Jianhao Peng README.md §1. It is used as the
official code on that basis. The repository has no LICENSE file, so its
code is not licensed for reuse. This card does not quote any code, and it
cites the code only for design details.
The following are discrepancies or details that the paper does not state. Each item cites both sides where both exist.
- Early stopping. The appendix says the stopping check starts after half of
the maximum epoch count, which is 500 for 1000 epochs app. A.9. The code
starts the check after epoch 200 train_model.py (default
early_stopping= 200 train_model.py). The 200-epoch averaging window is the same in both. - Weight decay on γ. The paper says weight decay is searched "for all models" §5. The code gives the GPR weights a weight decay of 0 and applies the searched value only to the two MLP layers train_model.py.
- Random initialisation. The paper says random initialisation uses PyTorch's default §5. The code draws uniformly from ±sqrt(3/(K+1)) and divides by the L1 norm GNN_models.py GNN_models.py.
- α = 0 and α = 1. The paper lists α in {0.1, 0.2, 0.5, 0.9} plus the two one-hot initialisations §5. In the code's PPR path, α = 0 gives the one-hot weights at step K, and α = 1 gives the one-hot weights at step 0 GNN_models.py. The reproduction script uses α = 0.0 for Squirrel and α = 1.0 for Chameleon and Texas Reproduce_GPRGNN.sh Reproduce_GPRGNN.sh Reproduce_GPRGNN.sh. This reading is ours, derived from the formula.
- Initialisation used in Table 2. The paper does not say which initialisation gives each Table 2 entry. The reproduction script keeps the code's default PPR path and sets α per dataset Reproduce_GPRGNN.sh train_model.py.
- Confidence intervals. The paper reports 95% intervals tab. 2. The code prints the mean and the standard deviation only train_model.py. The repository does not show the conversion.
- Model selection. The paper does not say which epoch's accuracy is reported. The code reports the test accuracy at the epoch with the lowest validation loss train_model.py.
- Optimiser schedule. The over-smoothing theorem assumes SGD with a decreasing learning rate §4 app. A.4. The experiments use Adam with a constant learning rate; the repository has no scheduler train_model.py.
- Propagated tensor. The paper's Eq. 1 writes H^(0) as "hidden state features" eq. 1. The code propagates the C-column output of the second linear layer, so the propagated tensor has one column per class GNN_models.py.
- Dropout. The paper says the GPR dropout is searched over {0, 0.5, 0.7} app. A.9. The code applies it to the propagated input, after the second linear layer and before the first propagation step GNN_models.py.
- GAT width. The paper says the first GAT layer has 8 heads of 8 units
app. A.9. The code's first layer uses
args.hiddenper head, whose default is 64 GNN_models.py train_model.py. Run with--hidden 8to match the paper. - JK-Net. The code adds one propagation step with α = 0 before the output layer GNN_models.py GNN_models.py. The appendix does not mention it app. A.9.
- Baselines not in the repository. The
--netchoices are GCN, GAT, APPNP, ChebNet, JKNet and GPRGNN train_model.py. SGC, SAGE and MLP are not implemented there. The paper says the baselines use the PyTorch Geometric implementations §5 app. A.9, and Geom-GCN uses the authors' own code §5. - Average degree. The paper gives n, f and ε but not d app. A.5. The code generates the graphs with average degree 5 create_cSBM_dataset.sh.
- Heterophilic graph preparation. The paper says the directed heterophilic graphs were made undirected app. A.9. The WebKB loader symmetrises its edges dataset_utils.py. For Chameleon, Squirrel and Actor the code takes the edges from PyTorch Geometric without an explicit symmetrisation step dataset_utils.py. We did not run the loader to check the result.
- Dataset names. The code calls Actor "film" dataset_utils.py.
- Learning rate default. The code default is 0.002 train_model.py. Table 2's per-dataset values are 0.01 or 0.05, so the default is not the one used for the reported numbers.
Pitfalls
- Learned weights can be negative. The paper's low-pass result needs non-negative weights that sum to one §4. Nothing in the paper constrains the learned weights, so check their signs and magnitudes on your own graph before you read the filter as low-pass or high-pass.
- Propagate the class-logit tensor. Eq. 1 reads like propagation of a hidden representation. The code propagates the output of the second linear layer, which has one column per class GNN_models.py. Implement the propagation on the logits, unless you have a reason to change it.
- Self-loops. The paper defines à with self-loops §2. The code's normalisation adds them by default GNN_models.py. Using the adjacency without self-loops changes the operator.
- Early-stopping rule. The paper and code disagree on when the rule starts (see Paper vs code). Pick one and state it when you report numbers.
- Initialisation affects the result. The paper says random initialisation costs little on dense splits and more on sparse splits §5. On the sparse cSBM split, GPRGNN(random) trails GPRGNN by 8.8 points at φ = -1 and by 14.6 points at φ = -0.5 (88.39 against 97.19, and 66.91 against 81.54) tab. 5. The gaps are our arithmetic from the table.
- Sparse split, weak signal. On the sparse cSBM split at φ = -0.25, GPR-GNN reaches 60.65%, below SAGE (63.88%) and GCN-Cheby (63.96%) tab. 5. The claim of wins holds for the other settings.
- Baseline count. The paper says it compares against "6 baseline models" and then names nine §5.
- Theorem assumptions. The over-smoothing and filter results assume a connected graph, a training set with nodes from every class, and a large enough k' §4 app. A.4. The paper does not check whether the benchmark graphs satisfy these, and the claims are asymptotic.
- Homophily measure. The paper says H(G) cannot separate graphs whose topology is informative from graphs whose topology is not, using a two-graph example app. A.2 fig. 6. Do not select a method by H(G) alone.
- Cost. Each forward pass runs K sparse propagations and keeps K+1 propagated tensors for backpropagation GNN_models.py. The paper's efficiency tables show GPR-GNN close to APPNP per epoch tab. 3. This memory point is our reading of the code.
- Timing tables disagree. Table 3 and Tables 9–10 differ in several cells. For example, GCN on Chameleon is 13.83 ms per epoch in Table 3 and 16.63 ms in Table 10. The GCN-Cheby row of Table 3 matches the SAGE row of Table 10 on Chameleon and Squirrel (89.41 ms and 440.55 ms). Treat the timings as rough.
- Figure 4 caption. The caption refers to panels (e)-(f) fig. 4, but the text refers to panels (e)-(h) §5. The figure shows four epoch snapshots.
- Split effects. The homophilic results use sparse splits and the heterophilic results use dense splits §5 tab. 2. Compare numbers within a dataset only.
- Geom-GCN numbers. The paper says Geom-GCN uses "the best variants in the original paper" §5. It is not stated whether the Table 2 entries were copied or re-run. Two cells are NA tab. 2.
- Over-smoothing test. The authors' test at δ_Kk tab. 8 reports how often the model predicts one label for every node at epoch 0. The result is for the stated initialisation and splits only.
- Code licence. The repository has no LICENSE file. Reading the code to check the design is fine; copying it into a commercial product is not covered.
Lineage
- Builds on: Generalized PageRank methods for seed-expansion graph clustering §3, with the learned-weight view taken from Kloumann et al. and Li et al. (2019). The paper cites Personalized PageRank as a special case §3.
- Uses: the symmetric normalised adjacency Ã_sym §2, the same operator the GCN layer applies §3.
- Compared against: MLP, GCN, GAT, JK-Net, GCN-Cheby, APPNP, SGC, SAGE and Geom-GCN §5 tab. 2. APPNP and SGC are special cases of the model §3.
- Benchmark sources: the cSBM generator of Deshpande et al. app. A.5, and the heterophilic benchmarks and the H(G) measure of Pei et al. (Geom-GCN) §3 §5.
- Superseded by: none recorded in this wiki.
Source and license
Adapted from “Adaptive Universal Generalized PageRank Graph Neural Network” by Eli Chien, Jianhao Peng, Pan Li, Olgica Milenkovic (arXiv:2006.07988), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/jianhao2016/GPRGNN at commit 4e0a7ee54350 (none (no LICENSE file in repository)). Any quoted code is shown under that license.