Come Visualizzare i Modelli di Deep Learning

Scopri Come Esaminare i Modelli di Deep Learning

I modelli di deep learning sono tipicamente altamente complessi. Mentre molti modelli tradizionali di machine learning si accontentano di solo un paio di centinaia di parametri, i modelli di deep learning hanno milioni o miliardi di parametri. Si dice che il grande modello linguistico GPT-4 rilasciato da OpenAI nella primavera del 2023 abbia quasi 2 trilioni di parametri. Va senza dire che l’interazione tra tutti questi parametri è troppo complicata per essere compresa dagli esseri umani.

Ecco dove entrano in gioco le visualizzazioni nel machine learning. Le rappresentazioni grafiche delle strutture e dei flussi di dati all’interno di un modello di deep learning rendono la sua complessità più facile da comprendere e consentono di accedere al processo decisionale del modello. Con il metodo di visualizzazione appropriato e un approccio sistematico, molti problemi di formazione misteriosi e sottoperformance dei modelli di deep learning possono essere ricondotti alle cause di fondo. In questo articolo, esploreremo una vasta gamma di visualizzazioni di deep learning e ne discuteremo l’applicabilità. Lungo il percorso, condividerò molti esempi pratici e indicherò librerie e tutorial approfonditi per metodi specifici.

La visualizzazione del modello di deep learning ci aiuta a comprendere il comportamento del modello e le differenze tra i modelli, diagnosticare i processi di formazione e i problemi di performance, e aiutare il perfezionamento e l'ottimizzazione dei modelli
La visualizzazione del modello di deep learning ci aiuta a comprendere il comportamento del modello e le differenze tra i modelli, diagnosticare i processi di formazione e i problemi di performance, e aiutare il perfezionamento e l’ottimizzazione dei modelli | Fonte

Perché vogliamo visualizzare i modelli di deep learning?

La visualizzazione dei modelli di deep learning ci può aiutare a raggiungere diversi obiettivi:

  • Interpretazione e spiegabilità: Le prestazioni dei modelli di deep learning sono, a volte, straordinarie, anche per i data scientist esperti e gli ingegneri di ML. Le visualizzazioni forniscono modi per approfondire la struttura di un modello e scoprire perché ha successo nell’apprendere le relazioni codificate nei dati di formazione.
  • Risoluzione dei problemi di formazione del modello: È lecito presumere che chiunque addestri modelli di deep learning abbia affrontato una situazione in cui un modello non apprende o lotta con un particolare insieme di campioni. Le ragioni di ciò vanno da componenti di modello collegati in modo errato a ottimizzatori configurati in modo errato. Le visualizzazioni sono ottime per il monitoraggio delle esecuzioni di formazione e la diagnosi dei problemi.
  • Ottimizzazione del modello: I modelli con meno parametri sono generalmente più veloci da calcolare e più efficienti in termini di risorse, pur essendo più robusti e generalizzando meglio a campioni non visti. Le visualizzazioni possono rivelare quali parti di un modello sono essenziali – e quali strati potrebbero essere omessi senza compromettere le prestazioni del modello.
  • Comprensione e insegnamento di concetti: Il deep learning si basa principalmente su funzioni di attivazione piuttosto semplici e operazioni matematiche come la moltiplicazione delle matrici. Molti studenti delle scuole superiori conoscono tutte le matematiche necessarie per comprendere i calcoli interni di un modello di deep learning passo dopo passo. Ma non è affatto ovvio come questo dia origine a modelli che apparentemente “comprendono” le immagini o traducono fluentemente tra diverse lingue. Non è un segreto tra gli educatori che le buone visualizzazioni sono fondamentali per gli studenti per padroneggiare concetti complessi e astratti come il deep learning. Le visualizzazioni interattive, in particolare, si sono dimostrate utili per coloro che sono nuovi nel campo.
Esempio di una visualizzazione di deep learning: piccola rete neurale convoluzionale CNN
Esempio di una visualizzazione di deep learning: piccola rete neurale convoluzionale CNN, nota come la spessore delle linee colorate indica il peso dei percorsi neurali | Fonte

Come si differenziano le visualizzazioni del deep learning rispetto alle visualizzazioni tradizionali di ML?

A questo punto, potresti chiederti come le visualizzazioni dei modelli di deep learning differiscano dalle visualizzazioni dei modelli tradizionali di machine learning. Dopotutto, i modelli di deep learning sono strettamente correlati ai loro predecessori?

