Innholdsfortegnelse[Gjemme seg][Forestilling]
Deep learning-teknikkene kjent som "grafnevrale nettverk" (GNNs) opererer i grafdomenet. Disse nettverkene har i det siste funnet bruk i en rekke felt, inkludert datasyn, anbefalingssystemer og kombinatorisk optimalisering, for å nevne noen.
I tillegg kan disse nettverkene brukes til å representere komplekse systemer, inkludert sosiale nettverk, protein-protein-interaksjonsnettverk, kunnskapsgrafer og andre innen flere studieretninger.
Det ikke-euklidiske rommet er der grafdata opererer, i motsetning til andre typer data som bilder. For å klassifisere noder, forutsi lenker og klyngedata, brukes grafanalyse.
I denne artikkelen skal vi undersøke grafen Nevrale nettverket i detalj, dens typer, samt gi praktiske eksempler ved bruk av PyTorch.
Så, hva er Graph?
En graf er en type datastruktur som består av noder og toppunkter. Forbindelsene mellom de ulike nodene bestemmes av toppunktene. Hvis retningen er angitt i nodene, sies grafen å være rettet; ellers er den urettet.
En god anvendelse av grafer er å modellere forholdet mellom ulike individer i en sosiale nettverk. Når du håndterer komplekse omstendigheter, som lenker og utvekslinger, er grafer svært nyttige.
De er ansatt av anbefalingssystemer, semantisk analyse, sosial nettverksanalyse og mønstergjenkjenning
. Å lage grafbaserte løsninger er et helt nytt felt som gir en innsiktsfull forståelse av komplekse og sammenhengende data.
Graf Neural Network
Grafnevrale nettverk er spesialiserte nevrale nettverkstyper som kan operere på et grafdataformat. Grafinnebygging og konvolusjonelle nevrale nettverk (CNN) har en betydelig innvirkning på dem.
Graph Neural Networks brukes i oppgaver som inkluderer prediksjon av noder, kanter og grafer.
- CNN-er brukes til å klassifisere bilder. På samme måte, for å forutsi en klasse, brukes GNN-er på pikselnettet som representerer grafstrukturen.
- Tekstkategorisering ved bruk av gjentakende nevrale nettverk. GNN-er brukes også med grafarkitekturer der hvert ord i en frase er en node.
For å forutsi noder, kanter eller komplette grafer, brukes nevrale nettverk til å lage GNN-er. En prediksjon på nodenivå, for eksempel, kan løse et problem som spam-deteksjon.
Linkprediksjon er et typisk tilfelle i anbefalingssystemer og kan være et eksempel på et kantmessig prediksjonsproblem.
Graf nevrale nettverkstyper
Det finnes mange typer nevrale nettverk, og konvolusjonelle nevrale nettverk er til stede i de fleste av dem. Vi vil lære om de mest kjente GNN-ene i denne delen.
Graph Convolutional Networks (GCN)
De kan sammenlignes med klassiske CNN-er. Den får egenskaper ved å se på nærliggende noder. Aktiveringsfunksjonen brukes av GNN-er for å legge til ikke-linearitet etter aggregering av nodevektorer og sending av utdata til det tette laget.
Den består i hovedsak av Graph-convolution, et lineært lag og en aktiveringsfunksjon for ikke-lærer. GCN-er kommer i to hovedvarianter: Spectral Convolutional Networks og Spatial Convolutional Networks.
Graf Auto-Encoder-nettverk
Den bruker en koder for å lære å representere grafer og en dekoder for å prøve å rekonstruere inndatagrafer. Det er et flaskehals som forbinder koderen og dekoderen.
Siden autokodere gjør en utmerket jobb med å håndtere klassebalanse, brukes de ofte i koblingsprediksjon.
Recurrent Graph Neural Networks (RGNNs)
I multirelasjonelle nettverk, der en enkelt node har mange relasjoner, lærer den det optimale diffusjonsmønsteret og kan administrere grafene. For å øke jevnheten og redusere overparameterisering, brukes regularizers i denne formen for grafiske nevrale nettverk.
For å få bedre resultater krever RGNN-er mindre prosessorkraft. De brukes til tekstgenerering, talegjenkjenning, maskinoversettelse, bildebeskrivelse, videomerking og tekstoppsummering.
Gated Neural Graph Networks (GGNN)
Når det gjelder langsiktige avhengige oppgaver, utkonkurrerer de RGNN-er. Ved å inkludere node-, kant- og temporale porter på langsiktige avhengigheter, forbedrer gatede grafnevrale nettverk tilbakevendende grafnevrale nettverk.
Portene fungerer på samme måte som Gated Recurrent Units (GRUs) ved at de er vant til å hente og glemme data i ulike stadier.
Implementering av Graph Neural Network ved hjelp av Pytorch
Det spesifikke problemet vi vil fokusere på er et vanlig problem med nodekategorisering. Vi har et betydelig sosialt nettverk som heter musae-github, som ble kompilert fra det åpne API, for GitHub-utviklere.
Kanter viser de gjensidige følgerforholdene mellom nodene, som representerer utviklere (plattformbrukere) som har spilt hovedrollen i minst 10 depoter (merk at ordet gjensidig indikerer et urettet forhold).
Basert på nodens plassering, stjernemerkede repositories, arbeidsgiver og e-postadresse, hentes nodekarakteristikker. Forutsi om en GitHub-bruker er en nettutvikler eller en maskinlæringsutvikler er vår oppgave.
Stillingstittelen til hver bruker fungerte som grunnlag for denne målrettingsfunksjonen.
Installerer PyTorch
For å begynne må vi først installere PyTorch. Du kan konfigurere den i henhold til maskinen din fra her.. Her er min:
Importerer moduler
Nå importerer vi de nødvendige modulene
Importere og utforske dataene
Følgende trinn er å lese dataene og plotte de første fem radene og de siste fem radene fra etikettfilen.
Bare to av de fire kolonnene – nodens id (dvs. bruker) og ml_target, som er 1 hvis brukeren er medlem av maskinlæringsfellesskapet og 0 ellers – er relevante for oss i denne situasjonen.
Gitt at det bare er to klasser, kan vi nå være sikre på at oppgaven vår er et binært klassifiseringsproblem.
Som et resultat av betydelige klasseubalanser kan klassifikatoren bare anta hvilken klasse som er majoriteten i stedet for å evaluere den underrepresenterte klassen, noe som gjør klassebalansen til en annen avgjørende faktor å vurdere.
Å plotte histogrammet (frekvensfordeling) avslører en viss ubalanse fordi det er færre klasser fra maskinlæring (label=1) enn fra de andre klassene.
Funksjonskoding
Nodenes egenskaper informerer oss om funksjonen som er knyttet til hver node. Ved å implementere metoden vår for å kode data, kan vi umiddelbart kode disse egenskapene.
Vi ønsker å bruke denne metoden til å kapsle inn en liten del av nettverket (for eksempel 60 noder) for visning. Koden er oppført her.
Designe og vise grafer
Vi vil bruke geometrisk fakkel. data for å bygge grafen vår.
For å modellere en enkelt graf med forskjellige (valgfrie) egenskaper, brukes data som er et enkelt Python-objekt. Ved å bruke denne klassen og følgende attributter – som alle er fakkeltensorer – vil vi lage grafobjektet vårt.
Formen til verdien x, som vil bli allokert til de kodede nodefunksjonene, er [antall noder, antall funksjoner].
Formen til y er [antall noder], og den vil bli brukt på nodeetikettene.
kantindeks: For å beskrive en urettet graf, må vi utvide de opprinnelige kantindeksene for å tillate eksistensen av to distinkte rettede kanter som forbinder de samme to nodene, men peker i motsatte retninger.
Et par kanter, den ene peker fra node 100 til 200 og den andre fra 200 til 100, er nødvendig, for eksempel mellom nodene 100 og 200. Hvis kantindeksene er angitt, er det slik den urettede grafen kan representeres. [2,2*antall originale kanter] vil være tensorformen.
Vi lager vår tegnegrafmetode for å vise en graf. Det første trinnet er å transformere vårt homogene nettverk til en NetworkX-graf, som deretter kan tegnes ved hjelp av NetworkX.draw.
Lag vår GNN-modell og tren den
Vi begynner med å kode hele settet med data ved å utføre kodedata med light=False og deretter kalle construct graph with light=False for å bygge hele grafen. Vi vil ikke prøve å tegne denne store grafen fordi jeg antar at du bruker en lokal maskin som har begrensede ressurser.
Masker, som er binære vektorer som identifiserer hvilke noder som tilhører hver spesifikk maske ved hjelp av sifrene 0 og 1, kan brukes til å varsle treningsfasen hvilke noder som skal inkluderes under trening og for å fortelle inferensfasen hvilke noder som er testdata. Fakkel geometriske.transformers.
En splitt på nodenivå kan legges til ved å bruke treningsmasken, valmasken og testmaskeegenskapene til AddTrainValTestMask-klassen, som kan brukes til å ta en graf og gjøre oss i stand til å spesifisere hvordan vi vil at maskene våre skal konstrueres.
Vi bruker bare 10 % til trening og bruker 60 % av dataene som testsett mens vi bruker 30 % som valideringssett.
Nå vil vi stable to GCNConv-lag, hvorav det første har en utdatafunksjon som er lik antallet funksjoner i grafen vår som inputfunksjoner.
I det andre laget, som inneholder utgangsnoder som tilsvarer antallet av våre klasser, bruker vi en relu-aktiveringsfunksjon og leverer de latente funksjonene.
Kantindeks og kantvekt er to av de mange alternativene x som GCNConv kan akseptere i foroverfunksjonen, men i vår situasjon trenger vi bare de to første variablene.
Til tross for at modellen vår vil være i stand til å forutsi klassen til hver node i grafen, må vi fortsatt bestemme nøyaktigheten og tapet for hvert sett separat avhengig av fasen.
For eksempel, under trening ønsker vi kun å bruke treningssettet til å bestemme nøyaktigheten og treningstapet, og derfor er det her maskene våre kommer godt med.
For å beregne riktig tap og nøyaktighet, vil vi definere funksjonene til maskert tap og maskert nøyaktighet.
Opplæring av modellen
Nå som vi har definert treningsformålet som fakkelen skal brukes til. Adam er en mesteroptimalisator.
Vi vil gjennomføre opplæringen i et visst antall epoker mens vi holder øye med valideringsnøyaktigheten.
Vi plotter også treningens tap og nøyaktigheter gjennom ulike epoker.
Ulemper med Graph Neural Network
Å bruke GNN-er har noen ulemper. Når vi skal bruke GNNa og hvordan vi kan forbedre ytelsen til våre maskinlæringsmodeller vil begge bli gjort klart for oss etter at vi har en bedre forståelse av dem.
- Mens GNN-er er grunne nettverk, typisk med tre lag, kan de fleste nevrale nettverk gå dypt for å forbedre ytelsen. Vi er ikke i stand til å prestere i forkant på store datasett på grunn av denne begrensningen.
- Det er vanskeligere å trene en modell på grafer, siden deres strukturelle dynamikk er dynamisk.
- På grunn av de høye beregningskostnadene til disse nettverkene byr det på utfordringer å skalere modellen for produksjon. Å skalere GNN-ene for produksjon vil være utfordrende hvis grafstrukturen din er stor og komplisert.
konklusjonen
I løpet av de siste årene har GNN-er utviklet seg til kraftige og effektive verktøy for maskinlæringsproblemer i grafdomenet. En grunnleggende oversikt over grafiske nevrale nettverk er gitt i denne artikkelen.
Etter det kan du begynne å lage datasettet som skal brukes til å trene og teste modellen. For å forstå hvordan den fungerer og hva den er i stand til, kan du også gå mye lenger og trene den ved å bruke en annen type datasett.
Glad koding!
Legg igjen en kommentar