Il deep learning è una forma di machine learning che modella i modelli nei dati come reti complesse a più livelli. Poiché il deep learning è il modo più generale per modellare un problema, ha il potenziale per risolvere problemi difficili, come la visione artificiale e l’elaborazione del linguaggio naturale, che superano sia la programmazione convenzionale, sia altre tecniche di machine learning.

Il deep learning non solo può produrre risultati utili laddove altri metodi falliscono, ma può anche costruire modelli più accurati rispetto ad altri metodi e può ridurre il tempo necessario per costruire un modello utile. Tuttavia, l’addestramento dei modelli di deep learning richiede una grande potenza di elaborazione. Un altro svantaggio del deep learning è la difficoltà di interpretare i modelli di deep learning.

La caratteristica distintiva del deep learning è che il modello in formazione ha più di uno strato nascosto tra l’input e l’output. Nella maggior parte dei casi, il deep learning significa usare reti neurali profonde, cioè stratificate su più livelli. Esistono, tuttavia, alcuni algoritmi che implementano il deep learning usando altri tipi di livelli nascosti oltre alle reti neurali.

Deep learning vs machine learning

In generale gli algoritmi di machine learning classici funzionano molto più velocemente degli algoritmi di deep learning; una o più CPU saranno spesso sufficienti per addestrare un modello classico. I modelli di deep learning spesso necessitano di acceleratori hardware come GPU, TPU o FPGA per il training e anche per la distribuzione su vasta scala. Senza di essi, i modelli richiederebbero mesi per essere addestrati.

Per molti problemi alcuni algoritmi di machine learning classico produrranno un modello “abbastanza buono”. Per altri problemi, invece, gli algoritmi di questo tipo non hanno funzionato molto bene in passato.

Il deep learning utilizza reti neurali con più livelli “nascosti” e interconnessi tra loro.

Il deep learning utilizza reti neurali con più livelli “nascosti” e interconnessi tra loro.

Applicazioni di deep learning

Esistono molti esempi di problemi che attualmente richiedono il deep learning per produrre i modelli migliori. L’elaborazione del linguaggio naturale (PNL) è uno di questi. Nell’autunno 2016 la qualità delle traduzioni di Google Translate (inglese-francese, inglese-cinese e inglese-giapponese) è improvvisamente migliorata, passando da un livello piuttosto basico alla produzione di frasi vicine alla qualità di una traduzione professionale di un essere umano.

Ciò che è accaduto dietro le quinte è che i team di Google Brain e Google Translate sono passati dall’uso di vecchi algoritmi di traduzione automatica statistica basata su frasi (un tipo di machine learning classico) all’utilizzo di una rete neurale profonda addestrata con incorporamenti di parole utilizzando il framework TensorFlow di Google.

Non è stato un progetto facile. Molti ricercatori hanno impiegato mesi di lavoro sui modelli e Google stessa ha creato appositamente un nuovo tipo di chip (Tensor Processing Unit o TPU) per eseguire reti neurali su larga scala per Google Translate.

Oltre al problema della traduzione linguistica affrontato da Google Translate, le principali attività dell’elaborazione del linguaggio naturale comprendono il riepilogo automatico, la risoluzione di co-riferimento, l’analisi del discorso, la segmentazione morfologica, il riconoscimento di entità denominate, la generazione del linguaggio naturale, la comprensione del linguaggio naturale, la codifica parziale e il riconoscimento vocale.

Un altro buon esempio dell’applicazione del deep learning è la classificazione delle immagini. Poiché gli organismi viventi elaborano le immagini con la loro corteccia visiva, molti ricercatori hanno preso l’architettura della corteccia visiva dei mammiferi come modello per le reti neurali progettate per eseguire il riconoscimento delle immagini. La ricerca biologica risale agli anni ’50.

La svolta nel campo della rete neurale per la visione è stata LeNet-5 del 1998 di Yann LeCun, una rete neurale convoluzionale a sette livelli (CNN) per il riconoscimento delle cifre scritte a mano digitalizzate in immagini di 32×32 pixel. Per analizzare immagini ad alta risoluzione, la rete LeNet-5 dovrebbe essere estesa a più neuroni e più livelli.

Leggi anche: Sei interessato al machine learning? Meglio imparare PyTorch

I migliori modelli di classificazione delle immagini di oggi sono in grado di identificare diversi cataloghi di oggetti con risoluzione HD a colori. Oltre alle reti neurali profonde pure (DNN), a volte le persone usano modelli di visione ibrida, che combinano il deep learning con algoritmi di machine learning classici che eseguono compiti specifici.

