Cos'è l'apprendimento profondo? Algoritmi che imitano il cervello umano

Definizione di deep learning

Il deep learning è una forma di machine learning che modella i modelli nei dati come reti complesse e multistrato. Poiché l'apprendimento profondo è 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 che altre tecniche di apprendimento automatico.

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 di modelli di deep learning richiede una grande potenza di calcolo. Un altro svantaggio del deep learning è la difficoltà di interpretare i modelli di deep learning. 

La caratteristica distintiva del deep learning è che il modello da addestrare ha più di uno strato nascosto tra l'input e l'output. Nella maggior parte delle discussioni, apprendimento profondo significa utilizzare reti neurali profonde. Esistono, tuttavia, alcuni algoritmi che implementano il deep learning utilizzando altri tipi di livelli nascosti oltre alle reti neurali.

Apprendimento profondo e apprendimento automatico

Ho detto che il deep learning è una forma di machine learning. Farò riferimento all'apprendimento automatico non profondo come all'apprendimento automatico classico , per conformarmi all'uso comune.

In generale, gli algoritmi di machine learning classici vengono eseguiti 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 richiedono acceleratori hardware come GPU, TPU o FPGA per la formazione e anche per la distribuzione su larga scala. Senza di loro, i modelli impiegherebbero mesi per addestrarsi.

Per molti problemi, alcuni algoritmi di apprendimento automatico classici produrranno un modello "abbastanza buono". Per altri problemi, i classici algoritmi di apprendimento automatico non hanno funzionato molto bene in passato.

Applicazioni di deep learning

Ci sono molti esempi di problemi che attualmente richiedono un apprendimento profondo per produrre i migliori modelli. L'elaborazione del linguaggio naturale (PNL) è buona.