I modelli di deep learning sono caratterizzati da un gran numero di parametri e da una struttura a strati. Molti neuroni identici sono organizzati in strati sovrapposti. Ogni neurone è descritto tramite un piccolo numero di pesi e una funzione di attivazione. Mentre la funzione di attivazione è tipicamente scelta dal creatore del modello (e quindi è un cosiddetto iperparametro), i pesi vengono appresi durante l’addestramento. Questa struttura piuttosto semplice dà luogo a prestazioni senza precedenti su praticamente ogni compito di machine learning conosciuto oggi. Dal nostro punto di vista umano, il prezzo che paghiamo è che i modelli di deep learning sono molto più grandi dei modelli di ML tradizionale.

È anche molto più difficile vedere come la complessa rete di neuroni elabora i dati di input rispetto a comprendere, ad esempio, un albero decisionale. Pertanto, il focus principale delle visualizzazioni di deep learning è scoprire il flusso di dati all’interno di un modello e fornire informazioni su su cosa si concentrano gli strati strutturalmente identici durante l’addestramento.

Detto ciò, molte delle tecniche di visualizzazione di apprendimento automatico che ho affrontato nel mio ultimo articolo si applicano anche ai modelli di deep learning. Ad esempio, le matrici di confusione e le curve ROC sono utili quando si lavora con classificatori di deep learning, proprio come lo sono per modelli di classificazione più tradizionali.

Chi dovrebbe utilizzare la visualizzazione di deep learning?

La risposta breve a questa domanda è: tutti coloro che lavorano con modelli di deep learning! In particolare, vengono in mente i seguenti gruppi:

  • Ricercatori di deep learning: Molte tecniche di visualizzazione vengono prima sviluppate da ricercatori accademici che cercano di migliorare gli algoritmi di deep learning esistenti o di capire perché un modello particolare presenta una determinata caratteristica.
  • Scienziati dei dati ed ingegneri di ML: Creare ed addestrare modelli di deep learning non è cosa semplice. Che si tratti di un modello poco performante, che fatica ad imparare o che genera risultati sospettosamente buoni, le visualizzazioni ci aiutano a identificare la causa principale. Pertanto, padroneggiare diversi approcci di visualizzazione è un’aggiunta preziosa per il bagaglio di ogni professionista del deep learning.
  • Consumatori finali di modelli di deep learning: Le visualizzazioni sono preziose per individui con competenze tecniche che utilizzano modelli di deep learning tramite API o componenti integrate basati sul deep learning in applicazioni software. Ad esempio, ActiVis di Facebook è un sistema di analisi visuale su misura per gli ingegneri interni, che facilita l’esplorazione delle reti neurali implementate.
  • Educatori e studenti: Coloro che si confrontano per la prima volta con le reti neurali profonde – e le persone che li insegnano – spesso faticano a capire come il codice del modello che scrivono si traduca in un grafo computazionale in grado di elaborare dati di input complessi come immagini o discorsi. Le visualizzazioni rendono più facile comprendere come tutto si unisce e cosa ha appreso il modello durante l’addestramento.

Tipi di visualizzazione di deep learning

Esistono molti approcci diversi alla visualizzazione dei modelli di deep learning. Quale sia quello giusto per te dipende dal tuo obiettivo. Ad esempio, i ricercatori di deep learning spesso approfondiscono dettagliate planimetrie architettoniche per scoprire i contributi delle diverse parti del modello alle sue prestazioni. Gli ingegneri di ML sono spesso più interessati ai grafici delle metriche di valutazione durante l’addestramento, poiché il loro obiettivo è consegnare il modello più performante il più rapidamente possibile.

In questo articolo, discuteremo i seguenti approcci:

  • Visualizzazione dell’architettura del modello di deep learning: Rappresentazione grafica di una rete neurale con nodi che rappresentano strati e archi che rappresentano le connessioni tra i neuroni.
  • Mappa di attivazione: Visualizzazione strato per strato delle attivazioni in una rete neurale profonda che fornisce informazioni su quali elementi di input un modello è sensibile.
  • Visualizzazione della caratteristica: Heatmap che visualizza quali caratteristiche o pattern un modello di deep learning può rilevare nel suo input.
  • Fattorizzazione delle caratteristiche profonde: Metodo avanzato per scoprire i concetti di alto livello che un modello di deep learning impara durante l’addestramento.
  • Plot delle dinamiche di addestramento: Visualizzazione delle metriche di prestazione del modello lungo le epoche di addestramento.
  • Plot del gradiente: Rappresentazione dei gradienti della funzione di perdita a diversi strati all’interno di un modello di deep learning. Gli scienziati dei dati spesso utilizzano questi plot per rilevare gradienti che esplodono o svaniscono durante l’addestramento del modello.
  • Paesaggio di perdita: Rappresentazione tridimensionale del valore della funzione di perdita in tutto lo spazio di input di un modello di deep learning.
  • Visualizzazione dell’attenzione: Heatmap e rappresentazioni grafiche delle attenzioni di un modello di tipo trasformatore che possono essere utilizzate, ad esempio, per verificare se un modello si concentra sulle parti corrette dei dati di input.
  • Visualizzazione degli embedding: Rappresentazione grafica degli embedding, un blocco di costruzione fondamentale per molte applicazioni di NLP e computer vision, in uno spazio a bassa dimensione per rivelarne le relazioni e la similarità semantica.

