wikillm

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.

  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.
  2. 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.
  3. 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.
  4. 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.
  5. Joint training. γ_k and θ are learned together, end to end, by gradient descent §3 fig. 1. The paper uses Adam app. A.9.
  6. 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.
  7. Special cases. APPNP is the case γ_k = α(1-α)^k with γ_K = (1-α)^K. SGC is the case γ_k = δ_Kk §3.
  8. 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:

Pseudocode
# 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:

Pseudocode
# 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_acc

Hyperparameters

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.

NameValueWhereNotes
Propagation steps K10§5 train_model.pyPaper: "usually K ≤ 20" §5.
Hidden units of f_θ64 (2 layers)§5 app. A.9 train_model.pySecond layer outputs the C class logits in the code.
Dropout in f_θ0.5app. A.9 train_model.pyPaper: fixed as in APPNP.
Dropout on the propagated input (dprate)searched over {0, 0.5, 0.7}app. A.9 train_model.pyPaper does not say where it is applied; code applies it to the logits.
Learning ratesearched over {0.002, 0.01, 0.05}§5Per-dataset choices below. Code default is 0.002 train_model.py.
Weight decaysearched over {0.0, 0.0005}§5Code applies it to the MLP only, not to γ train_model.py.
PPR α (PPR initialisation)searched over {0.1, 0.2, 0.5, 0.9}§5Code also accepts α = 0 and α = 1 (see Paper vs code).
Initialisation of γPPR α; δ_0k; δ_Kk; random§5Paper names the random one "GPR-GNN(rand)".
Max epochs1000app. A.9 train_model.py
Early stopping200-epoch mean ruleapp. A.9 train_model.pySee Paper vs code.
OptimizerAdam, all modelsapp. A.9Code: no learning-rate scheduler train_model.py.
Repetitions100 random splits and initialisations§5 Reproduce_GPRGNN.sh
Split, homophilic datasets2.5% train / 2.5% val / 95% test§5 app. A.9Code rounds the training count per class train_model.py.
Split, heterophilic datasets60% train / 20% val / 20% test§5 app. A.9
Metricaccuracy (micro-F1)§5
Baseline sizesGCN: 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 unitsapp. A.9Code differs for GAT and JK-Net (see Paper vs code).
cSBM sizen = 5000, f = 2000, ξ = 2.5, ε = 3.25app. A.5Average degree d is not stated in the paper. Code uses 5 create_cSBM_dataset.sh.
cSBM classes and splits2 equal classes; sparse and dense splitsapp. 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.

DatasetSplitLearning rateαWeight decayGPR dropoutSource
Corasparse0.010.1defaultdefaultReproduce_GPRGNN.sh
Citeseersparse0.010.1defaultdefaultReproduce_GPRGNN.sh
PubMedsparse0.050.2defaultdefaultReproduce_GPRGNN.sh
Computerssparse0.050.50.0defaultReproduce_GPRGNN.sh
Photosparse0.010.50.0defaultReproduce_GPRGNN.sh
Chameleondense0.051.00.00.7Reproduce_GPRGNN.sh
Actor (repo name: film)dense0.010.90.0defaultReproduce_GPRGNN.sh
Squirreldense0.050.00.00.7Reproduce_GPRGNN.sh
Texasdense0.051.0defaultdefaultReproduce_GPRGNN.sh
Cornelldense0.050.9defaultdefaultReproduce_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:

CoraCiteseerPubMedComputersPhotoChameleonSquirrelActorTexasCornell
Classes76510855555
Features143337035007677452325208993217031703
Nodes2708332719717137527650227752017600183183
Edges52784552443242458611190813137119835326659279277
H(G)0.8250.7180.7920.8020.8490.2470.2170.2150.0570.301

Main results, mean accuracy (%) ± 95% CI, real benchmarks tab. 2:

