Apprendimento profondo

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

L'apprendimento profondo (in inglese deep learning) è quel campo di ricerca dell'apprendimento automatico (in inglese machine learning) e dell'intelligenza artificiale che si basa su diversi livelli di rappresentazione, corrispondenti a gerarchie di caratteristiche di fattori o concetti, dove i concetti di alto livello sono definiti sulla base di quelli di basso.

In altre parole, per apprendimento profondo si intende un insieme di tecniche basate su reti neurali artificiali organizzate in diversi strati, dove ogni strato calcola i valori per quello successivo affinché l'informazione venga elaborata in maniera sempre più completa[1].

Tra le architetture di apprendimento profondo si annoverano le reti neurali profonde, la convoluzione di reti neurali profonde, le deep belief network, e reti neurali ricorsive, che sono state applicate nella visione artificiale, nel riconoscimento automatico del discorso, nell'elaborazione del linguaggio naturale, nel riconoscimento audio e nella bioinformatica. "Apprendimento profondo" è un'espressione oggi famosa che ridà lustro al concetto di rete neurale.

Introduzione[modifica | modifica wikitesto]

Definizioni[modifica | modifica wikitesto]

L'apprendimento profondo è definito come una classe di algoritmi di apprendimento automatico che[2]:

  • usano vari livelli di unità non lineari a cascata per svolgere compiti di estrazione di caratteristiche e di trasformazione. Ciascun livello successivo utilizza l'uscita del livello precedente come input. Gli algoritmi possono essere sia di tipo supervisionato sia non supervisionato[3] e le applicazioni includono l'analisi di pattern (apprendimento non supervisionato) e classificazione (apprendimento supervisionato).
  • sono basati sull'apprendimento non supervisionato di livelli gerarchici multipli di caratteristiche (e di rappresentazioni) dei dati. Le caratteristiche di più alto livello vengono derivate da quelle di livello più basso per creare una rappresentazione gerarchica.
  • fanno parte della più ampia classe di algoritmi di apprendimento della rappresentazione dei dati all'interno dell'apprendimento automatico.
  • apprendono multipli livelli di rappresentazione che corrispondono a differenti livelli di astrazione; questi livelli formano una gerarchia di concetti.

Ciò che queste definizioni hanno in comune sono i livelli multipli di unità non lineari e l'apprendimento (supervisionato o non supervisionato) in ogni livello della rappresentazione di caratteristiche, in cui i livelli formano una gerarchia delle caratteristiche stesse[2]. La composizione di ciascun livello di unità non lineari usata in un algoritmo di apprendimento profondo dipende dal problema che deve essere risolto. Nell'apprendimento profondo possono venire usati livelli nascosti di una rete neurale artificiale e insiemi di formule proposizionali[4].

Storia dell'apprendimento profondo[modifica | modifica wikitesto]

I primi studi sulle reti neurali multistrato sono stati prodotti dallo scienziato giapponese Kunihiko Fukushima che, con il modello del cognitrone nel 1975, e del neo-cognitrone[5] poi, ha introdotto l'idea di area di connessione per i neuroni che si è sviluppata nelle reti neurali convoluzionali.

Lo studio delle reti neurali artificiali multistrato si è sviluppato già negli anni ottanta, ma solo nell'ultimo decennio si sta dimostrando la loro utilità in un'ampia gamma di settori e applicazioni. Più nel dettaglio, il recente successo dell'apprendimento profondo è dovuto al superamento di alcuni ostacoli che in passato hanno impedito il raggiungimento dei risultati attesi, come la mancanza di dati o di un'adeguata capacità computazionale. Infatti, oggi sono incrementati i dati a disposizione, sono stati sviluppati sistemi di calcolo parallelo basati su GPU e, soprattutto, sono stati ottimizzati i metodi di addestramento delle reti neurali, che oggi possono trovare soluzioni a problemi che in passato hanno impedito ai ricercatori di ottenere risultati soddisfacenti.