Visualizzazione dell’architettura del modello di deep learning

Visualizzare l’architettura di un modello di deep learning – i suoi neuroni, strati e le connessioni tra di essi – può servire a molti scopi:

  1. Esponi il flusso di dati dall’input all’output, inclusa la forma che assume quando viene passato tra gli strati.
  2. Dà un’idea chiara del numero di parametri nel modello.
  3. Puoi vedere quali componenti si ripetono in tutto il modello e come sono collegati tra loro.

Esistono diversi modi per visualizzare l’architettura di un modello di deep learning:

  1. Diagrammi del modello espongono i blocchi di costruzione del modello e la loro interconnessione.
  2. Flowchart mirano a fornire una panoramica dei flussi di dati e delle dinamiche del modello.
  3. Le rappresentazioni strato per strato dei modelli di deep learning tendono ad essere significativamente più complesse ed espongono attivazioni e strutture all’interno dello stesso.

Tutte queste visualizzazioni non soddisfano solamente la curiosità. Permettono ai praticanti di deep learning di ottimizzare i modelli, diagnosticare problemi e basarsi su questa conoscenza per creare algoritmi ancora più potenti.

Troverai utilità di visualizzazione dell’architettura del modello per tutti i principali framework di deep learning. A volte sono forniti come parte del pacchetto principale, mentre in altri casi le librerie separate sono fornite dai manutentori o dai membri della comunità del framework.

Come si visualizza l’architettura di un modello PyTorch?

Se stai usando PyTorch, puoi utilizzare PyTorchViz per creare visualizzazioni dell’architettura del modello. Questa libreria visualizza i singoli componenti del modello e evidenzia il flusso dei dati tra di loro.

Ecco il codice di base:

import torch
from torchviz import make_dot

# crea alcuni dati di input di esempio
x = torch.randn(1, 3, 256, 256)

# genera le previsioni per i dati di input di esempio
y = MyPyTorchModel()(x)

# genera una visualizzazione dell'architettura del modello
make_dot(y.mean(),
         params=dict(MyPyTorchModel().named_parameters()),
         show_attrs=True,
         show_saved=True).render("MyPyTorchModel_torchviz", format="png")

Il notebook Colab che accompagna questo articolo contiene un esempio completo di visualizzazione dell’architettura di un modello PyTorch.

Visualizzazione dell'architettura di una CNN basata su PyTorch creata con PyTorchViz
Visualizzazione dell’architettura di una CNN basata su PyTorch creata con PyTorchViz | Fonte: Autore

PyTorchViz utilizza quattro colori nel grafico dell’architettura del modello:

  1. I nodi blu rappresentano tensori o variabili nel grafo di calcolo. Questi sono gli elementi di dati che fluiscono attraverso le operazioni.
  2. I nodi grigi rappresentano funzioni o operazioni PyTorch eseguite su tensori.
  3. I nodi verdi rappresentano gradienti o derivate dei tensori. Mostrano il flusso della retropropagazione dei gradienti attraverso il grafo di calcolo.
  4. I nodi arancioni rappresentano la perdita finale o la funzione obiettivo ottimizzata durante l’addestramento.

Come si visualizza l’architettura di un modello Keras?

Per visualizzare l’architettura di un modello di deep learning Keras, è possibile utilizzare la funzione di utilità plot_model fornita come parte della libreria:

from tensorflow.keras.utils import plot_model

plot_model(my_keras_model,

           to_file='keras_model_plot.png',

           show_shapes=True,

           show_layer_names=True)

Ho preparato un esempio completo di visualizzazione dell’architettura di Keras nel notebook Colab di questo articolo.

Diagramma dell'architettura del modello di una rete neurale basata su Keras
Diagramma dell’architettura del modello di una rete neurale basata su Keras | Fonte: Autore

L’output generato dalla funzione plot_model è abbastanza semplice da capire: ogni riquadro rappresenta uno strato del modello e mostra il suo nome, tipo e forme di input e output. Le frecce indicano il flusso dei dati tra gli strati.

A proposito, Keras fornisce anche una funzione model_to_dot per creare grafici simili a quello prodotto da PyTorchViz sopra.

Mappe termiche di attivazione

Le mappe termiche di attivazione sono rappresentazioni visive del funzionamento interno delle reti neurali profonde. Mostrano quali neuroni vengono attivati strato per strato, consentendoci di vedere come le attivazioni si propagano attraverso il modello.