MethodCoraCiteseerPubMedComputersPhotoChameleonActorSquirrelTexasCornell
GPRGNN79.51 ± 0.3667.63 ± 0.3885.07 ± 0.0982.90 ± 0.3791.93 ± 0.2667.48 ± 0.4039.30 ± 0.2749.93 ± 0.5392.92 ± 0.6191.36 ± 0.70
APPNP79.41 ± 0.3868.59 ± 0.3085.02 ± 0.0981.99 ± 0.2691.11 ± 0.2651.91 ± 0.5638.86 ± 0.2434.77 ± 0.3491.18 ± 0.7091.80 ± 0.63
MLP50.34 ± 0.4852.88 ± 0.5180.57 ± 0.1270.48 ± 0.2878.69 ± 0.3046.72 ± 0.4638.58 ± 0.2531.28 ± 0.2792.26 ± 0.7191.36 ± 0.70
SGC70.81 ± 0.6758.98 ± 0.4782.09 ± 0.1176.27 ± 0.3683.80 ± 0.4663.02 ± 0.4329.39 ± 0.2043.14 ± 0.2855.18 ± 1.1747.80 ± 1.50
GCN75.21 ± 0.3867.30 ± 0.3584.27 ± 0.0182.52 ± 0.3290.54 ± 0.2160.96 ± 0.7830.59 ± 0.2345.66 ± 0.3975.16 ± 0.9666.72 ± 1.37
GAT76.70 ± 0.4267.20 ± 0.4683.28 ± 0.1281.95 ± 0.3890.09 ± 0.2763.90 ± 0.4635.98 ± 0.2342.72 ± 0.3378.87 ± 0.8676.00 ± 1.01
SAGE70.89 ± 0.5461.52 ± 0.4481.30 ± 0.1083.11 ± 0.2390.51 ± 0.2562.15 ± 0.4236.37 ± 0.2141.26 ± 0.2679.03 ± 1.2071.41 ± 1.24
JKNet73.22 ± 0.6460.85 ± 0.7682.91 ± 0.1177.80 ± 0.9787.70 ± 0.7062.92 ± 0.4933.41 ± 0.2544.72 ± 0.4875.53 ± 1.1666.73 ± 1.73
GCN-Cheby71.39 ± 0.5165.67 ± 0.3883.83 ± 0.1282.41 ± 0.2890.09 ± 0.2859.96 ± 0.5138.02 ± 0.2340.67 ± 0.3186.08 ± 0.9685.33 ± 1.04
GeomGCN20.37 ± 1.1320.30 ± 0.9058.20 ± 1.23NANA61.06 ± 0.4931.81 ± 0.2438.28 ± 0.2758.56 ± 1.7755.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:

MethodCoraCiteseerPubMed
GPRGNN88.65 ± 0.2880.01 ± 0.2889.18 ± 0.15
APPNP88.1 ± 0.2380.5 ± 0.2689.15 ± 0.13
MLP76.44 ± 0.3076.25 ± 0.2886.43 ± 0.13
SGC86.58 ± 0.2676.23 ± 0.2983.52 ± 0.10
GCN86.87 ± 0.2579.28 ± 0.2586.97 ± 0.12
GAT87.52 ± 0.2480.56 ± 0.3186.64 ± 0.11
SAGE86.58 ± 0.2678.24 ± 0.3086.85 ± 0.11
JKNet86.97 ± 0.2777.69 ± 0.3587.38 ± 0.13
GCN-Cheby86.46 ± 0.2678.66 ± 0.2688.2 ± 0.09
GeomGCN85.4 ± 0.2676.42 ± 0.3788.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
GPRGNN97.19 ± 0.1695.54 ± 0.1581.54 ± 0.7360.65 ± 0.3162.16 ± 0.2368.83 ± 0.2889.31 ± 0.1696.98 ± 0.0896.71 ± 0.13
GPRGNN(random)88.39 ± 3.3188.54 ± 3.0166.91 ± 2.9356.35 ± 0.9858.09 ± 0.7164.01 ± 1.3981.93 ± 1.6894.59 ± 0.2993.69 ± 1.04
APPNP49.57 ± 0.1152.45 ± 0.2756.32 ± 0.4059.55 ± 0.4861.21 ± 0.2368.41 ± 0.3085.66 ± 0.2294.37 ± 0.0990.02 ± 0.16
MLP49.88 ± 0.1053.40 ± 0.3457.14 ± 0.4160.55 ± 0.4162.15 ± 0.3361.26 ± 0.2157.91 ± 0.3553.36 ± 0.3249.92 ± 0.11
SGC54.41 ± 0.3759.74 ± 0.2955.57 ± 0.3351.84 ± 0.2353.95 ± 0.2865.65 ± 0.2785.51 ± 0.2093.99 ± 0.1088.50 ± 0.18
GCN55.24 ± 0.3561.04 ± 0.3956.40 ± 0.3952.23 ± 0.2454.43 ± 0.3267.23 ± 0.2984.56 ± 0.2090.19 ± 0.1478.67 ± 0.19
GAT53.97 ± 0.3257.18 ± 0.4553.39 ± 0.3451.23 ± 0.1953.26 ± 0.2764.45 ± 0.3681.94 ± 0.3488.45 ± 0.2678.06 ± 0.30
SAGE62.30 ± 0.5075.10 ± 0.5072.84 ± 0.4463.88 ± 0.3758.62 ± 0.3063.55 ± 0.4773.50 ± 0.5075.26 ± 0.5262.61 ± 0.44
JKNet51.70 ± 0.3955.83 ± 0.7552.67 ± 0.5150.27 ± 0.1552.02 ± 0.3565.67 ± 0.4486.35 ± 0.1995.13 ± 0.0990.32 ± 0.17
GCN-Cheby61.44 ± 0.5173.91 ± 0.7571.96 ± 0.6063.96 ± 0.4359.70 ± 0.3464.00 ± 0.3872.34 ± 0.6373.56 ± 0.6560.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
GPRGNN98.83 ± 0.0698.19 ± 0.0894.23 ± 0.1486.06 ± 0.2082.22 ± 0.2086.48 ± 0.2094.34 ± 0.1398.46 ± 0.0898.84 ± 0.06
GPRGNN(random)98.75 ± 0.0598.08 ± 0.0894.22 ± 0.1486.06 ± 0.2081.57 ± 0.2386.36 ± 0.2094.09 ± 0.1498.38 ± 0.0898.77 ± 0.07
APPNP48.94 ± 0.2963.87 ± 0.2973.30 ± 0.2679.30 ± 0.2082.41 ± 0.2386.47 ± 0.1894.20 ± 0.1497.96 ± 0.1098.53 ± 0.08
MLP49.79 ± 0.2966.69 ± 0.2775.36 ± 0.2680.30 ± 0.2482.19 ± 0.2480.88 ± 0.2276.07 ± 0.2466.61 ± 0.2549.65 ± 0.29
SGC78.95 ± 0.2381.79 ± 0.2475.15 ± 0.2559.40 ± 0.2863.75 ± 0.2680.81 ± 0.2293.04 ± 0.1598.05 ± 0.0897.80 ± 0.09
GCN78.50 ± 0.2883.68 ± 0.2275.98 ± 0.2559.98 ± 0.2564.09 ± 0.2681.89 ± 0.1993.91 ± 0.1297.78 ± 0.0896.29 ± 0.11
GAT82.39 ± 0.4180.37 ± 0.2271.01 ± 0.2657.68 ± 0.2962.95 ± 0.2880.61 ± 0.2493.26 ± 0.1497.99 ± 0.0898.40 ± 0.09
SAGE91.33 ± 0.2395.72 ± 0.1293.23 ± 0.1784.52 ± 0.2078.99 ± 0.2484.87 ± 0.2092.90 ± 0.1595.75 ± 0.1191.19 ± 0.24
JKNet96.11 ± 0.3795.33 ± 0.2587.98 ± 0.5659.61 ± 0.4963.28 ± 0.1080.23 ± 0.3693.28 ± 0.1598.33 ± 0.0798.22 ± 0.07
GCN-Cheby90.94 ± 0.1694.82 ± 0.1391.83 ± 0.1785.18 ± 0.2180.80 ± 0.2585.28 ± 0.2192.70 ± 0.1695.06 ± 0.1390.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.

DatasetAccuracy at epoch 0 (%)Accuracy at final epoch (%)Over-smoothing ratio (%)
Cora12.7588.2584
Computers9.4185.9389
Squirrel19.8752.0697
Texas21.0590.05100

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.