Oggi i sistemi di apprendimento profondo, fra altre utilità, permettono di identificare oggetti nelle immagini e nei video, trascrivere il parlato in testo, e individuare e interpretare gli interessi degli utenti online, mostrando i risultati più pertinenti per la loro ricerca.

Grazie a queste e altre soluzioni, l'apprendimento profondo sta vivendo anni di rapido progresso, arrivando anche, in molti casi, a superare le prestazioni degli esseri umani. Basta pensare all'applicazione degli algoritmi di apprendimento profondo nell’ambito dei problemi decisionali sequenziali, all’interno dell'apprendimento per rinforzo: un caso esemplare è stato lo sviluppo di AlphaGo, un software che nel 2016 ha battuto il campione mondiale di Go, diversi anni in anticipo rispetto alle previsioni degli esperti.[1]

Architetture[modifica | modifica wikitesto]

Reti neurali profonde[modifica | modifica wikitesto]

Reti neurali convoluzionali[modifica | modifica wikitesto]

La rete neurale convoluzionale (Convolution Neural Network, CNN) è un metodo di scelta per elaborare dati visuali e dati di tipo 2D. Una CNN è composta da uno più strati convoluzionali con strati completamente connessi verso l'alto. Usa anche pesi e strati comuni (pooling layer). In particolare il "max-pooling" è spesso usato nell'architettura convoluzionale di Fukushima. Quest'architettura permette alle CNN di avere dei vantaggi dalle strutture 2D di ingresso. Sono particolarmente efficaci nell'area delle immagini e di riconoscimento del discorso. Possono essere allenate anche con la backpropagation standard. Sono inoltre facili da allenare rispetto ad altre reti neurali profonde o feed-forward ed hanno molti meno parametri da stimare. Un programma di CNN è il DeepDream di Google[6].

Reti neurali ricorsive[modifica | modifica wikitesto]

Le reti neurali ricorsive (Recurrent Neural Networks, RNN) nascono con il tentativo di rendere le reti neurali Turing complete aggiungendo una componente di memoria. Le reti neurali feed-forward rispondono in modo costante agli stessi input, senza però poter fare collegamenti tra input diversi, come potrebbe essere utile nell'ambito della semantica. Le reti neurali ricorsive invece pesano ogni input in base allo stato precedente e lo stesso input potrebbe dare output diversi a seconda del contesto in cui è inserito. Nonostante questo le RNN, a meno che non vengano inseriti elementi casuali, restano reti deterministiche in quanto la stessa sequenza di input porterà sempre alla stessa sequenza di output. Lo stato di una RNN è implementato aggiungendo a un layer dei neuroni ricorsivi che avranno come valore ad ogni istante di tempo il valore all'istante precedente sommato a una variazione data dagli input dei neuroni feed-forward.

Le reti neurali di questo tipo diventano impossibili da allenare per retropropagazione dell'errore, quindi viene utilizzato come stratagemma quello di svolgere le ricorsività considerando il loro funzionamento per ogni singolo istante di tempo[poco chiaro].

Mentre nel caso di percorsi a ritroso molto brevi questo funziona, per i casi in cui bisogna percorrere diversi step a ritroso si incorre nel problema del Vanishing Gradient o dell'Exploding Gradient nel caso la funzione di costo abbia derivata sempre minore di uno (ad esempio sigmoide e tanh) o sempre maggiore di uno. Questo infatti porta a una convergenza a zero esponenziale nel primo caso e a un'esplosione esponenziale del gradiente nel secondo. In nessun caso il gradiente è più computabile anche solo dopo pochi passi. Per risolvere questo problema si fa in modo di utilizzare una funzione rettificatore.

Compressore di storia neurale[modifica | modifica wikitesto]

Reti deep belief[modifica | modifica wikitesto]

Autoencoder impilato[modifica | modifica wikitesto]

Rete di impilamento profondo[modifica | modifica wikitesto]

Rete di impilamento profondo di tensore[modifica | modifica wikitesto]

Spike-and-slab RBM[modifica | modifica wikitesto]

Macchine di Boltzmann profonde[modifica | modifica wikitesto]

