wikillm

Concept · 2 papers · updated 2026-10-31

Dynamic graph embedding

Dynamic graph embedding gives each node a vector that follows a graph changing over time, as snapshots or timed events. Covered: temporal random walks, warm-started autoencoders, temporal point processes and dynamic GNNs, from one survey taxonomy plus a general graph-learning survey. The trade-off: neither survey runs experiments, so no method is compared on numbers here.

graph-representation-learningdynamic-graphsnode-embeddingtemporal-graphssurvey

Markdown4 min read

AI-compiled overview, updated 2026-10-31, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

Overview

A dynamic graph embedding maps the nodes of a graph that changes over time to vectors, so that similar nodes stay close as the graph evolves 2204.01855 §2.1 §3.2. The input comes in one of two forms. A discrete-time graph is a sequence of snapshots, one graph per time step. A continuous-time graph is a stream of timed events, such as an edge that appears at a given moment 2204.01855 §3.2.

The two forms are not interchangeable. Converting a stream into snapshots, or the reverse, changes what a model can see 2204.01855 §3.2. A method should therefore be picked for the form the data already has.

Two surveys are the sources for this page. The dynamic-graph survey splits the field into traditional (non-GNN) methods and GNN-based methods, and each family into static and dynamic settings 2204.01855 §1. The variants below follow that split. The general graph-learning survey covers the topic only in passing, under random walks and spatial-temporal networks [arxiv:2105.00696 §2.3.4] §2.4.5. Neither survey gives experiments, so the variants are not ranked against each other here.

Variants

Aggregation over snapshots

Collapse the snapshots into one static graph, for example by summing or weighting their adjacency matrices, and embed that graph with a static method. Alternatively, embed each snapshot separately and combine the vectors over time, for example with a time-series model. Factorising a node-by-node-by-time tensor also belongs here 2204.01855 §3.2.1. The time order is lost in the first form and only partly kept in the second.

Temporal random walks

Walks are generated over the timed edges. CTDNE only follows edges whose timestamps do not decrease along the walk. EvoNRL updates its walks when edges change. DynNode2vec initialises node2vec from the snapshots [arxiv:2204.01855 §3.2.2] eq. 9. The walks are then fed to a skip-gram model, as in static random-walk embedding 2204.01855 §3.1.2. The general graph-learning survey also files time-varying network embedding under random-walk methods, but names no specific method there 2105.00696 §2.3.4.

Warm-started autoencoders (non-GNN deep learning)

Each snapshot's autoencoder starts from the weights of the previous snapshot, which the survey gives as the DynGEM approach 2204.01855 §3.2.3. Dyn-VGAE adds a penalty that keeps the latent variables of consecutive snapshots close 2204.01855 §3.2.3 eq. 10. dyngraph2vec instead encodes a window of past adjacency matrices 2204.01855 §3.2.3.

Temporal point processes

These model when new links form. HTNE uses a Hawkes process over a node's history of neighbours 2204.01855 §3.2.4 eq. 11 eq. 12. DyRep separates two kinds of event, communication and association, with two processes 2204.01855 §3.2.4. MTNE adds motif-based neighbourhoods 2204.01855 §3.2.4.

Triad closure (DynamicTriad)

DynamicTriad models how open triads close over time. It adds a homophily term and a temporal-smoothness term to its objective 2204.01855 §3.2.5.

Dynamic and spatio-temporal GNNs

Graph neural networks extended to time. Spatio-temporal models combine graph convolution with recurrent or temporal-convolution layers. They are applied to traffic, epidemic and sleep-stage forecasting 2204.01855 §4.3. Dynamic GNNs for event streams include TGAT, which adds a learned time encoding to graph attention, CAW-N, which scores links with causal anonymous walks, and MTSN, which combines motif encoding with a temporal shift [arxiv:2204.01855 §4.4]. Streaming GNNs train on changes as they arrive 2204.01855 §4.4. The general graph-learning survey lists spatial-temporal networks as one of its deep-learning families 2105.00696 §2.4.5. The general GNN basics this rests on are in 2204.01855 §4.1 and graph-neural-network.

When to use which

Pick by the form of the input and the output you need. The survey does not measure any of these trade-offs, so the rows state what each family can and cannot represent.

SituationUseWhy
Edges arrive as timestamped eventsTemporal random walks or temporal point processesThey use the exact event times, not a per-step snapshot 2204.01855 §3.2.2 §3.2.4
The graph is delivered as snapshotsWarm-started autoencoders or snapshot aggregationThe snapshot order is already the model's time axis 2204.01855 §3.2.1 §3.2.3
Time order does not matter, only a static summary is neededAggregation over snapshotsIt reduces the problem to a static embedding 2204.01855 §3.2.1
Nodes carry features and the model must be trained end to endDynamic GNNsGNN layers take node features and the adjacency structure 2204.01855 §4.1.1 §4.4
Forecasting a quantity on each node over time (traffic, epidemics)Spatio-temporal GNNsThe survey names these applications 2204.01855 §4.3
Large graphs where neighbour expansion is costlyCheck the scalability fixes for GNNs firstThe survey lists sampling and pruning as fixes for neighbour explosion 2204.01855 §4.6.3

Implementation sketch

Two common patterns, both from the survey's taxonomy. The first is for timed events, the second for snapshots. The survey does not give the sampling rule for each walk method, so the choice step is marked open.

Pseudocode
# Temporal random walk over timed edges  [§3.2.2]
# Input:  edges_by_node[u] = list of (v, t) sorted by t; walk length L
# Output: a walk whose edge times never decrease

def temporal_walk(start, edges_by_node, L):
    # 1. Start at the node of interest with no time bound yet  [§3.2.2]
    walk, t_last = [start], -inf
    for _ in range(L - 1):
        # 2. Keep only edges not earlier than the last one used  [§3.2.2]
        options = [(v, t) for (v, t) in edges_by_node[walk[-1]]
                   if t >= t_last]
        if not options:
            break
        # 3. Choose the next edge; the rule differs per method  [§3.2.2]
        v, t_last = choose(options)
        walk.append(v)
    return walk
Pseudocode
# Warm-started embedding over snapshots  [§3.2.3]
# Input:  snapshots A_1..A_T (adjacency matrices); embedding dim d
# Output: one embedding matrix per snapshot

def embed_snapshots(snapshots, d):
    # 1. No model exists before the first snapshot  [§3.2.3]
    model, outputs = None, []
    for A_t in snapshots:
        # 2. Start from the previous snapshot's weights  [§3.2.3]
        model = fit_autoencoder(A_t, d, init=model)
        outputs.append(model.encode(A_t))
    return outputs

Contradictions

The two surveys do not disagree on any method. Within the general graph-learning survey, the open-issues section says dynamic graph learning has rarely been studied, while its random-walk section reviews time-varying network embedding. The card itself calls the wording loose 2105.00696 §4 §2.3.4. Within the dynamic-graph survey, the notation for the HTNE base rate and influence is unclear, and the factorization loss uses absolute rather than squared differences 2204.01855 §3.1.1 §3.2.4. Check the original method papers before implementing either.

Papers

Source and license

Compiled from the papers listed on this page, all published under CC BY, CC BY-SA or CC0, with citations. See each paper's page for its authors and license.