Indholdsfortegnelse[Skjule][At vise]
De dybe læringsteknikker kendt som "grafneurale netværk" (GNN'er) fungerer i grafdomænet. Disse netværk har på det seneste fundet anvendelse inden for en række områder, herunder computersyn, anbefalingssystemer og kombinatorisk optimering, for at nævne nogle få.
Derudover kan disse netværk bruges til at repræsentere komplekse systemer, herunder sociale netværk, protein-protein-interaktionsnetværk, vidensgrafer og andre inden for flere studieretninger.
Det ikke-euklidiske rum er det sted, hvor grafdata fungerer, i modsætning til andre typer data som billeder. For at klassificere noder, forudsige links og klyngedata bruges grafanalyse.
I denne artikel vil vi undersøge grafen Neural Network i detaljer, dens typer, samt give praktiske eksempler ved hjælp af PyTorch.
Så hvad er Graph?
En graf er en type datastruktur, der består af knudepunkter og knudepunkter. Forbindelserne mellem de forskellige knudepunkter bestemmes af toppunkterne. Hvis retningen er angivet i knudepunkterne, siges grafen at være rettet; ellers er det urettet.
En god anvendelse af grafer er at modellere forholdet mellem forskellige individer i en sociale netværk. Når man håndterer komplekse omstændigheder, såsom links og udvekslinger, er grafer meget nyttige.
De er ansat af anbefalingssystemer, semantisk analyse, sociale netværksanalyse og mønstergenkendelse
. At skabe grafbaserede løsninger er et helt nyt felt, der tilbyder en indsigtsfuld forståelse af komplekse og indbyrdes relaterede data.
Graf neuralt netværk
Grafneurale netværk er specialiserede neurale netværkstyper, der kan fungere på et grafdataformat. Grafindlejring og konvolutionelle neurale netværk (CNN'er) har en betydelig indflydelse på dem.
Graph Neural Networks bruges i opgaver, der omfatter forudsigelse af noder, kanter og grafer.
- CNN'er bruges til at klassificere billeder. Tilsvarende, for at forudsige en klasse, anvendes GNN'er på pixelgitteret, der repræsenterer grafstrukturen.
- Tekstkategorisering ved hjælp af tilbagevendende neurale netværk. GNN'er bruges også med grafarkitekturer, hvor hvert ord i en sætning er en node.
For at forudsige noder, kanter eller komplette grafer bruges neurale netværk til at skabe GNN'er. En forudsigelse på nodeniveau kan for eksempel løse et problem som spam-detektion.
Linkforudsigelse er et typisk tilfælde i anbefalingssystemer og kan være et eksempel på et kantmæssigt forudsigelsesproblem.
Graf neurole netværkstyper
Der findes adskillige neurale netværkstyper, og konvolutionelle neurale netværk er til stede i de fleste af dem. Vi vil lære om de mest kendte GNN'er i denne del.
Graph Convolutional Networks (GCN'er)
De kan sammenlignes med klassiske CNN'er. Den får karakteristika ved at se på nærliggende knudepunkter. Aktiveringsfunktionen bruges af GNN'er til at tilføje ikke-linearitet efter aggregering af nodevektorer og afsendelse af output til det tætte lag.
Den består i det væsentlige af Graph-foldning, et lineært lag og en ikke-lærende aktiveringsfunktion. GCN'er findes i to hovedvarianter: Spectral Convolutional Networks og Spatial Convolutional Networks.
Graf auto-encoder-netværk
Den bruger en koder til at lære at repræsentere grafer og en dekoder til at forsøge at rekonstruere inputgrafer. Der er et flaskehals-lag, der forbinder encoderen og dekoderen.
Da auto-encodere gør et fremragende stykke arbejde med at håndtere klassebalance, bliver de ofte brugt til linkforudsigelse.
Recurrent Graph Neural Networks (RGNN'er)
I multi-relationelle netværk, hvor en enkelt node har adskillige relationer, lærer den det optimale diffusionsmønster og kan styre graferne. For at øge glathed og reducere over-parameterisering, bruges regularizers i denne form for grafisk neurale netværk.
For at få bedre resultater kræver RGNN'er mindre processorkraft. De bruges til tekstgenerering, talegenkendelse, maskinoversættelse, billedbeskrivelse, videomærkning og tekstresumé.
Gated Neural Graph Networks (GGNN'er)
Når det kommer til langsigtede afhængige opgaver, overgår de RGNN'er. Ved at inkludere node-, kant- og tidsporte på langsigtede afhængigheder forbedrer gated graph neurale netværk tilbagevendende grafneurale netværk.
Portene fungerer på samme måde som Gated Recurrent Units (GRU'er), idet de er vant til at genkalde og glemme data i forskellige stadier.
Implementering af Graph Neural Network ved hjælp af Pytorch
Det specifikke problem, vi vil fokusere på, er et almindeligt problem med nodekategorisering. Vi har et betydeligt socialt netværk kaldet musae-github, som blev kompileret fra den åbne API, til GitHub-udviklere.
Kanter viser de gensidige følger-relationer mellem noderne, som repræsenterer udviklere (platformbrugere), som har medvirket i mindst 10 repositories (bemærk, at ordet gensidig indikerer et urettet forhold).
Baseret på nodens placering, stjernemarkerede repositories, arbejdsgiver og e-mailadresse, hentes nodekarakteristika. Forudsigelse af, om en GitHub-bruger er en webudvikler eller en maskinlæringsudvikler er vores opgave.
Hver brugers jobtitel tjente som grundlag for denne målretningsfunktion.
Installation af PyTorch
For at begynde skal vi først installere PyTorch. Du kan konfigurere det i henhold til din maskine fra link.. Her er min:
Import af moduler
Nu importerer vi de nødvendige moduler
Importer og udforsk data
Det følgende trin er at læse dataene og plotte de første fem rækker og de sidste fem rækker fra etiketfilen.
Kun to af de fire kolonner – nodens id (dvs. bruger) og ml_target, som er 1, hvis brugeren er medlem af maskinlæringsfællesskabet og 0 ellers – er relevante for os i denne situation.
Da der kun er to klasser, kan vi nu være sikre på, at vores opgave er et binært klassifikationsproblem.
Som et resultat af betydelige klasseubalancer kan klassificereren blot antage, hvilken klasse der er flertallet i stedet for at evaluere den underrepræsenterede klasse, hvilket gør klassebalancen til en anden afgørende faktor at overveje.
Plotning af histogrammet (frekvensfordeling) afslører en vis ubalance, fordi der er færre klasser fra maskinlæring (label=1) end fra de andre klasser.
Funktionskodning
Nodernes karakteristika informerer os om den funktion, der er knyttet til hver node. Ved at implementere vores metode til at kode data, kan vi øjeblikkeligt kode disse egenskaber.
Vi ønsker at bruge denne metode til at indkapsle en lille del af netværket (f.eks. 60 noder) til visning. Koden er angivet her.
Design og visning af grafer
Vi vil bruge fakkelgeometrisk. data til at bygge vores graf.
For at modellere en enkelt graf med forskellige (valgfri) egenskaber bruges data, der er et simpelt Python-objekt. Ved at bruge denne klasse og de følgende attributter - som alle er fakkeltensorer - vil vi skabe vores grafobjekt.
Formen af værdien x, som vil blive allokeret til de kodede knudepunkter, er [antal knudepunkter, antal træk].
Formen af y er [antal noder], og den vil blive anvendt på nodemærkerne.
kantindeks: For at beskrive en urettet graf skal vi udvide de originale kantindekser for at tillade eksistensen af to distinkte rettede kanter, der forbinder de samme to noder, men peger i modsatte retninger.
Et par kanter, den ene peger fra knudepunkt 100 til 200 og den anden fra 200 til 100, er påkrævet, for eksempel mellem knudepunkter 100 og 200. Hvis kantindeksene er tilvejebragt, er det sådan, den urettede graf kan repræsenteres. [2,2*antal originale kanter] vil være tensorformen.
Vi opretter vores tegnegrafmetode for at vise en graf. Det første skridt er at transformere vores homogene netværk til en NetworkX-graf, som derefter kan tegnes ved hjælp af NetworkX.draw.
Lav vores GNN-model og træne den
Vi begynder med at indkode hele datasættet ved at udføre kodedata med light=False og derefter kalde construct graph with light=False for at bygge hele grafen. Vi vil ikke forsøge at tegne denne store graf, fordi jeg antager, at du bruger en lokal maskine, der har begrænsede ressourcer.
Masker, som er binære vektorer, der identificerer hvilke knudepunkter, der hører til hver specifik maske ved hjælp af cifrene 0 og 1, kan bruges til at underrette træningsfasen om, hvilke knudepunkter der skal inkluderes under træning og til at fortælle inferensfasen, hvilke knudepunkter der er testdata. Fakkel geometriske.transformers.
En opdeling på nodeniveau kan tilføjes ved hjælp af træningsmasken, valmasken og testmaskeegenskaberne i AddTrainValTestMask-klassen, som kan bruges til at tage en graf og sætte os i stand til at specificere, hvordan vi ønsker, at vores masker skal være konstrueret.
Vi bruger blot 10 % til træning og bruger 60 % af dataene som testsæt, mens vi bruger 30 % som valideringssæt.
Nu vil vi stable to GCNConv-lag, hvoraf det første har et outputfunktionantal, der er lig med antallet af funktioner i vores graf som inputfunktioner.
I det andet lag, som indeholder output noder svarende til antallet af vores klasser, anvender vi en relu aktiveringsfunktion og leverer de latente funktioner.
Kantindeks og kantvægt er to af de mange muligheder x, som GCNConv kan acceptere i fremadfunktionen, men i vores situation har vi kun brug for de to første variable.
På trods af at vores model vil være i stand til at forudsige klassen for hver knude i grafen, skal vi stadig bestemme nøjagtigheden og tabet for hvert sæt separat afhængigt af fasen.
For eksempel vil vi under træning kun bruge træningssættet til at bestemme nøjagtigheden og træningstabet, og derfor er det her, vores masker kommer til nytte.
For at beregne det passende tab og nøjagtighed vil vi definere funktionerne for maskeret tab og maskeret nøjagtighed.
Træning af modellen
Nu hvor vi har defineret træningsformålet, som faklen skal bruges til. Adam er en mester optimizer.
Vi gennemfører træningen i et vist antal epoker, mens vi holder øje med valideringsnøjagtigheden.
Vi plotter også træningens tab og nøjagtigheder gennem forskellige epoker.
Ulemper ved Graph Neural Network
Brug af GNN'er har nogle få ulemper. Hvornår vi skal bruge GNNa, og hvordan vi forbedrer ydeevnen af vores maskinlæringsmodeller, vil begge blive gjort klart for os, når vi har en bedre forståelse af dem.
- Mens GNN'er er lavvandede netværk, typisk med tre lag, kan de fleste neurale netværk gå dybt for at forbedre ydeevnen. Vi er ikke i stand til at præstere på forkant med store datasæt på grund af denne begrænsning.
- Det er sværere at træne en model på grafer, da deres strukturelle dynamik er dynamisk.
- På grund af disse netværks høje beregningsomkostninger giver det udfordringer at skalere modellen til produktion. At skalere GNN'erne til produktion vil være udfordrende, hvis din grafstruktur er enorm og kompliceret.
Konklusion
I løbet af de sidste par år har GNN'er udviklet sig til kraftfulde og effektive værktøjer til maskinlæringsproblemer i grafdomænet. En grundlæggende oversigt over grafiske neurale netværk er givet i denne artikel.
Derefter kan du begynde at oprette det datasæt, der skal bruges til at træne og teste modellen. For at forstå, hvordan det fungerer, og hvad det er i stand til, kan du også gå meget længere og træne det ved hjælp af en anden slags datasæt.
Glad kodning!
Giv en kommentar