Cuprins[Ascunde][Spectacol]
Tehnicile de învățare profundă cunoscute sub numele de „rețele neuronale grafice” (GNN) operează în domeniul graficului. Aceste rețele și-au găsit în ultimul timp utilizare într-o varietate de domenii, inclusiv viziunea computerizată, sistemele de recomandare și optimizarea combinatorie, pentru a numi câteva.
În plus, aceste rețele pot fi folosite pentru a reprezenta sisteme complexe, inclusiv rețele sociale, rețele de interacțiune proteină-proteină, grafice de cunoștințe și altele în mai multe domenii de studiu.
Spațiul non-euclidian este locul în care funcționează datele grafice, spre deosebire de alte tipuri de date, cum ar fi imaginile. Pentru a clasifica nodurile, a prezice legăturile și a datelor cluster, este utilizată analiza grafică.
În acest articol, vom examina graficul Retea neurala în detaliu, tipurile sale, precum și să ofere exemple practice folosind PyTorch.
Deci, ce este Graph?
Un graf este un tip de structură de date alcătuită din noduri și vârfuri. Legăturile dintre diferitele noduri sunt determinate de vârfuri. Dacă direcția este indicată în noduri, se spune că graficul este direcționat; în caz contrar, este nedirecționat.
O bună aplicare a graficelor este modelarea relațiilor dintre diverși indivizi în a reţea socială. Atunci când aveți de-a face cu circumstanțe complexe, cum ar fi legăturile și schimburile, graficele sunt foarte utile.
Ele sunt folosite de sisteme de recomandare, analiză semantică, analiza rețelelor sociale și recunoaștere a modelelor
. Crearea de soluții bazate pe grafice este un domeniu nou-nouț care oferă o înțelegere profundă a datelor complexe și interdependente.
Rețeaua neuronală grafică
Rețelele neuronale grafice sunt tipuri de rețele neuronale specializate care pot funcționa pe un format de date grafice. Încorporarea graficelor și rețelele neuronale convoluționale (CNN) au un impact semnificativ asupra lor.
Rețelele neuronale ale graficelor sunt folosite în sarcini care includ prezicerea nodurilor, marginilor și graficelor.
- CNN-urile sunt folosite pentru a clasifica imaginile. În mod similar, pentru a prezice o clasă, GNN-urile sunt aplicate grilei de pixeli care reprezintă structura graficului.
- Categorizarea textului folosind rețele neuronale recurente. GNN-urile sunt, de asemenea, folosite cu arhitecturi grafice în care fiecare cuvânt dintr-o frază este un nod.
Pentru a prognoza noduri, muchii sau grafice complete, rețelele neuronale sunt folosite pentru a crea GNN-uri. O predicție la nivel de nod, de exemplu, poate rezolva o problemă precum detectarea spam-ului.
Predicția legăturii este un caz tipic în sistemele de recomandare și ar putea fi un exemplu de problemă de predicție la margine.
Tipuri de rețele neuronale grafice
Există numeroase tipuri de rețele neuronale, iar rețelele neuronale convoluționale sunt prezente în majoritatea acestora. Vom afla despre cele mai cunoscute GNN-uri în această parte.
Rețele convoluționale grafice (GCN)
Sunt comparabile cu CNN-urile clasice. Dobândește caracteristici privind nodurile din apropiere. Funcția de activare este folosită de GNN-uri pentru a adăuga neliniaritate după agregarea vectorilor nod și trimiterea ieșirii la stratul dens.
Este alcătuit din convoluția grafică, un strat liniar și o funcție de activare non-învățător, în esență. GCN-urile vin în două soiuri principale: rețele convoluționale spectrale și rețele convoluționale spațiale.
Graficul rețelelor de codificare automată
Folosește un encoder pentru a învăța cum să reprezinte grafice și un decodor pentru a încerca să reconstruiască graficele de intrare. Există un strat de blocaj care conectează codificatorul și decodorul.
Deoarece codificatoarele automate fac o treabă excelentă în gestionarea echilibrului claselor, acestea sunt frecvent utilizate în predicția legăturilor.
Rețele neuronale cu grafice recurente (RGNN)
În rețelele multi-relaționale, unde un singur nod are numeroase relații, învață modelul optim de difuzie și poate gestiona graficele. Pentru a crește netezimea și a reduce supra-parametrizarea, regularizatoarele sunt utilizate în această formă de rețea neuronală grafică.
Pentru a obține rezultate mai bune, RGNN-urile necesită mai puțină putere de procesare. Acestea sunt utilizate pentru generarea de text, recunoașterea vorbirii, traducerea automată, descrierea imaginii, etichetarea video și rezumarea textului.
Rețele de grafice neuronale cu încadrare (GGNN)
Când vine vorba de sarcini dependente pe termen lung, acestea depășesc RGNN-urile. Prin includerea nodurilor, marginii și porților temporale pe dependențe pe termen lung, rețelele neuronale cu graf cu încadrare îmbunătățesc rețelele neuronale cu graf recurent.
Porțile funcționează în mod similar unităților recurente Gated (GRU) prin faptul că sunt folosite pentru a rechema și uita date în diferite etape.
Implementarea rețelei neuronale Graph folosind Pytorch
Problema specifică pe care ne vom concentra este o problemă comună de clasificare a nodurilor. Avem o rețea socială considerabilă numită musae-github, care a fost compilat din API-ul deschis, pentru dezvoltatorii GitHub.
Marginile arată relațiile de urmărire reciprocă dintre noduri, care reprezintă dezvoltatori (utilizatori de platformă) care au jucat cu stea în cel puțin 10 depozite (rețineți că cuvântul reciproc indică o relație nedirecționată).
Pe baza locației nodului, a depozitelor marcate cu stea, a angajatorului și a adresei de e-mail, sunt preluate caracteristicile nodului. Prezicerea dacă un utilizator GitHub este un dezvoltator web sau un dezvoltator de învățare automată este sarcina noastră.
Titlul postului fiecărui utilizator a servit drept bază pentru această funcție de direcționare.
Instalarea PyTorch
Pentru a începe, mai întâi trebuie să instalăm PyTorch. Îl puteți configura în funcție de mașina dvs. de la aici. Aici este a mea:
Importul modulelor
Acum, importăm modulele necesare
Importarea și explorarea datelor
Următorul pas este să citiți datele și să trasați primele cinci rânduri și ultimele cinci rânduri din fișierul etichete.
Doar două dintre cele patru coloane — id-ul nodului (adică, utilizator) și ml_target, care este 1 dacă utilizatorul este membru al comunității de învățare automată și 0 în caz contrar — sunt relevante pentru noi în această situație.
Având în vedere că există doar două clase, acum putem fi siguri că sarcina noastră este o problemă de clasificare binară.
Ca rezultat al dezechilibrelor semnificative de clasă, clasificatorul poate doar să presupună care clasă este majoritară, mai degrabă decât să evalueze clasa subreprezentată, făcând echilibrul clasei un alt factor crucial de luat în considerare.
Trasarea histogramei (distribuția de frecvență) dezvăluie un anumit dezechilibru, deoarece există mai puține clase din învățarea automată (etichetă = 1) decât din celelalte clase.
Codificarea caracteristicilor
Caracteristicile nodurilor ne informează despre caracteristica care este asociată fiecărui nod. Prin implementarea metodei noastre de codificare a datelor, putem codifica instantaneu acele caracteristici.
Dorim să folosim această metodă pentru a încapsula o mică parte a rețelei (de exemplu, 60 de noduri) pentru afișare. Codul este listat aici.
Proiectarea și afișarea graficelor
Vom folosi torța geometrică. date pentru a construi graficul nostru.
Pentru a modela un singur grafic cu proprietăți diferite (opționale), sunt utilizate date care sunt un obiect Python simplu. Utilizând această clasă și următoarele atribute – toate fiind tensori de torță – vom crea obiectul nostru grafic.
Forma valorii x, care va fi alocată caracteristicilor nodurilor codificate, este [număr de noduri, număr de caracteristici].
Forma lui y este [număr de noduri] și va fi aplicată etichetelor nodurilor.
indice de margine: Pentru a descrie un graf nedirecționat, trebuie să extindem indicii de margine originali pentru a permite existența a două margini direcționate distincte care leagă aceleași două noduri, dar indică în direcții opuse.
O pereche de muchii, una îndreptată de la nodul 100 la 200 și cealaltă de la 200 la 100, este necesară, de exemplu, între nodurile 100 și 200. Dacă sunt furnizați indici de muchie, atunci acesta este modul în care poate fi reprezentat graficul nedirecționat. [2,2*număr de muchii originale] va fi forma tensorului.
Creăm metoda noastră de desenare a graficului pentru a afișa un grafic. Primul pas este să transformăm rețeaua noastră omogenă într-un grafic NetworkX, care poate fi apoi desenat folosind NetworkX.draw.
Faceți modelul nostru GNN și antrenați-l
Începem prin a codifica întregul set de date executând codificarea datelor cu light=False și apoi apelând construct graph cu light=False pentru a construi întregul grafic. Nu vom încerca să desenăm acest grafic mare, deoarece presupun că utilizați o mașină locală care are resurse limitate.
Măștile, care sunt vectori binari care identifică nodurile care aparțin fiecărei mască specifice folosind cifrele 0 și 1, pot fi utilizate pentru a notifica fazei de antrenament care noduri ar trebui incluse în timpul antrenamentului și pentru a spune fazei de inferență care noduri sunt datele de testare. Torță geometrică.transformă.
O împărțire la nivel de nod poate fi adăugată folosind masca de antrenament, masca val și proprietățile masca de testare ale clasei AddTrainValTestMask, care poate fi folosită pentru a lua un grafic și ne permite să specificăm modul în care dorim să fie construite măștile noastre.
Utilizăm doar 10% pentru antrenament și folosim 60% din date ca set de testare, în timp ce folosim 30% ca set de validare.
Acum, vom stivui două straturi GCNConv, primul dintre acestea având un număr de caracteristici de ieșire egal cu numărul de caracteristici din graficul nostru ca caracteristici de intrare.
În al doilea strat, care conține noduri de ieșire egale cu numărul claselor noastre, aplicăm o funcție de activare relu și furnizăm caracteristicile latente.
Indicele marginii și greutatea marginii sunt două dintre multele opțiuni x pe care GCNConv le poate accepta în funcția de avans, dar în situația noastră, avem nevoie doar de primele două variabile.
În ciuda faptului că modelul nostru va fi capabil să prezică clasa fiecărui nod din grafic, trebuie totuși să determinăm precizia și pierderea pentru fiecare set separat, în funcție de fază.
De exemplu, în timpul antrenamentului, vrem să folosim setul de antrenament doar pentru a determina acuratețea și pierderea antrenamentului și, prin urmare, aici sunt utile măștile noastre.
Pentru a calcula pierderea și acuratețea corespunzătoare, vom defini funcțiile pierderii mascate și preciziei mascate.
Instruirea modelului
Acum că am definit scopul de antrenament pentru care va fi folosită lanterna. Adam este un maestru optimizator.
Vom efectua antrenamentul pentru un anumit număr de epoci, urmărind acuratețea validării.
De asemenea, înregistrăm pierderile și precizia antrenamentului de-a lungul diferitelor epoci.
Dezavantajele rețelei neuronale Graph
Utilizarea GNN-urilor are câteva dezavantaje. Când să folosim GNNa și cum să îmbunătățim performanța modelelor noastre de învățare automată ne vor fi clare după ce le vom înțelege mai bine.
- În timp ce GNN-urile sunt rețele superficiale, de obicei cu trei straturi, majoritatea rețelelor neuronale pot merge adânc pentru a îmbunătăți performanța. Din cauza acestei limitări, nu putem face performanțe de vârf în seturi mari de date.
- Este mai dificil să antrenezi un model pe grafice, deoarece dinamica lor structurală este dinamică.
- Datorită costurilor de calcul ridicate ale acestor rețele, scalarea modelului pentru producție prezintă provocări. Scalarea GNN-urilor pentru producție va fi o provocare dacă structura graficului este uriașă și complicată.
Concluzie
În ultimii câțiva ani, GNN-urile s-au dezvoltat în instrumente puternice și eficiente pentru problemele de învățare automată în domeniul graficului. O prezentare generală fundamentală a rețelelor neuronale grafice este oferită în acest articol.
După aceea, puteți începe să creați setul de date care va fi folosit pentru a antrena și a testa modelul. Pentru a înțelege cum funcționează și de ce este capabil, puteți merge mult mai departe și îl puteți antrena folosind un alt tip de set de date.
Codificare fericită!
Lasă un comentariu