Reti neurali

 

Cos'è una rete neurale?

3 cose da sapere

Una rete neurale è un modello di calcolo la cui struttura stratificata assomiglia alla struttura della rete di neuroni nel cervello, con strati di nodi connessi. Una rete neurale può apprendere dai dati, quindi può essere addestrata a riconoscere pattern, classificare i dati e prevedere eventi futuri.

Una rete neurale suddivide gli input in livelli di astrazione. Può essere addestrata su molti esempi per riconoscere i pattern del parlato o delle immagini, proprio come fa il cervello umano. Il suo comportamento è definito dal modo in cui sono collegati i suoi singoli elementi e dalla forza, o dai pesi, di quelle connessioni. Questi pesi vengono regolati automaticamente durante l’addestramento in base a una specifica regola di addestramento finché la rete neurale non esegue correttamente l'attività desiderata.

Perché le reti neurali sono importanti?

Le reti neurali sono particolarmente adatte al riconoscimento di pattern per identificare e classificare oggetti o segnali nel parlato, nella visione e nei sistemi di controllo. Possono anche essere utilizzate per eseguire la previsione e la modellazione di serie storiche.

Ecco alcuni esempi di come vengono utilizzate le reti neurali:

  • Le compagnie di distribuzione di energia elettrica prevedono con precisione il carico sulle loro reti per garantire l'affidabilità e ottimizzare l'efficienza degli impianti di generazione che gestiscono.
  • I bancomat accettano in modo affidabile i depositi bancari leggendo il numero di conto e l'importo da depositare sugli assegni.
  • I patologi si affidano alle applicazioni di rilevamento del cancro per classificare i tumori come benigni o maligni, in base all'uniformità delle dimensioni delle cellule, allo spessore del nodulo, alla mitosi e altri fattori.

Deep Learning

Le reti neurali che operano su due o tre layer di neuroni connessi sono conosciute come reti neurali superficiali. Le reti di Deep learning possono avere molti layer, anche centinaia. Entrambe sono tecniche di machine learning che imparano direttamente dai dati di input.

Non è un caso se il deep learning è sempre più al centro dell’attenzione. Questa tecnica sta ottenendo risultati che prima non sembravano possibili.

Il deep learning è particolarmente adatto per applicazioni di identificazione complesse come il riconoscimento facciale, la traduzione di testi e il riconoscimento vocale. È anche una tecnologia chiave utilizzata nei sistemi avanzati di assistenza alla guida tra cui la classificazione delle corsie e il riconoscimento della segnaletica stradale.

Come funzionano le reti neurali?

Una rete neurale combina diversi livelli di elaborazione, utilizzando semplici elementi che operano in parallelo e ispirati ai sistemi nervosi biologici. È formata da un layer di input, uno o più layer nascosti e un layer di output. I livelli sono interconnessi tramite nodi o neuroni, con ogni layer che utilizza l'output del layer precedente come input.

Tipica architettura di rete neurale.

Tecniche utilizzate con le reti neurali

Le tecniche comuni di machine learning per la progettazione di applicazioni di reti neurali comprendono apprendimento supervisionato e non supervisionato, classificazione, regressione, pattern recognition e clustering.

Apprendimento supervisionato

Le reti neurali supervisionate sono addestrate a produrre gli output desiderati in risposta agli input campione, risultando particolarmente adatte per la modellazione e il controllo di sistemi dinamici, la classificazione di dati rumorosi e la previsione di eventi futuri. Deep Learning Toolbox™ include quattro tipi di reti supervisionate: feedforward, base radiale, dinamica e learning vector quantization.

Classificazione

La classificazione è un tipo di apprendimento automatico supervisionato in cui un algoritmo "impara" a classificare nuove osservazioni da esempi di dati etichettati.

Regressione

I modelli di regressione descrivono la relazione tra una variabile di risposta (output) e una o più variabili esplicative (input).

Pattern Recognition

