Talaan ng nilalaman[Tago][Ipakita]
Ang mga diskarte sa malalim na pag-aaral na kilala bilang "graph neural networks" (GNNs) ay gumagana sa graph domain. Ang mga network na ito kamakailan ay natagpuang ginagamit sa iba't ibang larangan, kabilang ang computer vision, recommender system, at combinatorial optimization, upang pangalanan ang ilan.
Bilang karagdagan, ang mga network na ito ay maaaring gamitin upang kumatawan sa mga kumplikadong sistema, kabilang ang mga social network, mga network ng pakikipag-ugnayan ng protina-protina, mga graph ng kaalaman, at iba pa sa ilang larangan ng pag-aaral.
Ang non-euclidean space ay kung saan gumagana ang data ng graph, kabaligtaran sa iba pang mga uri ng data tulad ng mga larawan. Upang maiuri ang mga node, mahulaan ang mga link, at data ng kumpol, ginagamit ang pagsusuri ng graph.
Sa artikulong ito, susuriin natin ang Graph Neural Network nang detalyado, ang mga uri nito, pati na rin magbigay ng mga praktikal na halimbawa gamit ang PyTorch.
Kaya, ano ang Graph?
Ang graph ay isang uri ng istruktura ng data na binubuo ng mga node at vertex. Ang mga koneksyon sa pagitan ng iba't ibang mga node ay tinutukoy ng mga vertex. Kung ang direksyon ay ipinahiwatig sa mga node, ang graph ay sinasabing nakadirekta; kung hindi, ito ay hindi nakadirekta.
Ang isang mahusay na aplikasyon ng mga graph ay ang pagmomodelo ng mga ugnayan sa iba't ibang indibidwal sa a social network. Kapag nakikitungo sa mga kumplikadong pangyayari, tulad ng mga link at palitan, ang mga graph ay lubhang nakakatulong.
Ginagamit ang mga ito ng mga sistema ng rekomendasyon, pagsusuri ng semantiko, pagsusuri sa social network, at pagkilala sa pattern
. Ang paggawa ng mga solusyon na nakabatay sa graph ay isang bagong larangan na nag-aalok ng isang insightful na pag-unawa sa kumplikado at magkakaugnay na data.
Graph Neural Network
Ang mga graph neural network ay mga espesyal na uri ng neural network na maaaring gumana sa isang format ng data ng graph. Ang pag-embed ng graph at convolutional neural network (CNNs) ay may malaking epekto sa kanila.
Ang Graph Neural Networks ay ginagamit sa mga gawain na kinabibilangan ng paghula ng mga node, gilid, at mga graph.
- Ginagamit ang CNN upang pag-uri-uriin ang mga larawan. Katulad nito, upang mahulaan ang isang klase, ang mga GNN ay inilalapat sa pixel grid na kumakatawan sa istraktura ng graph.
- Pagkakategorya ng teksto gamit ang mga paulit-ulit na neural network. Ginagamit din ang mga GNN sa mga arkitektura ng graph kung saan ang bawat salita sa isang parirala ay isang node.
Para makapaghula ng mga node, gilid, o kumpletong mga graph, ginagamit ang mga neural network para gumawa ng mga GNN. Ang isang hula sa antas ng node, halimbawa, ay maaaring malutas ang isang problema tulad ng spam detection.
Ang hula sa link ay isang tipikal na kaso sa mga system ng nagrerekomenda at maaaring isang halimbawa ng problema sa paghula sa gilid.
Graph Mga Uri ng Neural Network
Maraming uri ng neural network ang umiiral, at ang Convolutional Neural Network ay naroroon sa karamihan sa mga ito. Malalaman natin ang tungkol sa mga pinakakilalang GNN sa bahaging ito.
Mga Graph Convolutional Network (GCNs)
Ang mga ito ay maihahambing sa mga klasikong CNN. Nakakakuha ito ng mga katangian sa pamamagitan ng pagtingin sa mga kalapit na node. Ang activation function ay ginagamit ng mga GNN upang magdagdag ng non-linearity pagkatapos ng pagsasama-sama ng mga node vector at ipadala ang output sa siksik na layer.
Binubuo ito ng Graph convolution, isang linear na layer, at isang non-Learner activation function, sa esensya. Ang mga GCN ay may dalawang pangunahing uri: Spectral Convolutional Networks at Spatial Convolutional Networks.
Graph Auto-Encoder Networks
Gumagamit ito ng isang encoder upang matutunan kung paano kumatawan sa mga graph at isang decoder upang subukang buuin muli ang mga input graph. Mayroong bottleneck layer na nagkokonekta sa encoder at decoder.
Dahil ang mga auto-encode ay gumagawa ng isang mahusay na trabaho sa paghawak ng balanse ng klase, ang mga ito ay madalas na ginagamit sa paghula ng link.
Mga Paulit-ulit na Graph Neural Network (RGNNs)
Sa mga multi-relational na network, kung saan ang isang node ay maraming ugnayan, natututo ito ng pinakamainam na pattern ng diffusion at maaaring pamahalaan ang mga graph. Upang pataasin ang kinis at bawasan ang over-parameterization, ginagamit ang mga regularizer sa form na ito ng graph neural network.
Upang makakuha ng mas mahusay na mga resulta, ang mga RGNN ay nangangailangan ng mas kaunting kapangyarihan sa pagproseso. Ginagamit ang mga ito para sa pagbuo ng teksto, pagkilala sa pagsasalita, pagsasalin ng makina, paglalarawan ng larawan, pag-tag ng video, at pagbubuod ng teksto.
Mga Gated Neural Graph Network (GGNNs)
Pagdating sa mga pangmatagalang gawaing umaasa, nahihigitan nila ang mga RGNN. Sa pamamagitan ng pagsasama ng mga node, edge, at temporal na gate sa mga pangmatagalang dependency, pinapahusay ng mga gated graph neural network ang mga paulit-ulit na graph neural network.
Ang mga gate ay gumagana nang katulad sa Gated Recurrent Units (GRUs) dahil sanay sila sa pag-recall at paglimot ng data sa iba't ibang yugto.
Pagpapatupad ng Graph Neural Network gamit ang Pytorch
Ang partikular na isyu na aming pagtutuunan ng pansin ay isang karaniwang isyu sa pagkakategorya ng node. Mayroon kaming isang malaking social network na tinatawag musae-github, na pinagsama-sama mula sa bukas na API, para sa mga developer ng GitHub.
Ipinapakita ng mga gilid ang mga ugnayan ng magkaparehong tagasunod sa pagitan ng mga node, na kumakatawan sa mga developer (mga gumagamit ng platform) na nag-star sa hindi bababa sa 10 repositoryo (tandaan na ang salitang mutual ay nagpapahiwatig ng hindi nakadirekta na relasyon).
Batay sa lokasyon ng node, mga naka-star na repository, employer, at email address, kinukuha ang mga katangian ng node. Paghuhula kung ang isang user ng GitHub ay isang web developer o a developer ng machine learning ay ang aming gawain.
Ang titulo ng trabaho ng bawat user ay nagsilbing batayan para sa pag-target na ito.
Pag-install ng PyTorch
Upang magsimula, kailangan muna nating i-install PyTorch. Maaari mong i-configure ito ayon sa iyong makina mula sa dito. Narito ang akin:
Pag-import ng mga module
Ngayon, ini-import namin ang mga kinakailangang module
Pag-import at Pag-explore ng data
Ang sumusunod na hakbang ay basahin ang data at i-plot ang unang limang row at ang huling limang row mula sa labels file.
Dalawa lang sa apat na column—ang id ng node (ibig sabihin, user) at ml_target, na 1 kung miyembro ng machine learning community ang user at 0 kung hindi—ang may kaugnayan sa amin sa sitwasyong ito.
Dahil mayroon lamang dalawang klase, maaari na nating tiyakin na ang ating gawain ay isang binary classification na isyu.
Bilang resulta ng mga makabuluhang kawalan ng timbang sa klase, maaari na lamang ipalagay ng classifier kung aling klase ang mayorya sa halip na suriin ang hindi gaanong kinakatawan na klase, na ginagawang isa pang mahalagang salik na dapat isaalang-alang ang balanse ng klase.
Ang pag-plot ng histogram (pamamahagi ng dalas) ay nagpapakita ng ilang kawalan ng timbang dahil mas kaunti ang mga klase mula sa machine learning (label=1) kaysa sa iba pang mga klase.
Feature Encoding
Ang mga katangian ng node ay nagpapaalam sa amin ng tampok na nauugnay sa bawat node. Sa pamamagitan ng pagpapatupad ng aming paraan upang mag-encode ng data, maaari naming agad na i-encode ang mga katangiang iyon.
Nais naming gamitin ang paraang ito upang i-encapsulate ang isang maliit na bahagi ng network (sabihin, 60 node) para ipakita. Ang code ay nakalista dito.
Pagdidisenyo at pagpapakita ng mga graph
Gagamitin namin ang torch geometric. data upang mabuo ang aming graph.
Upang magmodelo ng isang solong graph na may iba't ibang (opsyonal) na mga katangian, ginagamit ang data na isang simpleng object ng Python. Sa pamamagitan ng paggamit sa klase na ito at sa mga sumusunod na katangian—na lahat ay mga torch tensor—lilikha tayo ng ating graph object.
Ang anyo ng value x, na ilalaan sa mga feature na naka-encode na node, ay [bilang ng mga node, bilang ng mga feature].
Ang hugis ng y ay [bilang ng mga node], at ito ay ilalapat sa mga label ng node.
edge index: Upang mailarawan ang isang hindi nakadirekta na graph, kailangan nating palawakin ang orihinal na mga indeks ng gilid upang bigyang-daan ang pagkakaroon ng dalawang magkaibang nakadirekta na mga gilid na nag-uugnay sa parehong dalawang node ngunit tumuturo sa magkasalungat na direksyon.
Ang isang pares ng mga gilid, ang isa ay tumuturo mula sa node 100 hanggang 200 at ang isa naman mula 200 hanggang 100, ay kinakailangan, halimbawa, sa pagitan ng mga node 100 at 200. Kung ang mga indeks ng gilid ay ibinigay, kung gayon ito ay kung paano maaaring katawanin ang hindi nakadirekta na graph. [2,2*bilang ng mga orihinal na gilid] ang magiging tensor form.
Ginagawa namin ang aming paraan ng draw graph upang magpakita ng graph. Ang unang hakbang ay gawing isang NetworkX graph ang aming homogenous na network, na maaaring iguhit gamit ang NetworkX.draw.
Gawin ang aming modelo ng GNN at sanayin ito
Magsisimula tayo sa pamamagitan ng pag-encode ng buong set ng data sa pamamagitan ng pagsasagawa ng encode data na may light=False at pagkatapos ay pagtawag sa construct graph na may light=False para buuin ang buong graph. Hindi namin susubukang iguhit ang malaking graph na ito dahil sa palagay ko ay gumagamit ka ng lokal na makina na may limitadong mapagkukunan.
Ang mga mask, na mga binary vectors na tumutukoy kung aling mga node ang nabibilang sa bawat partikular na mask gamit ang mga digit 0 at 1, ay maaaring gamitin upang ipaalam sa yugto ng pagsasanay kung aling mga node ang dapat isama sa panahon ng pagsasanay at upang sabihin sa yugto ng hinuha kung aling mga node ang data ng pagsubok. Torch geometric.nagbabago.
Maaaring magdagdag ng node-level split gamit ang training mask, val mask, at test mask properties ng AddTrainValTestMask class, na magagamit para kumuha ng graph at bigyang-daan kami na tukuyin kung paano namin gustong gawin ang aming mga mask.
Ginagamit lang namin ang 10% para sa pagsasanay at ginagamit ang 60% ng data bilang set ng pagsubok habang ginagamit ang 30% bilang set ng pagpapatunay.
Ngayon, magsasalansan kami ng dalawang layer ng GCNConv, ang una ay may bilang ng feature na output na katumbas ng bilang ng mga feature sa aming graph bilang mga feature ng input.
Sa pangalawang layer, na naglalaman ng mga output node na katumbas ng bilang ng aming mga klase, naglalapat kami ng relu activation function at nagbibigay ng mga nakatagong feature.
Ang index ng gilid at bigat ng gilid ay dalawa sa maraming opsyon x na maaaring tanggapin ng GCNConv sa forward function, ngunit sa aming sitwasyon, kailangan lang namin ang unang dalawang variable.
Sa kabila ng katotohanan na magagawa ng aming modelo na mahulaan ang klase ng bawat node sa graph, kailangan pa rin naming tukuyin ang katumpakan at pagkawala para sa bawat set nang hiwalay depende sa yugto.
Halimbawa, sa panahon ng pagsasanay, gusto lang naming gamitin ang set ng pagsasanay upang matukoy ang katumpakan at pagkawala ng pagsasanay, at samakatuwid ay dito nagagamit ang aming mga maskara.
Upang kalkulahin ang naaangkop na pagkawala at katumpakan, tutukuyin namin ang mga function ng masked loss at masked accuracy.
Pagsasanay sa modelo
Ngayong natukoy na natin ang layunin ng pagsasanay kung saan gagamitin ang tanglaw. Si Adam ay isang master optimizer.
Magsasagawa kami ng pagsasanay para sa isang tiyak na bilang ng mga panahon habang binabantayan ang katumpakan ng pagpapatunay.
Ibinabalangkas din namin ang mga pagkalugi at katumpakan ng pagsasanay sa iba't ibang panahon.
Mga Kakulangan ng Graph Neural Network
Ang paggamit ng mga GNN ay may ilang mga disadvantages. Kailan gagamitin ang GNNa at kung paano pahusayin ang pagganap ng aming mga modelo ng machine learning ay parehong magiging malinaw sa amin pagkatapos naming magkaroon ng mas mahusay na pag-unawa sa mga ito.
- Habang ang mga GNN ay mababaw na network, kadalasang may tatlong layer, karamihan sa mga neural network ay maaaring maging malalim upang mapabuti ang pagganap. Hindi kami makakapag-perform sa napakahusay na mga dataset dahil sa limitasyong ito.
- Mas mahirap sanayin ang isang modelo sa mga graph, dahil dinamiko ang kanilang istrukturang dinamika.
- Dahil sa mataas na gastos sa computational ng mga network na ito, nagdudulot ng mga hamon ang pag-scale ng modelo para sa produksyon. Ang pag-scale ng mga GNN para sa produksyon ay magiging mahirap kung ang iyong istraktura ng graph ay malaki at kumplikado.
Konklusyon
Sa nakalipas na ilang taon, naging makapangyarihan at epektibong mga tool ang mga GNN para sa mga isyu sa machine learning sa graph domain. Ang isang pangunahing pangkalahatang-ideya ng mga graph neural network ay ibinigay sa artikulong ito.
Pagkatapos nito, maaari mong simulan ang paggawa ng dataset na gagamitin para sanayin at subukan ang modelo. Upang maunawaan kung paano ito gumagana at kung ano ang kaya nito, maaari ka ring pumunta nang mas malayo at sanayin ito gamit ang ibang uri ng dataset.
Maligayang Coding!
Mag-iwan ng Sagot