Macchine kernel multilivello[modifica | modifica wikitesto]

Strutture di memoria differenziabile LSTM correlata[modifica | modifica wikitesto]

Reti deep-q[modifica | modifica wikitesto]

Questa è una classe di modelli d'apprendimento profondi usando il Q-learning, una forma di apprendimento per rinforzo, del Google DeepMind. Risultati preliminari sono stati presentati nel 2014 con un articolo pubblicato su Nature nel febbraio 2015. L'applicazione a cui si fa riferimento è un gioco dell'Atari 2600.

Hashing semantico[modifica | modifica wikitesto]

L'hashing semantico tratta la strutturazione di valori crittografati sulla base di un imprevisto del sistema neurale iniziale e trattiene invece informazioni fondamentali sulla base semantica del vocabolario.

Diagnostica[modifica | modifica wikitesto]

Nel 2018, l'azienda britannica DeepMind, il Moorfields Eye Hospital e l'University College di Londra hanno lanciato un software che promette di riconoscere l'anatomia dell'occhio, la patologia e suggerire ai medici un trattamento sanitario adeguato.[7]
L'occhio del paziente viene esaminato mediante una tomografia ottica a coerenza di fase che acquisisce immagini a colori in alta definizione, a loro volta elaborate da un algoritmo che le confronta con la base di conoscenza clinica, in modo tale da identificare la diagnosi e la soluzione terapeutica ottimale per il caso specifico.

Applicazioni[modifica | modifica wikitesto]

Librerie software[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ a b Alla scoperta del Deep Learning: significato, esempi e applicazioni, su blog.osservatori.net. URL consultato il 30 maggio 2019.
  2. ^ a b (EN) L. Deng e D. Yu, Deep Learning: Methods and Applications (PDF), in Foundations and Trends in Signal Processing, vol. 7, n. 3-4, 2014, pp. 1-199, DOI:10.1561/2000000039.
  3. ^ Yann LeCun, Yoshua Bengio e Geoffrey Hinton, Deep learning, in Nature, vol. 521, n. 7553, 27 maggio 2015, pp. 436–444, DOI:10.1038/nature14539. URL consultato il 20 maggio 2022.
  4. ^ (EN) Yoshua Bengio, Learning Deep Architectures for AI (PDF), in Foundations and Trends in Machine Learning, vol. 2, n. 1, 2009, pp. 1-127, DOI:10.1561/2200000006 (archiviato dall'url originale il 4 marzo 2016).
  5. ^ (EN) Kunihiko Fukushima, Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position, in Biological Cybernetics, vol. 36, n. 4, 1º aprile 1980, pp. 193–202, DOI:10.1007/BF00344251. URL consultato il 7 giugno 2020.
  6. ^ Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke e Andrew Rabinovich, Going Deeper with Convolutions, in Computing Research Repository, 2014, arXiv:1409.4842.
  7. ^ Marco Tonelli, L'intelligenza artificiale di DeepMind riconosce più di 50 malattie oculari, su lastampa.it, La Stampa, 3 settembre 2018. URL consultato il 26 settembre 2019 (archiviato il 26 settembre 2019). Ospitato su archive.is.
  8. ^ deeplearning4j
  9. ^ B. C. Ooi, K.-L. Tan, S. Wang, W. Wang, G. Chen, J. Gao, Z. Luo, A.K.H. Tung, Y. Wang, Z. Xie, M. Zhang, K. Zheng. "SINGA: A Distributed Deep Learning Platform," ACM Multimedia (Open Source Software Competition). 2015.
  10. ^ W. Wang, G. Chen, T. T. A. Dinh, J. Gao, B. C. Ooi, K.-L.Tan, S. Wang. "SINGA: Putting Deep Learning in the Hands of Multimedia Users," ACM Multimedia. 2015.
  11. ^ Jeff Dean e Rajat Monga, TensorFlow: Large-scale machine learning on heterogeneous systems (PDF), su download.tensorflow.org, 9 novembre 2015. URL consultato il 10 novembre 2015.

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica