Innehållsförteckning[Dölj][Visa]
De djupinlärningstekniker som kallas "grafneurala nätverk" (GNNs) fungerar i grafdomänen. Dessa nätverk har på senare tid funnit användning inom en mängd olika områden, inklusive datorseende, rekommendatorsystem och kombinatorisk optimering, för att nämna några.
Dessutom kan dessa nätverk användas för att representera komplexa system, inklusive sociala nätverk, protein-protein-interaktionsnätverk, kunskapsgrafer och andra inom flera studieområden.
Det icke-euklidiska utrymmet är där grafdata fungerar, i motsats till andra typer av data som bilder. För att klassificera noder, förutsäga länkar och klusterdata används grafanalys.
I den här artikeln kommer vi att undersöka grafen Neuralt nätverk i detalj, dess typer, samt ge praktiska exempel med PyTorch.
Så, vad är Graph?
En graf är en typ av datastruktur som består av noder och hörn. Kopplingarna mellan de olika noderna bestäms av hörnen. Om riktningen anges i noderna, sägs grafen vara riktad; annars är den oriktad.
En bra tillämpning av grafer är att modellera relationerna mellan olika individer i en sociala nätverk. När man hanterar komplexa omständigheter, såsom länkar och utbyten, är grafer till stor hjälp.
De används av rekommendationssystem, semantisk analys, sociala nätverksanalys och mönsterigenkänning
. Att skapa grafbaserade lösningar är ett helt nytt område som erbjuder en insiktsfull förståelse av komplexa och sammanhängande data.
Graph Neural Network
Grafneurala nätverk är specialiserade neurala nätverkstyper som kan arbeta på ett grafdataformat. Grafinbäddning och konvolutionella neurala nätverk (CNN) har en betydande inverkan på dem.
Graph Neural Networks används i uppgifter som inkluderar att förutsäga noder, kanter och grafer.
- CNN används för att klassificera bilder. På liknande sätt, för att förutsäga en klass, appliceras GNN på pixelrutnätet som representerar grafstrukturen.
- Textkategorisering med hjälp av återkommande neurala nätverk. GNN:er används också med grafarkitekturer där varje ord i en fras är en nod.
För att prognostisera noder, kanter eller kompletta grafer används neurala nätverk för att skapa GNN. En förutsägelse på nodnivå, till exempel, kan lösa ett problem som skräppostdetektering.
Länkförutsägelse är ett typiskt fall i rekommendatorsystem och kan vara ett exempel på ett kantmässigt förutsägelseproblem.
Diagram över typer av neurala nätverk
Det finns många typer av neurala nätverk, och konvolutionella neurala nätverk finns i majoriteten av dem. Vi kommer att lära oss om de mest kända GNN:erna i den här delen.
Grafkonvolutionsnätverk (GCN)
De är jämförbara med klassiska CNN. Den får egenskaper genom att titta på närliggande noder. Aktiveringsfunktionen används av GNN:er för att lägga till icke-linjäritet efter att ha aggregerat nodvektorer och skickat utdata till det täta lagret.
Den består av graffalsning, ett linjärt lager och en aktiveringsfunktion för icke-lärare, i huvudsak. GCN finns i två huvudvarianter: Spectral Convolutional Networks och Spatial Convolutional Networks.
Grafiska nätverk för automatisk kodare
Den använder en kodare för att lära sig att representera grafer och en avkodare för att försöka rekonstruera indatagrafer. Det finns ett flaskhalsskikt som förbinder kodaren och avkodaren.
Eftersom autokodare gör ett utmärkt jobb med att hantera klassbalans, används de ofta i länkförutsägelse.
Recurrent Graph Neural Networks (RGNN)
I multirelationella nätverk, där en enda nod har många relationer, lär den sig det optimala spridningsmönstret och kan hantera graferna. För att öka jämnheten och minska överparameteriseringen används regularizers i denna form av grafiska neurala nätverk.
För att få bättre resultat kräver RGNN:er mindre processorkraft. De används för textgenerering, taligenkänning, maskinöversättning, bildbeskrivning, videotaggning och textsammanfattning.
Gated Neural Graph Networks (GGNN)
När det gäller långsiktigt beroende uppgifter överträffar de RGNN. Genom att inkludera nod-, kant- och temporala grindar på långsiktiga beroenden, förbättrar gated graph neurala nätverk återkommande grafiska neurala nätverk.
Grindarna fungerar på samma sätt som Gated Recurrent Units (GRU) genom att de är vana vid att återkalla och glömma data i olika steg.
Implementering av Graph Neural Network med Pytorch
Det specifika problemet vi kommer att fokusera på är ett vanligt problem med nodkategorisering. Vi har ett stort socialt nätverk som heter musae-github, som kompilerades från det öppna API:et, för GitHub-utvecklare.
Kanter visar de ömsesidiga följarrelationerna mellan noderna, som representerar utvecklare (plattformsanvändare) som har stjärnmärkt i minst 10 arkiv (observera att ordet ömsesidigt indikerar en oriktad relation).
Baserat på nodens plats, stjärnmärkta arkiv, arbetsgivare och e-postadress, hämtas nodegenskaper. Förutsäga om en GitHub-användare är en webbutvecklare eller en maskininlärningsutvecklare är vår uppgift.
Varje användares befattning låg till grund för denna inriktningsfunktion.
Installerar PyTorch
För att börja måste vi först installera PyTorch. Du kan konfigurera den efter din maskin från här.. Här är min:
Importera moduler
Nu importerar vi de nödvändiga modulerna
Importera och utforska data
Följande steg är att läsa data och plotta de första fem raderna och de sista fem raderna från etikettfilen.
Endast två av de fyra kolumnerna – nodens id (dvs användare) och ml_target, som är 1 om användaren är medlem i maskininlärningsgemenskapen och 0 i övrigt – är relevanta för oss i den här situationen.
Med tanke på att det bara finns två klasser kan vi nu vara säkra på att vår uppgift är en binär klassificeringsfråga.
Som ett resultat av betydande klassobalanser kan klassificeraren bara anta vilken klass som är majoriteten snarare än att utvärdera den underrepresenterade klassen, vilket gör klassbalansen till en annan avgörande faktor att ta hänsyn till.
Att plotta histogrammet (frekvensfördelning) avslöjar viss obalans eftersom det finns färre klasser från maskininlärning (label=1) än från de andra klasserna.
Funktionskodning
Nodernas egenskaper informerar oss om den funktion som är associerad med varje nod. Genom att implementera vår metod för att koda data kan vi omedelbart koda dessa egenskaper.
Vi vill använda denna metod för att kapsla in en liten del av nätverket (säg 60 noder) för visning. Koden finns listad här.
Designa och visa grafer
Vi kommer att använda geometrisk ficklampa. data för att bygga vår graf.
För att modellera en enskild graf med olika (valfria) egenskaper används data som är ett enkelt Python-objekt. Genom att använda den här klassen och följande attribut – som alla är facklastensorer – skapar vi vårt grafobjekt.
Formen av värdet x, som kommer att allokeras till de kodade nodegenskaperna, är [antal noder, antal funktioner].
Formen på y är [antal noder], och den kommer att tillämpas på nodetiketterna.
kantindex: För att beskriva en oriktad graf måste vi expandera de ursprungliga kantindexen för att tillåta existensen av två distinkta riktade kanter som länkar samman samma två noder men pekar i motsatta riktningar.
Ett par kanter, den ena pekar från nod 100 till 200 och den andra från 200 till 100, krävs, till exempel, mellan noderna 100 och 200. Om kantindexen tillhandahålls, är det så här den oriktade grafen kan representeras. [2,2*antal originalkanter] kommer att vara tensorformen.
Vi skapar vår ritningsgrafmetod för att visa en graf. Det första steget är att omvandla vårt homogena nätverk till en NetworkX-graf, som sedan kan ritas med NetworkX.draw.
Gör vår GNN-modell och träna den
Vi börjar med att koda hela datauppsättningen genom att exekvera koda data med light=False och sedan anropa construct graph with light=False för att bygga hela grafen. Vi kommer inte att försöka rita denna stora graf eftersom jag antar att du använder en lokal maskin som har begränsade resurser.
Masker, som är binära vektorer som identifierar vilka noder som tillhör varje specifik mask med hjälp av siffrorna 0 och 1, kan användas för att meddela träningsfasen vilka noder som ska inkluderas under träning och för att tala om för slutledningsfasen vilka noder som är testdata. Fackla geometriska.transformers.
En delning på nodnivå kan läggas till med hjälp av träningsmasken, valmasken och testmaskegenskaperna i klassen AddTrainValTestMask, som kan användas för att ta en graf och göra det möjligt för oss att specificera hur vi vill att våra masker ska vara konstruerade.
Vi använder bara 10 % för träning och använder 60 % av data som testuppsättning medan vi använder 30 % som valideringsuppsättning.
Nu kommer vi att stapla två GCNConv-lager, varav det första har en utdatafunktion som är lika med antalet funktioner i vår graf som indatafunktioner.
I det andra lagret, som innehåller utgångsnoder lika med antalet av våra klasser, tillämpar vi en relu-aktiveringsfunktion och tillhandahåller de latenta funktionerna.
Kantindex och kantvikt är två av de många alternativen x som GCNConv kan acceptera i framåtfunktionen, men i vår situation behöver vi bara de två första variablerna.
Trots det faktum att vår modell kommer att kunna förutsäga klassen för varje nod i grafen, måste vi fortfarande bestämma noggrannheten och förlusten för varje uppsättning separat beroende på fasen.
Till exempel, under träning vill vi bara använda träningssetet för att bestämma noggrannheten och träningsförlusten, och därför är det här som våra masker kommer till användning.
För att beräkna lämplig förlust och noggrannhet kommer vi att definiera funktionerna för maskerad förlust och maskerad noggrannhet.
Utbildning av modellen
Nu när vi har definierat träningsändamålet för vilket facklan ska användas. Adam är en mästare optimerare.
Vi kommer att genomföra utbildningen under ett visst antal epoker samtidigt som vi håller ett öga på valideringsnoggrannheten.
Vi plottar även träningens förluster och noggrannheter under olika epoker.
Nackdelar med Graph Neural Network
Att använda GNN har några nackdelar. När vi ska använda GNNa och hur vi kan förbättra prestandan för våra maskininlärningsmodeller kommer båda att göras klart för oss när vi har en bättre förståelse för dem.
- Medan GNN är grunda nätverk, vanligtvis med tre lager, kan de flesta neurala nätverk gå djupt för att förbättra prestandan. Vi kan inte prestera i framkant på stora datamängder på grund av denna begränsning.
- Det är svårare att träna en modell på grafer, eftersom deras strukturella dynamik är dynamisk.
- På grund av de höga beräkningskostnaderna för dessa nätverk innebär det utmaningar att skala modellen för produktion. Att skala GNN för produktion kommer att vara utmanande om din grafstruktur är enorm och komplicerad.
Slutsats
Under de senaste åren har GNN:er utvecklats till kraftfulla och effektiva verktyg för maskininlärningsfrågor i grafdomänen. En grundläggande översikt över grafiska neurala nätverk ges i den här artikeln.
Efter det kan du börja skapa datasetet som ska användas för att träna och testa modellen. För att förstå hur den fungerar och vad den kan, kan du också gå mycket längre och träna den med en annan typ av dataset.
Lycklig kodning!
Kommentera uppropet