Linkkien ennustaminen ja graafien luokittelu
Särmien ennustaminen, negatiivinen otanta, graafitason pooling, GINConv graafien luokitteluun.
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 pairNegatiivinen 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ä
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
- Graafiteoria koneoppimista varten
- Graafikonvoluutioverkot (GCN)
- Solmujen luokittelu GNN:llä
- Linkkien ennustaminen ja graafien luokittelu