Saturs[Paslēpt][Rādīt]
Dziļās mācīšanās metodes, kas pazīstamas kā “grafu neironu tīkli” (GNN), darbojas grafu domēnā. Šie tīkli pēdējā laikā ir izmantoti dažādās jomās, tostarp datorredzēšanā, ieteikumu sistēmās un kombinatoriskajā optimizācijā.
Turklāt šos tīklus var izmantot, lai attēlotu sarežģītas sistēmas, tostarp sociālos tīklus, olbaltumvielu-olbaltumvielu mijiedarbības tīklus, zināšanu grafikus un citus vairākās studiju jomās.
Atšķirībā no cita veida datiem, piemēram, attēliem, grafiku dati darbojas ne-eiklīda telpā. Lai klasificētu mezglus, paredzētu saites un klasteru datus, tiek izmantota grafiku analīze.
Šajā rakstā mēs apskatīsim grafiku Neironu tīkls detalizēti, tā veidi, kā arī sniegt praktiskus piemērus, izmantojot PyTorch.
Tātad, kas ir Grafs?
Grafiks ir datu struktūras veids, kas sastāv no mezgliem un virsotnēm. Savienojumus starp dažādiem mezgliem nosaka virsotnes. Ja virziens ir norādīts mezglos, grafiks tiek uzskatīts par virzītu; pretējā gadījumā tas ir neorientēts.
Labs grafiku pielietojums ir attiecību modelēšana starp dažādiem indivīdiem a sociālais tīkls. Risinot sarežģītus apstākļus, piemēram, saites un apmaiņu, grafiki ir ļoti noderīgi.
Tos izmanto ieteikumu sistēmas, semantiskā analīze, sociālo tīklu analīze un modeļu atpazīšana
. Uz diagrammām balstītu risinājumu izveide ir pavisam jauna joma, kas piedāvā visaptverošu izpratni par sarežģītiem un savstarpēji saistītiem datiem.
Grafika neironu tīkls
Grafu neironu tīkli ir specializēti neironu tīklu veidi, kas var darboties diagrammas datu formātā. Grafu iegulšana un konvolucionālie neironu tīkli (CNN) tos būtiski ietekmē.
Grafu neironu tīkli tiek izmantoti uzdevumos, kas ietver mezglu, malu un grafiku prognozēšanu.
- CNN izmanto attēlu klasificēšanai. Līdzīgi, lai paredzētu klasi, GNN tiek lietoti pikseļu režģim, kas attēlo grafika struktūru.
- Teksta kategorizēšana, izmantojot atkārtojošos neironu tīklus. GNN tiek izmantoti arī ar grafiku arhitektūrām, kur katrs vārds frāzē ir mezgls.
Lai prognozētu mezglus, malas vai pilnīgus grafikus, GNN izveidošanai tiek izmantoti neironu tīkli. Piemēram, paredzēšana mezgla līmenī var atrisināt tādu problēmu kā surogātpasta noteikšana.
Saites prognozēšana ir tipisks gadījums ieteikuma sistēmās, un tas varētu būt malu prognozēšanas problēmas piemērs.
Grafika neironu tīklu veidi
Pastāv daudzi neironu tīklu veidi, un lielākajā daļā no tiem ir konvolucionālie neironu tīkli. Šajā daļā mēs uzzināsim par pazīstamākajiem GNN.
Diagrammu konvolucionālie tīkli (GCN)
Tie ir salīdzināmi ar klasiskajiem CNN. Tas iegūst raksturlielumus, aplūkojot tuvumā esošos mezglus. Aktivizācijas funkciju izmanto GNN, lai pievienotu nelinearitāti pēc mezglu vektoru apkopošanas un izvades nosūtīšanas uz blīvo slāni.
Būtībā to veido Graph convolution, lineārs slānis un aktivizēšanas funkcija, kas nav apmācāmā. GCN ir divi galvenie veidi: spektrālie konvolucionālie tīkli un telpiskie konvolucionālie tīkli.
Grafika automātiskā kodētāja tīkli
Tas izmanto kodētāju, lai uzzinātu, kā attēlot grafikus, un dekodētāju, lai mēģinātu rekonstruēt ievades grafikus. Ir sašaurinājuma slānis, kas savieno kodētāju un dekodētāju.
Tā kā automātiskie kodētāji lieliski apstrādā klases līdzsvaru, tos bieži izmanto saišu prognozēšanā.
Atkārtoti grafiku neironu tīkli (RGNN)
Daudzu relāciju tīklos, kur vienam mezglam ir daudz attiecību, tas apgūst optimālo difūzijas modeli un var pārvaldīt grafikus. Lai palielinātu gludumu un samazinātu pārmērīgu parametrizāciju, šajā grafu neironu tīkla formā tiek izmantoti regulatori.
Lai iegūtu labākus rezultātus, RGNN ir nepieciešama mazāka apstrādes jauda. Tos izmanto teksta ģenerēšanai, runas atpazīšanai, mašīntulkošanai, attēlu aprakstam, video atzīmēšanai un teksta apkopošanai.
Slēgtie neironu grafiku tīkli (GGNN)
Runājot par ilgstoši atkarīgiem uzdevumiem, tie pārspēj RGNN. Iekļaujot ilgtermiņa atkarības mezglu, malu un laika vārtus, ierobežoto grafu neironu tīkli uzlabo atkārtotus grafu neironu tīklus.
Vārti darbojas līdzīgi bloķētajām periodiskajām vienībām (GRU), jo tie tiek izmantoti, lai dažādos posmos atsauktu un aizmirstu datus.
Grafu neironu tīkla ieviešana, izmantojot Pytorch
Konkrētā problēma, uz kuru mēs pievērsīsimies, ir izplatīta mezglu kategorizēšanas problēma. Mums ir liels sociālais tīkls, ko sauc musae-github, kas tika apkopota no atvērtās API, GitHub izstrādātājiem.
Malas parāda savstarpējās sekotāju attiecības starp mezgliem, kas pārstāv izstrādātājus (platformas lietotājus), kuri ir atzīmējušies ar zvaigznīti vismaz 10 krātuvēs (ņemiet vērā, ka vārds savstarpējs norāda uz nevirzītām attiecībām).
Pamatojoties uz mezgla atrašanās vietu, ar zvaigznīti atzīmētajām krātuvēm, darba devēju un e-pasta adresi, mezgla raksturlielumi tiek izgūti. Paredzēšana, vai GitHub lietotājs ir tīmekļa izstrādātājs vai a mašīnmācības izstrādātājs ir mūsu uzdevums.
Katra lietotāja amata nosaukums kalpoja par pamatu šai mērķauditorijas atlases funkcijai.
PyTorch instalēšana
Lai sāktu, mums vispirms ir jāinstalē PyTorch. Varat to konfigurēt atbilstoši savai iekārtai no šeit. Šeit ir mans:
Moduļu importēšana
Tagad mēs importējam nepieciešamos moduļus
Datu importēšana un izpēte
Nākamais solis ir nolasīt datus un attēlot pirmās piecas rindas un pēdējās piecas rindas no etiķešu faila.
Šajā situācijā mums ir svarīgas tikai divas no četrām kolonnām — mezgla id (ti, lietotājs) un ml_target, kas ir 1, ja lietotājs ir mašīnmācīšanās kopienas dalībnieks, un 0.
Ņemot vērā, ka ir tikai divas klases, tagad varam būt pārliecināti, ka mūsu uzdevums ir binārās klasifikācijas problēma.
Nozīmīgas klašu nelīdzsvarotības rezultātā klasifikators var vienkārši pieņemt, kura klase ir lielākā daļa, nevis novērtēt nepietiekami pārstāvēto klasi, padarot šķiru līdzsvaru par vēl vienu svarīgu faktoru, kas jāņem vērā.
Histogrammas attēlojums (frekvences sadalījums) atklāj zināmu nelīdzsvarotību, jo mašīnmācībā (label=1) ir mazāk klašu nekā citās klasēs.
Funkciju kodēšana
Mezglu raksturlielumi informē mūs par iezīmi, kas ir saistīta ar katru mezglu. Ieviešot mūsu metodi datu kodēšanai, mēs varam uzreiz kodēt šos raksturlielumus.
Mēs vēlamies izmantot šo metodi, lai iekapsulētu nelielu tīkla daļu (piemēram, 60 mezglus) attēlošanai. Kods ir norādīts šeit.
Grafiku noformēšana un attēlošana
Mēs izmantosim ģeometrisko lāpu. datus, lai izveidotu mūsu grafiku.
Lai modelētu vienu grafiku ar dažādām (neobligātām) īpašībām, tiek izmantoti dati, kas ir vienkāršs Python objekts. Izmantojot šo klasi un šādus atribūtus, kas visi ir lāpas tenzori, mēs izveidosim savu grafika objektu.
Vērtības x forma, kas tiks piešķirta kodētajiem mezgla pazīmēm, ir [mezglu skaits, pazīmju skaits].
Y forma ir [mezglu skaits], un tā tiks piemērota mezglu etiķetēm.
malu indekss: lai aprakstītu nevirzītu grafiku, mums ir jāpaplašina sākotnējie malu indeksi, lai varētu pastāvēt divas atšķirīgas virzītas malas, kas savieno tos pašus divus mezglus, bet norāda pretējos virzienos.
Malu pāris, no kuriem viens norāda no mezgla 100 uz 200, bet otrs no 200 līdz 100, ir nepieciešams, piemēram, starp mezgliem 100 un 200. Ja tiek nodrošināti malu indeksi, tad šādi var attēlot nevirzīto grafiku. [2,2*sākotnējo malu skaits] būs tenzora forma.
Mēs izveidojam zīmēšanas diagrammas metodi, lai parādītu grafiku. Pirmais solis ir pārveidot mūsu viendabīgo tīklu NetworkX diagrammā, kuru pēc tam var uzzīmēt, izmantojot NetworkX.draw.
Izveidojiet mūsu GNN modeli un apmāciet to
Mēs sākam ar visas datu kopas kodēšanu, izpildot datu kodēšanu ar light=False un pēc tam izsaucot construct graph ar light=False, lai izveidotu visu grafiku. Mēs nemēģināsim uzzīmēt šo lielo grafiku, jo, manuprāt, jūs izmantojat vietējo iekārtu, kurai ir ierobežoti resursi.
Maskas, kas ir bināri vektori, kas identificē, kuri mezgli pieder katrai konkrētai maskai, izmantojot ciparus 0 un 1, var izmantot, lai paziņotu apmācības fāzei, kuri mezgli jāiekļauj apmācības laikā, un lai secinātu, kuri mezgli ir testa dati. Lāpa ģeometriskā.pārveido.
Mezgla līmeņa sadalījumu var pievienot, izmantojot AddTrainValTestMask klases apmācības maskas, val maskas un testa maskas īpašības, kuras var izmantot, lai izveidotu grafiku un ļautu mums norādīt, kā mēs vēlamies, lai mūsu maskas tiktu konstruētas.
Mēs vienkārši izmantojam 10% apmācībai un 60% datu izmantojam kā testa kopu, bet 30% izmantojam kā validācijas kopu.
Tagad mēs saliksim divus GCNConv slāņus, no kuriem pirmajā ir izvades līdzekļu skaits, kas ir vienāds ar objektu skaitu mūsu diagrammā kā ievades līdzekļus.
Otrajā slānī, kurā ir izvades mezgli, kas vienādi ar mūsu klašu skaitu, mēs izmantojam relu aktivizēšanas funkciju un nodrošinām latentās funkcijas.
Malu indekss un malas svars ir divas no daudzajām opcijām x, ko GCNConv var pieņemt pārsūtīšanas funkcijā, taču mūsu situācijā mums ir nepieciešami tikai pirmie divi mainīgie.
Neskatoties uz to, ka mūsu modelis spēs paredzēt katra grafa mezgla klasi, mums joprojām ir jānosaka katras kopas precizitāte un zudumi atsevišķi atkarībā no fāzes.
Piemēram, treniņu laikā mēs tikai vēlamies izmantot treniņu komplektu, lai noteiktu precizitāti un treniņu zaudējumus, un tāpēc šeit noder mūsu maskas.
Lai aprēķinātu atbilstošos zaudējumus un precizitāti, mēs definēsim maskētā zuduma un maskētās precizitātes funkcijas.
Modeļa apmācība
Tagad, kad esam definējuši apmācības mērķi, kādam tiks izmantota lāpa. Ādams ir galvenais optimizētājs.
Mēs vadīsim apmācību noteiktu skaitu laikmetu, vienlaikus sekojot līdzi validācijas precizitātei.
Mēs arī attēlojam apmācību zaudējumus un precizitāti dažādos laikmetos.
Grafu neironu tīkla trūkumi
GNN izmantošanai ir daži trūkumi. Kad būs jāizmanto GNNa un kā uzlabot mūsu mašīnmācīšanās modeļu veiktspēju, mēs skaidri sapratīsim, kad būsim tos labāk izpratuši.
- Lai gan GNN ir sekli tīkli, parasti ar trīs slāņiem, lielākā daļa neironu tīklu var darboties dziļi, lai uzlabotu veiktspēju. Šī ierobežojuma dēļ mēs nevaram sasniegt visprogresīvākās darbības lielajās datu kopās.
- Ir grūtāk apmācīt modeli uz grafikiem, jo to strukturālā dinamika ir dinamiska.
- Šo tīklu augsto skaitļošanas izmaksu dēļ modeļa mērogošana ražošanai rada problēmas. GNN mērogošana ražošanai būs sarežģīta, ja diagrammas struktūra ir milzīga un sarežģīta.
Secinājumi
Dažu pēdējo gadu laikā GNN ir kļuvuši par spēcīgiem un iedarbīgiem rīkiem mašīnmācības problēmu risināšanai grafiku domēnā. Šajā rakstā ir sniegts fundamentāls grafu neironu tīklu pārskats.
Pēc tam varat sākt veidot datu kopu, kas tiks izmantota modeļa apmācīšanai un testēšanai. Lai saprastu, kā tas darbojas un ko tas spēj, varat arī doties daudz tālāk un apmācīt to, izmantojot cita veida datu kopu.
Laimīgu kodēšanu!
Atstāj atbildi