Una mappa termica di attivazione può essere generata per un singolo campione di input o per una collezione intera. In quest’ultimo caso, di solito sceglieremo di rappresentare la media, la mediana, il minimo o il massimo di attivazione. Questo ci permette, ad esempio, di individuare le regioni della rete che contribuiscono raramente all’output del modello e potrebbero essere potate senza influire sulle sue prestazioni.

Prendiamo un modello di visione artificiale come esempio. Per generare una mappa termica di attivazione, introdurremo un’immagine campione nel modello e registreremo il valore di output di ogni funzione di attivazione nella rete neurale profonda. Quindi, possiamo creare una mappa termica per uno strato nel modello colorando i suoi neuroni in base all’output della funzione di attivazione. In alternativa, possiamo colorare i pixel del campione di input in base all’attivazione che causano nello strato interno. Ciò ci dice quali parti dell’input raggiungono lo strato specifico.

Per modelli di apprendimento profondo tipici con molti strati e milioni di neuroni, questo approccio semplice produrrà visualizzazioni molto complesse e rumorose. Pertanto, i ricercatori di apprendimento profondo e i data scientist hanno ideato molti metodi diversi per semplificare le mappe termiche di attivazione.

Ma l’obiettivo rimane lo stesso: vogliamo scoprire quali parti del nostro modello contribuiscono all’output e in che modo.

Generazione di mappe termiche di attivazione per una CNN che analizza dati di risonanza magnetica
Generazione di mappe termiche di attivazione per una CNN che analizza dati di risonanza magnetica | Fonte

Ad esempio, nell’esempio sopra le mappe termiche di attivazione evidenziano le regioni di una scansione MRI che hanno contribuito di più all’output della CNN.

Fornire tali visualizzazioni insieme all’output del modello aiuta i professionisti della salute a prendere decisioni informate. Ecco come:

  1. Rilevamento di lesioni e identificazione di anomalie: Le mappe termiche evidenziano le aree cruciali dell’immagine, facilitando l’identificazione di lesioni e anomalie.
  2. Valutazione della gravità delle anomalie: L’intensità della mappa termica è direttamente correlata alla gravità delle lesioni o anomalie. Un’area più grande e più luminosa sulla mappa indica una condizione più grave, consentendo una valutazione rapida del problema.
  3. Identificazione degli errori del modello: Se l’attivazione del modello è elevata per aree della scansione MRI che non sono clinicamente significative (ad esempio, il cranio o anche parti al di fuori del cervello), questo è un chiaro segnale di un errore. Anche senza competenze avanzate di apprendimento profondo, i professionisti medici si renderanno immediatamente conto che quell’output del modello specifico non può essere considerato affidabile.

Come si crea una mappa termica di visualizzazione per un modello PyTorch?

La libreria TorchCam fornisce diversi metodi per generare mappe termiche di attivazione per modelli PyTorch.

Per generare una mappa termica di attivazione per un modello PyTorch, dobbiamo seguire i seguenti passaggi:

  1. Inizializzare uno dei metodi forniti da TorchCam con il nostro modello.
  2. Passare un campione di input nel modello e registrare l’output.
  3. Applicare il metodo TorchCam inizializzato.
from torchcam.methods import SmoothGradCAMpp

# inizializza l'estrattore Smooth Grad.CAM++
cam_extractor = SmoothGradCAMpp(mio_modello_pytorch)

# calcola l'output del modello per il campione
out = modello(tensor_input_campione.unsqueeze(0))

# genera la mappa di attivazione della classe
maps = cam_extractor(out.squeeze(0).argmax().item(), out)

Il notebook di accompagnamento contiene un esempio completo di mappa termica di attivazione TorchCam utilizzando un modello di classificazione delle immagini ResNet.

Una volta calcolate le mappe, possiamo tracciare le mappe termiche di attivazione per ogni strato nel modello:

for nome, mappa in zip(cam_extractor.target_names, maps):
plt.imshow(mappa.squeeze(0).numpy())
plt.axis('off')
plt.title(nome)
plt.show()

Nel caso del mio modello di esempio, l’output non è particolarmente utile:

Creazione di una mappa termica di visualizzazione per un modello PyTorch
Creazione di una mappa termica di visualizzazione per un modello PyTorch (layer) | Fonte: Autore

Possiamo notevolmente migliorare il valore del grafico sovrapponendo l’immagine di input originale. Per fortuna, TorchCam fornisce la funzione di utilità overlay_mask per questo scopo:

from torchcam.utils import overlay_mask