MethodCoraPubmedComputersChameleonActorSquirrelTexas
GPRGNN17.62ms / 3.74s20.19ms / 5.53s39.93ms / 11.40s16.74ms / 3.40s19.31ms / 4.49s25.28ms / 5.12s17.56ms / 3.55s
APPNP17.16ms / 4.00s18.47ms / 6.29s39.59ms / 20.00s17.01ms / 3.44s16.32ms / 4.04s22.93ms / 4.63s15.96ms / 3.24s
MLP4.14ms / 0.92s5.43ms / 2.86s5.33ms / 2.77s3.41ms / 0.69s4.84ms / 0.98s5.19ms / 1.05s3.81ms / 1.04s
SGC3.31ms / 3.31s3.81ms / 3.81s4.36ms / 4.36s3.13ms / 3.13s3.98ms / 1.00s4.79ms / 4.79s2.86ms / 2.09s
GCN9.25ms / 1.97s14.11ms / 4.17s32.45ms / 16.29s13.83ms / 2.79s12.39ms / 2.50s27.11ms / 5.56s10.22ms / 2.06s
GAT14.78ms / 3.42s21.52ms / 6.70s61.45ms / 24.28s16.63ms / 3.63s18.91ms / 3.86s47.46ms / 10.05s15.50ms / 3.13s
SAGE12.06ms / 2.44s28.82ms / 6.32s171.36ms / 71.94s64.43ms / 13.02s27.95ms / 5.65s343.47ms / 69.38s6.08ms / 1.28s
JKNet18.97ms / 4.41s24.48ms / 6.61s35.02ms / 14.96s20.03ms / 5.15s23.52ms / 4.75s29.89ms / 6.67s19.67ms / 4.01s
GCN-cheby22.96ms / 4.75s45.76ms / 12.02s218.82ms / 96.58s89.41ms / 18.06s43.94ms / 8.88s440.55ms / 88.99s12.34ms / 3.08s

Efficiency, homophilic datasets tab. 9:

MethodCoraCiteseerPubmedComputersPhoto
GPRGNN17.62ms / 3.74s19.28ms / 3.89s20.19ms / 5.53s39.93ms / 11.40s21.61ms / 6.18s
APPNP17.16ms / 4.00s15.97ms / 3.26s18.47ms / 6.29s39.59ms / 20.00s20.10ms / 10.93s
MLP4.14ms / 0.92s5.30ms / 1.13s5.43ms / 2.86s5.33ms / 2.77s4.63ms / 2.72s
SGC3.31ms / 3.31s11.45ms / 2.31s3.81ms / 3.81s4.36ms / 4.36s19.12ms / 8.75s
GCN9.25ms / 1.97s17.46ms / 3.53s14.11ms / 4.17s32.45ms / 16.29s32.56ms / 11.33s
GAT14.78ms / 3.42s19.94ms / 4.47s21.52ms / 6.70s61.45ms / 24.28s24.57ms / 11.61s
SAGE12.06ms / 2.44s41.40ms / 8.36s28.82ms / 6.32s171.36ms / 71.94s108.88ms / 42.18s
JKNet18.97ms / 4.41s3.99ms / 3.99s24.48ms / 6.61s35.02ms / 14.96s3.66ms / 3.66s
GCN-cheby22.96ms / 4.75s23.16ms / 4.68s45.76ms / 12.02s218.82ms / 96.58s82.38ms / 30.48s

Efficiency, heterophilic datasets tab. 10:

MethodChameleonSquirrelActorTexasCornell
GPRGNN16.74ms / 3.40s25.28ms / 5.12s19.31ms / 4.49s17.56ms / 3.55s18.42ms / 3.72s
APPNP17.01ms / 3.44s22.93ms / 4.63s16.32ms / 4.04s15.96ms / 3.24s14.66ms / 3.09s
MLP3.41ms / 0.69s5.19ms / 1.05s4.84ms / 0.98s3.81ms / 1.04s3.46ms / 0.89s
SGC13.83ms / 2.79s27.11ms / 5.56s12.39ms / 2.50s10.22ms / 2.06s10.38ms / 2.10s
GCN16.63ms / 3.63s47.46ms / 10.05s18.91ms / 3.86s15.50ms / 3.13s13.67ms / 2.76s
GAT20.03ms / 5.15s29.89ms / 6.67s23.52ms / 4.75s19.67ms / 4.01s19.35ms / 3.91s
SAGE89.41ms / 18.06s440.55ms / 88.99s43.94ms / 8.88s12.34ms / 3.08s12.15ms / 2.69s
JKNet3.13ms / 3.13s4.79ms / 4.79s3.98ms / 1.00s2.86ms / 2.09s2.81ms / 1.18s
GCN-cheby64.43ms / 13.02s343.47ms / 69.38s27.95ms / 5.65s6.08ms / 1.28s6.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.hidden per head, whose default is 64 GNN_models.py train_model.py. Run with --hidden 8 to 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 --net choices 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.