Table of Contents[Ferstopje][Toanje]
De djippe leartechniken bekend as "grafyske neurale netwurken" (GNN's) wurkje yn it grafdomein. Dizze netwurken hawwe de lêste tiid gebrûk fûn op in ferskaat oan fjilden, ynklusyf kompjûterfisy, oanbefellingssystemen en kombinatoriale optimalisaasje, om in pear te neamen.
Derneist kinne dizze netwurken brûkt wurde om komplekse systemen te fertsjintwurdigjen, ynklusyf sosjale netwurken, proteïne-proteïne ynteraksje netwurken, kennisgrafiken, en oaren yn ferskate fjilden fan stúdzje.
De net-euklidyske romte is wêr't grafykgegevens wurkje, yn tsjinstelling ta oare soarten gegevens lykas ôfbyldings. Om knooppunten te klassifisearjen, keppelings te foarsizzen, en klustergegevens, wurdt grafykanalyse brûkt.
Yn dit artikel sille wy de grafyk ûndersykje Neural Network yn detail, syn typen, en ek jouwe praktyske foarbylden mei help fan PyTorch.
Dus, wat is Graph?
In grafyk is in soarte fan gegevensstruktuer dy't bestiet út knooppunten en hoekpunten. De ferbinings tusken de ferskate knopen wurde bepaald troch de hoekpunten. As de rjochting wurdt oanjûn yn de knopen, de grafyk wurdt sein rjochte; oars, it is ûnrjochte.
In goede tapassing fan grafiken is it modellearjen fan de relaasjes tusken ferskate yndividuen yn in sosjaal netwurk. By it omgean mei komplekse omstannichheden, lykas keppelings en útwikselingen, binne grafiken tige nuttich.
Se wurde brûkt troch oanbefellingssystemen, semantyske analyse, analyse fan sosjale netwurken, en patroanherkenning
. It meitsjen fan grafyske oplossingen is in gloednij fjild dat in ynsjochsum begryp biedt fan komplekse en ûnderling relatearre gegevens.
Graph Neural Network
Grafyske neurale netwurken binne spesjalisearre neurale netwurktypen dy't kinne operearje op in grafykgegevensformaat. Grafyske ynbêding en konvolúsjonele neurale netwurken (CNN's) hawwe in wichtige ynfloed op har.
Grafyske neurale netwurken wurde brûkt yn taken dy't it foarsizzen fan knopen, rânen en grafiken omfetsje.
- CNN's wurde brûkt om ôfbyldings te klassifisearjen. Lykas, om in klasse te foarsizzen, wurde GNN's tapast op it pikselraster dat de grafykstruktuer fertsjintwurdiget.
- Tekstkategorisearring mei werhellende neurale netwurken. GNN's wurde ek brûkt mei grafyske arsjitektueren wêrby't elk wurd yn in sin in knooppunt is.
Om knopen, rânen of folsleine grafiken te foarsizzen, wurde neurale netwurken brûkt om GNN's te meitsjen. In foarsizzing op it knooppuntnivo, bygelyks, kin in probleem oplosse lykas spam-deteksje.
Linkfoarsizzing is in typysk gefal yn oanbefellingssystemen en kin in foarbyld wêze fan in edge-wise foarsizzingsprobleem.
Grafyk Neural Netwurk Soarten
Tal fan neuronale netwurktypen besteane, en Convolutional Neural Networks binne oanwêzich yn 'e mearderheid fan har. Wy sille leare oer de meast bekende GNN's yn dit diel.
Graph Convolutional Networks (GCN's)
Se binne te fergelykjen mei klassike CNN's. It krijt skaaimerken troch te sjen nei de tichtby lizzende knopen. De aktivearringsfunksje wurdt brûkt troch GNN's om net-lineariteit ta te foegjen nei it aggregearjen fan nodevektoren en it ferstjoeren fan de útfier nei de tichte laach.
It is opboud út Graph convolution, in lineêre laach, en in net-learner aktivearring funksje, yn wêzen. GCN's komme yn twa haadfarianten: Spectral Convolutional Networks en Spatial Convolutional Networks.
Grafyk Auto-Encoder Networks
It brûkt in encoder om te learen hoe't jo grafiken fertsjintwurdigje en in decoder om te besykjen ynputgrafiken te rekonstruearjen. D'r is in flessehalslaach dy't de encoder en decoder ferbynt.
Om't auto-encoders in poerbêste baan dogge by it behanneljen fan klassebalâns, wurde se faak brûkt yn linkfoarsizzing.
Recurrent Graph Neural Networks (RGNN's)
Yn multy-relasjonele netwurken, wêr't ien knooppunt in protte relaasjes hat, leart it it optimale diffusionpatroan en kin it de grafiken beheare. Om glêdens te fergrutsjen en oerparameterisaasje te ferminderjen, wurde regularizers brûkt yn dizze foarm fan grafysk neural netwurk.
Om bettere resultaten te krijen hawwe RGNN's minder ferwurkingskrêft nedich. Se wurde brûkt foar tekstgeneraasje, spraakherkenning, masine-oersetting, ôfbyldingsbeskriuwing, fideo-tagging, en tekst gearfetting.
Gated Neural Graph Networks (GGNN's)
As it giet om lange termyn ôfhinklike taken, prestearje se RGNN's. Troch knooppunt, râne en tydlike poarten op lange termyn ôfhinklikens op te nimmen, fersterkje gated grafyske neurale netwurken weromkommende grafyske neurale netwurken.
De poarten funksjonearje fergelykber mei Gated Recurrent Units (GRU's) yn dat se wend wurde om gegevens yn ferskate stadia op te roppen en te ferjitten.
Implementearje Graph Neural Network mei Pytorch
It spesifike probleem dat wy sille rjochtsje op is in mienskiplik node kategorisearring probleem. Wy hawwe in sizable sosjaal netwurk neamd musae-github, dat waard gearstald út de iepen API, foar GitHub-ûntwikkelders.
Rânen litte de ûnderlinge folgersferhâldingen sjen tusken de knooppunten, dy't ûntwikkelders (platfoarmbrûkers) fertsjintwurdigje dy't yn op syn minst 10 repositories hawwe stjer (notysje dat it wurd mutual in ûnrjochte relaasje oanjout).
Op grûn fan 'e lokaasje fan' e knooppunt, stjerrepositories, wurkjouwer en e-mailadres, wurde knooppuntenkarakteristiken ophelle. Foarsizze as in GitHub-brûker in webûntwikkelder is as in masine learen ûntwikkelder is ús taak.
De taaktitel fan elke brûker tsjinne as basis foar dizze doelfunksje.
PyTorch ynstallearje
Om te begjinnen, moatte wy earst ynstallearje PyTorch. Jo kinne it konfigurearje neffens jo masine fan hjir. Hjir is myn:
It ymportearjen fan modules
No ymportearje wy de nedige modules
Ymportearje en ferkenne de gegevens
De folgjende stap is om de gegevens te lêzen en de earste fiif rigen en de lêste fiif rigen út it labelbestân te plotjen.
Allinich twa fan 'e fjouwer kolommen - it knooppunt's id (dat wol sizze, brûker) en ml_target, dat is 1 as de brûker lid is fan 'e masine-learmienskip en 0 oars - binne relevant foar ús yn dizze situaasje.
Sjoen dat d'r mar twa klassen binne, kinne wy no der wis fan wêze dat ús taak in binêre klassifikaasjekwestje is.
As gefolch fan signifikante klasse-ûnbalâns kin de klassifikaasje gewoan oannimme hokker klasse de mearderheid is ynstee fan de ûnderfertsjintwurdige klasse te evaluearjen, wêrtroch klassebalâns in oare krúsjale faktor is om te beskôgjen.
It plotjen fan it histogram (frekwinsjeferdieling) lit wat ûnbalâns sjen, om't d'r minder klassen binne fan masine learen (label = 1) dan fan 'e oare klassen.
Funksje kodearring
De skaaimerken fan 'e knooppunten ynformearje ús oer de funksje dy't ferbûn is mei elke knooppunt. Troch ús metoade te ymplementearjen om gegevens te kodearjen, kinne wy dy skaaimerken direkt kodearje.
Wy wolle dizze metoade brûke om in lyts diel fan it netwurk (bygelyks 60 knopen) te ynkapseljen foar werjefte. De koade wurdt hjir neamd.
It ûntwerpen en werjaan fan grafiken
Wy sille geometrysk fakkel brûke. gegevens om ús grafyk te bouwen.
Foar in model in inkele grafyk mei ferskillende (opsjoneel) eigenskippen, gegevens dat is in ienfâldige Python foarwerp wurdt brûkt. Troch dizze klasse en de folgjende attributen te brûken - dy't allegear fakkeltensors binne - sille wy ús grafyske objekt meitsje.
De foarm fan de wearde x, dy't sil wurde tawiisd oan de kodearre node funksjes, is [oantal knopen, oantal funksjes].
De foarm fan y is [oantal knopen], en it sil tapast wurde op de node-labels.
edge index: Om in ûnrjochte grafyk te beskriuwen, moatte wy de orizjinele râneindices útwreidzje om it bestean fan twa ûnderskate rjochte rânen mooglik te meitsjen dy't deselde twa knopen keppelje, mar yn tsjinoerstelde rjochtingen wize.
In pear rânen, de iene wiist fan knooppunt 100 oant 200 en de oare fan 200 oant 100, is nedich, bygelyks, tusken knooppunten 100 en 200. As de râne-yndeksen foarsjoen binne, dan is dit hoe't de ûnrjochte grafyk werjûn wurde kin. [2,2 * oantal orizjinele rânen] sil de tensorfoarm wêze.
Wy meitsje ús metoade foar tekenjegrafyk om in grafyk te werjaan. De earste stap is om ús homogene netwurk te transformearjen yn in NetworkX-grafyk, dy't dan kin wurde tekene mei NetworkX.draw.
Meitsje ús GNN-model en train it
Wy begjinne mei it kodearjen fan de heule set gegevens troch kodearringgegevens út te fieren mei ljocht=False en dan konstruksjegrafyk oproppe mei ljocht=False om de heule grafyk te bouwen. Wy sille net besykje dizze grutte grafyk te tekenjen, om't ik nim oan dat jo in lokale masine brûke dy't beheinde boarnen hat.
Maskers, dy't binêre fektors binne dy't identifisearje hokker knooppunten by elk spesifyk masker hearre mei de sifers 0 en 1, kinne brûkt wurde om de trainingsfaze te notearjen hokker knooppunten moatte wurde opnommen yn 'e training en om de konklúzjefaze te fertellen hokker knooppunten de testgegevens binne. Torch geometrysk.transforms.
In knooppuntnivo-split kin wurde tafoege mei de eigenskippen fan trainingsmasker, valmasker en testmasker fan 'e AddTrainValTestMask-klasse, dy't kin wurde brûkt om in grafyk te nimmen en ús yn steat te stellen om te spesifisearjen hoe't wy wolle dat ús maskers wurde konstruearre.
Wy brûke gewoan 10% foar training en brûke 60% fan 'e gegevens as de testset, wylst wy 30% brûke as de falidaasjeset.
No sille wy twa GCNConv-lagen steapele, wêrfan de earste in oantal útfierfunksjes hat dat gelyk is oan it oantal funksjes yn ús grafyk as ynfierfunksjes.
Yn 'e twadde laach, dy't útfierknooppunten befettet gelyk oan it oantal fan ús klassen, tapasse wy in relu-aktivearringsfunksje en leverje de latinte funksjes.
Râne-yndeks en rânegewicht binne twa fan 'e protte opsjes x dy't GCNConv kin akseptearje yn 'e foarútfunksje, mar yn ús situaasje hawwe wy allinich de earste twa fariabelen nedich.
Nettsjinsteande it feit dat ús model de klasse fan elke knooppunt yn 'e grafyk kin foarsizze, moatte wy noch de krektens en ferlies foar elke set apart bepale ôfhinklik fan de faze.
Bygelyks, tidens training wolle wy allinich de trainingsset brûke om de krektens en trainingsferlies te bepalen, en dêrom is dit wêr't ús maskers fan pas komme.
Om it passende ferlies en krektens te berekkenjen, sille wy de funksjes fan maskere ferlies en maskere krektens definiearje.
Training it model
No't wy it trainingsdoel hawwe definieare wêrfoar de fakkel sil wurde brûkt. Adam is in master optimizer.
Wy sille de training foar in bepaald oantal epoken fiere, wylst wy de validaasjekrektens yn 'e gaten hâlde.
Wy plotje ek de ferliezen en krektens fan 'e training yn ferskate epoken.
Neidielen fan Graph Neural Network
It brûken fan GNN's hat in pear neidielen. Wannear't jo GNNa moatte brûke en hoe't jo de prestaasjes fan ús masine-learmodellen kinne ferbetterje, sille ús beide dúdlik wurde makke nei't wy se in better begryp hawwe.
- Wylst GNN's ûndjippe netwurken binne, typysk mei trije lagen, kinne de measte neurale netwurken djip gean om prestaasjes te ferbetterjen. Wy binne net yn steat om te prestearjen op it snijflak op grutte datasets fanwegen dizze beheining.
- It is dreger om in model op grafiken te trenen, om't har strukturele dynamyk dynamysk is.
- Fanwegen de hege komputerkosten fan dizze netwurken stelt it skaalfergrutting fan it model foar produksje útdagings. Skaalfergrutting fan de GNN's foar produksje sil útdaagjend wêze as jo grafykstruktuer enoarm en yngewikkeld is.
Konklúzje
Yn 'e ôfrûne jierren hawwe GNN's har ûntwikkele ta krêftige en effektive ark foar problemen mei masinelearen yn it grafdomein. In fûnemintele oersjoch fan grafyske neurale netwurken wurdt jûn yn dit artikel.
Dêrnei kinne jo begjinne mei it meitsjen fan de dataset dy't sil wurde brûkt om it model te trainen en te testen. Om te begripen hoe't it funksjonearret en wat it yn steat is, kinne jo ek folle fierder gean en it traine mei in oare soart dataset.
Lokkige kodearring!
Leave a Reply