Altri problemi di visione, oltre alla classificazione di base delle immagini che sono stati risolti con il deep learning, includono la classificazione delle immagini con localizzazione, il rilevamento degli oggetti, la segmentazione degli oggetti, il trasferimento di stili di immagine, la colorazione delle immagini, la ricostruzione delle immagini e la sintesi delle immagini. La classificazione delle immagini può essere estesa alla classificazione video estraendo i singoli fotogrammi da un video e classificando ciascun fotogramma. Gli oggetti rilevati nei video clip possono essere tracciati da un fotogramma all’altro.

Reti neurali di deep learning

Le idee per le reti neurali “artificiali” risalgono agli anni ’40. Il concetto essenziale è che una rete di neuroni artificiali costruita con interruttori di soglia interconnessi può imparare a riconoscere gli schemi nello stesso modo di un cervello animale e di un sistema nervoso (inclusa la retina).

Retropropagazione dell’errore (backpropagation)

L’apprendimento nelle reti neurali profonde avviene rafforzando la connessione tra due neuroni quando entrambi sono attivi contemporaneamente durante l’apprendimento. Nel moderno software di rete neurale si tratta generalmente di aumentare i valori di peso per le connessioni tra i neuroni usando una regola chiamata retropropagazione dell’errore (backpropagation of error), backprop o BP.

Neuroni

Come vengono modellati i neuroni? Ognuno ha una funzione di propagazione che trasforma le uscite dei neuroni collegati, spesso con una somma ponderata. L’output della funzione di propagazione passa a una funzione di attivazione quando il suo input supera un valore di soglia.

Funzioni di attivazione

Negli anni ’40 e ’50 i neuroni artificiali utilizzavano una funzione di attivazione a gradini e venivano chiamati percettroni. Si può affermare che le moderne reti neurali stiano utilizzando percettroni, ma in realtà hanno funzioni di attivazione fluide, come la funzione logistica o sigmoidea, la tangente iperbolica e l’unità lineare rettificata (ReLU). ReLU è di solito la scelta migliore per una rapida convergenza, anche se ha un problema di “morte” dei neuroni durante la fase di training se il tasso di apprendimento è impostato troppo alto.

L’output della funzione di attivazione può passare a una funzione di output per una modellazione aggiuntiva. Spesso, tuttavia, la funzione di output è la funzione di identità, il che significa che l’output della funzione di attivazione viene passato ai neuroni collegati a valle.

Topologie di reti neurali

Ora che conosciamo i neuroni, dobbiamo conoscere le topologie comuni della rete neurale. In una rete feed-forward, i neuroni sono organizzati in livelli distinti: un livello di input, un numero qualsiasi di livelli di elaborazione nascosti e un livello di output e gli output di ciascun layer passano solo al layer successivo.

In una rete feed-forward alcune connessioni possono saltare su uno o più livelli intermedi. Nelle reti neurali ricorrenti, i neuroni possono influenzare sé stessi, direttamente o indirettamente attraverso lo strato successivo.

Training

L’apprendimento supervisionato di una rete neurale avviene come qualsiasi altro machine learning. È possibile presentare alla rete gruppi di dati di addestramento, confrontare l’output di rete con l’output desiderato, generare un vettore di errore e applicare correzioni alla rete in base al vettore di errore. Le serie di dati di training che vengono eseguite insieme prima dell’applicazione delle correzioni sono chiamate epochs.

Per coloro che sono interessati ai dettagli, la backpropagation utilizza il gradiente della funzione di errore (o costo) rispetto ai pesi e alle distorsioni del modello per scoprire la direzione corretta per minimizzare l’errore. Due cose controllano l’applicazione delle correzioni: l’algoritmo di ottimizzazione e la variabile del tasso di apprendimento, che di solito deve essere piccolo per garantire la convergenza ed evitare di causare neuroni ReLU morti.

Deep Neural Network reali

Una rete neurale profonda per un problema reale potrebbe avere fino a 10 livelli nascosti. La sua topologia potrebbe essere semplice o piuttosto complessa. Più livelli nella rete, più caratteristiche può riconoscere. Sfortunatamente, più strati nella rete, più tempo ci vorrà per calcolare e più difficile sarà il processo di training.

Algoritmi di deep learning

Come accennato in precedenza, la maggior parte del deep learning viene effettuata con reti neurali profonde. Le reti neurali convoluzionali (CNN) sono spesso utilizzate per la visione artificiale. Le reti neurali ricorrenti (RNN) sono spesso utilizzate per l’elaborazione del linguaggio naturale e di altre sequenze, così come le reti LSTM (Long Short Term Memory) e le reti neurali basate sull’attenzione. Le Random Forests, note anche come Random Decision Forests, che non sono reti neurali, sono invece utili per una serie di problemi di classificazione e regressione.

