Demonstrações interativas da aula de GNNs
Quatro visualizações que acompanham os slides: como o receptive field de um nó cresce com o número de camadas de message passing, por que empilhar camadas demais faz todos os embeddings convergirem (oversmoothing), como os coeficientes de atenção α_{vu} de uma GAT reagem ao conteúdo dos embeddings, e o teste de Weisfeiler-Lehman (1-WL) rodando passo a passo, incluindo o par de grafos em que ele falha.
Em uma GNN de K camadas, o embedding h_v depende de todos os nós a até K saltos de v: é o receptive field do nó. Clique em um nó para escolher o centro e mova o slider de camadas para ver até onde a informação chega. Cada cor é uma distância em saltos.
Clique em um nó para torná-lo o centro v; cores = distância em saltos
💡 Este grafo tem diâmetro 5: com K = 4 quase todo nó já enxerga quase o grafo inteiro. É por isso que GCN/GAT típicas usam 2 a 4 camadas, e não 50: depois que o receptive field cobre o grafo, camadas extras só misturam informação repetida, o tema da seção 2.
Um grafo com duas comunidades. Cada nó começa com um atributo 2D que indica sua comunidade (ciano vs laranja, com ruído) e aplicamos k vezes a propagação da GCN, H ← D̃^{−1/2} Ã D̃^{−1/2} H (a conta real, sem pesos treináveis). A cor de cada nó é o seu embedding atual. Mova o slider de profundidade e veja as cores convergirem.
Cor do nó = embedding após k camadas de propagação
Distância média entre pares de embeddings vs profundidade
💡 Com k = 2 as comunidades ainda são separáveis (e a classificação seria fácil); com k = 10 a distância média entre embeddings desaba e os nós ficam indistinguíveis. Esse é o trade-off central: profundidade compra alcance, mas destrói a diversidade dos embeddings. Mitigações nos slides: skip connections, Jumping Knowledge, DropEdge.
O nó v tem três vizinhos. A GAT calcula um score e_u = LeakyReLU(a·[Wh_v ‖ Wh_u]) e normaliza com softmax para obter α_{vu}. Arraste os embeddings Wh_u no plano à direita (ou gire a direção de atenção θ) e veja a espessura das arestas mudar à esquerda. O preset reproduz o exemplo numérico dos slides, α ≈ (0.51, 0.19, 0.31).
Espessura da aresta ∝ α_{vu}: quem fala mais alto na agregação
Plano dos embeddings projetados Wh (arraste os pontos)
💡 Com θ = 0° a atenção premia a primeira coordenada: u_1 = (1, 0) domina. Gire para θ = 90° e quem domina passa a ser u_2 = (0, 1). O vetor a é aprendido no treino: é a tarefa que define o que conta como semelhança. Na GCN esses pesos seriam fixos, dados pelos graus.
O 1-WL recolore cada nó com um hash do próprio rótulo e do multiset dos rótulos dos vizinhos, exatamente o padrão message-aggregate-update. Se os multisets de cores dos dois grafos diferem, eles não são isomorfos; se ficam iguais até estabilizar, o teste é inconclusivo. Clique em iterar e acompanhe as cores.
G₁ — multiset de cores:
G₂ — multiset de cores:
💡 No primeiro preset uma única iteração separa os grafos (multisets {A,A,B,B} vs {A,B,B,C}, como nos slides). No segundo, todo nó tem grau 2 e vê sempre o mesmo multiset: as cores nunca divergem e o 1-WL falha, mesmo os grafos não sendo isomorfos. Como GIN ≤ 1-WL, nenhuma GNN de message passing puro distingue C₆ de dois triângulos: MPNNs não contam ciclos.