for name, cam in zip(cam_extractor.target_names, cams):
    result = overlay_mask(to_pil_image(img),
                    to_pil_image(cam.squeeze(0), mode='F'),
                    alpha=0.7)
    plt.imshow(result)
    plt.axis('off')
    plt.title(name)
    plt.show()

Immagine di input originale sovrapposta a una mappa termica di attivazione del quarto layer in un ResNet18
Immagine di input originale sovrapposta a una mappa termica di attivazione del quarto layer in un ResNet18 | Fonte: Autore

Come puoi vedere dal grafico di esempio sopra, la mappa termica di attivazione espone le aree dell’immagine di input che hanno causato la maggiore attivazione dei neuroni nel layer interno del modello di deep learning. Questo aiuta gli ingegneri e il pubblico in generale a capire cosa sta accadendo all’interno del modello.

Visualizzazione delle caratteristiche

La visualizzazione delle caratteristiche rivelano le caratteristiche apprese da una rete neurale profonda. È particolarmente utile nella computer vision, dove rivela a quali caratteristiche astratte in un’immagine di input risponde una rete neurale. Ad esempio, che un neurone in un’architettura CNN risponde fortemente ai bordi diagonali o alle trame come il pelo.

Questo ci aiuta a capire cosa sta cercando il modello nelle immagini. La differenza principale rispetto alle mappe termiche di attivazione discusse nella sezione precedente è che queste mostrano la risposta generale alle regioni di un’immagine di input, mentre la visualizzazione delle caratteristiche va un livello più in profondità e cerca di scoprire la risposta di un modello a concetti astratti.

Attraverso la visualizzazione delle caratteristiche, possiamo ottenere preziose intuizioni sulle specifiche caratteristiche che le reti neurali profonde stanno elaborando a diversi livelli. In generale, i layer vicini all’input del modello risponderanno a caratteristiche più semplici come i bordi, mentre i layer più vicini all’output del modello rileveranno concetti più astratti.

Queste intuizioni non solo aiutano a comprendere il funzionamento interno, ma fungono anche da strumento per il miglioramento e l’ottimizzazione delle prestazioni del modello. Analizzando le caratteristiche che vengono attivate in modo errato o inconsistente, possiamo affinare il processo di addestramento o individuare problemi di qualità dei dati.

Nel mio quaderno Colab per questo articolo, puoi trovare il codice di esempio completo per generare visualizzazioni delle caratteristiche per una rete CNN PyTorch. Qui, ci concentreremo sulla discussione del risultato e su ciò che possiamo imparare da esso.

Grafici di visualizzazione delle caratteristiche per un ResNet18 che elabora l'immagine di un cane
Grafici di visualizzazione delle caratteristiche per un ResNet18 che elabora l’immagine di un cane | Fonte: Autore

Come puoi vedere dai grafici sopra, la CNN rileva diversi pattern o caratteristiche in ogni layer. Se osservi attentamente la riga superiore, che corrisponde ai primi quattro layer del modello, puoi vedere che quei layer rilevano i bordi nell’immagine. Ad esempio, nella seconda e quarta immagine della prima riga, puoi vedere che il modello identifica il naso e le orecchie del cane.

Mentre le attivazioni si propagano attraverso il modello, diventa sempre più difficile capire cosa sta rilevando il modello. Ma se analizzassimo più attentamente, probabilmente scopriremmo che singoli neuroni vengono attivati, ad esempio, dalle orecchie o dagli occhi del cane.

Fattorizzazioni profonde delle caratteristiche

La fattorizzazione profonda delle caratteristiche (DFF) è un metodo per analizzare le caratteristiche apprese da una rete neurale convoluzionale. DFF identifica regioni nello spazio delle caratteristiche della rete che appartengono allo stesso concetto semantico. Assegnando colori diversi a queste regioni, possiamo creare una visualizzazione che ci permette di capire se le caratteristiche identificate dal modello sono significative.

Visualizzazione delle caratteristiche profonde per un modello di computer visione
Visualizzazione delle caratteristiche profonde per un modello di computer visione | Fonte

Ad esempio, nell’esempio sopra, scopriamo che il modello basa la sua decisione (che l’immagine mostri labrador retriever) sui cuccioli, non sull’erba circostante. La regione del naso potrebbe far pensare a un chow, ma la forma della testa e delle orecchie spingono il modello verso “labrador retriever”. Questa logica decisionale imita il modo in cui un essere umano affronterebbe il compito.

DFF è disponibile in PyTorch-gradcam, che include un ampio tutorial su DFF che discute anche come interpretare i risultati. L’immagine sopra si basa su questo tutorial. Ho semplificato il codice e aggiunto alcuni commenti aggiuntivi. Troverai il mio approccio consigliato per Fattorizzazione profonda delle caratteristiche con PyTorch-gradcam nel notebook Colab.

