Модуль II·Статья III·~3 мин чтения
Графовые нейронные сети
Глубокое обучение: теория и практика
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Графовые нейронные сети (GNN)
Многие реальные данные имеют структуру графа: социальные сети (пользователи + связи), молекулы (атомы + связи), дорожная сеть (перекрёстки + дороги), знания (сущности + отношения). Стандартные CNN и MLP игнорируют структуру — GNN сохраняют её.
Проблема обучения на графах
Граф G = (V, E): n вершин, m рёбер. Каждая вершина v имеет признаки x_v ∈ ℝᵈ. Матрица смежности A ∈ {0,1}^{n×n}. Задача: предсказание метки каждой вершины (node classification), рёбра (link prediction), или всего графа (graph classification).
Главное отличие от обычных данных: нет фиксированного порядка вершин (граф — permutation-equivariant). Размер графа может быть разным. Необходимо учитывать структуру соседства.
Message Passing Framework
Общий принцип GNN — «обмен сообщениями» между соседями. Каждая вершина агрегирует информацию от соседей, обновляет своё представление:
hᵥ^{(k)} = UPDATE^{(k)}(hᵥ^{(k-1)}, AGGREGATE^{(k)}({hᵤ^{(k-1)}: u ∈ N(v)}))
После K итераций: hᵥ^{(K)} кодирует информацию о K-hop окрестности v.
Конкретные архитектуры GNN
Graph Convolutional Network (GCN, Kipf & Welling, 2017):
H^{(l+1)} = σ(D̃^{−1/2} Ã D̃^{−1/2} H^{(l)} W^{(l)})
Здесь Ã = A + I (добавляем self-loops), D̃ — степенная матрица Ã. D̃^{−1/2} Ã D̃^{−1/2} — нормализованная матрица смежности. Интуиция: усредняем признаки соседей + сама вершина, нормировка предотвращает масштабирование.
Проблема: GCN «сглаживает» признаки — при K→∞ все вершины сходятся к одному значению (over-smoothing).
GraphSAGE (Hamilton et al., 2017):
hᵥ^{(k)} = σ(W · CONCAT(hᵥ^{(k−1)}, AGG({hᵤ^{(k−1)}: u ∈ N(v)})))
AGG может быть: mean, max, LSTM. Inductive: может обобщаться на новые вершины без переобучения (vs GCN — transductive).
Graph Attention Network (GAT, Veličković et al., 2018):
αᵥᵤ = exp(LeakyReLU(aᵀ[Whᵥ || Whᵤ])) / Σₖ exp(...) hᵥ' = σ(Σᵤ αᵥᵤ Whᵤ)
Веса внимания αᵥᵤ учатся автоматически — разные соседи имеют разный вклад. Multi-head attention: несколько независимых механизмов внимания.
Graph Transformer
Graphormer (Ying et al., 2021): обычный Transformer применяется к графу. Специальные позиционные эмбеддинги: centrality encoding (степень вершины), spatial encoding (кратчайший путь между вершинами), edge encoding. SOTA на многих граф-задачах.
Применения GNN
Химия и фармацевтика: Молекула = граф (атомы + связи). GNN предсказывает свойства молекул: растворимость, токсичность, биологическую активность. AlphaFold не использует GNN (трансформер), но GNNs широко используются в DeepMind для молекулярной динамики.
Рекомендательные системы: Граф пользователь-товар. GNN распространяет информацию через граф → лучшие рекомендации. PinSage (Pinterest, 2018): 3 млрд вершин, реальная система.
Детекция мошенничества: Граф транзакций. Мошеннические аккаунты образуют характерные паттерны в графе. GNN выявляет субструктуры мошенничества.
Физические симуляции: Системы частиц как граф (частица = вершина, взаимодействие = ребро). GNN аппроксимирует динамику → 1000× быстрее численного решения. DeepMind MeshGraphNets для CFD-симуляций.
Численный пример
Задача node classification: Cora dataset (2708 научных статей, 7 классов, 5429 цитирований). Признаки: bag-of-words (1433 признака).
Logistic Regression (игнорируем граф): test accuracy 58%. GCN (2 слоя): 81.5%. GAT (2 слоя, 8 голов): 83.0%. GraphSAGE (mean aggregation): 82.1%.
Важность структуры: GCN без рёбер (только признаки вершин) = LR → структура даёт +23%.
Задание: Реализуйте GCN и GAT на PyTorch Geometric для Cora dataset. (1) Обучите GCN (2 слоя, hidden=64): train/val/test accuracy. (2) Обучите GAT (2 слоя, 8 голов). (3) Визуализируйте внимание GAT (heatmap весов αᵥᵤ для 5 вершин) — какие соседи получают максимальный вес? (4) Изучите over-smoothing: как меняется accuracy при 1, 2, 4, 8 слоях? (5) Задача link prediction: предсказать, существует ли ребро между парой вершин.
§ Акт · что дальше