Reti neurali CNN

Le reti neurali convoluzionali utilizzano in genere strati convoluzionali, di pooling, ReLU, completamente connessi e di perdita per simulare una corteccia visiva. Lo strato convoluzionale prende sostanzialmente gli integrali di molte piccole regioni sovrapposte. Il livello di pooling esegue una forma di downsampling non lineare. I livelli ReLU applicano la funzione di attivazione non saturata f (x) = max (0, x).

In uno strato completamente connesso i neuroni hanno connessioni a tutte le attivazioni dello strato precedente. Un loss layer calcola il modo in cui il training di rete penalizza la deviazione tra le etichette previste e quelle vere, usando una funzione Softmax o cross-entropia per la classificazione o una funzione di perdita euclidea per la regressione.

intelligenza artificiale

RNN, LSTM e reti neurali basate sull’attenzione

Nelle reti neurali feed-forward, le informazioni fluiscono dall’input, attraverso i layer nascosti, all’output. Ciò limita la rete a gestire un singolo stato alla volta.

Nelle reti neurali ricorrenti, l’informazione scorre ciclicamente attraverso un loop, che consente alla rete di ricordare i recenti output precedenti. Ciò consente l’analisi di sequenze e serie temporali. Le RNN hanno due problemi comuni: l’esplosione del gradiente (facilmente risolvibile bloccando i gradienti) e la scomparsa del gradiente (non così facile da risolvere).

Nelle LSTM la rete è in grado di dimenticare (cancellare) le informazioni precedenti o di ricordarle, in entrambi i casi modificando i pesi. Ciò fornisce in modo efficace a una rete LSTM una memoria a lungo e a breve termine e risolve il problema della scomparsa del gradiente. I moduli di attenzione sono gate generalizzati che applicano pesi a un vettore di input. Un codificatore gerarchico di attenzione neurale utilizza più livelli di moduli di attenzione per gestire decine di migliaia di input passati.

Random Forests

Un altro tipo di algoritmo di deep learning, non una rete neurale profonda, sono le Random Forests o Random Decision Forests. Una Random Forest è costruita da molti strati, ma al posto dei neuroni è costruita da alberi decisionali e genera una media statistica (modalità di classificazione o media di regressione) delle previsioni dei singoli alberi. Gli aspetti randomizzati delle Random Forests sono l’uso dell’aggregazione bootstrap per singoli alberi e l’assunzione di sottoinsiemi casuali delle funzionalità.

Framework di deep learning

Sebbene possiate scrivere programmi di deep learning partendo dai principi base, è molto più efficiente utilizzare i framework di deep learning, soprattutto perché sono stati ottimizzati per l’uso con GPU e altri acceleratori. Il framework principale è TensorFlow, nato in seno a Google. L’API di alto livello preferita per TensorFlow è Keras, che può essere utilizzata anche con altri framework di back-end.

PyTorch, da Facebook e altri, è una valida alternativa a TensorFlow e ha la particolarità di supportare reti neurali dinamiche, in cui la topologia della rete può cambiare da epoch in epoch. Fast.ai è un’API di terze parti di alto livello che utilizza PyTorch come back-end.

MXNet, di Amazon e altri, è un’altra forte alternativa a TensorFlow, con una pretesa di migliore scalabilità. Gluon è l’API imperativa di alto livello preferita per MXNet.

Chainer, di IBM, Intel e altri, è stato in qualche modo l’ispirazione per PyTorch, dato che supporta reti neurali dinamiche.

Mentre tutti i framework sopra menzionati sono principalmente basati su Python, Deeplearning4j (DL4J), originario di Skymind e ora un progetto Apache, è invace basato su Java e Scala. DL4J è compatibile con Apache Spark e Hadoop. ONNX è stato originariamente proposto come un ecosistema aperto per modelli di AI intercambiabili. ONNX ora ha un runtime in aggiunta al formato del file di interscambio.

TensorRT di Nvidia è un altro runtime per i modelli AI, in particolare per sfruttare le GPU Nvidia. Il runtime ONNX può utilizzare TensorRT come plug-in.

Deep Transfer Learning

Il transfer learning è il processo di adattamento di un modello addestrato su una serie di dati a un’altra serie di dati. Il transfer learning è molto più rapido rispetto ai modelli di formazione da zero e richiede molti meno dati per la formazione. Google Cloud AutoML implementa il deep transfer learning per visione, traduzione e linguaggio naturale. Azure Machine Learning Service offre servizi simili come visione personalizzata, sintesi vocale e traduzione personalizzabili e ricerca personalizzata.