Il pattern recognition è una componente importante delle applicazioni di reti neurali nella visione artificiale, nell’elaborazione di radar, nel riconoscimento vocale e nella classificazione di testi. Funziona classificando i dati di input in oggetti o classi in base a caratteristiche chiave, utilizzando la classificazione supervisionata o non supervisionata.

Ad esempio, nella visione artificiale, le tecniche di riconoscimento pattern con supervisione vengono utilizzate per il riconoscimento ottico dei caratteri (OCR), la rilevazione di volti umani, il riconoscimento facciale, la rilevazione e la classificazione di oggetti. Nell’elaborazione di immagini e nella visione artificiale, le tecniche di riconoscimento pattern senza supervisione vengono utilizzate per la rilevazione di oggetti e la segmentazione di immagini.

Apprendimento senza supervisione

L’addestramento delle reti neurali senza supervisione viene eseguito lasciando che la rete neurale si adatti continuamente ai nuovi input. Vengono utilizzate per fare deduzioni da set di dati formati da dati di input senza risposte etichettate. È possibile usarle per scoprire le distribuzioni naturali, le categorie e le relazioni di categoria all'interno dei dati.

Deep Learning Toolbox comprende due tipi di reti non supervisionate: competitive layer e self-organizing map.

Clustering

Il clustering è un approccio di apprendimento senza supervisione in cui le reti neurali possono essere utilizzate per l'analisi dei dati esplorativi per trovare pattern nascosti o raggruppamenti nei dati. Questo processo implica il raggruppamento dei dati per similarità. Tra le applicazioni dell’analisi cluster figurano l’analisi della sequenza genetica, le ricerche di mercato e il riconoscimento di oggetti.

Sviluppo di reti neurali superficiali con MATLAB

Oltre agli strumenti e alle funzioni per la gestione di grandi set di dati, MATLAB® offre toolbox specifici per l’utilizzo del machine learning, delle reti neurali, della visione artificiale e della guida autonoma.

Con solo poche righe di codice, MATLAB consente anche ai meno esperti di sviluppare reti neurali. Impara rapidamente, crea e visualizza modelli e distribuiscili a server e dispositivi embedded.

Con MATLAB è possibile integrare i risultati nelle applicazioni esistenti. MATLAB consente di automatizzare la distribuzione dei modelli di reti neurali in sistemi aziendali, cluster, cloud e dispositivi embedded.

Flusso di lavoro tipico per la progettazione di reti neurali

Ogni applicazione di rete neurale è unica, ma lo sviluppo della rete generalmente segue questi passaggi:

1. Accedere ai dati e prepararli

2. Creare la rete neurale

3. Configurare gli ingressi e le uscite della rete

4. Regolare i parametri della rete (pesi e bias) per ottimizzare le prestazioni

5. Addestrare la rete

6. Convalidare i risultati della rete

7. Integrare la rete in un sistema di produzione

Classificazione e clustering di reti neurali

MATLAB e Deep Learning Toolbox forniscono funzioni a riga di comando ed app per creare, addestrare e simulare reti neurali. Le app facilitano lo sviluppo di reti neurali per operazioni come la classificazione, la regressione (inclusa la regressione di serie storiche) e il clustering. Dopo aver creato le reti con questi strumenti, puoi generare automaticamente il codice MATLAB per registrare il lavoro svolto e automatizzare le operazioni.

Pre-elaborazione, post-elaborazione e miglioramento della rete

La pre-elaborazione degli input e dei target di rete migliora l'efficienza dell’addestramento della rete neurale superficiale. La post-elaborazione consente un'analisi dettagliata delle prestazioni della rete. MATLAB e Simulink® forniscono gli strumenti per aiutarti:

  • Riduci le dimensioni dei vettori di input utilizzando l'analisi delle componenti principali (PCA)
  • Esegui l'analisi di regressione tra la risposta di rete e i target corrispondenti
  • Scala gli input e i target in modo che rientrino nell'intervallo [-1,1]
  • Normalizza la media e la deviazione standard del set di dati di training
  • Utilizza la pre-elaborazione automatica dei dati e la divisione dei dati durante la creazione delle reti

