Sommario[Nascondere][Spettacolo]
Le tecniche di deep learning note come "reti neurali del grafo" (GNN) operano nel dominio del grafo. Queste reti hanno recentemente trovato uso in una varietà di campi, tra cui visione artificiale, sistemi di raccomandazione e ottimizzazione combinatoria, solo per citarne alcuni.
Inoltre, queste reti possono essere utilizzate per rappresentare sistemi complessi, inclusi social network, reti di interazione proteina-proteina, grafici della conoscenza e altri in diversi campi di studio.
Lo spazio non euclideo è il luogo in cui operano i dati del grafico, a differenza di altri tipi di dati come le immagini. Per classificare i nodi, prevedere i collegamenti e i dati del cluster, viene utilizzata l'analisi del grafico.
In questo articolo esamineremo il grafico Rete neurale in dettaglio, le sue tipologie, oltre a fornire esempi pratici utilizzando PyTorch.
Allora, cos'è il grafico?
Un grafico è un tipo di struttura dati composta da nodi e vertici. Le connessioni tra i vari nodi sono determinate dai vertici. Se la direzione è indicata nei nodi, il grafo si dice diretto; in caso contrario, non è orientato.
Una buona applicazione dei grafici è modellare le relazioni tra i vari individui in a social network. Quando si affrontano circostanze complesse, come collegamenti e scambi, i grafici sono molto utili.
Sono impiegati dai sistemi di raccomandazione, dall'analisi semantica, dall'analisi dei social network e dal riconoscimento dei modelli
. La creazione di soluzioni basate su grafici è un campo nuovo di zecca che offre una comprensione approfondita di dati complessi e correlati.
Grafico rete neurale
Le reti neurali a grafo sono tipi di reti neurali specializzati che possono operare su un formato di dati grafico. L'inclusione di grafici e le reti neurali convoluzionali (CNN) hanno un impatto significativo su di essi.
Le reti neurali dei grafi sono impiegate in attività che includono la previsione di nodi, bordi e grafici.
- Le CNN vengono utilizzate per classificare le immagini. Allo stesso modo, per prevedere una classe, i GNN vengono applicati alla griglia di pixel che rappresenta la struttura del grafico.
- Categorizzazione del testo mediante reti neurali ricorrenti. I GNN vengono utilizzati anche con architetture di grafi in cui ogni parola in una frase è un nodo.
Per prevedere nodi, bordi o grafici completi, le reti neurali vengono utilizzate per creare GNN. Una previsione a livello di nodo, ad esempio, può risolvere un problema come il rilevamento dello spam.
La previsione dei collegamenti è un caso tipico nei sistemi di raccomandazione e potrebbe essere un esempio di un problema di previsione edge-wise.
Tipi di reti neurali del grafico
Esistono numerosi tipi di reti neurali e nella maggior parte di esse sono presenti reti neurali convoluzionali. Impareremo a conoscere i GNN più famosi in questa parte.
Grafico delle reti convoluzionali (GCN)
Sono paragonabili alle classiche CNN. Acquisisce caratteristiche osservando i nodi vicini. La funzione di attivazione viene utilizzata dai GNN per aggiungere non linearità dopo aver aggregato i vettori del nodo e inviato l'output allo strato denso.
È costituito essenzialmente da una convoluzione del grafico, uno strato lineare e una funzione di attivazione non discente. I GCN sono disponibili in due varietà principali: reti convoluzionali spettrali e reti convoluzionali spaziali.
Reti di codifica automatica grafica
Utilizza un codificatore per imparare a rappresentare i grafici e un decodificatore per provare a ricostruire i grafici di input. C'è uno strato di collo di bottiglia che collega l'encoder e il decodificatore.
Poiché gli auto-codificatori svolgono un ottimo lavoro nel gestire il bilanciamento delle classi, vengono spesso utilizzati nella previsione dei collegamenti.
Reti neurali a grafo ricorrente (RGNN)
Nelle reti multirelazionali, dove un singolo nodo ha numerose relazioni, apprende il pattern di diffusione ottimale e può gestire i grafici. Al fine di aumentare l'uniformità e ridurre la parametrizzazione eccessiva, in questa forma di rete neurale del grafico vengono utilizzati regolatori.
Per ottenere risultati migliori, gli RGNN richiedono meno potenza di elaborazione. Sono utilizzati per la generazione di testo, il riconoscimento vocale, la traduzione automatica, la descrizione di immagini, la codifica video e il riepilogo del testo.
Reti di grafi neurali con gate (GGNN)
Quando si tratta di compiti dipendenti a lungo termine, superano gli RGNN. Includendo nodi, archi e porte temporali sulle dipendenze a lungo termine, le reti neurali dei grafi gated migliorano le reti neurali dei grafi ricorrenti.
Le porte funzionano in modo simile alle Gated Recurrent Units (GRU) in quanto vengono utilizzate per richiamare e dimenticare i dati in varie fasi.
Implementazione della rete neurale del grafico utilizzando Pytorch
Il problema specifico su cui ci concentreremo è un problema di categorizzazione dei nodi comune. Abbiamo un considerevole social network chiamato museo-github, che è stato compilato dall'API aperta, per gli sviluppatori GitHub.
I bordi mostrano le relazioni di follower reciproche tra i nodi, che rappresentano gli sviluppatori (utenti della piattaforma) che hanno recitato in almeno 10 repository (notare che la parola mutual indica una relazione non orientata).
In base alla posizione del nodo, ai repository speciali, al datore di lavoro e all'indirizzo e-mail, vengono recuperate le caratteristiche del nodo. Prevedere se un utente GitHub è uno sviluppatore web o a sviluppatore di apprendimento automatico è il nostro compito.
Il titolo professionale di ciascun utente è servito come base per questa funzione di targeting.
Installazione di PyTorch
Per iniziare, dobbiamo prima installare PyTorch. Puoi configurarlo in base alla tua macchina da qui. Ecco il mio:
Importare moduli
Ora importiamo i moduli necessari
Importare ed esplorare i dati
Il passaggio successivo consiste nel leggere i dati e tracciare le prime cinque righe e le ultime cinque righe dal file delle etichette.
Solo due delle quattro colonne, l'id del nodo (ovvero, utente) e ml_target, che è 1 se l'utente è un membro della comunità di machine learning e 0 altrimenti, sono rilevanti per noi in questa situazione.
Dato che ci sono solo due classi, ora possiamo essere certi che il nostro compito è un problema di classificazione binaria.
Come risultato di squilibri di classe significativi, il classificatore può semplicemente presumere quale classe sia la maggioranza piuttosto che valutare la classe sottorappresentata, rendendo l'equilibrio di classe un altro fattore cruciale da considerare.
Il tracciamento dell'istogramma (distribuzione di frequenza) rivela uno squilibrio perché ci sono meno classi di machine learning (etichetta=1) rispetto alle altre classi.
Codifica delle funzioni
Le caratteristiche dei nodi ci informano della caratteristica associata a ciascun nodo. Implementando il nostro metodo per codificare i dati, possiamo codificare istantaneamente tali caratteristiche.
Vogliamo utilizzare questo metodo per incapsulare una piccola parte della rete (diciamo, 60 nodi) per la visualizzazione. Il codice è elencato qui.
Progettazione e visualizzazione di grafici
Utilizzeremo la geometria della torcia. dati per costruire il nostro grafico.
Per modellare un singolo grafico con diverse proprietà (opzionali), vengono utilizzati dati che sono un semplice oggetto Python. Utilizzando questa classe e i seguenti attributi, che sono tutti tensori torcia, creeremo il nostro oggetto grafico.
La forma del valore x, che sarà allocato alle caratteristiche del nodo codificato, è [numero di nodi, numero di caratteristiche].
La forma di y è [numero di nodi] e verrà applicata alle etichette dei nodi.
indice di spigolo: per descrivere un grafo non orientato, è necessario espandere gli indici di spigolo originali per consentire l'esistenza di due archi diretti distinti che collegano gli stessi due nodi ma puntano in direzioni opposte.
Una coppia di archi, uno che punta dal nodo 100 al 200 e l'altro dal 200 al 100, è necessaria, ad esempio, tra i nodi 100 e 200. Se vengono forniti gli indici degli archi, è così che può essere rappresentato il grafo non orientato. [2,2*numero di bordi originali] sarà la forma del tensore.
Creiamo il nostro metodo di tracciamento grafico per visualizzare un grafico. Il primo passo è trasformare la nostra rete omogenea in un grafo NetworkX, che può poi essere disegnato usando NetworkX.draw.
Crea il nostro modello GNN e addestralo
Iniziamo codificando l'intero set di dati eseguendo encode data con light=False e quindi chiamando build graph con light=False per costruire l'intero grafico. Non tenteremo di disegnare questo grafico di grandi dimensioni perché presumo che tu stia utilizzando una macchina locale con risorse limitate.
Le maschere, che sono vettori binari che identificano quali nodi appartengono a ciascuna maschera specifica utilizzando le cifre 0 e 1, possono essere utilizzate per notificare alla fase di addestramento quali nodi devono essere inclusi durante l'addestramento e per indicare alla fase di inferenza quali nodi sono i dati del test. Torcia geometrica.trasforma.
È possibile aggiungere una suddivisione a livello di nodo utilizzando le proprietà training mask, val mask e test mask della classe AddTrainValTestMask, che possono essere utilizzate per creare un grafico e consentirci di specificare come vogliamo che vengano costruite le nostre maschere.
Utilizziamo solo il 10% per l'addestramento e utilizziamo il 60% dei dati come set di test mentre utilizziamo il 30% come set di convalida.
Ora impileremo due livelli GCNConv, il primo dei quali ha un conteggio delle funzionalità di output uguale al numero di funzionalità nel nostro grafico come funzionalità di input.
Nel secondo strato, che contiene nodi di output pari al numero delle nostre classi, applichiamo una funzione di attivazione di relu e forniamo le funzionalità latenti.
Edge index e edge weight sono due delle molte opzioni x che GCNConv può accettare nella funzione forward, ma nella nostra situazione abbiamo bisogno solo delle prime due variabili.
Nonostante il nostro modello sarà in grado di prevedere la classe di ogni nodo nel grafico, dobbiamo comunque determinare l'accuratezza e la perdita per ogni set separatamente a seconda della fase.
Ad esempio, durante l'allenamento, vogliamo utilizzare il set di allenamento solo per determinare l'accuratezza e la perdita di allenamento, quindi è qui che le nostre maschere tornano utili.
Per calcolare la perdita e l'accuratezza appropriate, definiremo le funzioni di perdita mascherata e precisione mascherata.
Addestramento del modello
Ora che abbiamo definito lo scopo formativo per il quale verrà utilizzata la torcia. Adam è un ottimo ottimizzatore.
Condurremo la formazione per un certo numero di epoche tenendo d'occhio l'accuratezza della convalida.
Tracciamo anche le perdite e la precisione dell'allenamento in epoche diverse.
Svantaggi della rete neurale dei grafi
L'uso dei GNN presenta alcuni svantaggi. Quando impiegare GNNa e come migliorare le prestazioni dei nostri modelli di apprendimento automatico ci sarà chiarito dopo che ne avremo una migliore comprensione.
- Sebbene i GNN siano reti poco profonde, in genere con tre livelli, la maggior parte delle reti neurali può andare in profondità per migliorare le prestazioni. Non siamo in grado di offrire prestazioni all'avanguardia su grandi set di dati a causa di questa limitazione.
- È più difficile addestrare un modello sui grafici, poiché la loro dinamica strutturale è dinamica.
- A causa degli elevati costi di calcolo di queste reti, il ridimensionamento del modello per la produzione presenta sfide. Ridimensionare i GNN per la produzione sarà difficile se la struttura del tuo grafico è enorme e complicata.
Conclusione
Negli ultimi anni, i GNN si sono sviluppati in strumenti potenti ed efficaci per problemi di apprendimento automatico nel dominio dei grafi. In questo articolo viene fornita una panoramica fondamentale delle reti neurali dei grafi.
Successivamente, puoi iniziare a creare il set di dati che verrà utilizzato per addestrare e testare il modello. Per capire come funziona e di cosa è capace, puoi anche andare molto più lontano e addestrarlo utilizzando un diverso tipo di set di dati.
Buona programmazione!
Lascia un Commento