Plot dinamici di addestramento

I plot dinamici di addestramento mostrano come un modello impara. Il progresso dell’addestramento viene generalmente valutato attraverso metriche di performance come la perdita e l’accuratezza. Visualizzando queste metriche, gli scienziati dei dati e i praticanti dell’apprendimento profondo possono ottenere informazioni cruciali:

  • Progressione dell’apprendimento: I plot dinamici di addestramento mostrano quanto velocemente o lentamente un modello converge. Una convergenza rapida può indicare un sovrapprendimento, mentre fluttuazioni erratiche possono indicare problemi come una cattiva inizializzazione o una taratura impropria del tasso di apprendimento.
  • Early Stopping: Plotting delle perdite aiuta a identificare il punto in cui un modello inizia a sovrapprendere i dati di addestramento. Una diminuzione della perdita di addestramento mentre la perdita di validazione aumenta è un chiaro segno di sovrapprendimento. Il punto in cui si verifica il sovrapprendimento è il momento ottimale per interrompere l’addestramento.
Plot delle perdite durante gli epoche di addestramento per vari modelli di apprendimento profondo
Plot delle perdite durante gli epoche di addestramento per vari modelli di apprendimento profondo | Fonte

Vedere nell’app

Perdita di addestramento, coefficiente di dice della validazione (noto anche come punteggio F1) e perdita di validazione per un run di addestramento di un modello in neptune.ai
Post correlato

Come migliorare le prestazioni di un modello di ML [Best Practices From Ex-Amazon AI Researcher]

Leggi di più

Gradient plots

Se i grafici delle metriche di performance non sono sufficienti per comprendere il progresso (o la mancanza di esso) dell’addestramento di un modello, può essere utile tracciare i gradienti della funzione di perdita.

Per regolare i pesi di una rete neurale durante l’addestramento, utilizziamo una tecnica chiamata backpropagation per calcolare il gradiente della funzione di perdita rispetto ai pesi e ai bias della nostra rete. Il gradiente è un vettore ad alta dimensione che punta nella direzione dell’aumento più ripido della funzione di perdita. Possiamo quindi utilizzare queste informazioni per spostare i nostri pesi e bias nella direzione opposta. Il tasso di apprendimento controlla l’entità con cui modifichiamo i pesi e i bias.

I gradienti che si annullano o esplodono possono impedire alle reti neurali profonde di apprendere. Tracciare la magnitudine media dei gradienti per diverse layer può rivelare se i gradienti si annullano (tendono a zero) o esplodono (diventano estremamente grandi). Se il gradiente si annulla, non abbiamo idea in quale direzione spostare i pesi e i bias, quindi l’addestramento è bloccato. Un gradiente esplosivo porta a grandi cambiamenti nei pesi e nei bias, spesso superando l’obiettivo e causando fluttuazioni rapide nella perdita.

Gli strumenti di tracciamento degli esperimenti di machine learning, come neptune.ai, consentono ai data scientist e agli ingegneri di ML di monitorare e tracciare i gradienti durante l’addestramento.

Vedi nell’app

Grafici dei gradienti per due diversi layer di una rete neurale profonda in neptune.ai

Per saperne di più sui gradienti che si annullano o esplodono e su come utilizzare i grafici dei gradienti per rilevarli, consiglio l’approfondito articolo di Katherine Li su debugging, monitoring e risoluzione dei problemi legati ai gradienti.

Articolo correlato

Capire la Clip dei Gradienti (e come risolvere il problema degli esplodenti gradienti)

Leggi di più

Paesaggi di perdita

Non possiamo solo tracciare le magnitudini dei gradienti, ma visualizzare direttamente la funzione di perdita e i suoi gradienti. Queste visualizzazioni sono comunemente chiamate “paesaggi di perdita”.

Ispezionare un paesaggio di perdita aiuta i data scientist e i praticanti di machine learning a comprendere come un algoritmo di ottimizzazione sposta i pesi e i bias in un modello verso il minimo della funzione di perdita.

Un grafico della regione intorno al minimo locale di una funzione di perdita con un vettore di gradiente inscritto | Fonte

In un caso ideale come quello mostrato nella figura sopra, il paesaggio di perdita è molto regolare. Il gradiente cambia solo leggermente lungo la superficie. Le reti neurali profonde spesso mostrano un paesaggio di perdita molto più complesso con picchi e trincee. Convergere in modo affidabile verso un minimo della funzione di perdita in questi casi richiede ottimizzatori robusti come Adam.

Per tracciare un paesaggio di perdita per un modello PyTorch, è possibile utilizzare il codice fornito dagli autori di un articolo fondamentale sul tema. Per avere una prima impressione, date un’occhiata all’interattivo Loss Landscape Visualizer che utilizza questa libreria dietro le quinte. È disponibile anche una versione del codice con TensorFlow.

