The normalisation is the design. A plain adjacency multiply lets
high-degree nodes dominate and makes features explode over layers;
D^-1/2 A D^-1/2 bounds the spectrum at one. The self-loop stops
a node forgetting itself at every step.
Usage
Sgtgrn(A_hat, X, W, activation = "relu")
Arguments
- A_hat
Adjacency; renormalised here, so pass the raw A.
- X
Node features.
- W
Layer weights.
- activation
"relu" or "none".
Value
List with X_next, estimate, A_norm,
n, f_out.
Details
Formula: X^(k+1) = sigma(A_hat X^(k) W^(k)),
A_hat = Dt^-1/2 (A + I) Dt^-1/2.
References
Kipf, T. N. & Welling, M. (2017). ICLR 2017, equation (2).
Examples
A <- matrix(c(0, 1, 0, 1, 0, 1, 0, 1, 0), 3)
Sgtgrn(A, X = diag(3), W = matrix(1, 3, 2))$X_next
#> [,1] [,2]
#> [1,] 0.9082483 0.9082483
#> [2,] 1.1498299 1.1498299
#> [3,] 0.9082483 0.9082483