0Pricing
Learn AI with Python · Урок

Предсказание связей и классификация графов

Задача предсказания рёбер, отрицательная выборка, объединение на уровне графа, GINConv для классификации графов

«Предсказание связей и классификация графов» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Две новые задачи на графах

Помимо классификации узлов, GNN решают следующие задачи:

  • предсказание связей: существует ли ребро между двумя узлами? (рекомендации друзей, взаимодействия лекарств)
  • классификация графов: присвоение метки целому графу (токсична ли эта молекула?)

Настройка предсказания связей

При предсказании связей мы сначала вычисляем векторные представления узлов с помощью GNN, а затем оцениваем пары узлов-кандидатов. Высокая оценка означает, что модель считает, что их должно соединять ребро.

Оценка ребра

Распространённая оценка ребра — это скалярное произведение двух векторных представлений узлов: score = dot(h_u, h_v). Сходные векторные представления дают высокое скалярное произведение, предсказывая вероятную связь.

h = gnn(data.x, data.edge_index)        # node embeddings
score = (h[u] * h[v]).sum(dim=-1)        # dot product per pair

Негативная выборка

Граф содержит только существующие рёбра (положительные примеры). Для обучения классификатора нам также нужны пары без рёбер. Негативная выборка случайным образом выбирает несоединённые пары узлов как отрицательные примеры, балансируя обучающий набор.

from torch_geometric.utils import negative_sampling

neg_edge_index = negative_sampling(
    edge_index=data.edge_index,
    num_nodes=data.num_nodes,
    num_neg_samples=data.edge_index.size(1),
)

BCEWithLogitsLoss

Предсказание связей является бинарной задачей (ребро или отсутствие ребра). Мы оцениваем положительные и отрицательные пары, присваиваем им метки 1 и 0 и обучаем модель с помощью BCEWithLogitsLoss, которая численно устойчивым способом объединяет сигмоиду и бинарную перекрёстную энтропию.

import torch

pos = (h[pos_u] * h[pos_v]).sum(-1)
neg = (h[neg_u] * h[neg_v]).sum(-1)
scores = torch.cat([pos, neg])
labels = torch.cat([torch.ones_like(pos), torch.zeros_like(neg)])
loss = torch.nn.functional.binary_cross_entropy_with_logits(scores, labels)

Переход к классификации графов

Для классификации графов нам нужен один вектор на граф, а не на узел. После того как слои GNN создают векторные представления узлов, мы агрегируем их в одно представление уровня графа.

global_mean_pool

global_mean_pool усредняет все векторные представления узлов в графе и создаёт один вектор фиксированного размера независимо от размера графа. Индекс batch сообщает функции, каким графам принадлежат узлы, когда несколько графов объединены в одну группу.

from torch_geometric.nn import global_mean_pool

h = gnn(x, edge_index)               # [num_nodes, dim]
hg = global_mean_pool(h, batch)       # [num_graphs, dim]
logits = classifier(hg)

Почему важна агрегация

Агрегация делает модель инвариантной к порядку узлов и размеру графа: два изоморфных графа дают один и тот же агрегированный вектор. Усреднение — простой вариант; альтернативами являются суммирование и взятие максимума, обладающие разной чувствительностью.

GINConv

GINConv (сеть изоморфизма графов) — более выразительная свёртка. Она использует MLP и агрегацию суммированием, специально разработанные для максимизации различающей способности передачи сообщений в задачах на уровне графа.

from torch_geometric.nn import GINConv
import torch

mlp = torch.nn.Sequential(
    torch.nn.Linear(in_dim, hid),
    torch.nn.ReLU(),
    torch.nn.Linear(hid, hid),
)
conv = GINConv(mlp)

Связь с Вайсфейлером—Леманом

GIN разработан так, чтобы быть столь же мощным, как тест Вайсфейлера—Лемана (WL) — классический алгоритм для различения неизоморфных графов. Многие более простые GNN не могут отличить некоторые графы друг от друга; GIN может это делать в пределах возможностей теста WL, поэтому он хорошо подходит для классификации графов.

Выбор подходящего инструмента

Сопоставляйте архитектуру с задачей:

  • Предсказание связей: векторные представления GNN + оценка скалярным произведением + выборка отрицательных примеров + функция потерь BCE
  • Классификация графов: выразительные свёртки, например GINConv + глобальное объединение + классификатор

Проверка знаний

Проверьте свои знания.

Итоги

Вы изучили предсказание связей и классификацию графов:

  • Оценка связи = dot(h_u, h_v), обучение выполняется с помощью выборки отрицательных примеров и BCEWithLogitsLoss
  • global_mean_pool преобразует векторные представления узлов в вектор уровня графа
  • GINConv обладает высокой выразительностью и соответствует тесту Вайсфейлера—Лемана

Часто задаваемые вопросы

Урок «Предсказание связей и классификация графов» бесплатный?

Да — полный текст урока «Предсказание связей и классификация графов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Предсказание связей и классификация графов»?

Задача предсказания рёбер, отрицательная выборка, объединение на уровне графа, GINConv для классификации графов Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Предсказание связей и классификация графов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Теория графов для машинного обучения
  2. Графовые сверточные сети (GCN)
  3. Классификация узлов с GNN
  4. Предсказание связей и классификация графов
← Назад к Learn AI with Python