Графовые сверточные сети (GCN)
Механизм передачи сообщений, GCNConv, агрегация признаков узлов, настройка PyTorch Geometric
«Графовые сверточные сети (GCN)» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
От CNN к GCN
CNN используют структуру сетки в изображениях. Графовая свёрточная сеть (GCN) обобщает свёртку на нерегулярные графы, позволяя каждому узлу обновлять своё представление с помощью информации от соседей. Это позволяет работать с данными без фиксированной сетки.
Передача сообщений
GCN следуют схеме передачи сообщений: на каждом слое каждый узел (1) получает сообщения от соседей, (2) агрегирует их и (3) обновляет собственное векторное представление. Объединение нескольких слоёв позволяет информации распространяться по графу.
Агрегация признаков соседей
Основная операция — агрегация признаков соседей. Простой слой GCN усредняет векторы признаков соседей узла (включая сам узел), а затем применяет обученное линейное преобразование и нелинейность.
# For each node v:
# h_v = activation( W * mean(features of v and its neighbors) )Зачем нормализовать матрицу смежности
Если бездумно суммировать признаки соседей, узлы с большой степенью будут доминировать. GCN использует нормализованную матрицу смежности, чтобы масштабировать вклады и сохранять стабильную величину векторных представлений узлов при разной степени узлов.
Формула нормализации
Симметричная нормализация сначала добавляет петли к самому узлу, а затем масштабирует матрицу по степеням узлов: D^(-1/2) (A + I) D^(-1/2). Добавление единичной матрицы I позволяет узлу сохранить собственные признаки во время агрегации.
# A_hat = A + I (add self-loops)
# D_hat = degree matrix of A_hat
# A_norm = D_hat^(-1/2) * A_hat * D_hat^(-1/2)PyTorch Geometric
PyTorch Geometric (PyG) — стандартная библиотека для GNN в PyTorch. Она предоставляет готовые слои, например GCNConv, которые выполняют за Вас свёртку с нормализованной передачей сообщений.
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConvОдин слой GCNConv
GCNConv(in_channels, out_channels) создаёт одну графовую свёртку. Он принимает матрицу признаков узлов x и edge_index (связность графа в формате COO), а возвращает обновлённые векторные представления узлов.
conv = GCNConv(in_channels=16, out_channels=32)
# x: [num_nodes, 16], edge_index: [2, num_edges]
h = conv(x, edge_index) # -> [num_nodes, 32]GCN из двух слоёв
Типичная GCN состоит из двух слоёв: первый проецирует признаки и агрегирует признаки соседей на расстоянии одного перехода, а второй агрегирует признаки на расстоянии двух переходов, создавая для каждого узла область восприятия в два перехода.
class GCN(torch.nn.Module):
def __init__(self, in_dim, hid, out):
super().__init__()
self.conv1 = GCNConv(in_dim, hid)
self.conv2 = GCNConv(hid, out)
def forward(self, x, edge_index):
x = F.relu(self.conv1(x, edge_index))
x = F.dropout(x, training=self.training)
return self.conv2(x, edge_index)Область восприятия растёт с глубиной
Каждый слой GCN расширяет область восприятия узла на один переход. Два слоя охватывают окрестность на расстоянии двух переходов, три слоя — на расстоянии трёх и так далее. Глубина позволяет удалённой информации достигать узла.
Чрезмерное сглаживание
Однако слишком большое количество слоёв приводит к чрезмерному сглаживанию: повторное усреднение по соседям заставляет векторные представления всех узлов сходиться почти к одному и тому же вектору, уничтожая различия, необходимые для классификации. Поэтому большинство GCN используют всего 2 или 3 слоя.
Как уменьшить чрезмерное сглаживание
Методы борьбы с чрезмерным сглаживанием включают остаточные соединения и пропуски, сети с объединением результатов разных слоёв, а также простое сохранение небольшой глубины сети. Неглубокие GCN часто превосходят глубокие на стандартных наборах данных для сравнения.
Быстрая проверка
Проверьте свои знания о GCN.
Итоги
Вы изучили графовые свёрточные сети:
- GCN следуют схеме передачи сообщений: агрегируют признаки соседей, а затем обновляют представление
- Нормализованная матрица смежности с петлями к самому узлу сохраняет стабильность векторных представлений
GCNConvв PyTorch Geometric реализует одну свёртку- Распространённая архитектура — GCN из двух слоёв
- Слишком большая глубина приводит к чрезмерному сглаживанию
Часто задаваемые вопросы
Урок «Графовые сверточные сети (GCN)» бесплатный?
Да — полный текст урока «Графовые сверточные сети (GCN)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Графовые сверточные сети (GCN)»?
Механизм передачи сообщений, GCNConv, агрегация признаков узлов, настройка PyTorch Geometric Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Графовые сверточные сети (GCN)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Теория графов для машинного обучения
- Графовые сверточные сети (GCN)
- Классификация узлов с GNN
- Предсказание связей и классификация графов