Lær AI med Python · Lektion

Grafkonvolutionsnetværk (GCN)

Message-passing-framework, GCNConv, aggregering af node features, opsætning af PyTorch Geometric.

Lektion 2 af 413 trin

Grafkonvolutionsnetværk (GCN) er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Fra CNN'er til GCN'er

CNN'er udnytter gitterstrukturen i billeder. Et grafkonvolutionsnetværk (GCN) generaliserer konvolution til uregelmæssige grafer, så hver knude kan opdatere sin repræsentation ved hjælp af oplysninger fra sine naboer. Det håndterer data uden et fast gitter.

Meddelelsesudveksling

GCN'er følger rammeværket for meddelelsesudveksling: På hvert lag (1) indsamler hver knude meddelelser fra sine naboer, (2) aggregerer dem og (3) opdaterer sin egen indlejring. Når lagene stables, kan information flyde gennem grafen.

Aggregering af naboknuder

Den centrale operation er at aggregere naboknudernes egenskaber. Et simpelt GCN-lag beregner gennemsnittet af en knudes naboknuders egenskabsvektorer (samt knudens egen), og anvender derefter en lært lineær transformation og en ikke-linearitet.

# For each node v:
#   h_v = activation( W * mean(features of v and its neighbors) )

Hvorfor normalisere tilstødelsesmatricen

Knuder med mange kanter ville dominere, hvis vi naivt summerede naboerne. GCN bruger den normaliserede tilstødelsesmatrix til at skalere bidragene, så størrelsen af knudeindlejringerne forbliver stabil på tværs af knuder med forskellig grad.

Normaliseringsformlen

Den symmetriske normalisering tilføjer selvsløjfer og skalerer derefter efter knudernes grader, skrevet som D^(-1/2) (A + I) D^(-1/2). Når identitetsmatricen I tilføjes, kan en knude bevare sine egne egenskaber under aggregeringen.

# 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) er standardbiblioteket til GNN'er i PyTorch. Det indeholder færdige lag som GCNConv, der implementerer den normaliserede konvolution med meddelelsesudveksling for dig.

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

Et enkelt GCNConv-lag

GCNConv(in_channels, out_channels) opretter én grafkonvolution. Den modtager knudernes egenskabsmatrix x og edge_index (grafens forbindelser i COO-format) og returnerer opdaterede knudeindlejringer.

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]

En GCN med to lag

En typisk GCN består af to lag: Det første projicerer egenskaberne og aggregerer oplysninger fra direkte naboer, mens det andet aggregerer oplysninger fra naboer to kanter væk, så hver knude får et påvirkningsområde på to kanter.

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)

Det receptive felt vokser med dybden

Hvert GCN-lag udvider en knudes påvirkningsområde med ét naboskridt. To lag ser naboområder to skridt væk, tre lag ser områder tre skridt væk og så videre. Dybden gør det muligt for information på afstand at nå en knude.

Overudjævning

Hvis man derimod stabler for mange lag, opstår der overudjævning: Gentagen gennemsnitsberegning af naboer får alle knudeindlejringer til at nærme sig næsten den samme vektor, så de forskelle, der er nødvendige for klassifikation, forsvinder. Derfor bruger de fleste GCN'er kun 2 eller 3 lag.

Begrænsning af overudjævning

Teknikker til at modvirke overudjævning omfatter residualforbindelser og springforbindelser, netværk, der kombinerer resultater fra flere lag, samt ganske enkelt at holde netværket lavt. GCN'er med få lag klarer sig ofte bedre end dybe modeller på standardtests.

Hurtigt tjek

Test din viden om GCN'er.

Opsummering

Du har lært om grafkonvolutionsnetværk:

  • GCN'er følger rammeværket for meddelelsesudveksling: De aggregerer naboknudernes egenskaber og opdaterer derefter knuderne
  • Den normaliserede tilstødelsesmatrix med selvsløjfer holder indlejringerne stabile
  • GCNConv i PyTorch Geometric implementerer én konvolution
  • En almindelig arkitektur er en GCN med to lag
  • For stor dybde medfører overudjævning
Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
53
Lektioner
225

Ofte stillede spørgsmål

Er lektionen “Grafkonvolutionsnetværk (GCN)” gratis?

Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Grafkonvolutionsnetværk (GCN)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grafkonvolutionsnetværk (GCN)”?

Message-passing-framework, GCNConv, aggregering af node features, opsætning af PyTorch Geometric. Du øver dig i Lær AI med Python med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær AI med Python?

Der kræves ingen tidligere erfaring. Lær AI med Python på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Grafkonvolutionsnetværk (GCN)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær AI med Python-lektion?

Ja. Alle Lær AI med Python-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grafteori til machine learning
  2. Grafkonvolutionsnetværk (GCN)
  3. Nodeklassifikation med GNN
  4. Link prediction og grafklassifikation
← Tilbage til Lær AI med Python