Nell'autunno 2016, la qualità dell'output di Google Traduttore per le coppie linguistiche inglese-francese, inglese-cinese e inglese-giapponese è improvvisamente migliorata notevolmente, dalla creazione di un'insalata di parole alla produzione di frasi vicine alla qualità di una traduzione professionale da parte di un umano. Quello che è successo dietro le quinte è che i team di Google Brain e Google Translate hanno rinnovato Google Translate dall'utilizzo dei suoi vecchi algoritmi di traduzione automatica statistica basati su frasi (un tipo di apprendimento automatico 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 a livello di dottorato hanno impiegato mesi di lavoro sui modelli e migliaia di settimane GPU per l'addestramento dei modelli. Ha anche spinto Google a creare un nuovo tipo di chip, un'unità di elaborazione tensoriale (TPU), per eseguire reti neurali su larga scala per Google Translate.

Oltre al problema di traduzione della lingua affrontato da Google Translate, le principali attività della PNL includono riepilogo automatico, risoluzione di co-riferimento, analisi del discorso, segmentazione morfologica, riconoscimento di entità denominate, generazione del linguaggio naturale, comprensione del linguaggio naturale, tagging di parti del discorso, sentiment analisi e 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 un modello per le reti neurali progettate per eseguire il riconoscimento delle immagini. La ricerca biologica risale agli anni Cinquanta.

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

I migliori modelli di classificazione delle immagini profonde odierni possono identificare diversi cataloghi di oggetti con risoluzione HD a colori. Oltre alle reti neurali profonde (DNN) pure, a volte le persone usano modelli di visione ibrida, che combinano l'apprendimento profondo con algoritmi di apprendimento automatico classici che eseguono sotto-attività specifiche.

Altri problemi di visione oltre alla classificazione delle immagini di base che sono stati risolti con l'apprendimento profondo includono la classificazione delle immagini con localizzazione, rilevamento di oggetti, segmentazione di oggetti, trasferimento dello stile di immagine, colorazione dell'immagine, ricostruzione dell'immagine, super risoluzione dell'immagine e sintesi di immagini.

La classificazione delle immagini può essere estesa alla classificazione dei video estraendo i singoli fotogrammi da un video e classificando ogni fotogramma. Gli oggetti rilevati nei video clip possono essere tracciati da un fotogramma all'altro.

Secondo Goodfellow, Bengio e Courville, scrivendo nel 2016, l'apprendimento profondo è stato utilizzato con successo per prevedere come le molecole interagiranno al fine di aiutare le aziende farmaceutiche a progettare nuovi farmaci, per cercare particelle subatomiche e per analizzare automaticamente le immagini del microscopio utilizzate per costruire una mappa 3-D del cervello umano.

Reti neurali di deep learning

Le idee per le reti neurali "artificiali" risalgono agli anni Quaranta. Il concetto essenziale è che una rete di neuroni artificiali costruita con interruttori di soglia interconnessi può imparare a riconoscere i modelli nello stesso modo in cui lo fanno il cervello e il sistema nervoso di un animale (inclusa la retina).

Backpropagation

L'apprendimento nelle reti neurali profonde avviene rafforzando la connessione tra due neuroni quando entrambi sono attivi contemporaneamente durante l'allenamento. Nel moderno software di rete neurale, si tratta più comunemente di aumentare i valori di peso per le connessioni tra neuroni utilizzando una regola chiamata backpropagation of error , backprop o BP.

Neuroni

Come vengono modellati i neuroni? Ognuno ha una funzione di propagazione che trasforma gli output dei neuroni collegati, spesso con una somma ponderata. L'uscita della funzione di propagazione passa a una funzione di attivazione, che si attiva quando il suo ingresso supera un valore di soglia.

Funzioni di attivazione

Negli anni Quaranta e Cinquanta i neuroni artificiali utilizzavano una funzione di attivazione a gradini e venivano chiamati perceptrons . Le reti neurali moderne possono dire che stanno usando i 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 è solitamente la scelta migliore per la convergenza rapida, sebbene abbia un problema di neuroni che "muoiono" durante l'allenamento se il tasso di apprendimento è impostato troppo alto.

L'uscita della funzione di attivazione può passare a una funzione di uscita per una modellatura 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 sappiamo dei neuroni, dobbiamo conoscere le topologie di reti neurali comuni. 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 ogni livello passano solo al livello successivo.

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

Formazione

L'apprendimento supervisionato di una rete neurale viene eseguito come qualsiasi altro apprendimento automatico. Si presenta la rete con gruppi di dati di addestramento, si confronta l'output di rete con l'output desiderato, si genera un vettore di errore e si applicano le correzioni alla rete in base al vettore di errore. I batch di dati di addestramento eseguiti insieme prima dell'applicazione delle correzioni sono chiamati epoche.

Per chi è interessato ai dettagli, la backpropagation utilizza il gradiente della funzione di errore (o costo) rispetto ai pesi e ai bias 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 piccola per garantire la convergenza ed evitare di causare neuroni ReLU morti.

Ottimizzatori

Gli ottimizzatori per le reti neurali utilizzano tipicamente una qualche forma di algoritmo di discesa del gradiente per guidare la propagazione all'indietro, spesso con un meccanismo per aiutare a evitare di rimanere bloccati nei minimi locali, come l'ottimizzazione di mini-batch selezionati casualmente (Stochastic Gradient Descent) e l'applicazione di correzioni di quantità di moto al gradiente . Alcuni algoritmi di ottimizzazione adattano anche le velocità di apprendimento dei parametri del modello osservando la cronologia del gradiente (AdaGrad, RMSProp e Adam).

Come con tutto l'apprendimento automatico, è necessario verificare le previsioni della rete neurale rispetto a un set di dati di convalida separato. Senza farlo, rischi di creare reti neurali che memorizzano solo i loro input invece di imparare a essere predittori generalizzati.

Veri DNN

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ù sono i livelli nella rete, più tempo sarà necessario per il calcolo e più difficile sarà l'addestramento.

Algoritmi di deep learning

Come accennato in precedenza, la maggior parte del deep learning viene eseguito con reti neurali profonde. Le reti neurali convoluzionali (CNN) sono spesso utilizzate per la visione artificiale. Le reti neurali ricorrenti (RNN) vengono spesso utilizzate per il linguaggio naturale e altre elaborazioni di sequenze, così come le reti LSTM (Long Short-Term Memory) e le reti neurali basate sull'attenzione. Le foreste casuali, note anche come foreste a decisione casuale, che non sono reti neurali, sono utili per una serie di problemi di classificazione e regressione.

Reti neurali CNN

Le reti neurali convoluzionali utilizzano tipicamente livelli convoluzionali, pooling, ReLU, completamente connessi e di perdita per simulare una corteccia visiva. Lo strato convoluzionale prende fondamentalmente gli integrali di molte piccole regioni sovrapposte. Lo strato di pooling esegue una forma di downsampling non lineare. I layer ReLU applicano la funzione di attivazione non saturante f(x) = max(0,x). In uno strato completamente connesso, i neuroni hanno connessioni a tutte le attivazioni nello strato precedente. Un livello di perdita calcola il modo in cui l'addestramento della rete penalizza la deviazione tra le etichette previste e vere, utilizzando una funzione Softmax o di perdita di entropia incrociata per la classificazione o una funzione di perdita euclidea per la regressione.

RNN, LSTM e reti neurali basate sull'attenzione

Nelle reti neurali feed-forward, le informazioni fluiscono dall'input, attraverso gli strati nascosti, all'output. Ciò limita la rete a trattare con un singolo stato alla volta.

Nelle reti neurali ricorrenti, le informazioni attraversano un ciclo, che consente alla rete di ricordare i recenti output precedenti. Ciò consente l'analisi di sequenze e serie temporali. Gli RNN hanno due problemi comuni: gradienti esplosivi (facilmente risolvibili bloccando i gradienti) e gradienti evanescenti (non così facili da correggere).

Negli LSTM, la rete è in grado di dimenticare (gating) le informazioni precedenti o di ricordarle, in entrambi i casi alterando i pesi. Ciò fornisce efficacemente a un LSTM memoria sia a lungo che a breve termine e risolve il problema del gradiente di fuga. Gli LSTM possono gestire sequenze di centinaia di input passati.

I moduli di attenzione sono porte generalizzate 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.

Foreste casuali

Un altro tipo di algoritmo di apprendimento profondo, non una rete neurale profonda, è la foresta casuale, o foresta decisionale casuale. Una foresta casuale è costruita da molti strati, ma invece di neuroni è costruita da alberi decisionali e fornisce una media statistica (modalità di classificazione o media per regressione) delle previsioni dei singoli alberi. Gli aspetti randomizzati di Random Forests sono l'uso dell'aggregazione bootstrap (aka bagging ) per singoli alberi e prendendo sottoinsiemi casuali delle caratteristiche.

Framework di deep learning

Sebbene sia possibile scrivere programmi di deep learning partendo dai principi primi, è molto più efficiente utilizzare framework di deep learning, soprattutto dato che sono stati ottimizzati per l'uso con GPU e altri acceleratori. Il framework preminente è TensorFlow, originato da 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 forte alternativa a TensorFlow e ha la particolarità di supportare reti neurali dinamiche, in cui la topologia della rete può cambiare di epoca in epoca. Fastai è un'API di terze parti di alto livello che utilizza PyTorch come back-end.

MXNet, di Amazon e altri, è un'altra valida alternativa a TensorFlow, con la pretesa di una 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 definisce la rete neurale per esecuzione e supporta le reti neurali dinamiche.

Mentre tutti i framework sopra menzionati sono principalmente Python, Deeplearning4j (DL4J), originariamente da Skymind e ora un progetto Apache, è principalmente Java e Scala. DL4J è compatibile con Apache Spark e Hadoop.

ONNX è stato originariamente proposto come un ecosistema aperto per modelli di IA intercambiabili. ONNX ora dispone di un runtime oltre al formato di file di interscambio.