Sisällysluettelo[Piilottaa][Näytä]
Syväoppimistekniikat, jotka tunnetaan nimellä "graafin hermoverkko" (GNN), toimivat graafialueella. Näille verkoille on viime aikoina löydetty käyttöä useilla aloilla, mukaan lukien tietokonenäkö, suosittelujärjestelmät ja kombinatorinen optimointi, muutamia mainitakseni.
Lisäksi näitä verkostoja voidaan käyttää monimutkaisten järjestelmien edustamiseen, mukaan lukien sosiaaliset verkostot, proteiini-proteiini-vuorovaikutusverkostot, tietograafit ja muut useilla tutkimusaloilla.
Ei-euklidinen avaruus on paikka, jossa graafidata toimii, toisin kuin muun tyyppinen data, kuten kuvat. Solmujen luokittelemiseksi, linkkien ennustamiseksi ja klusteridatan luomiseksi käytetään graafianalyysiä.
Tässä artikkelissa tarkastelemme kaaviota Neural Network yksityiskohtaisesti, sen tyypit sekä antaa käytännön esimerkkejä PyTorchin avulla.
Joten mikä on Graph?
Graafi on tietorakenne, joka koostuu solmuista ja pisteistä. Eri solmujen väliset yhteydet määräytyvät kärkien mukaan. Jos suunta on osoitettu solmuissa, graafin sanotaan olevan suunnattu; muuten se on suunnaton.
Hyvä kaavioiden sovellus on mallintaa eri yksilöiden välisiä suhteita a sosiaalinen verkosto. Kun käsitellään monimutkaisia olosuhteita, kuten linkkejä ja vaihtoja, kaaviot ovat erittäin hyödyllisiä.
Niitä käyttävät suositusjärjestelmät, semanttinen analyysi, sosiaalinen verkostoanalyysi ja hahmontunnistus
. Graafipohjaisten ratkaisujen luominen on aivan uusi ala, joka tarjoaa oivallisen ymmärryksen monimutkaisista ja toisiinsa liittyvistä tiedoista.
Graafinen hermoverkko
Graafihermoverkot ovat erikoistuneita hermoverkkotyyppejä, jotka voivat toimia graafitietomuodossa. Graafinen upottaminen ja konvoluutiohermoverkot (CNN) vaikuttavat niihin merkittävästi.
Graafisten hermoverkkoja käytetään tehtävissä, jotka sisältävät solmujen, reunojen ja kuvaajien ennustamisen.
- CNN:itä käytetään kuvien luokittelemiseen. Vastaavasti luokan ennustamiseksi GNN:itä sovelletaan pikseliruudukkoon, joka edustaa kuvaajarakennetta.
- Tekstin luokittelu toistuvien hermoverkkojen avulla. GNN:itä käytetään myös graafiarkkitehtuureissa, joissa jokainen lauseen sana on solmu.
Solmujen, reunojen tai täydellisten graafien ennustamiseksi GNN:ien luomiseen käytetään hermoverkkoja. Esimerkiksi solmutason ennuste voi ratkaista roskapostin havaitsemisen kaltaisen ongelman.
Linkin ennustaminen on tyypillinen tapaus suositusjärjestelmissä ja saattaa olla esimerkki reunakohtaisesta ennustusongelmasta.
Graafinen hermoverkkotyypit
On olemassa lukuisia hermoverkkotyyppejä, ja suurimmassa osassa niistä on konvoluutiohermoverkkoja. Tässä osassa opimme tunnetuimmista GNN:istä.
Kuvaa konvoluutioverkot (GCN)
Ne ovat verrattavissa klassisiin CNN-verkkoihin. Se saa ominaisuuksia katsomalla lähellä olevia solmuja. GNN:t käyttävät aktivointitoimintoa lisäämään epälineaarisuutta solmuvektorien yhdistämisen ja lähdön lähettämisen jälkeen tiheälle kerrokselle.
Se koostuu pohjimmiltaan Graph-konvoluutiosta, lineaarisesta kerroksesta ja ei-oppija-aktivointifunktiosta. GCN-verkkoja on kahta päätyyppiä: Spectral Convolutional Networks ja Spatial Convolutional Networks.
Graph Auto-Encoder Networks
Se käyttää kooderia kaavioiden esittämiseen ja dekooderia yrittääkseen rekonstruoida syötekaavioita. Enkooderin ja dekooderin yhdistävä pullonkaulakerros.
Koska automaattiset kooderit tekevät erinomaista työtä luokkatasapainon käsittelyssä, niitä käytetään usein linkkien ennustamisessa.
Toistuvat graafiset hermoverkot (RGNN)
Monirelaatioverkoissa, joissa yhdellä solmulla on useita suhteita, se oppii optimaalisen diffuusiokuvion ja voi hallita kaavioita. Sujuvuuden lisäämiseksi ja yliparametrisoinnin vähentämiseksi tässä graafisen hermoverkon muodossa käytetään regularisaattoreita.
Parempien tulosten saavuttamiseksi RGNN:t vaativat vähemmän prosessointitehoa. Niitä käytetään tekstin luomiseen, puheentunnistukseen, konekääntämiseen, kuvan kuvaukseen, videoiden merkitsemiseen ja tekstin yhteenvetoon.
GGNN-verkot (Gated Neural Graph Networks)
Mitä tulee pitkäaikaisiin riippuvaisiin tehtäviin, ne ylittävät RGNN:t. Sisällyttämällä solmu-, reuna- ja temporaaliset portit pitkäaikaisiin riippuvuuksiin avainnetut graafihermoverkot parantavat toistuvia graafihermoverkkoja.
Portit toimivat samalla tavalla kuin GRU:t (Gated Recurrent Units), koska ne ovat tottuneet palauttamaan ja unohtamaan tietoja eri vaiheissa.
Graph Neural Networkin toteuttaminen Pytorchin avulla
Erityisongelma, johon keskitymme, on yleinen solmujen luokitteluongelma. Meillä on iso sosiaalinen verkosto nimeltä musae-github, joka on käännetty avoimesta API:sta GitHub-kehittäjille.
Reunat osoittavat molemminpuoliset seuraajasuhteet solmujen välillä, jotka edustavat kehittäjiä (alustan käyttäjiä), jotka ovat olleet tähdellä vähintään 10 tietovarastossa (huomaa, että sana keskinäinen tarkoittaa suuntaamatonta suhdetta).
Solmun sijainnin, tähdellä merkittyjen tietovarastojen, työnantajan ja sähköpostiosoitteen perusteella noudetaan solmun ominaisuudet. Ennustaminen, onko GitHub-käyttäjä verkkokehittäjä vai a koneoppimisen kehittäjä on meidän tehtävämme.
Jokaisen käyttäjän tehtävänimike oli tämän kohdistustoiminnon perusta.
PyTorchin asennus
Aloittaaksemme meidän on ensin asennettava PyTorch. Voit määrittää sen koneesi mukaan alkaen tätä. Tässä on minun:
Moduulien tuonti
Nyt tuomme tarvittavat moduulit
Tietojen tuonti ja tutkiminen
Seuraava vaihe on lukea tiedot ja piirtää ensimmäiset viisi riviä ja viimeiset viisi riviä tarratiedostosta.
Vain kaksi neljästä sarakkeesta – solmun tunnus (eli käyttäjä) ja ml_target, joka on 1, jos käyttäjä on koneoppimisyhteisön jäsen, ja 0 muussa tapauksessa – ovat meille merkityksellisiä tässä tilanteessa.
Koska luokkia on vain kaksi, voimme nyt olla varmoja, että tehtävämme on binääriluokituskysymys.
Merkittävän luokkaepätasapainon seurauksena luokittelija voi vain olettaa, mikä luokka on enemmistö sen sijaan, että arvioitsisi aliedustettua luokkaa, mikä tekee luokkatasapainosta toisen tärkeän huomioitavan tekijän.
Histogrammin piirtäminen (taajuusjakauma) paljastaa jonkin verran epätasapainoa, koska koneoppimisesta (tunniste=1) on vähemmän luokkia kuin muista luokista.
Ominaisuuden koodaus
Solmujen ominaisuudet kertovat meille ominaisuudesta, joka liittyy kuhunkin solmuun. Toteuttamalla menetelmämme tietojen koodaamiseen voimme koodata nämä ominaisuudet välittömästi.
Haluamme käyttää tätä menetelmää kapseloimaan pienen osan verkosta (esimerkiksi 60 solmua) näyttöä varten. Koodi on lueteltu tässä.
Graafisten suunnittelu ja esittäminen
Käytämme geometrisia taskulamppuja. dataa kaavion rakentamiseksi.
Yhden graafin mallintamiseen erilaisilla (valinnaisilla) ominaisuuksilla käytetään tietoja, jotka ovat yksinkertaisia Python-objekteja. Käyttämällä tätä luokkaa ja seuraavia attribuutteja – jotka kaikki ovat taskulampputensoreja – luomme graafiobjektimme.
Koodatuille solmuominaisuuksille allokoitavan arvon x muoto on [solmujen lukumäärä, ominaisuuksien määrä].
Y:n muoto on [solmujen lukumäärä], ja sitä käytetään solmutunnisteisiin.
reunaindeksi: Suuntaamattoman graafin kuvaamiseksi meidän on laajennettava alkuperäisiä reunaindeksejä, jotta mahdollistetaan kaksi erillistä suunnattua reunaa, jotka yhdistävät samat kaksi solmua, mutta osoittavat vastakkaisiin suuntiin.
Reunapari, joista toinen osoittaa solmusta 100 - 200 ja toinen 200 - 100, tarvitaan esimerkiksi solmujen 100 ja 200 väliin. Jos reunaindeksit on annettu, niin suuntaamaton graafi voidaan esittää näin. [2,2*alkuperäisten reunojen lukumäärä] on tensorimuoto.
Luomme piirtokaaviomenetelmämme kaavion näyttämiseksi. Ensimmäinen askel on muuttaa homogeeninen verkkomme NetworkX-graafiksi, joka voidaan sitten piirtää NetworkX.draw:lla.
Tee GNN-mallimme ja kouluta se
Aloitamme koodaamalla koko datajoukon suorittamalla koodauksen datan kanssa light=False ja kutsumalla sitten construct graphia kanssa light=False rakentaaksesi koko kaavion. Emme yritä piirtää tätä suurta kuvaajaa, koska oletan, että käytät paikallista konetta, jolla on rajalliset resurssit.
Maskeja, jotka ovat binäärivektoreita, jotka tunnistavat, mitkä solmut kuuluvat kuhunkin tiettyyn maskiin käyttämällä numeroita 0 ja 1, voidaan käyttää ilmoittamaan koulutusvaiheelle, mitkä solmut tulisi ottaa mukaan harjoituksen aikana, ja kertomaan johtopäätösvaiheelle, mitkä solmut ovat testidataa. Torch geometric.transforms.
Solmutason jako voidaan lisätä käyttämällä AddTrainValTestMask-luokan harjoitusmaskin, val maskin ja testimaskin ominaisuuksia, joita voidaan käyttää graafin ottamiseen ja antaa meille mahdollisuuden määrittää, kuinka haluamme maskimme rakennettavan.
Käytämme vain 10 % koulutukseen ja käytämme 60 % tiedoista testisarjana, kun taas 30 % validointijoukona.
Pinoamme nyt kaksi GCNConv-tasoa, joista ensimmäisessä on lähtöominaisuuksien määrä, joka on yhtä suuri kuin kaaviossamme olevien ominaisuuksien lukumäärä syöteominaisuuksina.
Toisessa kerroksessa, joka sisältää luokkiemme lukumäärän verran lähtösolmuja, käytämme relu-aktivointifunktiota ja toimitamme piilevät ominaisuudet.
Reunaindeksi ja reunapaino ovat kaksi monista vaihtoehdoista x, jotka GCNConv voi hyväksyä eteenpäin-funktiossa, mutta meidän tilanteessamme tarvitsemme vain kaksi ensimmäistä muuttujaa.
Huolimatta siitä, että mallimme pystyy ennustamaan graafin jokaisen solmun luokan, meidän on silti määritettävä tarkkuus ja häviö jokaiselle sarjalle erikseen vaiheesta riippuen.
Esimerkiksi harjoittelun aikana haluamme käyttää harjoitussarjaa vain tarkkuuden ja harjoitushäviön määrittämiseen, ja siksi maskimme ovat hyödyllisiä tässä.
Sopivan häviön ja tarkkuuden laskemiseksi määrittelemme peitetyn häviön ja peitetyn tarkkuuden funktiot.
Kouluta malli
Nyt kun olemme määrittäneet harjoitustarkoituksen, johon taskulamppua käytetään. Adam on mestari optimoija.
Suoritamme koulutusta tietyn ajanjakson ajan pitäen samalla silmällä validointitarkkuutta.
Piirrämme myös koulutuksen häviöt ja tarkkuudet eri aikakausille.
Graph Neural Networkin haitat
GNN:ien käytössä on muutamia haittoja. Meille tehdään selväksi, milloin GNNa:a tulee käyttää ja kuinka parantaa koneoppimismalliemme suorituskykyä, kun olemme ymmärtäneet ne paremmin.
- Vaikka GNN:t ovat matalia verkkoja, joissa on tyypillisesti kolme kerrosta, useimmat hermoverkot voivat mennä syvälle suorituskyvyn parantamiseksi. Tämän rajoituksen vuoksi emme pysty toimimaan huippuluokan suurilla tietojoukoilla.
- Mallia on vaikeampi harjoitella graafien päällä, koska niiden rakennedynamiikka on dynaamista.
- Näiden verkkojen korkeiden laskentakustannusten vuoksi mallin skaalaaminen tuotantoon asettaa haasteita. GNN-verkkojen skaalaaminen tuotantoa varten on haastavaa, jos kaaviorakenne on valtava ja monimutkainen.
Yhteenveto
Muutaman viime vuoden aikana GNN:t ovat kehittyneet tehokkaiksi ja tehokkaiksi työkaluiksi graafisen alueen koneoppimisongelmiin. Tässä artikkelissa annetaan perustavanlaatuinen yleiskatsaus graafin neuroverkkoihin.
Tämän jälkeen voit aloittaa tietojoukon luomisen, jota käytetään mallin kouluttamiseen ja testaamiseen. Ymmärtääksesi, miten se toimii ja mihin se pystyy, voit myös mennä paljon pidemmälle ja kouluttaa sitä käyttämällä erilaista tietojoukkoa.
Hyvää koodausta!
Jätä vastaus