Le paesaggi di perdita non forniscono solo una comprensione di come i modelli di deep learning imparano, ma possono anche essere belli da guardare. Javier Ideami ha creato il progetto “Loss Landscape” con molti video artistici e animazioni interattive di vari paesaggi di perdita.

Visualizzazione dell’attenzione

I modelli di transformer che hanno rivoluzionato il deep learning negli ultimi anni sono noti per meccanismi di attenzione basati su attenti. La visualizzazione di quali parti dell’input un modello presta attenzione ci fornisce importanti intuizioni:

  • Interpretazione dell’auto-attenzione: I transformer utilizzano meccanismi di auto-attenzione per pesare l’importanza delle diverse parti della sequenza di input. La visualizzazione delle mappe di attenzione ci aiuta a capire su quali parti il modello si focalizza.
  • Diagnosi degli errori: quando il modello presta attenzione a parti irrilevanti della sequenza di input, può portare a errori di previsione. La visualizzazione ci permette di rilevare tali problemi.
  • Esplorazione delle informazioni contestuali: i modelli di transformer eccellono nel catturare informazioni contestuali dalle sequenze di input. Le mappe di attenzione mostrano come il modello distribuisce l’attenzione tra gli elementi di input, rivelando come il contesto viene costruito e propagato attraverso gli strati.
  • Comprensione di come funzionano i transformer: La visualizzazione dell’attenzione e del suo flusso attraverso il modello in diverse fasi ci aiuta a capire come i transformer elaborano il loro input. L’Esplorazione dell’Esplicabilità per Vision Transformers di Jacob Gildenblat vi porta in un viaggio visivo^ attraverso il Data-efficient Image Transformer (deit-tiny) di Facebook.
Esempio di una mappa di attenzione
L’immagine a sinistra è originale. A destra, è sovrapposta a una mappa di attenzione. Puoi notare che il modello assegna la maggiore attenzione al cane | Fonte: Autore

Visualizzazione delle incorporazioni

Le incorporazioni sono vettori ad alta dimensione che catturano informazioni semantiche. Oggi vengono tipicamente generate dai modelli di deep learning. La visualizzazione delle incorporazioni aiuta a comprendere questi dati complessi ad alta dimensione.

Tipicamente, le incorporazioni vengono proiettate in uno spazio bidimensionale o tridimensionale e rappresentate da punti. Tecniche standard includono l’analisi delle componenti principali, t-SNE e UMAP. Ho approfondito le ultime due nella sezione sulla visualizzazione dell’analisi del cluster nel mio articolo sulla visualizzazione dell’apprendimento automatico.

Pertanto, non è sorprendente che le visualizzazioni delle incorporazioni rivelino modelli di dati, somiglianze e anomalie raggruppando le incorporazioni in cluster. Ad esempio, se visualizzi le incorporazioni delle parole con uno dei metodi sopra menzionati, scoprirai che le parole semanticamente simili finiranno vicine nello spazio di proiezione.

Il proiettore di incorporazione di TensorFlow offre a tutti l’accesso a visualizzazioni interattive di incorporazioni ben note come standard corpus di Word2vec.

Incorporazioni per MNIST
Incorporazioni per MNIST rappresentate in uno spazio 3D | Fonte

Quando utilizzare quale visualizzazione di deep learning

Possiamo suddividere il ciclo di vita del modello di deep learning in quattro fasi diverse:

  • 1 Pre-training
  • 2 Durante la formazione
  • 3 Post-training
  • 4 Inferenza

Ogni fase richiede diverse visualizzazioni.

Visualizzazione del modello di deep learning durante la pre-simbolazione

Durante lo sviluppo precoce del modello, trovare un’architettura di modello adeguata è il compito più essenziale.

Le visualizzazioni dell’architettura offrono informazioni su come il tuo modello elabora le informazioni. Per capire l’architettura del tuo modello di deep learning, puoi visualizzare gli strati, le loro connessioni e il flusso di dati tra di essi.

Visualizzazione del modello di deep learning durante l’addestramento del modello

Nella fase di addestramento, capire il progresso dell’addestramento è fondamentale. A tal fine, le visualizzazioni dinamiche dell’addestramento e gli schemi dei gradienti sono le visualizzazioni più utili.

Se l’addestramento non produce i risultati attesi, le visualizzazioni delle caratteristiche o l’ispezione dettagliata del paesaggio di perdita del modello possono fornire preziose intuizioni. Se stai addestrando modelli basati su trasformatori, la visualizzazione dell’attenzione o degli embedding può condurti sulla giusta strada.

Visualizzazioni del modello di deep learning dopo l’addestramento

