Turinys[Slėpti][Rodyti]
Gilaus mokymosi metodai, žinomi kaip „grafų neuroniniai tinklai“ (GNN), veikia grafiko srityje. Šie tinklai pastaruoju metu buvo naudojami įvairiose srityse, įskaitant kompiuterinį matymą, rekomendacijų sistemas ir kombinatorinį optimizavimą.
Be to, šie tinklai gali būti naudojami vaizduoti sudėtingas sistemas, įskaitant socialinius tinklus, baltymų ir baltymų sąveikos tinklus, žinių grafikus ir kitas keliose studijų srityse.
Neeuklidinėje erdvėje veikia grafiko duomenys, priešingai nei kitų tipų duomenys, pvz., paveikslėliai. Norint klasifikuoti mazgus, numatyti nuorodas ir klasterių duomenis, naudojama grafikų analizė.
Šiame straipsnyje mes išnagrinėsime grafiką neuroninis tinklas išsamiai, jo tipai, taip pat pateikti praktinių pavyzdžių naudojant PyTorch.
Taigi, kas yra Grafas?
Grafas yra duomenų struktūros tipas, sudarytas iš mazgų ir viršūnių. Ryšiai tarp įvairių mazgų nustatomi pagal viršūnes. Jei mazguose nurodoma kryptis, sakoma, kad grafikas yra nukreiptas; kitu atveju jis yra nereikalingas.
Geras grafikų taikymas yra įvairių asmenų santykių modeliavimas a socialinis tinklas. Sprendžiant sudėtingas aplinkybes, pvz., nuorodas ir mainus, grafikai yra labai naudingi.
Juos naudoja rekomendacijų sistemos, semantinė analizė, socialinių tinklų analizė ir modelių atpažinimas
. Grafikais pagrįstų sprendimų kūrimas yra visiškai nauja sritis, leidžianti įžvalgiai suprasti sudėtingus ir tarpusavyje susijusius duomenis.
Grafinis neuroninis tinklas
Grafiniai neuroniniai tinklai yra specializuoti neuroninių tinklų tipai, galintys veikti grafiko duomenų formatu. Grafų įterpimas ir konvoliuciniai neuroniniai tinklai (CNN) jiems daro didelę įtaką.
Grafiniai neuroniniai tinklai naudojami atliekant užduotis, apimančias mazgų, briaunų ir grafikų numatymą.
- CNN naudojami vaizdams klasifikuoti. Panašiai, norint numatyti klasę, GNN pritaikomi pikselių tinkleliui, vaizduojančiam grafiko struktūrą.
- Teksto skirstymas į kategorijas naudojant pasikartojančius neuroninius tinklus. GNN taip pat naudojami su grafų architektūromis, kur kiekvienas frazės žodis yra mazgas.
Norint prognozuoti mazgus, briaunas ar užbaigtus grafikus, GNN sukurti naudojami neuroniniai tinklai. Pavyzdžiui, numatymas mazgo lygiu gali išspręsti tokią problemą kaip šiukšlių aptikimas.
Nuorodų numatymas yra tipiškas rekomendacijų sistemų atvejis ir gali būti numatymo pagal kraštą problemos pavyzdys.
Grafikas neuroninių tinklų tipai
Egzistuoja daugybė neuroninių tinklų tipų, o konvoliuciniai neuroniniai tinklai yra daugumoje jų. Šioje dalyje sužinosime apie žinomiausius GNN.
Grafiniai konvoliuciniai tinklai (GCN)
Juos galima palyginti su klasikiniais CNN. Jis įgyja charakteristikas žiūrėdamas į netoliese esančius mazgus. Aktyvinimo funkciją naudoja GNN, kad pridėtų nelinijiškumą, sujungę mazgų vektorius ir išsiuntę išvestį į tankų sluoksnį.
Iš esmės jį sudaro grafiko konvoliucija, linijinis sluoksnis ir ne besimokančiųjų aktyvinimo funkcija. GCN yra dviejų pagrindinių tipų: spektriniai konvoliuciniai tinklai ir erdviniai konvoliuciniai tinklai.
Grafikų automatinio kodavimo tinklai
Jis naudoja kodavimo įrenginį, kad išmoktų pavaizduoti grafikus, ir dekoderį, kad bandytų atkurti įvesties grafikus. Yra kliūties sluoksnis, jungiantis kodavimo įrenginį ir dekoderį.
Kadangi automatiniai kodavimo įrenginiai puikiai tvarko klasės balansą, jie dažnai naudojami numatant saitus.
Pasikartojantys grafiniai neuroniniai tinklai (RGNN)
Daugelio santykių tinkluose, kur vienas mazgas turi daugybę ryšių, jis išmoksta optimalų difuzijos modelį ir gali valdyti grafikus. Siekiant padidinti sklandumą ir sumažinti per daug parametrų, šioje grafo neuroninio tinklo formoje naudojami reguliatoriai.
Norint gauti geresnių rezultatų, RGNN reikia mažesnės apdorojimo galios. Jie naudojami teksto generavimui, kalbos atpažinimui, mašininiam vertimui, paveikslėlių aprašymui, vaizdo įrašų žymėjimui ir teksto apibendrinimui.
Užblokuoti neuronų grafikų tinklai (GGNN)
Kalbant apie ilgalaikes priklausomas užduotis, jos pranoksta RGNN. Įtraukdami mazgą, kraštą ir laikinuosius vartus į ilgalaikes priklausomybes, uždarieji grafų neuroniniai tinklai sustiprina pasikartojančius grafų neuroninius tinklus.
Vartai veikia panašiai kaip Gated Recurrent Units (GRU), nes yra įpratę atšaukti ir pamiršti duomenis įvairiais etapais.
Grafo neuroninio tinklo diegimas naudojant Pytorch
Konkreti problema, į kurią daugiausia dėmesio skirsime, yra įprasta mazgų skirstymo į kategorijas problema. Mes turime didelį socialinį tinklą, vadinamą musae-github, kuris buvo sudarytas iš atviros API, skirtas GitHub kūrėjams.
Briaunos rodo abipusius sekėjų ryšius tarp mazgų, kurie atstovauja kūrėjams (platformos naudotojams), kurie pažymėjo žvaigždute mažiausiai 10 saugyklų (atkreipkite dėmesį, kad žodis abipusis reiškia neorientuotą ryšį).
Atsižvelgiant į mazgo vietą, žvaigždute pažymėtas saugyklas, darbdavį ir el. pašto adresą, nuskaitomos mazgo charakteristikos. Numatymas, ar „GitHub“ vartotojas yra žiniatinklio kūrėjas ar a mašininio mokymosi kūrėjas yra mūsų užduotis.
Kiekvieno vartotojo pareigų pavadinimas buvo šios taikymo funkcijos pagrindas.
„PyTorch“ diegimas
Norėdami pradėti, pirmiausia turime įdiegti „PyTorch“. Jį galite konfigūruoti pagal savo įrenginį iš čia. Štai mano:
Modulių importavimas
Dabar importuojame reikiamus modulius
Duomenų importavimas ir tyrinėjimas
Kitas veiksmas yra nuskaityti duomenis ir nubrėžti pirmąsias penkias eilutes ir paskutines penkias etikečių failo eilutes.
Šioje situacijoje mums svarbūs tik du iš keturių stulpelių – mazgo ID (ty vartotojas) ir ml_target, kuris yra 1, jei vartotojas yra mašininio mokymosi bendruomenės narys, o kitu atveju 0.
Atsižvelgiant į tai, kad yra tik dvi klasės, dabar galime būti tikri, kad mūsų užduotis yra dvejetainė klasifikavimo problema.
Dėl didelio klasių disbalanso klasifikatorius gali tiesiog daryti prielaidą, kuri klasė yra dauguma, o ne vertinti nepakankamai atstovaujamą klasę, todėl klasių pusiausvyra yra dar vienas esminis veiksnys, į kurį reikia atsižvelgti.
Nubraižant histogramą (dažnių pasiskirstymą) atskleidžiamas tam tikras disbalansas, nes mašininio mokymosi klasių yra mažiau (etiketė = 1) nei iš kitų klasių.
Funkcijų kodavimas
Mazgų charakteristikos informuoja mus apie su kiekvienu mazgu susietą funkciją. Įdiegę mūsų duomenų kodavimo metodą, galime akimirksniu užkoduoti šias charakteristikas.
Mes norime panaudoti šį metodą, kad aptrauktume nedidelę tinklo dalį (tarkim, 60 mazgų) rodymui. Kodas nurodytas čia.
Grafikų kūrimas ir demonstravimas
Naudosime geometrinį žibintuvėlį. duomenis, kad sukurtume grafiką.
Norint modeliuoti vieną grafiką su skirtingomis (pasirenkamomis) savybėmis, naudojami duomenys, kurie yra paprastas Python objektas. Naudodami šią klasę ir šiuos atributus, kurie visi yra degiklio tenzoriai, sukursime savo grafiko objektą.
Reikšmės x, kuri bus priskirta užkoduotoms mazgo savybėms, forma yra [mazgų skaičius, ypatybių skaičius].
Y forma yra [mazgų skaičius] ir ji bus pritaikyta mazgų etiketėms.
briaunų indeksas: norėdami apibūdinti nenukreiptą grafą, turime išplėsti pradinius briaunų indeksus, kad egzistuotų dvi skirtingos nukreiptos briaunos, jungiančios tuos pačius du mazgus, bet nukreiptos priešingomis kryptimis.
Reikalinga briaunų pora, viena nukreipta nuo mazgo 100 iki 200, o kita nuo 200 iki 100, pavyzdžiui, tarp mazgų 100 ir 200. Jei pateikiami briaunų indeksai, tai taip galima pavaizduoti nenukreiptą grafiką. [2,2*pradinių briaunų skaičius] bus tenzorinė forma.
Mes sukuriame piešimo grafiko metodą, kad būtų rodomas grafikas. Pirmas žingsnis – homogeninį tinklą paversti NetworkX grafiku, kurį vėliau galima nubraižyti naudojant NetworkX.draw.
Sukurkite mūsų GNN modelį ir išmokykite jį
Pradedame nuo viso duomenų rinkinio kodavimo vykdydami kodavimo duomenis su light=False, o tada iškviesdami construct graph su light=False, kad sukurtume visą grafiką. Nebandysime nubraižyti šios didelės diagramos, nes manau, kad naudojate vietinį įrenginį, kurio ištekliai yra riboti.
Kaukės, kurios yra dvejetainiai vektoriai, identifikuojantys, kurie mazgai priklauso kiekvienai konkrečiai kaukei, naudojant skaitmenis 0 ir 1, gali būti naudojami informuojant mokymo etapą, kurie mazgai turėtų būti įtraukti į mokymą, ir nurodyti išvados fazei, kurie mazgai yra bandymo duomenys. Fakelas geometrinis.transformuoja.
Mazgo lygio padalijimą galima pridėti naudojant AddTrainValTestMask klasės mokymo kaukę, val kaukę ir bandymo kaukės ypatybes, kurias galima naudoti grafikui sudaryti ir nurodyti, kaip norime sukurti kaukes.
Mes tiesiog panaudojame 10 % mokymams ir 60 % duomenų naudojame kaip bandymų rinkinį, o 30 % naudojame kaip patvirtinimo rinkinį.
Dabar sudėsime du GCNConv sluoksnius, iš kurių pirmojo išvesties funkcijų skaičius yra lygus funkcijų skaičiui mūsų diagramoje kaip įvesties ypatybės.
Antrame sluoksnyje, kuriame yra išvesties mazgai, lygūs mūsų klasių skaičiui, taikome relu aktyvinimo funkciją ir pateikiame latentines funkcijas.
Krašto indeksas ir krašto svoris yra dvi iš daugelio parinkčių x, kurias GCNConv gali priimti peradresavimo funkcijoje, tačiau mūsų situacijoje mums reikia tik pirmųjų dviejų kintamųjų.
Nepaisant to, kad mūsų modelis galės numatyti kiekvieno grafiko mazgo klasę, vis tiek turime nustatyti kiekvieno rinkinio tikslumą ir nuostolius atskirai, priklausomai nuo fazės.
Pavyzdžiui, treniruočių metu norime naudoti treniruočių rinkinį tik tikslumui ir treniruočių praradimui nustatyti, todėl čia pravers mūsų kaukės.
Norėdami apskaičiuoti atitinkamą nuostolį ir tikslumą, apibrėžsime užmaskuoto nuostolio ir maskuoto tikslumo funkcijas.
Modelio mokymas
Dabar, kai apibrėžėme mokymo tikslą, kuriam bus naudojamas deglas. Adomas yra pagrindinis optimizuotojas.
Mokymus vykdysime tam tikrą skaičių epochų, stebėdami patvirtinimo tikslumą.
Taip pat brėžiame treniruočių nuostolius ir tikslumą įvairiomis epochomis.
Grafinio neuroninio tinklo trūkumai
GNN naudojimas turi keletą trūkumų. Kada naudoti GNNa ir kaip pagerinti mašininio mokymosi modelių našumą, mums bus aišku, kai geriau juos suprasime.
- Nors GNN yra seklūs tinklai, paprastai su trimis sluoksniais, dauguma neuroninių tinklų gali patobulinti našumą. Dėl šio apribojimo negalime atlikti pažangiausių didelių duomenų rinkinių.
- Sunkiau treniruoti modelį ant grafikų, nes jų struktūrinė dinamika yra dinamiška.
- Dėl didelių šių tinklų skaičiavimo sąnaudų modelio mastelio pritaikymas gamybai kelia iššūkių. GNN mastelio keitimas gamybai bus sudėtingas, jei jūsų grafiko struktūra yra didžiulė ir sudėtinga.
Išvada
Per pastaruosius kelerius metus GNN tapo galingais ir efektyviais įrankiais, skirtais mašininio mokymosi problemoms spręsti grafikų srityje. Šiame straipsnyje pateikiama pagrindinė grafinių neuroninių tinklų apžvalga.
Po to galite pradėti kurti duomenų rinkinį, kuris bus naudojamas modeliui mokyti ir išbandyti. Norėdami suprasti, kaip jis veikia ir ką jis gali, taip pat galite nueiti daug toliau ir išmokyti jį naudodami kitokio tipo duomenų rinkinį.
Laimingo kodavimo!
Palikti atsakymą