Oppikaa tekoälyä Pythonilla · Oppitunti

Linkkien ennustaminen ja graafien luokittelu

Särmien ennustaminen, negatiivinen otanta, graafitason pooling, GINConv graafien luokitteluun.

Oppitunti 4/413 vaihetta

Linkkien ennustaminen ja graafien luokittelu on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Kaksi uutta graafitehtävää

Solmujen luokittelun lisäksi GNN-verkot soveltuvat seuraaviin tehtäviin:

  • Linkkien ennustaminen: syntyykö kahden solmun välille kaari? (ystävyysehdotukset, lääkkeiden yhteisvaikutukset)
  • Graafien luokittelu: annetaan koko graafille luokka (onko tämä molekyyli myrkyllinen?)

Linkkien ennustamisen asetelma

Linkkien ennustamisessa lasketaan ensin solmujen upotukset GNN-verkolla ja pisteytetään sitten ehdokkaana olevat solmuparit. Suuri pistemäärä tarkoittaa, että mallin mielestä niiden välille pitäisi muodostua kaari.

Kaaren pisteyttäminen

Yleinen kaaren pistemäärä on kahden solmun upotusten pistetulo: score = dot(h_u, h_v). Samankaltaiset upotukset tuottavat suuren pistetulon, mikä ennustaa todennäköistä yhteyttä.

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

Negatiivinen otanta

Graafi sisältää vain olemassa olevat kaaret eli positiiviset esimerkit. Luokittelijan kouluttamista varten tarvitsemme myös puuttuvia kaaria. Negatiivisessa otannassa valitaan satunnaisesti yhdistämättömiä solmu pareja negatiivisiksi esimerkeiksi, jotta koulutusaineisto tasapainottuu.

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

Linkkien ennustaminen on binäärinen tehtävä: kaari joko on olemassa tai sitä ei ole. Positiiviset ja negatiiviset parit pisteytetään, niille annetaan luokat 1 ja 0, ja malli koulutetaan BCEWithLogitsLoss-häviöllä. Se yhdistää sigmoidifunktion ja binäärisen ristientropian numeerisesti vakaalla tavalla.

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)

Siirtyminen graafien luokitteluun

Graafien luokittelussa tarvitsemme yhden vektorin graafia kohti emmekä yhtä vektoria solmua kohti. Kun GNN-kerrokset ovat tuottaneet solmujen upotukset, poolaamme ne yhdeksi graafitason esitykseksi.

global_mean_pool

global_mean_pool laskee kaikkien graafin solmujen upotusten keskiarvon ja tuottaa yhden kiinteän kokoisen vektorin graafin koosta riippumatta. batch-indeksi ilmoittaa, mitkä solmut kuuluvat mihinkin graafiin, kun graafeja käsitellään eränä.

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)

Miksi poolaus on tärkeää

Poolaus tekee mallista riippumattoman solmujen järjestyksestä ja graafin koosta: kaksi isomorfista graafia tuottaa saman poolatun vektorin. Keskiarvopoolaus on yksinkertainen, mutta summa- ja maksimipoolaus ovat vaihtoehtoja, jotka reagoivat eri tavoin syötteeseen.

GINConv

GINConv (Graph Isomorphism Network) on ilmaisuvoimaisempi konvoluutio. Se käyttää MLP:tä ja summaukseen perustuvaa aggregointia, joka on suunniteltu erityisesti maksimoimaan viestinvälityksen erottelukyky graafitason tehtävissä.

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)

Weisfeiler–Leman-yhteys

GIN on suunniteltu yhtä tehokkaaksi kuin Weisfeiler–Leman-testi (WL-testi), joka on klassinen algoritmi ei-isomorfisten graafien erottamiseen toisistaan. Monet yksinkertaisemmat GNN:t eivät pysty erottamaan tiettyjä graafeja toisistaan, mutta GIN pystyy siihen WL-testin rajoissa, mikä tekee siitä tehokkaan graafien luokittelussa.

Oikean työkalun valitseminen

Sovittakaa arkkitehtuuri tehtävään:

  • Linkkien ennustaminen: GNN-upotukset + pistetuloon perustuva pisteytys + negatiivinen näytteistys + BCE-häviö
  • Graafien luokittelu: ilmaisuvoimaiset konvoluutiot, kuten GINConv + globaali poolaus + luokitin

Pikatarkistus

Testatkaa tietonne.

Kertaus

Opitte linkkien ennustamisen ja graafien luokittelun:

  • Reunapisteytys = dot(h_u, h_v), joka koulutetaan negatiivisella näytteistyksellä ja BCEWithLogitsLoss-häviöllä
  • global_mean_pool muuntaa solmujen upotukset graafitason vektoriksi
  • GINConv on erittäin ilmaisuvoimainen ja vastaa Weisfeiler–Leman-testiä
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Linkkien ennustaminen ja graafien luokittelu” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Linkkien ennustaminen ja graafien luokittelu”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Linkkien ennustaminen ja graafien luokittelu”?

Särmien ennustaminen, negatiivinen otanta, graafitason pooling, GINConv graafien luokitteluun. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Linkkien ennustaminen ja graafien luokittelu”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Graafiteoria koneoppimista varten
  2. Graafikonvoluutioverkot (GCN)
  3. Solmujen luokittelu GNN:llä
  4. Linkkien ennustaminen ja graafien luokittelu
← Takaisin: Oppikaa tekoälyä Pythonilla