Una volta che il modello è completamente addestrato, l’obiettivo principale delle visualizzazioni è fornire informazioni su come il modello elabora i dati per produrre le sue uscite.

Le heatmaps di attivazione rivelano quali parti dell’input sono considerate più importanti dal modello. Le visualizzazioni delle caratteristiche rivelano le caratteristiche apprese dal modello durante l’addestramento e ci aiutano a capire quali pattern il modello cerca nei dati di input a diversi livelli. La Deep Feature Factorization va oltre e visualizza le regioni nello spazio di input associate allo stesso concetto.

Se stai lavorando con i trasformatori, le visualizzazioni dell’attenzione e degli embeddings possono aiutarti a verificare se il tuo modello si concentra sugli elementi di input più importanti e cattura concetti semanticamente significativi.

Inferenza

Nel momento dell’inferenza, quando un modello viene utilizzato per fare previsioni o generare output, le visualizzazioni possono aiutare a monitorare e risolvere eventuali errori del modello.

I metodi utilizzati sono gli stessi che potresti utilizzare nella fase successiva all’addestramento, ma l’obiettivo è diverso: invece di comprendere il modello nel suo insieme, siamo ora interessati a come il modello gestisce un’istanza di input individuale.

Conclusione

Abbiamo esaminato molti modi per visualizzare i modelli di deep learning. Abbiamo iniziato chiedendoci perché potremmo voler visualizzazioni in primo luogo e poi abbiamo esaminato diverse tecniche, spesso accompagnate da esempi pratici. Infine, abbiamo discusso in quale fase del ciclo di vita del modello le diverse approcci di visualizzazione del deep learning promettono intuizioni più preziose.

Spero che tu abbia apprezzato questo articolo e che tu abbia qualche idea su quali visualizzazioni esplorerai per i tuoi attuali progetti di deep learning. Gli esempi di visualizzazione nel mio quaderno di Colab possono servire come punto di partenza. Sentiti libero di copiarli e adattarli alle tue esigenze!

Domande frequenti

  • Le visualizzazioni dei modelli di deep learning sono approcci e tecniche per rendere i complessi reti neurali più comprensibili attraverso rappresentazioni grafiche. I modelli di deep learning sono costituiti da molti strati descritti da milioni di parametri. Le visualizzazioni dei modelli trasformano questa complessità in un linguaggio visivo che gli esseri umani possono comprendere.

    La visualizzazione dei modelli di deep learning può essere semplice come tracciare curve per comprendere come cambia nel tempo la performance di un modello o può essere sofisticata come generare mappe di calore tridimensionali per comprendere come i diversi strati di un modello contribuiscono alla sua uscita.

  • Un approccio comune per visualizzare l’architettura di un modello di deep learning sono i grafici che illustrano le connessioni e il flusso di dati tra i suoi componenti.

    Puoi utilizzare la libreria PyTorchViz per generare visualizzazioni dell’architettura per modelli PyTorch. Se stai utilizzando TensorFlow o Keras, dai un’occhiata alle utilità di visualizzazione del modello integrate.

  • Esistono molti modi per visualizzare i modelli di deep learning:

      1. Visualizzazioni dell’architettura del modello di deep learning rivelano la struttura interna di un modello e come i dati si spostano attraverso di esso.
      1. Le heatmaps di attivazione e le visualizzazioni delle caratteristiche forniscono informazioni su cosa “guarda” un modello di deep learning e come queste informazioni vengono elaborate all’interno del modello.
      1. Gli schemi di addestramento e dei gradienti mostrano come un modello di deep learning impara e aiutano a identificare le cause dei progressi di addestramento insoddisfacenti.

  • Per integrare con successo la visualizzazione del modello di deep learning nel tuo flusso di lavoro di data science, segui questa linea guida:

      1. Stabilisci un obiettivo chiaro. Qual è l’obiettivo che stai cercando di raggiungere attraverso le visualizzazioni?
      1. Scegli la tecnica di visualizzazione appropriata. In generale, iniziare da una visualizzazione astratta ad alto livello e successivamente approfondire è il metodo migliore.
      1. Seleziona le librerie e gli strumenti giusti. Alcuni approcci di visualizzazione sono indipendenti dal framework, mentre altre implementazioni sono specifiche per un framework di deep learning o una particolare famiglia di modelli.
      1. Iterare e migliorare. È improbabile che la tua prima visualizzazione soddisfi completamente le tue esigenze o quelle dei tuoi stakeholder.

    Per una discussione più approfondita, dai un’occhiata all’articolo sulla visualizzazione dei modelli di machine learning.

  • Esistono diversi modi per visualizzare i modelli di TensorFlow. Puoi usare le funzioni di utilità <a href