Il miglioramento della capacità di generalizzazione della rete contribuisce ad evitare l’overfitting, un problema comune nella progettazione di reti neurali. L'overfitting si verifica quando una rete ha memorizzato il set di training ma non ha imparato a generalizzare a nuovi input. L'overfitting produce un errore relativamente piccolo sul set di training ma un errore molto più grande quando vengono presentati nuovi dati alla rete.

Due soluzioni per migliorare la generalizzazione includono:

  • La regolarizzazione modifica la funzione di performance della rete (la misura dell'errore che il processo di addestramento riduce al minimo). Includendo le dimensioni dei pesi e dei bias, la regolarizzazione produce una rete che funziona bene con i dati di training e mostra un comportamento più fluido quando vengono presentati nuovi dati.
  • L'arresto anticipato utilizza due set di dati diversi: il set di training, per aggiornare i pesi e i bias e il set di convalida, per interrompere l’addestramento quando la rete inizia ad avere problemi dioverfitting dei dati.

Grafici di post-elaborazione per l'analisi delle prestazioni della rete, comprese le prestazioni di convalida dell'errore quadratico medio per le successive epoche di allenamento (in alto a sinistra), istogramma degli errori (in alto a destra) e matrici di confusione (in basso) per le fasi di addestramento, convalida e test.

Generazione e distribuzione di codici

Utilizzando Deep Learning Toolbox con MATLAB Coder™, GPU Coder™ e MATLAB Compiler™, è possibile implementare reti addestrate su sistemi embedded o integrarle con un'ampia gamma di ambienti di produzione. È possibile utilizzare MATLAB Coder per generare codice C e C ++ per la rete addestrata, per simulare una rete addestrata sull'hardware del PC e quindi distribuire la rete su sistemi embedded. È possibile utilizzare MATLAB Compiler e MATLAB Compiler SDK™ per distribuire reti addestrate come le librerie condivise C/C++, Microsoft®, assiemi NET, classi Java® e pacchetti Python® dai programmi MATLAB. È anche possibile addestrare un modello di rete nell'applicazione distribuita o in un componente.

Supporto per Simulink

Deep Learning Toolbox fornisce una serie di blocchi per la costruzione di reti neurali superficiali in Simulink. Tutti i blocchi sono compatibili con Simulink Coder™ . Questi blocchi sono divisi in quattro librerie:

  • Blocchi funzione di trasferimento, che acquisiscono un vettore di input netto e generano un vettore di output corrispondente
  • Blocchi funzione di input netto, che acquisiscono un numero qualsiasi di vettori di input ponderati, vettori di output del layer ponderato, e vettori di bias e restituiscono un vettore di input netto
  • Blocchi funzione peso, che applicano il vettore di peso di un neurone a un vettore di input (o un vettore del layer di output) per ottenere un valore di input ponderato per un neurone
  • Blocchi di pre-elaborazione dati, che mappano i dati di input e di output negli intervalli più adatti che la rete neurale può gestire direttamente

In alternativa, è possibile creare e addestrare le reti nell'ambiente MATLAB e generare automaticamente blocchi di simulazione di rete da utilizzare con Simulink. Questo approccio consente inoltre di visualizzare graficamente le reti.

Applicazioni che utilizzano reti neurali

La Lund University ha sviluppato un modello predittivo e simulato migliaia di combinazioni di profili di rischio per migliorare le percentuali di sopravvivenza a lungo termine dei trapiantati.
Migliorare la diagnosi del cancro utilizzando una rete neurale per rilevare il cancro dai dati di spettrometria di massa sui profili proteici.
Addestramento di una rete neurale per classificare immagini di numeri.