0Pricing
Learn AI with Python · Lekcja

Predykcja krawędzi i klasyfikacja grafów

Zadanie predykcji krawędzi, próbkowanie negatywne, agregowanie na poziomie grafu, GINConv do klasyfikacji grafów.

Predykcja krawędzi i klasyfikacja grafów to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Dwa nowe zadania grafowe

Oprócz klasyfikowania węzłów sieci GNN obsługują:

  • predykcję połączeń: czy między dwoma węzłami pojawi się krawędź? (sugestie znajomych, interakcje leków)
  • klasyfikację grafów: przypisanie etykiety całemu grafowi (czy ta cząsteczka jest toksyczna?)

Konfiguracja predykcji połączeń

W przypadku predykcji połączeń najpierw obliczamy osadzenia węzłów za pomocą GNN, a następnie oceniamy kandydackie pary węzłów. Wysoki wynik oznacza, że model uznaje, iż powinna łączyć je krawędź.

Ocena krawędzi

Popularnym sposobem oceny krawędzi jest iloczyn skalarny osadzeń dwóch węzłów: score = dot(h_u, h_v). Podobne osadzenia dają wysoki iloczyn skalarny, przewidując prawdopodobne połączenie.

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

Próbkowanie negatywne

Graf zawiera tylko istniejące krawędzie (przykłady pozytywne). Do wytrenowania klasyfikatora potrzebujemy również par bez krawędzi. Próbkowanie negatywne losowo wybiera niepołączone pary węzłów jako przykłady negatywne, równoważąc zbiór treningowy.

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

Predykcja połączeń jest binarna (krawędź albo jej brak). Oceniamy pary pozytywne i negatywne, oznaczamy je odpowiednio wartościami 1 i 0, a następnie trenujemy model za pomocą BCEWithLogitsLoss, która łączy funkcję sigmoid z binarną entropią krzyżową w sposób stabilny numerycznie.

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)

Przejście do klasyfikacji grafów

W przypadku klasyfikacji grafów potrzebujemy jednego wektora na graf, a nie jednego wektora na węzeł. Po utworzeniu osadzeń węzłów przez warstwy GNN agregujemy je do jednej reprezentacji na poziomie grafu.

global_mean_pool

global_mean_pool uśrednia wszystkie osadzenia węzłów w grafie, tworząc jeden wektor o stałym rozmiarze, niezależnie od rozmiaru grafu. Indeks batch wskazuje, które węzły należą do poszczególnych grafów, gdy grafy są przetwarzane w jednej paczce.

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)

Dlaczego agregowanie ma znaczenie

Agregowanie sprawia, że model jest niezależny od kolejności węzłów i rozmiaru grafu: dwa grafy izomorficzne dają ten sam zagregowany wektor. Uśrednianie jest proste, a alternatywy stanowią agregowanie przez sumę i maksimum, które cechują się inną wrażliwością.

GINConv

GINConv (Graph Isomorphism Network) to bardziej ekspresyjna warstwa konwolucyjna. Wykorzystuje MLP oraz agregację przez sumowanie, zaprojektowane specjalnie w celu zmaksymalizowania zdolności rozróżniania podczas przekazywania komunikatów w zadaniach na poziomie grafu.

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)

Powiązanie z testem Weisfeilera-Lemana

GIN został zaprojektowany tak, aby był równie wydajny jak test Weisfeilera-Lemana (WL) — klasyczny algorytm rozróżniania grafów nieizomorficznych. Wiele prostszych GNN-ów nie potrafi odróżnić niektórych grafów, natomiast GIN potrafi to zrobić w granicach wyznaczonych przez test WL, dzięki czemu dobrze sprawdza się w klasyfikacji grafów.

Wybór odpowiedniego narzędzia

Dobierają Państwo architekturę do zadania:

  • Predykcja krawędzi: osadzenia GNN + scoring iloczynem skalarnym + negative sampling + funkcja straty BCE
  • Klasyfikacja grafów: ekspresyjne warstwy konwolucyjne, takie jak GINConv + global pooling + klasyfikator

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę.

Podsumowanie

Poznali Państwo predykcję krawędzi i klasyfikację grafów:

  • Wynik krawędzi = dot(h_u, h_v), trenowany z użyciem negative sampling i BCEWithLogitsLoss
  • global_mean_pool przekształca osadzenia węzłów w wektor na poziomie grafu
  • GINConv jest wysoce ekspresyjny i dorównuje testowi Weisfeilera-Lemana

Często zadawane pytania

Czy lekcja „Predykcja krawędzi i klasyfikacja grafów” jest bezpłatna?

Tak — pełny tekst „Predykcja krawędzi i klasyfikacja grafów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Predykcja krawędzi i klasyfikacja grafów”?

Zadanie predykcji krawędzi, próbkowanie negatywne, agregowanie na poziomie grafu, GINConv do klasyfikacji grafów. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Predykcja krawędzi i klasyfikacja grafów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Teoria grafów na potrzeby uczenia maszynowego
  2. Grafowe sieci konwolucyjne (GCN)
  3. Klasyfikacja węzłów za pomocą GNN
  4. Predykcja krawędzi i klasyfikacja grafów
← Powrót do Learn AI with Python