Efnisyfirlit[Fela][Sýna]
Djúpnámstæknin sem kallast „graftauganet“ (GNNs) starfar á línuritinu. Þessi net hafa nýlega notið sín á ýmsum sviðum, þar á meðal tölvusjón, meðmælakerfum og samsettri hagræðingu, svo eitthvað sé nefnt.
Að auki er hægt að nota þessi net til að tákna flókin kerfi, þar á meðal félagsleg net, prótein-prótein samskiptanet, þekkingargraf og önnur á nokkrum fræðasviðum.
Hið evklíðska rými er þar sem grafgögn starfa, öfugt við aðrar tegundir gagna eins og myndir. Til að flokka hnúta, spá fyrir um tengla og klasagögn er grafgreining notuð.
Í þessari grein munum við skoða línuritið neural Network í smáatriðum, gerðir þess, auk þess að veita hagnýt dæmi um notkun PyTorch.
Svo, hvað er Graph?
Línurit er tegund gagnauppbyggingar sem samanstendur af hnútum og hornpunktum. Tengsl milli hinna ýmsu hnúta eru ákvörðuð af hornpunktunum. Ef stefnan er gefin til kynna í hnútunum er sagt að grafið sé beint; annars er það óstýrt.
Góð beiting á línuritum er að móta tengslin milli mismunandi einstaklinga í a félagslega net. Þegar tekist er á við flóknar aðstæður, svo sem tengla og skipti, eru línurit mjög gagnlegt.
Þau eru notuð af meðmælakerfum, merkingargreiningu, greiningu á samfélagsnetum og mynsturgreiningu
. Að búa til grafískar lausnir er glænýtt svið sem býður upp á innsæi skilning á flóknum og innbyrðis tengdum gögnum.
Graf Tauganet
Graftauganet eru sérhæfðar tauganetgerðir sem geta starfað á línuritsgagnasniði. Grafinnfelling og snúningstauganet (CNN) hafa veruleg áhrif á þau.
Graftauganet eru notuð í verkefnum sem fela í sér að spá fyrir um hnúta, brúnir og línurit.
- CNN eru notuð til að flokka myndir. Á sama hátt, til að spá fyrir um flokk, eru GNNs notuð á pixla ristina sem táknar grafbygginguna.
- Textaflokkun með endurteknum tauganetum. GNN eru einnig notuð með grafarkitektúr þar sem hvert orð í setningu er hnútur.
Til að spá fyrir um hnúta, brúnir eða heill línurit eru tauganet notuð til að búa til GNN. Spá á hnútastigi, til dæmis, getur leyst vandamál eins og ruslpóstsuppgötvun.
Tengslspá er dæmigert tilfelli í meðmælakerfum og gæti verið dæmi um spávandamál í brúnni.
Línurit Tegundir tauganeta
Fjölmargar tegundir tauganeta eru til og Convolutional Neural Networks eru til staðar í meirihluta þeirra. Við munum læra um þekktustu GNN í þessum hluta.
Graph Convolutional Networks (GCNs)
Þeir eru sambærilegir við klassíska CNN. Það öðlast einkenni með því að skoða nálæga hnúta. Virkjunaraðgerðin er notuð af GNN til að bæta við ólínuleika eftir að hafa safnað saman hnútvigrum og sent úttakið í þétta lagið.
Það samanstendur af línuritssnúningi, línulegu lagi og virkjunaraðgerð sem ekki er nemanda, í raun. GCNs koma í tveimur meginafbrigðum: Spectral Convolutional Networks og Spatial Convolutional Networks.
Grafið sjálfvirkt kóðara net
Það notar kóðara til að læra hvernig á að tákna línurit og afkóðara til að reyna að endurgera inntaksgraf. Það er flöskuhálslag sem tengir kóðara og afkóðara.
Þar sem sjálfvirkir kóðarar gera frábært starf við að meðhöndla bekkjarjafnvægi eru þeir oft notaðir í hlekkjaspá.
Endurtekin graftauganet (RGNN)
Í fjöltengslanetum, þar sem einn hnút hefur fjölmörg tengsl, lærir hann ákjósanlegasta dreifingarmynstrið og getur stjórnað línuritunum. Til þess að auka sléttleika og draga úr of-parametriization eru reglusetningar notaðir í þessu formi graftaugakerfis.
Til þess að fá betri útkomu þurfa RGNNs minni vinnsluorku. Þau eru notuð fyrir textagerð, talgreiningu, vélþýðingu, myndlýsingu, myndbandsmerkingu og textasamantekt.
Gated Neural Graph Networks (GGNN)
Þegar kemur að langtímaháðum verkefnum standa þau sig betur en RGNN. Með því að taka með hnút, brún og tímahlið á langtímafíkn, auka hlið tauganet með línuriti endurtekið graftauganet.
Hliðin virka svipað og Gated Recurrent Units (GRUs) að því leyti að þau eru vön að kalla fram og gleyma gögnum á ýmsum stigum.
Innleiðing Graph Neural Network með Pytorch
Sértæka málið sem við munum einbeita okkur að er algengt hnútaflokkunarmál. Við erum með stórt samfélagsnet sem heitir musae-github, sem var sett saman úr opna API, fyrir GitHub forritara.
Brúnir sýna gagnkvæm fylgjendatengsl milli hnútanna, sem tákna þróunaraðila (pallnotendur) sem hafa leikið í að minnsta kosti 10 geymslum (athugið að orðið gagnkvæmt gefur til kynna óstýrt samband).
Byggt á staðsetningu hnútsins, stjörnumerktum geymslum, vinnuveitanda og netfangi, eru eiginleikar hnúts sóttir. Að spá fyrir um hvort GitHub notandi sé vefhönnuður eða a vélanámsverktaki er verkefni okkar.
Starfsheiti hvers notanda var grundvöllur þessarar miðunaraðgerðar.
Setur upp PyTorch
Til að byrja þurfum við fyrst að setja upp PyTorch. Þú getur stillt það í samræmi við vélina þína frá hér. Hér er minn:
Flytja inn einingar
Nú flytjum við inn nauðsynlegar einingar
Flytja inn og kanna gögnin
Eftirfarandi skref er að lesa gögnin og teikna fyrstu fimm línurnar og síðustu fimm línurnar úr merkimiðaskránni.
Aðeins tveir af fjórum dálkum – auðkenni hnútsins (þ.e. notandi) og ml_target, sem er 1 ef notandinn er meðlimur vélanámssamfélagsins og 0 að öðru leyti – skipta okkur máli í þessari stöðu.
Í ljósi þess að það eru bara tveir flokkar, getum við nú verið viss um að verkefni okkar er tvíundarflokkunarmál.
Sem afleiðing af verulegu ójafnvægi í stéttum getur flokkarinn bara gert ráð fyrir því hvaða stétt er meirihlutinn frekar en að meta stéttina sem er vanfulltrúa, sem gerir stéttajafnvægi að öðrum mikilvægum þætti sem þarf að hafa í huga.
Að plotta súluritið (tíðndidreifing) sýnir eitthvað ójafnvægi vegna þess að það eru færri flokkar úr vélanámi (merki=1) en frá hinum flokkunum.
Eiginleikakóðun
Eiginleikar hnútanna upplýsa okkur um eiginleikann sem tengist hverjum hnút. Með því að innleiða aðferð okkar til að umrita gögn getum við umritað þessa eiginleika samstundis.
Við viljum nota þessa aðferð til að umlykja lítinn hluta netkerfisins (t.d. 60 hnúta) til sýnis. Kóðinn er skráður hér.
Hanna og sýna línurit
Við munum nota rúmfræðilega kyndil. gögn til að byggja línuritið okkar.
Til að móta eitt graf með mismunandi (valfrjálsum) eiginleikum eru notuð gögn sem eru einfaldur Python hlutur. Með því að nota þennan flokk og eftirfarandi eiginleika - sem allir eru kyndilspennarar - munum við búa til grafhlutinn okkar.
Form gildisins x, sem verður úthlutað til kóðuðu hnúteiginleikanna, er [fjöldi hnúta, fjöldi eiginleika].
Lögun y er [fjöldi hnúta] og það verður notað á hnútamerkin.
brúnvísitala: Til að lýsa óstýrðu línuriti þurfum við að stækka upprunalegu brúnvísitölurnar til að gera ráð fyrir tilvist tveggja aðskildra beinna brúna sem tengja sömu tvo hnúta en benda í gagnstæðar áttir.
Para af brúnum, önnur vísa frá hnút 100 til 200 og hin frá 200 til 100, þarf, til dæmis, á milli hnúta 100 og 200. Ef brúnvísitölurnar eru gefnar upp, þá er þetta hvernig óbeint línuritið er hægt að tákna. [2,2*fjöldi upprunalegra brúna] verður tensorformið.
Við búum til línuritsaðferðina okkar til að sýna línurit. Fyrsta skrefið er að breyta einsleitu neti okkar í NetworkX línurit, sem síðan er hægt að teikna með NetworkX.draw.
Búðu til GNN líkanið okkar og þjálfaðu það
Við byrjum á því að kóða allt gagnasettið með því að keyra umrita gögn með light=False og kalla síðan construct graph með light=False til að byggja allt grafið. Við munum ekki reyna að teikna þetta stóra línurit vegna þess að ég geri ráð fyrir að þú sért að nota staðbundna vél sem hefur takmarkað fjármagn.
Grímur, sem eru tvöfaldir vektorar sem auðkenna hvaða hnútar tilheyra hverri sérstakri grímu með því að nota tölustafina 0 og 1, er hægt að nota til að tilkynna þjálfunarstiginu hvaða hnútar ættu að vera með í þjálfun og til að segja ályktunarfasanum hvaða hnútar eru prófunargögnin. Kyndill geometrísk.breytist.
Hægt er að bæta við hnútastigsskiptingu með því að nota þjálfunarmaskann, valmaskann og prófunargrímuna í AddTrainValTestMask bekknum, sem hægt er að nota til að taka línurit og gera okkur kleift að tilgreina hvernig við viljum að grímurnar okkar séu smíðaðar.
Við notum bara 10% til þjálfunar og notum 60% af gögnunum sem prófunarsett á meðan við notum 30% sem staðfestingarsett.
Nú munum við stafla tveimur GCNConv lögum, það fyrsta sem hefur fjölda eiginleika sem er jafnt og fjölda eiginleika á línuritinu okkar sem inntakseiginleika.
Í öðru lagi, sem inniheldur úttakshnúta sem eru jafnir og fjölda flokka okkar, notum við relu virkjunaraðgerð og útvegum dulda eiginleika.
Edge index og edge weight eru tveir af mörgum valkostum x sem GCNConv getur samþykkt í framvirku fallinu, en í okkar aðstæðum þurfum við aðeins fyrstu tvær breyturnar.
Þrátt fyrir þá staðreynd að líkanið okkar muni geta spáð fyrir um flokk hvers hnúts á línuritinu, þurfum við samt að ákvarða nákvæmni og tap fyrir hvert mengi fyrir sig eftir fasa.
Til dæmis, á meðan á þjálfun stendur, viljum við aðeins nota æfingasettið til að ákvarða nákvæmni og þjálfunartap, og þess vegna koma grímurnar okkar að góðum notum.
Til að reikna út viðeigandi tap og nákvæmni, munum við skilgreina virkni duldu taps og duldu nákvæmni.
Þjálfa líkanið
Nú þegar við höfum skilgreint þjálfunartilganginn sem kyndillinn verður notaður í. Adam er fínstillingarmeistari.
Við munum sinna þjálfuninni fyrir ákveðinn fjölda tímabila á meðan við höldum auga á sannprófunarnákvæmni.
Við teiknum einnig tap og nákvæmni þjálfunarinnar á mismunandi tímabilum.
Ókostir Graph Neural Network
Notkun GNN hefur nokkra ókosti. Hvenær á að nota GNNa og hvernig á að auka frammistöðu vélanámslíkana okkar verður okkur gert ljóst eftir að við höfum betri skilning á þeim.
- Þó að GNN séu grunn net, venjulega með þremur lögum, geta flest taugakerfi farið djúpt til að bæta árangur. Við getum ekki framkvæmt í fremstu röð á stórum gagnasöfnum vegna þessarar takmörkunar.
- Það er erfiðara að þjálfa líkan á línuritum þar sem burðarvirki þeirra er kraftmikill.
- Vegna mikils útreikningskostnaðar þessara neta veldur það áskorunum að skala líkanið fyrir framleiðslu. Það verður krefjandi að skala GNN fyrir framleiðslu ef grafbyggingin þín er risastór og flókin.
Niðurstaða
Undanfarin ár hafa GNN þróast í öflug og áhrifarík verkfæri fyrir vélanámsvandamál á línuritasvæðinu. Grundvallaryfirlit yfir graftaugakerfi er gefið í þessari grein.
Eftir það geturðu byrjað að búa til gagnasafnið sem verður notað til að þjálfa og prófa líkanið. Til að skilja hvernig það virkar og hvað það er fær um geturðu líka farið miklu lengra og þjálfað það með því að nota annars konar gagnasafn.
Gleðilega kóðun!
Skildu eftir skilaboð