Obsah[Skryť][Šou]
Techniky hlbokého učenia známe ako „grafové neurónové siete“ (GNN) fungujú v doméne grafov. Tieto siete v poslednej dobe našli využitie v rôznych oblastiach, vrátane počítačového videnia, odporúčacích systémov a kombinatorickej optimalizácie, aby sme vymenovali aspoň niektoré.
Okrem toho môžu byť tieto siete použité na reprezentáciu komplexných systémov, vrátane sociálnych sietí, sietí interakcie proteín-proteín, znalostných grafov a iných v niekoľkých študijných odboroch.
Neeuklidovský priestor je miesto, kde fungujú grafové údaje, na rozdiel od iných typov údajov, ako sú obrázky. Na klasifikáciu uzlov, predpovedanie prepojení a klastrových údajov sa používa grafová analýza.
V tomto článku sa pozrieme na graf Neural Network podrobne, jeho typy, ako aj praktické príklady s použitím PyTorch.
Čo je teda Graph?
Graf je typ dátovej štruktúry zloženej z uzlov a vrcholov. Spojenia medzi rôznymi uzlami sú určené vrcholmi. Ak je smer uvedený v uzloch, hovoríme, že graf je orientovaný; inak je to neusmernene.
Dobrou aplikáciou grafov je modelovanie vzťahov medzi rôznymi jednotlivcami v a sociálna sieť. Pri riešení zložitých okolností, ako sú odkazy a výmeny, sú grafy veľmi užitočné.
Používajú ich systémy odporúčaní, sémantická analýza, analýza sociálnych sietí a rozpoznávanie vzorov
. Vytváranie riešení založených na grafoch je úplne nová oblasť, ktorá ponúka dôkladné pochopenie zložitých a vzájomne súvisiacich údajov.
Graf neurónová sieť
Grafové neurónové siete sú špecializované typy neurónových sietí, ktoré môžu pracovať na formáte grafu. Významný vplyv na ne má vkladanie grafov a konvolučné neurónové siete (CNN).
Grafové neurónové siete sa používajú v úlohách, ktoré zahŕňajú predpovedanie uzlov, hrán a grafov.
- CNN sa používajú na klasifikáciu obrázkov. Podobne na predpovedanie triedy sa GNN aplikujú na pixelovú mriežku, ktorá predstavuje štruktúru grafu.
- Kategorizácia textu pomocou rekurentných neurónových sietí. GNN sa používajú aj v grafových architektúrach, kde každé slovo vo fráze je uzol.
Na predpovedanie uzlov, hrán alebo úplných grafov sa na vytváranie GNN používajú neurónové siete. Predikcia na úrovni uzla môže napríklad vyriešiť problém, ako je detekcia spamu.
Predikcia odkazu je typickým prípadom v systémoch odporúčaní a môže byť príkladom problému s predikciou z okraja.
Graf typov neurónových sietí
Existuje množstvo typov neurónových sietí a konvolučné neurónové siete sú prítomné vo väčšine z nich. V tejto časti sa dozvieme o najznámejších GNN.
Graf konvolučných sietí (GCN)
Sú porovnateľné s klasickými CNN. Charakteristiky získava pohľadom na blízke uzly. Aktivačnú funkciu používajú GNN na pridanie nelinearity po agregácii uzlových vektorov a odoslaní výstupu do hustej vrstvy.
Skladá sa z konvolúcie grafu, lineárnej vrstvy a v podstate neučiacej sa aktivačnej funkcie. GCN sa dodávajú v dvoch hlavných variantoch: spektrálne konvolučné siete a priestorové konvolučné siete.
Siete s automatickým kódovaním grafov
Používa kodér, aby sa naučil reprezentovať grafy, a dekodér na pokus o rekonštrukciu vstupných grafov. Existuje úzka vrstva spájajúca kodér a dekodér.
Keďže automatické kódovače odvádzajú vynikajúcu prácu pri zvládaní vyváženia tried, často sa používajú pri predikcii odkazov.
Opakujúce sa grafové neurónové siete (RGNN)
V multirelačných sieťach, kde má jeden uzol množstvo vzťahov, sa naučí optimálny difúzny vzor a dokáže spravovať grafy. Na zvýšenie plynulosti a zníženie nadmernej parametrizácie sa v tejto forme grafovej neurónovej siete používajú regularizátory.
Aby sa dosiahli lepšie výsledky, RGNN vyžadujú menší výpočtový výkon. Používajú sa na generovanie textu, rozpoznávanie reči, strojový preklad, popis obrázkov, označovanie videa a sumarizáciu textu.
Gated Neural Graph Networks (GGNN)
Pokiaľ ide o dlhodobé závislé úlohy, prekonávajú RGNN. Zahrnutím uzlov, okrajov a časových brán do dlhodobých závislostí, neurónové siete s hradlovým grafom zlepšujú neurónové siete s rekurentnými grafmi.
Brány fungujú podobne ako Gated Recurrent Units (GRU) v tom, že sa používajú na vyvolanie a zabudnutie údajov v rôznych fázach.
Implementácia grafovej neurónovej siete pomocou Pytorch
Špecifický problém, na ktorý sa zameriame, je bežný problém kategorizácie uzlov. Máme veľkú sociálnu sieť tzv musae-github, ktorý bol zostavený z otvoreného API pre vývojárov GitHub.
Hrany znázorňujú vzájomné vzťahy nasledovníkov medzi uzlami, ktoré predstavujú vývojárov (používateľov platformy), ktorí zahviezdili aspoň v 10 úložiskách (všimnite si, že slovo vzájomný označuje neriadený vzťah).
Charakteristiky uzla sa získavajú na základe polohy uzla, úložísk označených hviezdičkou, zamestnávateľa a e-mailovej adresy. Predpovedanie, či je používateľ GitHub webový vývojár alebo a vývojár strojového učenia je našou úlohou.
Ako základ pre túto funkciu zacielenia slúžil pracovný názov každého používateľa.
Inštalácia PyTorch
Ak chcete začať, musíme najprv nainštalovať PyTorch. Môžete ho nakonfigurovať podľa vášho stroja z tu. Tu je môj:
Import modulov
Teraz importujeme potrebné moduly
Import a preskúmanie údajov
Nasledujúcim krokom je načítanie údajov a zobrazenie prvých piatich riadkov a posledných piatich riadkov zo súboru štítkov.
V tejto situácii sú pre nás relevantné iba dva zo štyroch stĺpcov – id uzla (tj používateľ) a ml_target, čo je 1, ak je používateľ členom komunity strojového učenia, a 0.
Vzhľadom na to, že existujú len dve triedy, môžeme si byť istí, že našou úlohou je binárna klasifikácia.
V dôsledku výraznej nerovnováhy v triede môže klasifikátor iba predpokladať, ktorá trieda je väčšinová, a nie hodnotiť nedostatočne zastúpenú triedu, čím sa vyváženosť triedy stáva ďalším kľúčovým faktorom, ktorý treba zvážiť.
Vykreslenie histogramu (distribúcia frekvencie) odhaľuje určitú nerovnováhu, pretože existuje menej tried zo strojového učenia (označenie = 1) ako z iných tried.
Kódovanie funkcií
Charakteristiky uzlov nás informujú o vlastnostiach, ktoré súvisia s každým uzlom. Implementáciou našej metódy kódovania údajov môžeme tieto charakteristiky okamžite zakódovať.
Chceme použiť túto metódu na zapuzdrenie malej časti siete (povedzme 60 uzlov) na zobrazenie. Kód je uvedený tu.
Navrhovanie a zobrazovanie grafov
Použijeme geometriu horáka. údaje na zostavenie nášho grafu.
Na modelovanie jedného grafu s rôznymi (voliteľnými) vlastnosťami sa používajú dáta, ktoré sú jednoduchým objektom Pythonu. Využitím tejto triedy a nasledujúcich atribútov – z ktorých všetky sú tenzory pochodne – vytvoríme náš objekt grafu.
Tvar hodnoty x, ktorá bude pridelená kódovaným znakom uzla, je [počet uzlov, počet znakov].
Tvar y je [počet uzlov] a použije sa na označenia uzlov.
index hrán: Aby sme opísali neorientovaný graf, musíme rozšíriť pôvodné indexy hrán, aby sme umožnili existenciu dvoch odlišných orientovaných hrán, ktoré spájajú rovnaké dva uzly, ale smerujú opačnými smermi.
Dvojica hrán, jedna ukazuje z uzla 100 do 200 a druhá z 200 do 100, je potrebná napríklad medzi uzlami 100 a 200. Ak sú poskytnuté indexy hrán, takto možno znázorniť neorientovaný graf. [2,2*počet pôvodných hrán] bude forma tenzora.
Vytvárame našu metódu kreslenia grafu na zobrazenie grafu. Prvým krokom je transformácia našej homogénnej siete do NetworkX grafu, ktorý je možné následne nakresliť pomocou NetworkX.draw.
Vyrobte si náš GNN model a trénujte ho
Začneme zakódovaním celej množiny údajov spustením kódovania údajov s light=False a potom zavolaním príkazu Construct graph s light=False na vytvorenie celého grafu. Nebudeme sa pokúšať nakresliť tento veľký graf, pretože predpokladám, že používate lokálny počítač, ktorý má obmedzené zdroje.
Masky, čo sú binárne vektory, ktoré pomocou číslic 0 a 1 identifikujú, ktoré uzly patria ku každej konkrétnej maske, sa môžu použiť na upovedomenie trénovacej fázy, ktoré uzly by mali byť zahrnuté počas trénovania, a na zistenie, ktoré uzly sú testovacími dátami. Baterka geometrická.transformuje.
Rozdelenie na úrovni uzla možno pridať pomocou vlastností tréningovej masky, val masky a testovacej masky triedy AddTrainValTestMask, ktoré možno použiť na vytvorenie grafu a umožniť nám špecifikovať, ako chceme, aby boli naše masky skonštruované.
Len využívame 10 % na školenie a 60 % údajov používame ako testovaciu sadu, zatiaľ čo 30 % používame ako overovaciu sadu.
Teraz naskladáme dve vrstvy GCNConv, z ktorých prvá má počet výstupných funkcií, ktorý sa rovná počtu funkcií v našom grafe ako vstupných funkcií.
V druhej vrstve, ktorá obsahuje výstupné uzly rovné počtu našich tried, aplikujeme funkciu aktivácie relu a dodávame latentné vlastnosti.
Index hrany a váha hrany sú dve z mnohých možností x, ktoré môže GCNConv akceptovať vo funkcii forward, ale v našej situácii potrebujeme iba prvé dve premenné.
Napriek tomu, že náš model bude schopný predpovedať triedu každého uzla v grafe, stále musíme určiť presnosť a stratu pre každý súbor samostatne v závislosti od fázy.
Napríklad počas tréningu chceme použiť tréningovú súpravu iba na určenie presnosti a tréningovej straty, a preto sú naše masky užitočné.
Na výpočet vhodnej straty a presnosti zadefinujeme funkcie maskovanej straty a maskovanej presnosti.
Školenie modelu
Teraz, keď sme definovali tréningový účel, na ktorý sa bude baterka používať. Adam je majster optimalizátorov.
Školenie vykonáme pre určitý počet epoch, pričom budeme dávať pozor na presnosť validácie.
Taktiež zaznamenávame straty a presnosť tréningu v rôznych epochách.
Nevýhody grafovej neurónovej siete
Používanie GNN má niekoľko nevýhod. Kedy použiť GNNa a ako zvýšiť výkon našich modelov strojového učenia, nám bude jasné, keď im lepšie porozumieme.
- Zatiaľ čo GNN sú plytké siete, zvyčajne s tromi vrstvami, väčšina neurónových sietí môže ísť hlboko, aby zlepšila výkon. Kvôli tomuto obmedzeniu nemôžeme pracovať na špičkovej úrovni pri veľkých súboroch údajov.
- Je ťažšie trénovať model na grafoch, pretože ich štrukturálna dynamika je dynamická.
- Vzhľadom na vysoké výpočtové náklady týchto sietí predstavuje škálovanie modelu pre výrobu výzvy. Škálovanie GNN pre produkciu bude náročné, ak je vaša grafová štruktúra obrovská a komplikovaná.
záver
Za posledných niekoľko rokov sa GNN vyvinuli na výkonné a efektívne nástroje na riešenie problémov strojového učenia v oblasti grafov. Základný prehľad grafových neurónových sietí je uvedený v tomto článku.
Potom môžete začať vytvárať množinu údajov, ktorá sa použije na trénovanie a testovanie modelu. Aby ste pochopili, ako funguje a čoho je schopný, môžete ísť oveľa ďalej a trénovať ho pomocou iného druhu súboru údajov.
Šťastné kódovanie!
Nechaj odpoveď