Sisukord[Peida][Näita]
Graafiku domeenis töötavad süvaõppe tehnikad, mida tuntakse kui "graafi närvivõrke" (GNN). Need võrgud on viimasel ajal leidnud kasutust erinevates valdkondades, sealhulgas arvutinägemises, soovitussüsteemides ja kombinatoorses optimeerimises.
Lisaks saab neid võrgustikke kasutada keerukate süsteemide, sealhulgas sotsiaalsete võrgustike, valgu-valgu interaktsioonivõrgustike, teadmiste graafikute ja muude mitmes õppevaldkonnas esindamiseks.
Mitteeukleidiline ruum on koht, kus graafilised andmed toimivad, erinevalt teist tüüpi andmetest, näiteks piltidest. Sõlmede klassifitseerimiseks, linkide ennustamiseks ja klastriandmeteks kasutatakse graafikute analüüsi.
Selles artiklis uurime graafikut Neural Network üksikasjalikult, selle tüübid ja praktilised näited PyTorchi kasutamisest.
Niisiis, mis on graafik?
Graaf on andmestruktuur, mis koosneb sõlmedest ja tippudest. Erinevate sõlmede vahelised ühendused määravad ära tipud. Kui suund on sõlmedes näidatud, siis öeldakse, et graafik on suunatud; muidu on see suunamata.
Graafikute hea rakendus on erinevate indiviidide vaheliste suhete modelleerimine a sotsiaalne võrgustik. Keeruliste asjaolude, näiteks linkide ja vahetuste käsitlemisel on graafikud väga kasulikud.
Neid kasutavad soovitussüsteemid, semantiline analüüs, sotsiaalvõrgustike analüüs ja mustrituvastus
. Graafikupõhiste lahenduste loomine on täiesti uus valdkond, mis pakub terviklikku arusaama keerulistest ja omavahel seotud andmetest.
Graafiline närvivõrk
Graafilised närvivõrgud on spetsiaalsed närvivõrgutüübid, mis võivad töötada graafiku andmevormingus. Graafiku manustamine ja konvolutsioonilised närvivõrgud (CNN) avaldavad neile olulist mõju.
Graafiku närvivõrke kasutatakse ülesannetes, mis hõlmavad sõlmede, servade ja graafikute ennustamist.
- CNN-i kasutatakse piltide klassifitseerimiseks. Samamoodi rakendatakse klassi ennustamiseks GNN-e pikslivõrgule, mis esindab graafiku struktuuri.
- Teksti kategoriseerimine korduvate närvivõrkude abil. GNN-e kasutatakse ka graafiarhitektuuridega, kus iga fraasi sõna on sõlm.
Sõlmede, servade või täielike graafikute prognoosimiseks kasutatakse GNN-ide loomiseks närvivõrke. Näiteks ennustus sõlme tasemel võib lahendada sellise probleemi nagu rämpsposti tuvastamine.
Linkide ennustamine on soovitussüsteemides tüüpiline juhtum ja see võib olla näide servapõhisest ennustusprobleemist.
Graafik närvivõrkude tüübid
On olemas arvukalt närvivõrkude tüüpe ja enamikus neist on konvolutsioonilised närvivõrgud. Selles osas õpime tundma tuntumaid GNN-e.
Graafika konvolutsioonivõrgud (GCN-id)
Need on võrreldavad klassikaliste CNN-idega. See omandab omadused, vaadates lähedalasuvaid sõlme. Aktiveerimisfunktsiooni kasutavad GNN-id mittelineaarsuse lisamiseks pärast sõlmevektorite koondamist ja väljundi saatmist tihedale kihile.
See koosneb sisuliselt graafiku konvolutsioonist, lineaarsest kihist ja mitte-õppija aktiveerimisfunktsioonist. GCN-e on kahte peamist tüüpi: spektraalkonvolutsioonivõrgud ja ruumilised konvolutsioonivõrgud.
Graafika automaatse kodeerija võrgud
Graafikute esitamise õppimiseks kasutab see kodeerijat ja sisendgraafikute rekonstrueerimiseks dekoodrit. Kodeerijat ja dekoodrit ühendab pudelikaela kiht.
Kuna automaatkodeerijad saavad klassi tasakaalu haldamisel suurepäraselt hakkama, kasutatakse neid sageli linkide ennustamisel.
Korduvad graafilised närvivõrgud (RGNN)
Mitme relatsiooniga võrkudes, kus ühel sõlmel on palju suhteid, õpib see optimaalse difusioonimustri ja saab hallata graafikuid. Sujuvuse suurendamiseks ja üleparameetrite vähendamiseks kasutatakse sellises graafi närvivõrgu vormis regulaatoreid.
Paremate tulemuste saamiseks vajavad RGNN-id vähem töötlemisvõimsust. Neid kasutatakse teksti genereerimiseks, kõnetuvastuseks, masintõlkeks, piltide kirjeldamiseks, video märgistamiseks ja teksti kokkuvõtmiseks.
Gated Neural Graph Networks (GGNN-id)
Kui rääkida pikaajalistest sõltuvatest ülesannetest, siis need ületavad RGNN-e. Kaasates pikaajalistele sõltuvustele sõlme, serva ja ajalised väravad, suurendavad väravatega graafi närvivõrgud korduvaid graafi närvivõrke.
Väravad toimivad sarnaselt Gated Recurrent Units (GRU) -ga, kuna need on harjunud erinevates etappides andmeid meelde tuletama ja unustama.
Graafilise närvivõrgu rakendamine Pytorchi abil
Konkreetne probleem, millele keskendume, on tavaline sõlmede kategoriseerimise probleem. Meil on suur sotsiaalne võrgustik nimega musae-github, mis koostati avatud API-st GitHubi arendajatele.
Servad näitavad sõlmede vahelisi vastastikuseid jälgijate suhteid, mis esindavad arendajaid (platvormi kasutajaid), kes on tärniga tähistanud vähemalt 10 hoidlas (pange tähele, et sõna vastastikune tähistab suunamata suhet).
Sõlme asukoha, tärniga tähistatud hoidlate, tööandja ja e-posti aadressi alusel hangitakse sõlme omadused. Ennustamine, kas GitHubi kasutaja on veebiarendaja või a masinõppe arendaja on meie ülesanne.
Selle sihtimisfunktsiooni aluseks oli iga kasutaja ametinimetus.
PyTorchi installimine
Alustuseks peame esmalt installima PyTorch. Saate seda vastavalt oma masinale konfigureerida alates siin. Siin on minu oma:
Moodulite importimine
Nüüd impordime vajalikud moodulid
Andmete importimine ja uurimine
Järgmine samm on andmete lugemine ja sildifaili esimese viie ja viimase viie rea joonistamine.
Selles olukorras on meie jaoks asjakohased ainult kaks neljast veerust – sõlme ID (st kasutaja) ja ml_target, mis on 1, kui kasutaja on masinõppekogukonna liige, ja muul juhul 0.
Arvestades, et klasse on vaid kaks, võime nüüd olla kindlad, et meie ülesanne on binaarne klassifitseerimise probleem.
Märkimisväärse klasside tasakaalustamatuse tõttu võib klassifikaator lihtsalt eeldada, milline klass on enamus, selle asemel et hinnata alaesindatud klassi, muutes klasside tasakaalu teiseks oluliseks teguriks.
Histogrammi joonistamine (sagedusjaotus) näitab mõningast tasakaalustamatust, kuna masinõppe klasse (silt = 1) on vähem kui teistes klassides.
Funktsioonide kodeerimine
Sõlmede omadused annavad meile teada iga sõlmega seotud funktsioonist. Rakendades meie meetodit andmete kodeerimiseks, saame need omadused koheselt kodeerida.
Soovime seda meetodit kasutada väikese osa võrgust (näiteks 60 sõlme) kuvamiseks kapseldamiseks. Kood on siin loetletud.
Graafikute kujundamine ja kuvamine
Kasutame geomeetrilist taskulampi. andmed meie graafiku koostamiseks.
Erinevate (valikuliste) omadustega ühe graafiku modelleerimiseks kasutatakse andmeid, mis on lihtsad Pythoni objektid. Kasutades seda klassi ja järgmisi atribuute – mis kõik on tõrvikutensorid – loome oma graafikuobjekti.
Väärtuse x, mis eraldatakse kodeeritud sõlme tunnustele, vorm on [sõlmede arv, tunnuste arv].
Y kuju on [sõlmede arv] ja see rakendatakse sõlme siltidele.
servaindeks: suunamata graafi kirjeldamiseks peame laiendama esialgseid servaindekseid, et võimaldada kahe erineva suunatud serva olemasolu, mis seovad samu kahte sõlme, kuid osutavad vastupidises suunas.
Näiteks sõlmede 100 ja 200 vahel on vajalik servapaar, millest üks osutab sõlmest 200 kuni 100 ja teine 100 kuni 200. Kui on ette nähtud servaindeksid, saab suunamata graafiku esitada nii. [2,2*algsete servade arv] on tensorivorm.
Loome oma joonistusgraafiku meetodi graafiku kuvamiseks. Esimene samm on muuta meie homogeenne võrk NetworkX-i graafikuks, mida saab seejärel joonistada NetworkX.draw abil.
Looge meie GNN-mudel ja treenige seda
Alustuseks kodeerime kogu andmekomplekti, käivitades andmete kodeerimise parameetriga light=False ja seejärel kutsudes kogu graafiku koostamiseks välja construct graph parameetriga light=False. Me ei püüa seda suurt graafikut joonistada, sest ma eeldan, et kasutate kohalikku masinat, millel on piiratud ressursid.
Maske, mis on binaarvektorid, mis määravad numbrite 0 ja 1 abil kindlaks, millised sõlmed igasse konkreetsesse maski kuuluvad, saab kasutada koolitusfaasi teavitamiseks, millised sõlmed tuleks koolituse ajal kaasata, ja järeldusfaasile öelda, millised sõlmed on testiandmed. Põleti geomeetriline.teiseb.
Sõlmetaseme jaotuse saab lisada klassi AddTrainValTestMask treeningmaski, val maski ja testmaski atribuutide abil, mida saab kasutada graafiku koostamiseks ja võimaldada meil määrata, kuidas soovime oma maske koostada.
Kasutame lihtsalt 10% koolituseks ja 60% andmetest testikomplektina, samas kui valideerimiskomplektina 30%.
Nüüd paneme virna kaks GCNConv kihti, millest esimesel on väljundfunktsioonide arv, mis võrdub sisendfunktsioonidena meie graafiku funktsioonide arvuga.
Teises kihis, mis sisaldab meie klasside arvuga võrdseid väljundsõlmi, rakendame relu aktiveerimisfunktsiooni ja pakume varjatud funktsioone.
Serva indeks ja serva kaal on kaks paljudest valikutest x, mida GCNConv saab edasisuunamisfunktsioonis aktsepteerida, kuid meie olukorras vajame ainult kahte esimest muutujat.
Hoolimata asjaolust, et meie mudel suudab ennustada graafiku iga sõlme klassi, peame siiski määrama iga komplekti täpsuse ja kadu sõltuvalt faasist eraldi.
Näiteks treeningu ajal tahame treeningkomplekti kasutada ainult täpsuse ja treeningu kaotuse määramiseks ning seetõttu on meie maskid siinkohal kasulikud.
Sobiva kadu ja täpsuse arvutamiseks määratleme maskeeritud kadu ja maskeeritud täpsuse funktsioonid.
Modelli koolitamine
Nüüd, kui oleme määratlenud koolituse eesmärgi, milleks tõrvikut kasutatakse. Adam on meister optimeerija.
Viime koolitust läbi teatud arvu perioode, jälgides samal ajal valideerimise täpsust.
Samuti joonistame välja koolituse kaotused ja täpsused erinevatel ajajärkudel.
Graafilise närvivõrgu puudused
GNN-ide kasutamisel on mõned puudused. Millal GNNa-d kasutada ja kuidas meie masinõppemudelite jõudlust parandada, saame mõlemad selgeks pärast seda, kui oleme neist paremini aru saanud.
- Kuigi GNN-id on madalad võrgud, tavaliselt kolmekihilised, võib enamik närvivõrke jõudluse parandamiseks minna sügavale. Selle piirangu tõttu ei saa me suurte andmehulkade puhul tipptasemel toimida.
- Graafikutel on mudelit keerulisem treenida, kuna nende struktuurne dünaamika on dünaamiline.
- Nende võrkude kõrgete arvutuskulude tõttu on mudeli skaleerimine tootmiseks väljakutseid. GNN-ide skaleerimine tootmiseks on keeruline, kui teie graafiku struktuur on tohutu ja keeruline.
Järeldus
Viimastel aastatel on GNN-id arenenud võimsateks ja tõhusateks tööriistadeks graafikuvaldkonna masinõppeprobleemide lahendamiseks. Selles artiklis antakse põhiülevaade graafi närvivõrkudest.
Pärast seda saate hakata looma andmestikku, mida kasutatakse mudeli koolitamiseks ja testimiseks. Et mõista, kuidas see toimib ja milleks see võimeline on, võite minna palju kaugemale ja treenida seda teist tüüpi andmestiku abil.
Head kodeerimist!
Jäta vastus