Kazalo[Skrij][Pokaži]
Tehnike globokega učenja, znane kot "grafične nevronske mreže" (GNN), delujejo v domeni grafov. Ta omrežja so v zadnjem času našla uporabo na različnih področjih, vključno z računalniškim vidom, priporočljivimi sistemi in kombinatorično optimizacijo, če naštejemo le nekatere.
Poleg tega se ta omrežja lahko uporabljajo za predstavitev kompleksnih sistemov, vključno s socialnimi omrežji, omrežji za interakcijo protein-protein, grafi znanja in drugimi na več študijskih področjih.
Podatki grafov delujejo v neevklidskem prostoru, v nasprotju z drugimi vrstami podatkov, kot so slike. Za razvrščanje vozlišč, napovedovanje povezav in podatkov o grozdih se uporablja analiza grafov.
V tem članku bomo preučili graf nevronske mreže podrobno o njegovih vrstah, pa tudi o praktičnih primerih uporabe PyTorcha.
Torej, kaj je Graph?
Graf je vrsta podatkovne strukture, sestavljena iz vozlišč in oglišč. Povezave med različnimi vozlišči so določene z vozlišči. Če je smer navedena v vozliščih, se reče, da je graf usmerjen; drugače je neusmerjen.
Dobra uporaba grafov je modeliranje odnosov med različnimi posamezniki v a socialna omrežja. Pri obravnavanju zapletenih okoliščin, kot so povezave in izmenjave, so grafi zelo koristni.
Uporabljajo jih priporočilni sistemi, semantična analiza, analiza družbenih omrežij in prepoznavanje vzorcev
. Ustvarjanje rešitev, ki temeljijo na grafih, je povsem novo področje, ki ponuja pronicljivo razumevanje kompleksnih in medsebojno povezanih podatkov.
Grafična nevronska mreža
Grafne nevronske mreže so specializirane vrste nevronskih mrež, ki lahko delujejo na formatu grafičnih podatkov. Nanje pomembno vplivajo vdelava grafov in konvolucijske nevronske mreže (CNN).
Grafne nevronske mreže se uporabljajo pri nalogah, ki vključujejo napovedovanje vozlišč, robov in grafov.
- CNN se uporabljajo za razvrščanje slik. Podobno se za predvidevanje razreda GNN-ji uporabijo za mrežo slikovnih pik, ki predstavlja strukturo grafa.
- Kategorizacija besedila z uporabo ponavljajočih se nevronskih mrež. GNN se uporabljajo tudi z grafičnimi arhitekturami, kjer je vsaka beseda v frazi vozlišče.
Za napovedovanje vozlišč, robov ali popolnih grafov se nevronske mreže uporabljajo za ustvarjanje GNN. Predvidevanje na ravni vozlišča lahko na primer reši težavo, kot je odkrivanje neželene pošte.
Predvidevanje povezav je tipičen primer v priporočljivih sistemih in je lahko primer težave z napovedovanjem na robu.
Graf Vrste nevronske mreže
Obstajajo številne vrste nevronskih mrež in v večini so prisotne konvolucijske nevronske mreže. V tem delu bomo spoznali najbolj znane GNN.
Grafikovanje konvolucijskih omrežij (GCN)
Primerljivi so s klasičnimi CNN-ji. Značilnosti pridobi s pogledom na bližnja vozlišča. Aktivacijsko funkcijo GNN uporabljajo za dodajanje nelinearnosti po združevanju vektorjev vozlišč in pošiljanju izhoda v gosto plast.
Sestavljen je iz konvolucije grafa, linearne plasti in v bistvu aktivacijske funkcije, ki ni učenec. GCN-ji so na voljo v dveh glavnih različicah: spektralna konvolucijska omrežja in prostorska konvolucijska omrežja.
Graf Auto-Encoder Networks
Uporablja kodirnik, da se nauči predstaviti grafe, in dekoder, da poskusi rekonstruirati vhodne grafe. Obstaja plast ozkega grla, ki povezuje kodirnik in dekoder.
Ker samodejni kodirniki odlično obvladujejo ravnovesje razredov, se pogosto uporabljajo pri napovedovanju povezave.
Nevronske mreže s ponavljajočim se grafom (RGNN)
V večrelacijskih omrežjih, kjer ima posamezno vozlišče številne relacije, se nauči optimalnega difuzijskega vzorca in lahko upravlja grafe. Da bi povečali gladkost in zmanjšali prekomerno parametrizacijo, se v tej obliki grafične nevronske mreže uporabljajo regulatorji.
Da bi dosegli boljše rezultate, RGNN potrebujejo manj procesorske moči. Uporabljajo se za ustvarjanje besedila, prepoznavanje govora, strojno prevajanje, opisovanje slik, označevanje videa in povzemanje besedila.
Gated Neural Graph Networks (GGNN)
Ko gre za dolgoročno odvisne naloge, prekašajo RGNN. Z vključitvijo vozlišč, robov in časovnih vrat na dolgoročne odvisnosti nevronske mreže z zaprtimi grafi izboljšajo nevronske mreže ponavljajočih se grafov.
Vrata delujejo podobno kot Gated Recurrent Units (GRU-ji), saj se uporabljajo za priklic in pozabljanje podatkov v različnih fazah.
Implementacija Graph Neural Network z uporabo Pytorcha
Posebna težava, na katero se bomo osredotočili, je pogosta težava s kategorizacijo vozlišč. Imamo obsežno družabno omrežje, imenovano musae-github, ki je bil preveden iz odprtega API-ja za razvijalce GitHub.
Robovi prikazujejo medsebojna razmerja sledilcev med vozlišči, ki predstavljajo razvijalce (uporabnike platforme), ki so imeli zvezdico v vsaj 10 repozitorijih (upoštevajte, da beseda vzajemno označuje neusmerjeno razmerje).
Na podlagi lokacije vozlišča, repozitorijev z zvezdico, delodajalca in e-poštnega naslova se pridobijo značilnosti vozlišča. Predvidevanje, ali je uporabnik GitHub spletni razvijalec ali a razvijalec strojnega učenja je naša naloga.
Naziv delovnega mesta vsakega uporabnika je služil kot osnova za to funkcijo ciljanja.
Namestitev PyTorcha
Za začetek moramo najprej namestiti PyTorch. Konfigurirate ga lahko glede na vaš stroj iz tukaj. Tukaj je moj:
Uvoz modulov
Zdaj uvozimo potrebne module
Uvažanje in raziskovanje podatkov
Naslednji korak je branje podatkov in risanje prvih petih vrstic in zadnjih petih vrstic iz datoteke z oznakami.
Samo dva od štirih stolpcev – ID vozlišča (tj. uporabnik) in ml_target, ki je 1, če je uporabnik član skupnosti strojnega učenja, in 0 sicer – sta za nas pomembna v tej situaciji.
Glede na to, da obstajata samo dva razreda, smo zdaj lahko prepričani, da je naša naloga vprašanje binarne klasifikacije.
Zaradi znatnih razrednih neravnovesij lahko klasifikator samo domneva, kateri razred je večina, namesto da oceni premalo zastopani razred, zaradi česar je razredno ravnotežje še en ključni dejavnik, ki ga je treba upoštevati.
Izris histograma (frekvenčna porazdelitev) razkrije nekaj neravnovesja, ker je manj razredov iz strojnega učenja (oznaka=1) kot iz drugih razredov.
Funkcijsko kodiranje
Značilnosti vozlišč nas obveščajo o funkciji, ki je povezana s posameznim vozliščem. Z implementacijo naše metode za kodiranje podatkov lahko te značilnosti takoj kodiramo.
To metodo želimo uporabiti za enkapsulacijo majhnega dela omrežja (recimo 60 vozlišč) za prikaz. Koda je navedena tukaj.
Oblikovanje in prikaz grafov
Uporabili bomo geometrijo bakle. podatke za izdelavo našega grafa.
Za modeliranje posameznega grafa z različnimi (neobveznimi) lastnostmi se uporabljajo podatki, ki so preprost objekt Python. Z uporabo tega razreda in naslednjih atributov – ki so vsi tenzorji bakle – bomo ustvarili svoj grafični objekt.
Oblika vrednosti x, ki bo dodeljena značilnostim kodiranega vozlišča, je [število vozlišč, število funkcij].
Oblika y je [število vozlišč] in bo uporabljena za oznake vozlišč.
Indeks robov: Da bi opisali neusmerjeni graf, moramo razširiti prvotne indekse robov, da omogočimo obstoj dveh različnih usmerjenih robov, ki povezujeta isti dve vozlišči, vendar kažeta v nasprotni smeri.
Par robov, od katerih eden kaže od vozlišč 100 do 200 in drugi od 200 do 100, je potreben na primer med vozlišči 100 in 200. Če so zagotovljeni robni indeksi, je tako mogoče predstaviti neusmerjeni graf. [2,2*število izvirnih robov] bo oblika tenzorja.
Za prikaz grafa ustvarimo metodo risanja grafa. Prvi korak je transformacija našega homogenega omrežja v graf NetworkX, ki ga lahko nato narišemo z uporabo NetworkX.draw.
Naredite naš model GNN in ga usposobite
Začnemo s kodiranjem celotnega niza podatkov, tako da izvedemo encode data s light=False in nato pokličemo construct graph s light=False, da zgradimo celoten graf. Ne bomo poskušali narisati tega velikega grafa, ker predvidevam, da uporabljate lokalni računalnik z omejenimi viri.
Maske, ki so binarni vektorji, ki identificirajo, katera vozlišča pripadajo posamezni maski z uporabo števk 0 in 1, se lahko uporabijo za obveščanje faze usposabljanja, katera vozlišča morajo biti vključena med usposabljanjem, in za sporočanje fazi sklepanja, katera vozlišča so testni podatki. Torch geometric.transforms.
Razdelitev na ravni vozlišča je mogoče dodati z uporabo lastnosti vadbene maske, valovne maske in testne maske razreda AddTrainValTestMask, ki se lahko uporabijo za zajemanje grafa in nam omogočajo, da določimo, kako želimo, da so naše maske izdelane.
Uporabimo samo 10 % za usposabljanje in uporabimo 60 % podatkov kot testni niz, medtem ko uporabimo 30 % kot validacijski niz.
Zdaj bomo zložili dva sloja GCNConv, od katerih ima prvi izhodno število funkcij, ki je enako številu funkcij v našem grafu kot vhodnih funkcij.
V drugi plasti, ki vsebuje izhodna vozlišča, ki so enaka številu naših razredov, uporabimo aktivacijsko funkcijo relu in zagotovimo latentne funkcije.
Indeks roba in teža roba sta dve od številnih možnosti x, ki jih GCNConv lahko sprejme v funkciji za posredovanje, vendar v naši situaciji potrebujemo samo prvi dve spremenljivki.
Kljub temu, da bo naš model lahko napovedal razred vsakega vozlišča v grafu, moramo še vedno določiti natančnost in izgubo za vsak niz posebej glede na fazo.
Na primer, med vadbo želimo uporabiti vadbeni komplet samo za ugotavljanje natančnosti in izgube pri vadbi, zato so tu naše maske še kako prav.
Za izračun ustrezne izgube in točnosti bomo definirali funkciji prikrite izgube in prikrite točnosti.
Usposabljanje modela
Zdaj, ko smo definirali namen usposabljanja, za katerega se bo svetilka uporabljala. Adam je mojster optimizacije.
Izvajali bomo usposabljanje za določeno število epoh, pri tem pa pazili na natančnost validacije.
Načrtujemo tudi izgube in natančnosti usposabljanja v različnih obdobjih.
Slabosti grafične nevronske mreže
Uporaba GNN-jev ima nekaj slabosti. Kdaj uporabiti GNNa in kako izboljšati učinkovitost naših modelov strojnega učenja, nam bo jasno, ko jih bomo bolje razumeli.
- Medtem ko so GNN plitva omrežja, običajno s tremi plastmi, lahko večina nevronskih mrež seže globoko, da izboljša učinkovitost. Zaradi te omejitve ne moremo delovati na vrhunskem nivoju velikih podatkovnih nizov.
- Težje je učiti model na grafih, saj je njihova strukturna dinamika dinamična.
- Zaradi visokih računalniških stroškov teh omrežij prilagajanje modela za proizvodnjo predstavlja izziv. Skaliranje GNN-jev za proizvodnjo bo izziv, če je struktura vašega grafa ogromna in zapletena.
zaključek
V zadnjih nekaj letih so se GNN razvila v močna in učinkovita orodja za težave s strojnim učenjem v domeni grafov. V tem članku je podan temeljni pregled grafičnih nevronskih mrež.
Po tem lahko začnete ustvarjati nabor podatkov, ki bo uporabljen za usposabljanje in testiranje modela. Če želite razumeti, kako deluje in česa je sposoben, lahko greste tudi veliko dlje in ga usposobite z uporabo druge vrste nabora podatkov.
Srečno kodiranje!
Pustite Odgovori